Warum ist diese Trendzeitreihe stationär?

Eine Studie zum Augmented Dickey-Fuller (ADF) Test anhand eines seltsamen Beispiels

Photo by Jan Huber on Unsplash

Stationarität ist eines der grundlegendsten Konzepte für die Zeitreihenanalyse. Im Allgemeinen bietet die Stationarität hervorragende Eigenschaften für die Modellierung der Zeitreihe mit verschiedenen statistischen Methoden. Augmented Dickey-Fuller (ADF) Der Test ist wahrscheinlich der am weitesten verbreitete Ansatz zur Überprüfung der Stationarität.

Es gibt unzählige Artikel online zu diesem Thema. Ich werde Ihre Zeit nicht mit der grundlegenden Einführung verschwenden, wie der Definition von Stationarität, der Durchführung von ADF-Tests usw. In diesem Beitrag werde ich meine Reise zum Erkunden des ADF-Tests teilen, nachdem ich auf einen seltsamen Fall in einer Anwendung gestoßen bin.

Der Lernpfad, den ich zeigen werde, ist typisch für das Erlernen von Data Science. Zuerst denken wir, wir verstehen ein Werkzeug oder ein Konzept, aber wir erkennen den Begriff einfach an und erinnern uns daran. Wenn wir es auf tatsächliche Daten anwenden, stoßen wir möglicherweise auf unerwartete, herausfordernde Probleme, die uns dazu zwingen, mehr zu untersuchen und tiefer zu verstehen.

Auch hier werde ich meinen Code auf GitHub teilen; Bitte finden Sie den Link endlich im Referenzbereich.

Der Beginn einer unerwarteten Reise

Neulich habe ich mit einigen Zeitreihen gearbeitet. Abbildung 1 zeigt eine davon. Es gibt kein Doppeltes Aufwärtstrend besteht, und für Auch die Varianz ändert sich im Laufe der Zeit. Mit dieser klaren Visualisierung musste ich die Stationarität nicht testen. Aus irgendeinem Grund, an den ich mich nicht erinnere, habe ich es trotzdem mit dem ADF-Test versucht. Überraschenderweise ist der p-Wert fast 0, was bedeutet, dass ich die Nullhypothese ablehnen und akzeptieren sollte, dass sie stationär ist.

Abbildung 1. Zeitreihe mit Trend (Bild vom Autor)

Das ist seltsam. Das Testergebnis schien falsch. Ich wollte untersuchen, was hinter dem ADF-Test steckt. Der erste Schritt, den ich versuchte, bestand darin, dieses Problem mit synthetischen Daten zu reproduzieren. Ich habe einige Testdaten mit dem folgenden Code generiert. Der Code ahmte nur das Verhalten langsamer Trends nach, nicht jedoch die Saisonalität.

In Abbildung 20,000 gibt es 1 Beobachtungen, was darauf hindeutet, dass der Trend extrem langsam ansteigt. Ich erstelle eine Zeitreihe mit einer kleinen Steigung von 0.0005. Der Mittelwert der Zeitreihe steigt nach 0 Beobachtungen von etwa 0.5 auf 1000. Dann testen wir es mit der Funktion adfuller() von statsmodels.tsa.stattools mit den Standardparametern. Der p-Wert beträgt 0.01 und das „Problem“ tritt erneut auf. Abbildung 2 zeigt das Ergebnis. Sie können den Titel ignorieren und sich auf den Aufwärtstrend konzentrieren. Ich werde später erklären, warum wir p-Werte aus drei verschiedenen ADF-Tests haben.

Abbildung 2. Synthetische Zeitreihe mit ADF-Testergebnis (Bild vom Autor)

Die Mathematik hinter dem DF-Test

Wir müssen tiefer gehen, um zu sehen, was genau der ADF-Test macht. Es stellt sich heraus, dass der mathematische Hintergrund nicht kompliziert ist. Erstens ist der ADF-Test nur eine erweiterte Version des Dickey-Fuller-Test. Es gibt drei Hauptversionen des DF-Tests (aus Wikipedia):

Version 1: Testen Sie auf eine Einheitswurzel: ∆yᵢ = δyᵢ₋₁ + uᵢ

Version 2: Testen Sie auf eine Einheitswurzel mit Konstante: ∆yᵢ = a₀ + δyᵢ₋₁ + uᵢ

