Zum Inhalt
wannacode

Lineare Regression

Kurz gesagt: Die lineare Regression sagt eine Zahl als Summe der Merkmale mit Koeffizienten voraus; der MAE sagt, wie weit sie im Schnitt daneben liegt, und der RMSE gewichtet große Fehler stärker, beide in derselben Einheit.

Problem

„Wie viel Geld erwarte ich am Freitag?“

Die Buchhaltung plant das Geld für die nächsten Wochen. Sie fragt, wie viel Umsatz am Freitag, dem 6. November, und am Sonntag, dem 8. November, zu erwarten ist. Hier ist der Umsatz nach Tagen des Jahres, ohne die stornierten Bestellungen, weil sie kein Geld bringen:

PythonDaten: die Tabellen des Shops

Ein Tag bringt im Schnitt 304,62 €. Der Freitag bringt 350,79 € und der Sonntag 250,85 €. Dezembertage bringen im Schnitt 513,42 €. Der Mittelwert jedes Wochentags ist ein Anfang, aber der Dezember und das langsame Wachstum übers Jahr sind darin vermischt. Du brauchst ein Modell, das sie zusammenbringt.

Die Idee

Eine Summe aus Merkmalen

Die lineare Regression sagt als Summe voraus: eine Startzahl plus eine Zahl für jedes Merkmal, multipliziert mit seinem Wert. Diese Zahlen sind die Koeffizienten. Die Merkmale sind hier von dreierlei Art:

  • der Wochentag, als Spalten aus 0 und 1. Mit drop_first=True fällt die Spalte für Montag weg: Der Montag ist die Basis, und jeder andere Tag ist „wie viel mehr als Montag“;
  • day, die laufende Nummer des Tages: 0 am 1. November 2025. Das ist der Trend;
  • december: 1 für die Tage im Dezember.

Das Modell lernt von November bis Juni, 242 Tage. Juli bis Oktober, 123 Tage, sind für den Test. Warum nicht gemischt, steht am Ende der Lektion:

PythonDaten: die Tabellen des Shops

Die Startzahl ist 273,98 €: ein Montag an Tag 0, außerhalb des Dezembers. Der Freitag fügt 63,58 € hinzu, und der Sonntag nimmt 45,44 € weg. Der Dezember fügt 233,05 € pro Tag hinzu. Jeder Tag fügt 0,06 € hinzu, das sind etwa 21,33 € pro Jahr. Die Vorhersage für einen Freitag im Dezember ist also 273,98 + 63,58 + 233,05 plus der Trend.

Genauer, für Neugierige

Die Koeffizienten sind Schätzungen und tragen Rauschen, wie der Mittelwert in der Lektion über Stichproben. Mit allen 365 Tagen trainiert, gibt das Modell dem Freitag +44,70 €, nicht +63,58 €. Wie die Regression die Zahlen findet (die kleinste Summe der Fehlerquadrate), steht ohne Bibliothek in der Lektion Lineare Regression des KI-Kurses.

Probier es aus

Welcher ist die Basis

1. Der Koeffizient von weekday_6 ist −45,44. Was bedeutet das?

Die Idee

Wie weit es daneben liegt: MAE und RMSE

Der Fehler wird auf dem Test gemessen. Es gibt zwei übliche Maße:

  • MAE (mean absolute error, mittlerer absoluter Fehler): der mittlere Fehler ohne Vorzeichen. In Euro, und der Chef versteht ihn: „Wir liegen im Schnitt so viel pro Tag daneben.“
  • RMSE (root mean squared error, Wurzel des mittleren quadratischen Fehlers): Die Fehler werden quadriert, der Mittelwert gebildet und dann die Wurzel gezogen. Er ist ebenfalls in Euro, aber ein großer Fehler wiegt mehr.

sklearn.metrics hat beide:

PythonDaten: die Tabellen des Shops

Das Modell liegt im Schnitt um 59,88 € pro Tag daneben (MAE), und der RMSE ist 75,91 €. Die zwei kleinen Rechnungen zeigen den Unterschied. Fehler von 10 und 10 ergeben einen MAE von 10 und einen RMSE von 10. Fehler von 0 und 20 ergeben denselben MAE von 10, aber einen RMSE von 14,14. Wenn dich ein großer Fehler mehr kostet als ein paar kleine, zum Beispiel eine leere Kasse am Freitag, schaust du auf den RMSE. Sonst ist der MAE für den Chef klarer.

Probier es aus

Und die Baseline?

Schlägt das Modell „immer der durchschnittliche Tag“? Lege in guess den mittleren Umsatz der Trainingstage ab und in mae_base und rmse_base die Fehler dieser Vorhersage an den Testtagen.

PythonDaten: die Tabellen des Shops

Die Idee

Die Residuen

