Zeitreihenprognosen ohne Informationen aus der Zukunft prüfen
Chronologisch aufteilen und Vorverarbeitung nur mit vergangenen Daten lernen.
Auf dieser Seite
Die kurze Antwort
Trainieren Sie bei Prognosen auf früheren Beobachtungen und prüfen Sie auf späteren. Eine zufällige Aufteilung kann Informationen zugänglich machen, die bei einer echten Prognose fehlen würden.
Den tatsächlichen Prognosezeitpunkt festlegen
Ein Geschäft sagt jeden Sonntagabend die Nachfrage der nächsten sieben Tage voraus. Die Bewertung muss diesen Zeitpunkt nachbilden: Verkäufe der kommenden Woche und später veröffentlichte Daten stehen noch nicht zur Verfügung. Eine zufällige Aufteilung vermischt Vergangenheit und Zukunft und kann den praktischen Nutzen überschätzen.
Notieren Sie Prognoseursprung, Horizont und Verfügbarkeit aller Eingaben. Kalendermerkmale sind vorab bekannt; gemessene Temperaturen oder korrigierte Verkaufszahlen möglicherweise nicht. Verwenden Sie für Wetterinformationen die damals verfügbare Vorhersage, sofern das dem geplanten Einsatz entspricht.
Prognosehorizont festlegen
Das Testfenster sollte zum gewünschten Horizont passen. Lernen Sie Skalierung und andere Transformationen nur aus Trainingsdaten. Gleitende Merkmale dürfen nur zum Prognosezeitpunkt verfügbare Daten verwenden.
from sklearn.model_selection import TimeSeriesSplit
observations = list(range(12))
splitter = TimeSeriesSplit(n_splits=3, test_size=2, gap=1)
for train, test in splitter.split(observations):
print(train.tolist(), test.tolist())Eine zeitliche Aufteilung konkret lesen
Das kleine Beispiel oben verwendet 12 geordnete Beobachtungen, drei Prüfzeiträume mit je zwei Zeilen und einen Abstand von einer Zeile. Zuerst wird auf Positionen 0–4 trainiert und auf 6–7 bewertet, dann auf 0–6 und 8–9, zuletzt auf 0–8 und 10–11.
Der Abstand ist ein gewählter Ausschlussbereich, kein allgemeines Mittel gegen Datenlecks. Orientieren Sie ihn an Veröffentlichungsverzögerungen oder überlappenden Zielzeiträumen. TimeSeriesSplit zählt Zeilen, nicht Tage. Prüfen Sie Sortierung, doppelte Zeitstempel, fehlende Perioden und gleiche Abstände, bevor Sie Zeitfenster vergleichen.
Zeitliche Voraussetzungen prüfen
Kontrollieren Sie Sortierung, fehlende Zeitpunkte und Abstände. Verwenden Sie bei Informationsverzögerungen oder überlappenden Zielwerten einen Abstand. Halten Sie eine letzte Periode unabhängig.
Datenlecks außerhalb der Aufteilung erkennen
Passen Sie Skalierung, Ersetzung fehlender Werte und Merkmalsauswahl nur an den jeweiligen Trainingsdaten an. Wenden Sie diese Anpassungen auf die späteren Prüfdaten an. Eine Pipeline bündelt gelernte Verarbeitung, entfernt aber keine Zukunftsinformation aus bereits erzeugten Merkmalen.
Ein gleitender Mittelwert für Tag t muss frühere Werte verwenden, etwa shift(1).rolling(7).mean(). Zentrierte Fenster können spätere Tage einbeziehen. Bei einer Vorhersage der ganzen Woche sind selbst die tatsächlichen Verkäufe ihrer ersten Tage am Ursprung unbekannt und dürfen nicht für die Folgetage verwendet werden.
Vor dem Abstimmen mit einer einfachen Prognose vergleichen
Verwenden Sie einen passenden Vergleich: letzten bekannten Wert oder entsprechenden Zeitraum des vorigen Saisonzyklus. Vergleichen Sie gleiche Ursprünge und Horizonte. Die illustrative Rechnung unten ergibt für Istwerte 100, 110 und 90 bei Vorhersagen von jeweils 100 eine MAE von etwa 6,67 in der Einheit der Zielgröße.
Betrachten Sie Fehler je Horizont und Zeitraum; ein Mittelwert kann schlechte Ergebnisse an nachfragestarken Tagen verdecken. Prozentfehler sind nahe null problematisch. Halten Sie einen letzten Zeitraum von der Modellauswahl getrennt und bewerten Sie erneut, wenn sich die Bedingungen ändern.
actual = [100, 110, 90]
predicted = [100, 100, 100]
mae = sum(abs(a - p) for a, p in zip(actual, predicted)) / len(actual)
print(round(mae, 2))Was Sie prüfen sollten
- Chronologisch aufteilen.
- Vorverarbeitung je Trainingsfenster lernen.
- Verfügbarkeit der Merkmale prüfen.
Geltungsbereich
TimeSeriesSplit verwendet Zeilenpositionen. Gleichmäßige Zeitabstände sind für vergleichbare Zeitfenster zu prüfen.