Zum Inhalt
wannacode

Modelle: aus Beispielen lernen

Kurz gesagt: Ein Machine-Learning-Modell lernt die Regel aus Beispielen (Merkmale X und Zielgröße y) mit fit, sagt mit predict voraus und wird auf den Testdaten gegen eine Baseline geprüft.

Problem

„Wie viele Leute stelle ich ins Lager?“

Der Chef macht den Dienstplan fürs Lager der nächsten Woche: wie viele Leute an jedem Tag die Bestellungen annehmen und packen. Bisher schätzt er nach Gefühl. Er möchte für jeden Tag eine Zahl. Hier sind die Bestellungen des letzten Jahres, nach Tagen:

PythonDaten: die Tabellen des Shops

Es sind 365 Tage, und im Schnitt gehen 30,45 Bestellungen pro Tag ein. Wir zählen alle Bestellungen, auch die stornierten: Die Frage ist, wie viele ankommen, und eine stornierte Bestellung wird auch angenommen und bearbeitet. Neben jedem Tag stehen der Wochentag (0 ist Montag, 6 ist Sonntag) und der Monat. Wie bekommst du aus diesen Beispielen eine Zahl für Freitag, den 6. November?

Die Idee

Erst die Frage

Vor dem Modell fragst du, welche Entscheidung du mit der Vorhersage triffst. Hier ist es: wie viele Leute an jedem Tag. Daraus folgen drei Dinge:

  • Was du vorhersagst. Die Zahl der Bestellungen am Tag, nicht den Umsatz: Das Packen hängt von den Bestellungen ab.
  • Was du im Voraus weißt. Der Plan wird am Sonntag gemacht. Dann kennst du den Wochentag und den Monat jedes Tages. Wie viele Bestellungen am Mittwoch bis Mittag eingehen, weißt du nicht.
  • Wie genau es sein muss. Genau genug, damit sich die Entscheidung nicht ändert: Liegt die Vorhersage um weniger daneben, als eine Person bewältigt, bleibt der Plan gleich.

Wenn sich der Plan nicht ändert, was auch immer die Vorhersage zeigt, brauchst du kein Modell.

Die Idee

Ein Modell ist eine aus Beispielen gelernte Funktion

Ein Modell ist eine Funktion: Du gibst ihr den Tag, und sie liefert eine Vorhersage. Die Regel schreibst du nicht selbst. Du gibst Beispiele, Tage mit ihrer bekannten Zahl an Bestellungen, und das Modell findet selbst eine Regel, die dazu passt. Die Eingabe heißt Merkmale und wird X geschrieben. Das, was du vorhersagst, ist die Zielgröße, y.

Der Wochentag ist eine Zahl von 0 bis 6, aber keine Größe: Sonntag (6) ist nicht „dreimal Mittwoch“ (2). Deshalb wird jeder Wert zu einer eigenen Spalte aus 0 und 1. Das ist die One-Hot-Kodierung, und pd.get_dummies macht sie:

PythonDaten: die Tabellen des Shops

Es sind 19 Spalten: 7 für die Tage und 12 für die Monate. Der 1. November 2025 ist ein Samstag, deshalb hat seine Zeile nur in weekday_5 eine 1 (und in month_11, das weiter rechts steht).

Die Idee

fit, predict und der Test

Die Modelle in scikit-learn haben dieselben zwei Schritte:

  • fit(X, y) lernt aus den Beispielen;
  • predict(X) gibt eine Vorhersage für neue Zeilen.

Ob das Modell gut ist, prüfst du an Tagen, die es nicht gesehen hat. train_test_split mischt die Zeilen und teilt sie: 75 % sind für das Training, 25 % für den Test. Mit random_state=42 ist die Aufteilung bei jedem Lauf gleich. Das erste Laden von scikit-learn (zusammen mit scipy) lädt etwa 18 MB herunter und dauert ein paar Sekunden:

PythonDaten: die Tabellen des Shops

Das Modell lernt aus 273 Tagen, und 92 Tage sind für den Test. Auf ihnen liegt es im Schnitt um 4,38 Bestellungen pro Tag daneben: der Mittelwert der Differenzen zwischen Tatsache und Vorhersage, ohne Vorzeichen. Auf den Trainingstagen beträgt der Fehler 4,09. Dort sieht das Modell immer besser aus, weil es die Antworten gesehen hat. Die Zahl, die du berichtest, ist also die aus dem Test.

