Wie teile ich einen Datensatz für die Vorhersage von Zeitreihen auf?

22

Ich habe historische Verkaufsdaten von einer Bäckerei (täglich, über 3 Jahre). Jetzt möchte ich ein Modell erstellen, um zukünftige Verkäufe vorherzusagen (unter Verwendung von Funktionen wie Wochentag, Wettervariablen usw.).

Wie soll ich den Datensatz für die Anpassung und Auswertung der Modelle aufteilen?

  1. Muss es sich um einen chronologischen Zug / Validierung / Test-Split handeln?
  2. Würde ich dann mit dem eingestellten Zug und der eingestellten Validierung Hyperparameter-Tuning durchführen?
  3. Ist (verschachtelte) Kreuzvalidierung eine schlechte Strategie für ein Zeitreihenproblem?


BEARBEITEN

Hier sind einige Links, die ich gefunden habe, nachdem ich der von @ ene100 vorgeschlagenen URL gefolgt bin:

  • Rob Hyndman beschreibt "Rolling Forecasting Origin" in Theorie und Praxis (mit R-Code)
  • andere Begriffe für rollierenden Prognoseursprung sind "Laufoptimierung" ( hier oder hier ), "rollierender Horizont" oder "sich bewegender Ursprung"
  • es scheint, dass diese techniken in naher zukunft nicht in scikit-learn integriert werden, da „die nachfrage nach und die seminalität dieser techniken unklar sind“ ( hier angegeben ).

Und dies ist ein weiterer Vorschlag für Zeitreihenkreuzvalidierung.

tobip
quelle

Antworten:

8

Dieser Link aus Rob Hyndmans Blog enthält einige nützliche Informationen: http://robjhyndman.com/hyndsight/crossvalidation/

Nach meiner Erfahrung ist es sehr nützlich, Daten in chronologische Gruppen (Jahr 1, Jahr 2 usw.) aufzuteilen und die Parameterstabilität über einen längeren Zeitraum zu überprüfen, um etwas Robustes zu erstellen. Wenn Ihre Daten saisonabhängig sind oder eine andere Möglichkeit zur Aufteilung in Gruppen (z. B. geografische Regionen) besteht, kann die Überprüfung der Parameterstabilität in diesen Untergruppen auch dazu beitragen, die Robustheit des Modells zu bestimmen und festzustellen, ob eine Anpassung sinnvoll ist separate Modelle für separate Datenkategorien.

Ich denke, dass statistische Tests nützlich sein können, aber das Endergebnis sollte auch den "Geruchstest" bestehen.

ene100
quelle
3

1) Technisch gesehen müssen Sie nicht aus der Stichprobe testen, wenn Sie AIC und ähnliche Kriterien verwenden, da sie helfen, eine Überanpassung zu vermeiden.

3) Ich verstehe nicht, wie Sie den Standard-Lebenslauf erstellen können, da ein Zeitreihenmodell mit einigen fehlenden Werten trainiert werden muss. Versuchen Sie stattdessen, ein fortlaufendes Fenster für das Training zu verwenden und die Reaktion an einem oder mehreren Punkten vorherzusagen, die auf das Fenster folgen.

James
quelle
3
AIC in Zeitreihen basieren häufig auf Prognosefehlern, die einer Periode vorausgehen. Es sagt nicht viel über die dynamische Prognoseleistung in n-Perioden aus. Daher ist es absolut nicht genug.
Aksakal
Könnten Sie eine Referenz angeben?
James
1

Ich gehe Probleme oft aus einer Bayes'schen Perspektive an. In diesem Fall würde ich Überimputation als Strategie in Betracht ziehen . Dies bedeutet, eine Wahrscheinlichkeit für Ihre Daten festzulegen, aber einige Ihrer Ergebnisse auszulassen. Behandeln Sie diese Werte als fehlend und modellieren Sie die fehlenden Ergebnisse mit den entsprechenden Kovariaten. Drehen Sie dann, durch die Daten ausgelassen werden. Dies können Sie beispielsweise in einem 10-fachen CV-Verfahren tun.

Bei der Implementierung innerhalb eines Stichprobenprogramms bedeutet dies, dass Sie bei jedem Schritt einen Kandidatenwert Ihres ausgelassenen Datenwerts (neben Ihren Parametern) zeichnen und dessen Wahrscheinlichkeit anhand Ihres vorgeschlagenen Modells bewerten. Nachdem Sie die Stationarität erreicht haben, haben Sie für Ihr Modell kontrafaktische Stichprobenwerte, anhand derer Sie Vorhersagefehler beurteilen können: Diese Stichproben beantworten die Frage "Wie hätte mein Modell ohne diese Werte ausgesehen?". Beachten Sie, dass diese Vorhersagen auch die Unsicherheit der in Koeffizientenschätzungen vorhandenen Unsicherheit erben. Wenn Sie also alle Ihre vorhergesagten Werte für z. B. den 1. März 2010 zusammen erfassen, erhalten Sie eine Verteilung der Vorhersagen für dieses Datum.