Ein Residuum ist der Istwert minus die Vorhersage. Plus heißt, der Shop hat mehr verkauft, als das Modell sagte. Bei einem guten Modell streuen die Residuen um 0, ohne Muster. Ein Muster ist etwas, das das Modell nicht weiß:

PythonDaten: die Tabellen des Shops

Der größte Fehler ist am 30. Juli 2026: 239,28 € über der Vorhersage. Es ist ein ungewöhnlich starker Donnerstag mit 535,40 € Umsatz. Nach Monaten liegen Juli, August und Oktober nah bei 0 (3,99 €, −8,03 € und 20,42 €). Der September ist −58,85 € pro Tag: Einen ganzen Monat lang hat der Shop weniger verkauft, als der Tag und der Trend erklären. Das ist kein Rauschen, es ist etwas passiert. Was, finden wir im Kursprojekt heraus.

Die Idee

Was das Modell nicht kann

Das Modell weiß nur, was seine Merkmale ihm sagen. Ohne die Spalte december:

PythonDaten: die Tabellen des Shops

Der Trend wird −0,40 € pro Tag, −147,35 € pro Jahr. Der Dezember liegt am Anfang der Trainingsdaten und „hebt“ den Anfang der Linie, und das Modell kann ihn nicht anders erklären. Der Testfehler wird 69,43 €, schlechter als die Baseline (66,24 €). Der Sprung durch die Geschenkkarten im Dezember zeigt sich nur, wenn ein Merkmal es sagt.

Zwei weitere Grenzen:

  • Keine Extrapolation. Die Linie geht ewig weiter. Aus 8 Monaten beträgt das Wachstum 21,33 € pro Jahr, aber ob es im nächsten Jahr weitergeht, sagen die Daten nicht. Wir haben nur einen Dezember gesehen.
  • Ein Koeffizient ist keine Ursache. „+63,58 € am Freitag“ heißt nicht, dass eine auf den Freitag verlegte Aktion 63,58 € bringt. Der Koeffizient beschreibt die Daten. Wie viel eine Aktion bringt, sagt dir ein Experiment, wie in der Lektion Korrelation und Ursache.

Probier es aus

Wo das Modell blind ist

Trainiere das Modell ohne die Spalte december mit den Trainingstagen. Berechne seine Residuen auf denselben Tagen und das mittlere Residuum pro Monat in by_month (gruppiere nach res.index.strftime('%Y-%m')). Zeichne by_month als Balken, mit Titel und Beschriftung der senkrechten Achse.

PythonDaten: die Tabellen des Shops

Die Idee

Nach der Zeit trennen, nicht mischen

Das Modell in dieser Lektion lernt von November bis Juni und wird mit Juli bis Oktober geprüft. Warum nicht mit train_test_split? Hier ist ein Modell mit Tag und Monat, auf beide Arten geprüft. Die zweite Zahl in jeder Zeile ist die Baseline:

PythonDaten: die Tabellen des Shops

Gemischt liegt das Modell um 59,81 € daneben und die Baseline um 81,48 €: 27 % besser. Aber 87 der 92 Testtage haben einen Nachbartag, den davor oder den danach, in den Trainingsdaten. Das Modell hat gelernt, wie die Tage um den Testtag herum liefen, auch die späteren.

Nach der Zeit geprüft liegt dasselbe Modell um 71,98 € daneben, mehr als die Baseline (66,24 €). Die Monate Juli bis Oktober sind nicht in den Trainingsdaten. Ihre Spalten sind in allen Trainingszeilen 0, und das Modell gibt ihnen das Niveau des Januars, des schwächsten Monats.

Eine echte Vorhersage gilt immer für Tage nach allen Beispielen. Also muss auch der Test nach dem Training liegen. Das Mischen der Tage lässt die Zukunft ins Training. Das ist ein Datenleck, und eine ganze Lektion weiter hinten handelt davon.

Übung

Freitag und Sonntag

Jetzt die Antwort für die Buchhaltung. Trainiere das Modell noch einmal mit allen 365 Tagen. Bilde X_new für Freitag, den 6. November 2026, und Sonntag, den 8. November 2026 (day zählt ab dem 1. November 2025 weiter, december ist 0) und lege in forecast die Vorhersage für die beiden Tage ab (eine Series mit den Daten als Index).

PythonDaten: die Tabellen des Shops

Test

Teste dich

1. Zwei Vorhersagen haben beide einen MAE von 60 €. Die eine liegt jeden Tag um etwa 60 € daneben, die andere meist um wenig, aber manchmal um 300 €. Welche hat den größeren RMSE?
2. Warum ist es Schummelei, Tage gemischt auf Training und Test zu verteilen?
3. Der Koeffizient von december ist +233,05 €. Was folgt daraus?
4. Die Residuen im Test sind im September im Schnitt −58,85 € pro Tag. Was bedeutet das?

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