Version 3. Testen Sie auf eine Einheitswurzel mit konstantem und deterministischem Trend: ∆yᵢ = a₀ + a₁*t + δyᵢ₋₁ + uᵢ

In jeder Version Die Nullhypothese besagt, dass es eine Einheitswurzel gibt, δ=0.

Das Statsmodels-Paket unterstützt alle drei Versionen mit dem Parameter „Rückschritt“.

Für Version 1 ist die Regression „n“ (keine Konstante, kein Trend).

Für Version 2 ist die Regression „c“ (nur Konstante); Dies ist die Standardeinstellung.

Für Version 3 ist die Regression „ct“ (Konstante und Trend).

Ich habe den Test mit drei verschiedenen Einstellungen erneut durchgeführt und unten sind die neuen Ergebnisse aufgeführt.

Für Version 1 beträgt der p-Wert 0.09. Wir sollten die Nullhypothese nicht ablehnen.

Für Version 2 beträgt der p-Wert 0.01. Wir haben es bereits als Problem behandelt, da dies die Standardeinstellung ist.

Für Version 3 beträgt der p-Wert 0.00. Das ist zu erwarten, denn die Zeitreihe ist tatsächlich so stationär mit einem deterministischen Trend.

Wenn wir diese Beispieldaten also mit Version 1 (regression=’n’) testen, sagen wir nicht, dass sie stationär sind. Wir sollten wahrscheinlich nicht die Standardeinstellung verwenden. Aber Sie fragen sich vielleicht auch, warum der konstante Begriff hier einen so großen Unterschied machte? Lassen Sie uns mehr graben.

Vom DF-Test zur linearen Regression

Basierend auf der obigen Definition ist der DF-Test lediglich eine lineare Regression. Abbildung 3 zeigt alle Punkte für die lineare Regression. Die Y-Achse ist ∆yᵢ, die X-Achse ist yᵢ₋₁ und uᵢ ist das Residuum. Version 1 bedeutet, dass wir eine Gerade ohne Achsenabschnitt (keine Konstante) anpassen müssen. Version 2 bedeutet, dass wir eine Linie mit einem Achsenabschnitt (Konstante) anpassen müssen.

Abbildung 3. ∆yᵢ und yᵢ₋₁ (Bild vom Autor)

Skitlearn LinearRegression unterstützt diese beiden Optionen gut mit dem Parameter fit_intercept. Unter Abbildung 4 sind die beiden angepassten Linien dargestellt. Wie Sie sehen, passt die Linie mit dem Achsenabschnitt besser als die Linie ohne Achsenabschnitt. Auch der R-Quadrat-Score bestätigte dies deutlich. Beachten Sie außerdem, dass die Steigung der orangen Linie kleiner ist als die der blauen Linie. Mit anderen Worten: Die Steigung der orangefarbenen Linie liegt näher bei 0.

Abbildung 4. Ergebnis der linearen Regression (Bild vom Autor)

Wir können auch durch Visualisierung denken: Die Punkte sind nicht um (0,0) zentriert, daher sollte die angepasste Regressionslinie nicht durch (0,0) verlaufen. Der Achsenabschnitt sollte größer als 0 sein. Da 0 der Startmittelwert ist, sollte ∆y größer als 0 sein, sodass der Gesamtmittelwert ansteigt. Wenn wir die Regressionsgerade zwingen, durch (0,0) zu gehen, passt sie nicht mehr zu den Daten und die Steigung wird aufgrund des Einflusses von (0) näher an 0,0 heranrücken.

Wir haben gesehen, ob die Einbeziehung der Intercept-Auswirkungen zur linearen Regression passt. Warum wirkt sich die Anpassung einer Linie auf die ADF-Testergebnisse aus und woher kommt der p-Wert?

Von der linearen Regression zum p-Wert

Jetzt wird es etwas kompliziert. Der endgültige p-Wert des DF-Tests ergibt sich nicht aus dem p-Wert der Koeffizienten aus der linearen Regression. Grundsätzlich weist die Statistik eine bestimmte Verteilung auf, die als Dickey-Fuller-Tabelle bekannt ist. Dann verwenden wir den ungefähren p-Wert von MacKinnon für die Teststatistik. Die Einzelheiten finden Sie im Statsmodels-Quellcode.

