Technologische Neuigkeiten, Bewertungen und Tipps!

Statistische Prognose für Zeitreihendaten Teil 6: Prognose… – Auf dem Weg zur KI

Hinweis: Der folgende Artikel hilft Ihnen dabei: Statistische Prognose für Zeitreihendaten Teil 6: Prognose… – Auf dem Weg zur KI

Datenvisualisierung

Statistische Prognose für Zeitreihendaten Teil 6: Vorhersage instationärer Zeitreihen mit ARIMA

In dieser Artikelserie wird der S&P 500-Marktindex anhand eines beliebten statistischen Modells analysiert: SARIMA (Saisonaler autoregressiver integrierter gleitender Durchschnitt) und GARCH (Generalisierte autoregressive bedingte Heteroskedastizität).

Im ersten Teil wurde die Serie aus der yfinance-API in Python entfernt. Es wurde gereinigt und zur Ableitung des verwendet S&P 500 Renditen (prozentuale Änderung aufeinanderfolgender Preise) und Volatilität (Höhe der Rendite). Im zweiten Teil wurden eine Reihe von Zeitreihenexplorationstechniken verwendet, um aus den Daten Erkenntnisse über Merkmale wie Trend, Saisonalität, Stationarität usw. abzuleiten. Mit diesen Erkenntnissen wurden im 3. und 4. Teil die Modellklassen SARIMA und GARCH vorgestellt . Im 5. Teil wurden die beiden Modelle (SARIMA und GARCH) kombiniert, um aussagekräftige Prognosen zu generieren und genaue Erkenntnisse über zukünftige Daten abzuleiten. Links zu all diesen Teilen finden Sie am Ende dieses Artikels.

In diesem letzten Teil wird die Technik behandelt, die zur Modellierung instationärer Daten mithilfe der SARIMA-Modellklasse verwendet wird. Der in diesem Artikel verwendete Code stammt von Preismodelle/ARMA-Modell für SPX-Preise.ipynb Notebook in diesem Repository

Inhaltsverzeichnis

  1. Daten importieren
  2. Zug-Test-Split
  3. Stationarität der S&P 500-Preise
  4. Konvertieren von S&P 500-Preisen in eine stationäre Serie
  5. Modellierung der transformierten Serie
  6. Vorhersage der S&P 500-Preise mithilfe des ARMA-Modells
  7. Auswertung der Vorhersagen
  8. Schlussfolgerungen
  9. Links zu anderen Teilen dieser Serie
  10. Verweise

Daten importieren

Hier importieren wir den Datensatz, der in Teil 1 dieser Serie verschrottet und vorverarbeitet wurde. Lesen Sie Teil 1, um die Daten vorzubereiten, oder laden Sie sie herunter data.csv Datei aus diesem Repository.

Da es sich um denselben Code handelt, der in den vorherigen Teilen dieser Serie verwendet wurde, werden die einzelnen Zeilen der Kürze halber hier nicht im Detail erläutert.

Zug-Test-Split

Wie zuvor teilen wir die Daten nun in Zugtestsätze auf. Hier bilden alle Beobachtungen am und vom 01.01.2019 den Testsatz, und alle Beobachtungen davor bilden den Zugsatz.

Stationarität der S&P 500-Preise

Vor dem Einbau eines Modells aus der ARIMA-Familie sollte die Stationarität der Eingangsreihe überprüft werden. Dies liegt daran, dass sich in einer stationären Reihe der zugrunde liegende Prozess, der die Daten erstellt (den ARIMA zu modellieren versucht), in Zukunft nicht ändern wird. Daher hat das Modell mit stationären Daten gute Erfolgsaussichten.

Um zu überprüfen, ob eine Serie stationär ist oder nicht, werden die folgenden drei Methoden verwendet:

  • Überprüfen Sie mithilfe eines Liniendiagramms, ob die Daten keinen erkennbaren Trend aufweisen (Zusammenfassungsstatistiken ändern sich nicht mit der Zeit).
  • Überprüfen Sie die Korrelation des Diagramms mit verzögerten Versionen seiner selbst mithilfe des ACF- und PACF-Diagramms.
  • Überprüfen Sie die Ergebnisse des ADF-Tests (Augmented Dickey Fuller). Die Nullhypothese besagt, dass die Reihe instationär ist. Wenn der zurückgegebene p-Wert größer als alle kritischen Werte ist, kann die Nullhypothese nicht abgelehnt werden und die Reihe ist nicht stationär. (Eine ausführlichere Beschreibung finden Sie in Teil 2 dieser Serie.)

