Ich arbeite an einem kleinen Projekt, bei dem wir versuchen, die Rohstoffpreise (Öl, Aluminium, Zinn usw.) für die nächsten 6 Monate vorherzusagen. Ich muss 12 solche Variablen vorhersagen und habe Daten von April 2008 bis Mai 2013.
Wie gehe ich bei der Vorhersage vor? Ich habe folgendes gemacht:
- Importierte Daten als Timeseries-Dataset
- Die Saisonalität aller Variablen variiert tendenziell mit dem Trend, daher gehe ich zum multiplikativen Modell.
- Ich habe die Variable protokolliert, um sie in ein additives Modell umzuwandeln
- Für jede Variable werden die Daten mit AWL zerlegt
Ich plane, die exponentielle Glättung von Holt Winters, ARIMA und das neuronale Netz für die Vorhersage zu verwenden. Ich habe die Daten als Training und Test aufgeteilt (80, 20). Planen, das Modell mit weniger MAE, MPE, MAPE und MASE auszuwählen.
Mache ich das richtig?
Ich hatte auch eine Frage: Soll ich die Daten glätten, bevor ich sie an ARIMA oder ein neuronales Netz weitergebe? Wenn ja, mit was? Die Daten zeigen sowohl Saisonalität als auch Trend.
BEARBEITEN:
Anhängen des Zeitreihenplots und der Daten
Year <- c(2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2009, 2009,
2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2010,
2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
2011, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012,
2012, 2012, 2013, 2013)
Month <- c(4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2)
Coil <- c(44000, 44500, 42000, 45000, 42500, 41000, 39000, 35000, 34000,
29700, 29700, 29000, 30000, 30000, 31000, 31000, 33500, 33500,
33000, 31500, 34000, 35000, 35000, 36000, 38500, 38500, 35500,
33500, 34500, 36000, 35500, 34500, 35500, 38500, 44500, 40700,
40500, 39100, 39100, 39100, 38600, 39500, 39500, 38500, 39500,
40000, 40000, 40500, 41000, 41000, 41000, 40500, 40000, 39300,
39300, 39300, 39300, 39300, 39800)
coil <- data.frame(Year = Year, Month = Month, Coil = Coil)
EDIT 2: Eine Frage, können Sie mir bitte sagen, ob meine Daten Saisonalität oder Trend haben? Und bitte geben Sie mir auch einige Tipps, wie Sie sie identifizieren können.
quelle
Antworten:
Sie sollten das Vorhersagepaket verwenden , das alle diese Modelle (und mehr) unterstützt und deren Anpassung zum Kinderspiel macht:
Ich würde davon abraten, die Daten vor dem Anpassen Ihres Modells zu glätten. Ihr Modell wird von Natur aus versuchen, die Daten zu glätten, sodass das Vorglätten die Sache nur kompliziert macht.
Bearbeiten basierend auf neuen Daten:
Es sieht tatsächlich so aus, als ob Arima eines der schlechtesten Modelle ist, die Sie für dieses Trainings- und Test-Set ausgewählt haben.
Ich habe Ihre Daten in einem Dateiaufruf gespeichert
coil.csv
, in R geladen und in ein Trainings- und Test-Set aufgeteilt:Als nächstes passe ich eine Reihe von Zeitreihenmodellen an: Arima, exponentielle Glättung, neuronales Netzwerk, TBats, Fledermäuse, saisonale Zerlegung und strukturelle Zeitreihen:
Dann habe ich einige Vorhersagen gemacht und mit dem Testset verglichen. Ich habe eine naive Vorhersage eingefügt, die immer eine flache, horizontale Linie vorhersagt:
Wie Sie sehen, ist das Arima-Modell im Trend verkehrt, aber ich mag das Aussehen des "Basic Structural Model".
Schließlich habe ich die Genauigkeit jedes Modells am Testgerät gemessen:
Die verwendeten Metriken sind in Hyndman, RJ und Athanasopoulos, G. (2014) "Forecasting: Principles and Practice" beschrieben , die zufällig auch die Autoren des Forecast-Pakets sind. Ich empfehle Ihnen nachdrücklich, ihren Text zu lesen: Er ist kostenlos online verfügbar. Die strukturelle Zeitreihe ist das beste Modell nach mehreren Metriken, einschließlich MASE, der Metrik, die ich für die Modellauswahl am meisten bevorzuge.
Eine letzte Frage ist: Hat das Strukturmodell bei diesem Testsatz Glück gehabt? Eine Möglichkeit, dies zu beurteilen, ist die Betrachtung von Trainingssatzfehlern. Trainingssatzfehler sind weniger zuverlässig als Testsatzfehler (da sie überanpassbar sein können), aber in diesem Fall hat das Strukturmodell immer noch die Nase vorn:
(Beachten Sie, dass das neuronale Netzwerk übermäßig gut funktioniert, wenn das Trainingsset und das Testset schlecht sind.)
Schließlich wäre es eine gute Idee, alle diese Modelle gegenseitig zu validieren, beispielsweise durch Schulung von 2008 bis 2009 / Testen von 2010, Training von 2008 bis 2010 / Testen von 2011, Training von 2008 bis 2011 / Testen von 2012, Training am 2008-2012 / Testen am 2013 und Mitteln von Fehlern über alle diese Zeiträume. Wenn Sie diesen Weg beschreiten möchten, habe ich ein teilweise vollständiges Paket für die Validierung von Zeitreihenmodellen auf github , das Sie gerne ausprobieren und mir Feedback / Pull-Anfragen zu folgenden Themen geben können:
Edit 2: Mal sehen, ob ich mich erinnere, wie ich mein eigenes Paket benutze!
Installieren und laden Sie zunächst das Paket von github (siehe oben). Überprüfen Sie dann einige Modelle (unter Verwendung des vollständigen Datensatzes):
(Beachten Sie, dass ich die Flexibilität des neuronalen Netzwerkmodells reduziert habe, um eine Überanpassung zu verhindern.)
Sobald wir die Modelle angepasst haben, können wir sie mit MAPE vergleichen (cv.ts unterstützt MASE noch nicht):
Autsch. Es scheint, dass unsere strukturelle Prognose Glück hatte. Langfristig liefert die naive Prognose die besten Prognosen, gemittelt über einen Zeitraum von 12 Monaten (das Arima-Modell ist immer noch eines der schlechtesten Modelle). Vergleichen wir die Modelle an jedem der 12 Prognosehorizonte und sehen wir, ob eines davon jemals das naive Modell übertrifft:
Bezeichnenderweise wählt das exponentielle Glättungsmodell immer das naive Modell (die orange Linie und die blaue Linie überlappen sich zu 100%). Mit anderen Worten, die naive Prognose der Coil-Preise für den nächsten Monat entspricht den Coil-Preisen für diesen Monat und ist genauer (an fast jedem Prognosehorizont) als 7 äußerst ausgefeilte Zeitreihenmodelle. Wenn Sie keine geheimen Informationen haben, die der Spulenmarkt noch nicht kennt, wird es äußerst schwierig sein , die naive Spulenpreisprognose zu übertreffen .
Es ist nie die Antwort, die irgendjemand hören möchte, aber wenn die Genauigkeit der Vorhersage Ihr Ziel ist, sollten Sie das genaueste Modell verwenden. Verwenden Sie das naive Modell.
quelle
Der Ansatz, den Sie gewählt haben, ist vernünftig. Wenn Sie mit Prognosen noch nicht vertraut sind, empfehle ich folgende Bücher:
Das erste Buch ist ein Klassiker, den ich sehr empfehlen kann. Das zweite Buch ist ein Open-Source-Buch, auf das Sie für Prognosemethoden und deren Anwendung unter Verwendung der
R
Open-Source-Softwarepaket- Prognose verweisen können . Beide Bücher bieten einen guten Hintergrund zu den Methoden, die ich verwendet habe. Wenn Sie es ernst meinen mit Prognosen, dann würde ich Principles of Forecasting von Armstrong empfehlen , eine Sammlung von enormen Forschungsergebnissen in Bezug auf Prognosen, die ein Praktiker für sehr hilfreich halten könnte.Wenn ich zu Ihrem konkreten Beispiel für die Spule komme, erinnere ich mich an ein Konzept der Vorhersagbarkeit, das in den meisten Lehrbüchern häufig ignoriert wird. Einige Serien wie Ihre Serien können einfach nicht vorhergesagt werden, da sie weniger Muster aufweisen, da sie keine Trend- oder saisonalen Muster oder systematische Variationen aufweisen. In diesem Fall würde ich eine Serie als weniger vorhersehbar einstufen. Bevor Sie sich in Extrapolationsmethoden, ich auf den Daten aussehen würde und die Frage stellen, ist meine Serie vorhersagbaren? In diesem speziellen Beispiel eine einfache Extrapolation wie Irrfahrt Prognose , die den letzten Wert der Prognose verwendet wird gefunden, genaueste sein .
Ein weiterer Kommentar zum neuronalen Netz: Neuronale Netze scheitern bekanntermaßen an empirischen Wettbewerben . Ich würde traditionelle statistische Methoden für Zeitreihen ausprobieren, bevor ich versuche, neuronale Netze für Zeitreihen-Prognoseaufgaben zu verwenden.
Ich habe versucht, Ihre Daten zu modellieren
R's forecast package
, hoffentlich sind die Kommentare selbsterklärend.Unter Verwendung von MAE für die Hold-out-Daten würde ich ARIMA für die kurzfristige Vorhersage (1 - 12 Monate) auswählen. Langfristig würde ich mich auf eine zufällige Wandervorhersage verlassen. Bitte beachten Sie, dass ARIMA ein Zufallsmodell mit Drift (0,1,0) + Drift ausgewählt hat, das bei dieser Art von Problemen in der Regel sehr viel genauer ist als ein reines Zufallsmodell. Siehe nachstehende Tabelle. Dies basiert auf der Genauigkeitsfunktion wie im obigen Code gezeigt.
Spezifische Antworten auf Ihre spezifischen Fragen: Auch eine Frage, die ich hatte, war, bevor ich zu ARIMA oder zum neuronalen Netz überging, sollte ich die Daten glätten? Wenn ja, mit was?
Die Daten zeigen sowohl Saisonalität als auch Trend.
Praktische Tipps zur Verbesserung der Genauigkeit:
Kombinieren Sie verschiedene Prognosemethoden: - Sie können versuchen, nicht extrapolierte Methoden wie analoge Prognosen , Urteilsprognosen oder andere Techniken zu verwenden und diese mit statistischen Methoden zu kombinieren, um genaue Prognosen zu erhalten. In diesem Artikel finden Sie Informationen zu den Vorteilen des Kombinierens. Ich habe versucht, die obigen 5 Methoden zu kombinieren, aber die Vorhersage war als einzelne Methoden nicht genau. Ein möglicher Grund ist, dass die einzelnen Vorhersagen ähnlich sind. Sie profitieren von der Kombination von Prognosen, wenn Sie verschiedene Methoden wie statistische und wertende Prognosen kombinieren.
Erkennen und Verstehen von Ausreißern: - Daten aus der realen Welt sind mit Ausreißern gefüllt. Identifizieren und behandeln Sie Ausreißer in Zeitreihen. Empfehlen Sie diesen Beitrag zu lesen . Wenn Sie sich Ihre Spulendaten ansehen, ist der Rückgang vor 2009 ein Ausreißer?
Bearbeiten
Die Daten scheinen einigen makroökonomischen Trends zu folgen. Ich vermute, dass der Abwärtstrend, der vor 2009 zu verzeichnen war, auf einen Konjunktureinbruch zwischen 2008 und 2009 folgt und nach 2009 wieder anzieht. Wenn dies der Fall ist, würde ich alle zusammen Extrapolationsmethoden vermeiden und mich stattdessen auf eine solide Theorie stützen diese wirtschaftlichen Trends verhalten sich wie die referenzierte von @GraemeWalsh.
Hoffe das hilft
quelle