Da die Nullhypothese δ=0 ist, bedeutet dies, dass das Testen der Steigung der angepassten Linie 0 ist. Wir müssen nicht näher darauf eingehen, wie man den p-Wert erhält. Die logische Kette des Zusammenhangs zwischen dem p-Wert und der Steigung (δ in der linearen Regression, nicht die Trendsteigung) sieht wie folgt aus:

Wenn die Steigung weit von 0 entfernt ist, sollte der p-Wert im Allgemeinen kleiner sein, was wahrscheinlicher ist, dass die Nullhypothese abgelehnt wird und darauf hindeutet, dass es keine Einheitswurzel gibt und stationär ist. Wenn die Steigung 0 ist oder sehr nahe bei 0 liegt, sollte der p-Wert höher sein, wodurch die Nullhypothese mit größerer Wahrscheinlichkeit akzeptiert wird und Einheitswurzel und Nichtstationärheit nahegelegt werden. Zum zweiten Szenario sagt Wikipedia: „Die Tests haben eine geringe statistische Aussagekraft, da sie oft nicht zwischen echten Einheitswurzelprozessen (δ = 0) und nahezu Einheitswurzelprozessen (δ liegt nahe bei 0) unterscheiden können.“ Deshalb haben wir überhaupt das Problem. Wir haben es mit einem Near-Unit-Root-Prozess zu tun. Version 1 findet einen Unit-Root und Version 2 kann keinen Unit-Root finden.

Warum funktioniert Version 1 für das obige Beispiel?

Version 1 funktioniert für die Daten in Abbildung 2, da wir die Steigung näher an 0 bringen, sodass der p-Wert höher ist.

Allerdings können wir Version 1 nicht als Standardeinstellung verwenden. Für Version 1 gibt es zwei Fälle (wodurch die Leitung gezwungen wird, durch (0,0) zu gehen):

Fall 1: (0,0) liegt näher an allen Datenpunkten. Wenn die Linie durch (0,0) gehen muss, wird die Linie flacher und die Steigung nähert sich 0 an. Abbildung 4 veranschaulicht diesen Fall. Bitte beachten Sie, dass die Demonstration in Abbildung 4 nur auf eine Variable yᵢ₋₁ passt, der tatsächliche ADF passt auf mehr Verzögerungsvariablen.

Fall 2: (0,0) ist weit von allen Datenpunkten entfernt. Wenn die Linie durch (0,0) gehen muss, kann die Anpassung fehlschlagen. Im Wesentlichen ist die Steigung 0, was bedeutet, dass wir keine lineare Beziehung zwischen ∆yᵢ und yᵢ₋₁ finden können, so dass eine Gerade durch (0,0) geht und die meisten Datenpunkte abdeckt. Daher wird das Testergebnis in Richtung einer Root-Einheit verzerrt sein.

Abbildung 5 unten zeigt ein Beispiel dafür, dass der Test der Version 1 die Nullhypothese (p-Wert 0.6) nicht zurückweisen konnte und die Daten mit einem Mittelwert von 10 stationär sind. Abbildung 6 erläutert den Grund. Wie Sie sehen können, können wir keine Linie ohne Achsenabschnitt finden (R-Quadrat ist 0), daher ist die Steigung der angepassten Linie 0 (∆yᵢ hängt nicht von yᵢ₋₁ ab).

Abbildung 5. Version 1 konnte keine stationäre Zeitreihe erkennen (Bild vom Autor)
Abbildung 6. Die lineare Regression findet keine Linie ohne Achsenabschnitt (Übergabe von (0,0)) (Bild vom Autor)

Vom DF-Test zum ADF-Test

Nachdem wir nun verstanden haben, dass der DF-Test eine lineare Regression ist und wie wir den p-Wert aus der linearen Regression erhalten, fahren wir mit dem ADF fort. Die Formel von ADF lautet:

Wieder lineare Regression. Der „erweiterte“ Teil besteht darin, dass wir mehr Koeffizienten anpassen müssen.

Das Statsmodels-Paket ermöglicht die Anzeige einer detaillierten Zusammenfassung des AFT-Tests. Abbildung 7 ist das Ergebnis.