LinearRegression ist ein Modell, das für jede Spalte eine Zahl addiert. Wie es sie findet, kommt in der nächsten Lektion. Hier zählen nur fit und predict, und die sind bei jedem Modell gleich.

Genauer, für Neugierige

Die Tage sind zeitlich geordnet, und train_test_split mischt sie. Hier ist das eine Vereinfachung: Das Modell lernt auch über den September aus Tagen nach dem Testtag. In der nächsten Lektion siehst du, warum es für eine Vorhersage ehrlicher ist, nach der Zeit zu teilen: Du trainierst mit den früheren Monaten und prüfst mit den späteren. Wie ein Modell von Hand ohne Bibliothek lernt, steht in der Lektion Lineare Regression des KI-Kurses.

Die Idee

Erst eine Baseline

Ist ein Fehler von 4,38 Bestellungen gut? Ohne Vergleich weißt du es nicht. Du vergleichst mit einer Baseline: einer Vorhersage ohne Modell, die sich jeder ausdenken könnte. Zum Beispiel „immer der Mittelwert“. DummyRegressor ist genau das, mit denselben fit und predict:

PythonDaten: die Tabellen des Shops

Die Baseline sagt für jeden Tag 30,34: den Mittelwert der Trainingstage. Sie liegt um 5,76 Bestellungen daneben, das Modell um 4,38. Das Modell ist um 1,38 Bestellungen genauer, mit einem um 24 % kleineren Fehler. Es lohnt sich.

Ein Modell, das die Baseline nicht schlägt, ist nichts wert. Es ist Code, Daten und Pflegeaufwand, und es bringt so viel wie „immer 30“. Deshalb kommt die Baseline zuerst. Eine andere gute Baseline ist das, was die Leute jetzt tun, zum Beispiel „so viele wie am selben Tag der letzten Woche“.

Probier es aus

Die Regel „wie letzte Woche“

1. Das Modell sagt aus Wochentag und Monat voraus, wie viele Bestellungen an einem Tag eingehen. Was ist y?

Im Moment plant der Chef „so viele wie am selben Tag der letzten Woche“. Wie weit liegt diese Regel an den Testtagen daneben? Lege in last_week für jeden Tag die Bestellungen von vor 7 Tagen ab und in err den mittleren Fehler ohne Vorzeichen auf den Tagen von y_test.

PythonDaten: die Tabellen des Shops

Übung

Reicht der Tag? Und der Plan für nächste Woche

Reicht der Wochentag allein, ohne den Monat? Trainiere LinearRegression nur mit den Wochentag-Spalten von X_train. Lege in err den mittleren Fehler auf den Testtagen ab, in base den Fehler von „immer der Mittelwert der Trainingsdaten“ und in beats, ob das Modell sie schlägt.

PythonDaten: die Tabellen des Shops

Der Test hat gezeigt, dass das Modell mit Tag und Monat die Baseline schlägt. Jetzt die Vorhersage für die echte Woche, von Montag, dem 2., bis Sonntag, dem 8. November 2026. Trainiere das Modell noch einmal mit allen 365 Tagen, bilde X_new mit den Spalten von X und lege in plan die Vorhersage für jeden Tag ab (eine Series mit den Daten als Index).

PythonDaten: die Tabellen des Shops

Test

Teste dich

1. Das Modell liegt an den Trainingstagen im Schnitt um 4,09 Bestellungen daneben und an den Testtagen um 4,38. Welche Zahl nennst du dem Chef?
2. Ein neues Modell liegt im Schnitt um 5,9 Bestellungen pro Tag daneben, „immer der Mittelwert“ um 5,76. Was machst du?
3. Warum geht der Wochentag als 7 Spalten aus 0 und 1 ins Modell und nicht als eine Zahl von 0 bis 6?
4. Der Dienstplan fürs Lager wird am Sonntag für die ganze nächste Woche gemacht. Kann „die Bestellungen bis Mittag am selben Tag“ ein Merkmal sein?

Erstellt von Ivo Gergov im Rahmen der Kampagne von Evo Tech für zugängliche Programmierausbildung ·