Die Korrelationsdiagramme und Liniendiagramme zeigen einen klaren Trend in der Reihe. Darüber hinaus ist der p-Wert des ADF-Tests größer als alle kritischen Werte und daher ist die Reihe instationär.

Konvertieren von S&P 500-Preisen in eine stationäre Serie

Es gibt viele Techniken, um eine instationäre Reihe in eine stationäre umzuwandeln. Die folgenden 2 sind wahrscheinlich die häufigsten:

  • Differenzierung: Hier unterscheidet sich die Serie durch eine verzögerte Version ihrer selbst. Die Trendkomponente der Serie wird bei dieser Transformation normalerweise entfernt.
  • Protokolltransformation: Hier wird der Logarithmus der Serie berechnet. Die Serie wird im Maßstab verkleinert und die Variationen werden bei dieser Transformation gedämpft.

In diesem Fall wird ein weiterer gängiger Ansatz verwendet, der darin besteht, die beiden oben genannten Ansätze zu kombinieren: Logarithmisch differenzierte Transformation. Dabei wird zunächst der Logarithmus der Serie berechnet und dann wird die Serie mit einer verzögerten Version von sich selbst differenziert (hier beträgt die Verzögerung einen Zeitraum).

Die mathematische Formulierung dieses Ansatzes lautet:

Der Code hierfür lautet wie folgt:

Die Stationarität dieser neuen Serie kann auf die gleiche Weise überprüft werden wie bei der ursprünglichen Serie. Der train_df[“spx”] Serie soll durch train_df ersetzt werden[“spx_log_diff”] Serie. Der Rest des Codes kann mit dem in der identisch sein Stationarität der S&P 500-Preise Abschnitt.

Die Korrelationsdiagramme und das Liniendiagramm zeigen, dass die Reihe stationär ist (ohne offensichtlichen Trend). Der p-Wert des ADF-Tests liefert einen weiteren Beweis dafür, dass die Reihe stationär ist.

Modellierung der transformierten Serie

Da die Serie stationär ist, können wir die nicht integrierten Varianten der ARIMA-Modelle verwenden: AR, MA oder ARMA. In diesem Fall wird ARMA gewählt. Die Parameter von ARMA werden mit bezeichnet ARMA(p, q):

  • P: Steuert die Auswirkung früherer Verzögerungen (geschätzt durch Zählen der signifikanten Verzögerungen in). PACF Parzelle)
  • Q: Steuert die Auswirkung vergangener Residuen (geschätzt durch Zählen der signifikanten Verzögerungen). ACF Parzelle)

Betrachtet man die ACF- und PACF-Diagramme aus dem vorherigen Abschnitt, können die anfänglichen Schätzungen für diese Parameter wie folgt lauten: p=1 oder p=2 und q=1 oder q=2. Betrachten wir das einfachste Modell: ARMA(1, 1).

Die folgende Codezelle wird zum Erstellen eines ARMA(1, 1)-Modells verwendet:

Die Funktion SARIMAX() wird verwendet, um das ARMA(1, 1)-Modell zu definieren, indem die transformierte S&P 500-Preisreihe und die entsprechende Reihenfolge als Argumente übergeben werden. Das Modell wird mithilfe der fit()-Methode anhand der Modelldefinition trainiert. Die Übersichtstabelle wird mithilfe der summary()-Methode für das angepasste Modell angezeigt.

Der P<|Z| Die Spalte der Übersichtstabelle zeigt, dass alle Koeffizienten dieses Modells signifikant sind. Als nächstes wird dieses Modell verwendet, um Vorhersagen für die transformierte Reihe und dann für die ursprüngliche Preisreihe zu generieren.