Abbildung 7. ADF-Test mit detaillierter Zusammenfassung (Bild vom Autor)

Wir sehen „OLS-Regression“ (die Standardlösung für lineare Regression) und 17 Koeffizienten. Ich habe die maximale Verzögerung nicht angegeben, daher versucht der Test bis zu einem Wert, der auf der Länge der Zeitreihe basiert, nämlich 17.

Der const (Achsenabschnitt) wird ebenfalls angepasst. Der Wert beträgt 0.0596.

Versuchen wir, den ADF-Test mithilfe der linearen Regression in Scikit-learn zu implementieren. Abbildung 8 zeigt den Code und die Ausgabe.

Abbildung 8. ADF-Test (nur der lineare Regressionsteil) mit Scikit-learn (Bild vom Autor)

Der Achsenabschnitt beträgt 0.0596 und die anderen Koeffizienten sind die gleichen wie in Abbildung 7. Die lineare Regression in Scikit-learn ist einfach OLS. Wir machen das Gleiche, daher ist es keine Überraschung, dass die Ergebnisse identisch sind.

Das Ende der Reise

Nachdem ich herausgefunden hatte, wie man den Parameter einstellt, testete ich die ursprüngliche Zeitreihe in Abbildung 1 mit Version 1 (Regression = „n“) und erhielt den p-Wert von 0.08, was darauf hindeutet, dass sie nicht stationär ist. Bitte beachten Sie, dass die Daten in Abbildung 1 einen Mittelwert von Null haben. Sie können sich also vorstellen, dass (0,0) näher an den Datenpunkten (∆yᵢ, yᵢ₋₁) liegt. Die Verwendung des Tests der Version 1 wird uns helfen.

Da die Trendsteigung in Abbildung 1 minimal ist, können wir die Zeitreihe auch mit Schritten neu abtasten, was die Steigung erhöht. Wenn ich es beispielsweise mit vier Schritten teste ( value[::4] ), besteht es den ADF-Test mit der Standardeinstellung nicht (p-Wert ist 0.17 für regression=’c’).

Problem gelöst.

Takeaways

Vertrauen Sie den ADF-Ergebnissen nicht blind. Visualisierung ist dein Freund.

Der ADF-Test ist eine einfache lineare Regression, und die Implementierung von Statistikmodellen verwendet OLS, um das Regressionsproblem zu lösen. Anschließend wird mithilfe der Dickey-Fuller-Tabelle der p-Wert extrahiert, der die Nullhypothese bestätigt, dass der Koeffizient der ersten Verzögerungsvariablen aus der angepassten Regression 0 ist.

Der ADF-Test hat Einschränkungen beim Testen der Near-Unit-Root-Prozesse (δ liegt nahe bei 0).

Wir müssen entsprechend die richtige ADF-Version auswählen. Wenn Sie beispielsweise einen konstanten Trend sehen und „Trend stationär“ testen möchten, müssen Sie „ct“ als Parameter auswählen. Wenn Sie einen langsamen Trend für ein Signal erkennen möchten, dessen Mittelwert 0 sein soll, wie in Abbildung 1 und Abbildung 2, müssen Sie möglicherweise „n“ als Parameter auswählen, um die Auswirkungen der Anpassung des Achsenabschnitts zu vermeiden. Statistikmodelle unterstützen auch quantitative Trends mit dem Parameter „ctt“. Diese erweiterte Option könnte in einigen Fällen eine gute Wahl sein. Falls Sie weiter graben möchten, lesen Sie bitte weiter Umgang mit der Unsicherheit über die Einbeziehung der Intercept- und deterministischen Zeittrendterme.

Ich hoffe, Sie haben etwas über den ADF-Test gelernt.

Viel Spaß mit deiner Zeitreihe!

Kontaktieren Sie mich an LinkedIn.

PS: Ich habe Erfahrung und Leidenschaft für Zeitreihendaten. Wenn Ihnen dieser Artikel gefällt, könnte Sie auch mein anderer Artikel interessieren Beiträge zum Thema Zeitreihen.

Bibliographie

Notebook-Datei auf GitHub

Warum ist diese Trendzeitreihe stationär? Neuveröffentlicht von der Quelle https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 über https://towardsdatascience.com/feed

<!–

->

Zeitstempel:

Mehr von Blockchain-Berater