Die Tatsache, dass diese Werte abgetastet werden, bedeutet, dass Sie immer noch Fehlerterme verwenden können, die davon abhängen, dass eine vollständige Datenreihe verfügbar ist (z. B. gleitender Durchschnitt), da bei jedem Schritt ein abgetasteter Ergebniswert verfügbar ist.

Sycorax sagt Reinstate Monica
quelle
1

In Ihrem Fall haben Sie nicht viele Möglichkeiten. Sie haben anscheinend nur eine Bäckerei. Um einen Test außerhalb der Stichprobe durchzuführen, ist Ihre einzige Option die Zeittrennung, dh die Trainingsstichprobe würde von Anfang an zu einem neueren Zeitpunkt und der Holdout würde von diesem Zeitpunkt bis heute dauern.

yt=f(t)+εtf(t)ys<t

Aksakal
quelle
Hört sich gut an. Was ist der Index "s" in y_s <= t?
Tipp
tyss<t
Ich vermute, mein Bäckereiverkauf hängt eher von exogenen Faktoren ab. Ich denke nicht, dass es sich um ein streng dynamisches Zeitreihenmodell handelt, wie z. B. Aktienkurse. In meinen Daten ist der mittlere durchschnittliche Fehler bei einem üblichen 5-fachen Lebenslauf nur geringfügig größer als bei einem 5-fachen Zeitreihen-Lebenslauf, bei dem die hier beschriebene chronologische Reihenfolge der Falten beibehalten wird (z. B. 30,7 gegenüber 33,8 für einen ExtraTreesRegressor). . Sie sind sich nicht sicher, ob dies eine gültige Methode ist, um ein dynamisches Modell empirisch zu testen?
Tippe am
So etwas wie ARIMA wäre ein dynamisches Modell. Die Verkäufe sind in der Regel beständig, dh die Verkäufe von heute entsprechen denen von gestern.
Aksakal,
0

Haftungsausschluss: Die hier beschriebene Methode basiert nicht auf einer gründlichen Lektüre der Literatur. Es ist mein bester Versuch, eine K-fache CV-Methode für eine multivariate Zeitreihenanalyse mit relativ kurzen Eingabefensterlängen zu improvisieren (unter der Annahme, dass keine / geringe Abhängigkeit über längere Zeitspannen besteht), bei der ein Problem mit inhomogenem Vorhandensein von Datenquellen vorliegt den Zeitraum der Datenerhebung.

Zuerst wird die Beobachtungsreihe in eine Reihe von Beobachtungsverlaufsfenstern mit der Länge window_length und mit Schritt 1 zwischen Fenstern (ohne Schritt) umgewandelt. Dann besteht das Prinzip darin, den Fensterdatensatz in "Shards" zu teilen, die um ein Vielfaches länger sind als window_length (jedoch um ein Vielfaches länger als die Anzahl der Modellinstanzen), und die Shards (wie Spielkarten) als Validierungsdaten zu verteilen, um die Modellinstanzen zu trennen. Um die Modelle sauberer voneinander zu trennen, wird ein Quarantänefenster mit der Länge window_length zu Beginn jedes Shards aus dem Training ausgeschlossen.

Die Modelle werden auf allen Shards mit Ausnahme ihrer eigenen trainiert, und die Validierung wird auf ihren eigenen Shards durchgeführt. Die Validierung der Sammlung / des Ensembles von Modellen erfolgt durch Summieren des Validierungsfehlers über alle Shards, wobei jeder Shard von seinem entsprechenden Untermodell behandelt wird. Das Testen von unsichtbaren Daten kann unter Verwendung eines Durchschnitts (oder einer anderen geeigneten Kombination) der Ergebnisse aller trainierten Modelle durchgeführt werden.

Diese Methode soll die Abhängigkeit vom System (und den Datenquellen) verringern, die über den gesamten Zeitraum der Datenerfassung gleich ist. Es ist auch beabsichtigt, jedem groben Teil der Daten den gleichen Einfluss auf das Modell zu geben. Um zu verhindern, dass die Quarantänefenster das Training beeinträchtigen, ist zu beachten, dass die Shard-Länge nicht zu gut mit Zeiträumen übereinstimmt, die in den Daten enthalten sind (von denen erwartet wird), z. B. (in der Regel) tägliche, wöchentliche und jährliche Zyklen.

Das Ensemblemodell kann möglicherweise mit völlig neuen Daten schlecht umgehen. (Ich weiß es noch nicht.)

Elias Hasle
quelle