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?
- Muss es sich um einen chronologischen Zug / Validierung / Test-Split handeln?
- Würde ich dann mit dem eingestellten Zug und der eingestellten Validierung Hyperparameter-Tuning durchführen?
- 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.
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.
quelle
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.
quelle
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.)
quelle