Vorhersage der S&P 500-Preise mithilfe des ARMA-Modells

Zur Vorhersage der S&P 500-Preise wird das zuvor erstellte ARMA(1, 1)-Modell verwendet, um die Werte für die transformierten (logarithmisch differenzierten) S&P 500-Preise vorherzusagen. Anschließend werden die prognostizierten Werte (und Konfidenzintervalle) rücktransformiert, um die erforderlichen Werte für die S&P 500-Preise zu erhalten.

Unter Bezugnahme auf die oben erwähnte Transformationsgleichung können wir die umgekehrte Transformation mithilfe der folgenden mathematischen Gleichungen ableiten:

Der Code zum Ableiten der Vorhersagen für die S&P 500-Preise lautet wie folgt:

  • Zunächst wird ein Datenrahmen ( pred_df ) definiert, der alle wichtigen Serien speichert, die zur Ableitung der Vorhersagen für die S&P 500-Preise erforderlich sind.
  • Als nächstes werden die SPX-Serie und eine verzögerte Version dieser Serie im Datenrahmen gespeichert. Die Verzögerung beträgt einen Zeitraum. Diese beiden Reihen repräsentieren die Reihen y
  • Jetzt werden die Modellvorhersagen mit der Methode „predict()“ generiert, wobei die Start- und Enddaten im angepassten Modell angegeben werden. Außerdem werden die Konfidenzintervalle für diese Vorhersagen mithilfe der Methode conf_int() für die Ausgabe der Funktion get_forecast() generiert. Diese Reihen stellen die y_new
  • Die Exponentenfunktion wird für diese Vorhersagen und ihre Konfidenzintervalle verwendet, um die exp(y_new
  • Schließlich werden die zuvor generierten verzögerten spx-Werte ( y(t-1) ) und exp(y_new

Auswertung der Vorhersagen

Es gibt zwei Möglichkeiten, die zuvor generierten Vorhersagen auszuwerten:

  • Liniendiagramme der Vorhersagen zusammen mit den tatsächlichen Werten
  • Berechnen der RMSE-Metrik (Root Mean Squared Error).

Der Code zum Generieren der Liniendiagramme und der RMSE-Metrik ist unten dargestellt:

Zuerst wird die RMSE-Metrik mithilfe der Funktion „mean_squared_error()“ von sklearn.metrics berechnet. Dann werden die Vorhersagen (in Blau) zusammen mit den Konfidenzintervallen (in Grün) im Vergleich zu den tatsächlichen S&P 500-Preisen (in Rot) aufgetragen.

Abschluss

In dieser Artikelserie wurde der S&P 500-Marktindex mithilfe statistischer Zeitreihenprognosemodelle wie SARIMA und GARCH analysiert und modelliert. In dieser Serie ging es zunächst um Möglichkeiten, solche Daten zu erhalten und sie zum besseren Verständnis zu untersuchen. Als nächstes werden einige statistische Modelle eingeführt und auf diese Daten angewendet. Mithilfe dieser Modelle konnten wir zukünftige Werte und die mit diesen Vorhersagen verbundene Fehlerquote vorhersagen.

Links zu anderen Teilen dieser Serie

Verweise

[1] 365DataScience-Kurs zur Zeitreihenanalyse

[2] Machinelearningmastery-Blogs zur Zeitreihenanalyse

[3] Wikipedia-Artikel zu GARCH

[4] ritvikmath YouTube Videos zum GARCH-Modell.

[5] Tamara Louie: Anwendung statistischer Modellierung und maschinellen Lernens zur Durchführung von Zeitreihenprognosen

[6] Prognosen: Prinzipien und Praxis von Rob J Hyndman und George Athanasopoulos

[7] Eine sanfte Einführung in den Umgang mit einer instationären Zeitreihe in Python von Analytics Vidhya


Statistische Prognose für Zeitreihendaten Teil 6: Vorhersage instationärer Zeitreihen mithilfe von… wurde ursprünglich in Towards AI auf Medium veröffentlicht, wo die Leute das Gespräch fortsetzen, indem sie diese Geschichte hervorheben und darauf antworten.

Veröffentlicht über Towards AI