Dlaczego ta popularna seria czasowa jest nieruchoma?

Badanie rozszerzonego Dickey-Fuller (ADF) przetestuj na dziwnym przykładzie

Photo by Jana Hubera on Unsplash

Stacjonarność jest jedną z najbardziej podstawowych koncepcji analizy szeregów czasowych. Ogólnie rzecz biorąc, stacjonarność zapewni doskonałe właściwości do modelowania szeregów czasowych za pomocą różnych metod statystycznych. Rozszerzony Dickey-Fuller (ADF) test jest prawdopodobnie najpowszechniej stosowaną metodą sprawdzania stacjonarności.

W Internecie jest mnóstwo artykułów na ten temat. Nie będę marnował Twojego czasu na podstawowe wprowadzenie, takie jak definicja stacjonarności, jak wykonywać testy ADF itp. W tym poście podzielę się moją podróżą związaną z badaniem testu ADF po napotkaniu dziwnego przypadku w aplikacji.

Ścieżka uczenia się, którą pokażę, jest typowa dla nauki analityki danych. Po pierwsze, wydaje nam się, że rozumiemy narzędzie lub koncepcję, ale po prostu potwierdzamy i zapamiętujemy ten termin. Kiedy zastosujemy go do rzeczywistych danych, możemy odkryć nieoczekiwane, trudne problemy, które popchną nas do głębszego zbadania i lepszego zrozumienia.

Ponownie udostępnię mój kod na GitHubie; znajdź wreszcie link w sekcji referencyjnej.

Początek nieoczekiwanej podróży

Któregoś dnia pracowałem z pewnymi seriami czasowymi. Rysunek 1 przedstawia jeden z nich. Nie ma podwójnego tego an istnieje tendencja wzrostowa, oraz wariancja również zmienia się w czasie. Dzięki tej przejrzystej wizualizacji nie musiałem testować stacjonarności. Z jakiegoś powodu nie pamiętam, nadal próbowałem z testem ADF. Co zaskakujące, wartość p wynosi prawie 0, co oznacza, że ​​powinienem odrzucić hipotezę zerową i przyjąć, że jest ona stacjonarna.

Rysunek 1. Szeregi czasowe z trendem (fot. autora)

To dziwne. Wynik testu wydawał się błędny. Chciałem sprawdzić, co kryje się za testem ADF. Pierwszym krokiem, jaki próbowałem, było odtworzenie tego problemu za pomocą danych syntetycznych. Wygenerowałem dane testowe za pomocą następującego kodu. Kod naśladował jedynie zachowanie powolnego trendu, ale nie sezonowość.

Na rysunku 20,000 znajduje się 1 0.0005 obserwacji, co sugeruje, że trend rośnie niezwykle powoli. Tworzę szereg czasowy o niewielkim nachyleniu 0. Średnia wartość szeregu czasowego wzrasta z około 0.5 do 1000 po XNUMX obserwacji. Następnie przetestujmy to za pomocą funkcji adfuller() z statsmodels.tsa.stattools z domyślnymi parametrami. Wartość p wynosi 0.01 i „problem” pojawia się ponownie. Rysunek 2 pokazuje wynik. Możesz zignorować tytuł i skupić się na trendzie wzrostowym. Wyjaśnię później, dlaczego mamy wartości p z trzech różnych testów ADF.

Rysunek 2. Syntetyczny szereg czasowy z wynikiem testu ADF (fot. autora)

Matematyka stojąca za testem DF

Musimy zejść głęboko, aby zobaczyć, co dokładnie robi test ADF. Okazuje się, że jego podstawy matematyczne nie są skomplikowane. Po pierwsze, test ADF jest po prostu zaawansowaną wersją testu Test Dickeya-Fullera. Tam są trzy główne wersje testu DF (z Wikipedii):

Wersja 1: Test na pierwiastek jednostkowy: ∆yᵢ = δyᵢ₋₁ + uᵢ

Wersja 2: Test na pierwiastek jednostkowy ze stałą: ∆yᵢ = a₀ + δyᵢ₋₁ + uᵢ

Wersja 3. Test na pierwiastek jednostkowy ze stałym i deterministycznym trendem: ∆yᵢ = a₀ + a₁*t + δyᵢ₋₁ + uᵢ

W każdej wersji hipoteza zerowa głosi, że istnieje pierwiastek jednostkowy, δ=0.

Pakiet Statsmodels obsługuje wszystkie trzy wersje z parametrem "regresja".

W przypadku wersji 1 regresja to „n” (brak stałej, brak trendu).

W wersji 2 regresja to „c” (tylko stała); jest to ustawienie domyślne.

W wersji 3 regresja to „ct” (stała i trend).

Ponownie uruchamiam test z trzema różnymi ustawieniami i poniżej znajdują się nowe wyniki.

Dla wersji 1 wartość p wynosi 0.09. Nie powinniśmy odrzucać hipotezy zerowej.

Dla wersji 2 wartość p wynosi 0.01. Traktowaliśmy to już jako problem, ponieważ jest to ustawienie domyślne.

Dla wersji 3 wartość p wynosi 0.00. Można się tego spodziewać, ponieważ szereg czasowy rzeczywiście taki jest stacjonarny z deterministycznym trendem.

Zatem w przypadku tych przykładowych danych, jeśli przetestujemy je w wersji 1 (regresja='n'), nie powiemy, że są stacjonarne. Prawdopodobnie nie powinniśmy używać ustawienia domyślnego. Ale możesz się także zastanawiać, dlaczego termin stały zrobił tutaj tak dużą różnicę? Kopmy więcej.

Od testu DF do regresji liniowej

W oparciu o powyższą definicję test DF jest po prostu regresją liniową. Rysunek 3 pokazuje wszystkie punkty regresji liniowej. Oś Y to ∆yᵢ, oś X to yᵢ₋₁, a uᵢ to reszta. Wersja 1 oznacza, że ​​musimy dopasować linię bez przecięcia (bez stałej). Wersja 2 oznacza, że ​​musimy dopasować linię z punktem przecięcia (stała).

Rysunek 3. ∆yᵢ i yᵢ₋₁ (zdjęcie autora)

Naucz się regresji liniowej na nartach dobrze obsługuje te dwie opcje za pomocą parametru fit_intercept. Poniżej rysunku 4 znajdują się dwie dopasowane linie. Jak widać, linia z punktem przecięcia pasuje lepiej niż linia bez wyrazu. Wynik R-kwadrat również wyraźnie to potwierdził. Należy również pamiętać, że nachylenie pomarańczowej linii jest mniejsze niż niebieskiej linii. Innymi słowy, nachylenie pomarańczowej linii jest bliższe 0.

Rysunek 4. Wynik regresji liniowej (fot. autora)

Możemy także myśleć wizualizacyjnie: punkty nie są wyśrodkowane wokół (0,0), więc dopasowana linia regresji nie powinna przechodzić (0,0). Punkt przecięcia powinien być większy niż 0. Ponieważ 0 jest średnią początkową, ∆y powinno być większe niż 0, więc ogólna średnia wzrośnie. Jeśli zmusimy linię regresji do przejścia przez (0,0), będzie ona niedopasowana do danych, a nachylenie stanie się bliższe 0 ze względu na wpływ (0,0).

Widzieliśmy, czy uwzględnienie wpływów przecięcia pasuje do regresji liniowej. Dlaczego sposób dopasowania linii wpływa na wyniki testu ADF i skąd pochodzi wartość p?

Od regresji liniowej do wartości p

Teraz sytuacja staje się nieco skomplikowana. Ostateczna wartość p testu DF nie pochodzi z wartości p współczynników z regresji liniowej. Zasadniczo statystyka ma specyficzny rozkład znany jako tabela Dickeya-Fullera. Następnie używamy przybliżonej wartości p MacKinnona dla statystyki testowej. Szczegóły znajdziesz w Kod źródłowy Statsmodels.

Ponieważ hipoteza zerowa wynosi δ=0, co oznacza, że ​​testowanie nachylenia dopasowanej linii wynosi 0. Nie musimy wdawać się w szczegóły, jak uzyskać wartość p. Łańcuch logiczny powiązania między wartością p a nachyleniem (δ w regresji liniowej, a nie nachyleniem trendu) wygląda następująco:

Ogólnie rzecz biorąc, jeśli nachylenie jest dalekie od 0, wartość p powinna być mniejsza, co z większym prawdopodobieństwem odrzuci hipotezę zerową i zasugeruje brak pierwiastka jednostkowego i stacjonarnego. Jeśli nachylenie wynosi 0 lub jest bardzo bliskie 0, wartość p powinna być wyższa, co z większym prawdopodobieństwem przyjmie hipotezę zerową i zasugeruje pierwiastek jednostkowy i niestacjonarność. W przypadku drugiego scenariusza Wikipedia podaje: „Testy mają niską moc statystyczną, ponieważ często nie potrafią rozróżnić między prawdziwymi procesami o pierwiastku jednostkowym (δ = 0) a procesami bliskimi pierwiastka jednostkowego (δ jest bliskie 0)”. Dlatego w pierwszej kolejności mamy problem. Mamy do czynienia z procesem o korzeniu niemal jednostkowym. Wersja 1 znajduje pierwiastek jednostkowy, a wersja 2 nie może znaleźć pierwiastka jednostkowego.

Dlaczego wersja 1 działa w powyższym przykładzie?

Wersja 1 działa dla danych na rysunku 2, ponieważ przybliżamy nachylenie do 0, więc wartość p jest wyższa.

Nie możemy jednak używać wersji 1 jako ustawienia domyślnego. Istnieją dwa przypadki dla wersji 1 (wymuszanie przejścia linii przez (0,0) ):

Przypadek 1: (0,0) jest bliżej wszystkich punktów danych. Jeśli linia musi przejść przez (0,0), wówczas linia będzie bardziej płaska, a nachylenie będzie bliższe 0. Rysunek 4 ilustruje ten przypadek. Należy pamiętać, że demonstracja na rysunku 4 pasuje tylko do jednej zmiennej yᵢ₋₁, rzeczywisty ADF będzie pasować do większej liczby zmiennych opóźnienia.

Przypadek 2: (0,0) jest daleko od wszystkich punktów danych. Jeśli linia musi przejść przez (0,0), dopasowanie może się nie udać; zasadniczo nachylenie wynosi 0, co oznacza, że ​​nie możemy znaleźć liniowej zależności ∆yᵢ i yᵢ₋₁ takiej, aby linia przechodziła przez (0,0) i obejmowała większość punktów danych. Dlatego wynik testu będzie stronniczy w kierunku posiadania jednostki głównej.

Rysunek 5 poniżej przedstawia przykład testu wersji 1, który nie odrzucił hipotezy zerowej (wartość p 0.6), a dane są stacjonarne ze średnią wynoszącą 10. Rysunek 6 wyjaśnia przyczynę. Jak widać, nie możemy znaleźć prostej bez punktu przecięcia (R-kwadrat wynosi 0), więc nachylenie dopasowanej linii wynosi 0 (∆yᵢ nie zależy od yᵢ₋₁).

Rysunek 5. Wersja 1 nie rozpoznała stacjonarnego szeregu czasowego (fot. autora)
Rysunek 6. Regresja liniowa nie znajduje prostej bez przecięcia (przejście (0,0)) (fot. autora)

Od testu DF do testu ADF

Teraz rozumiemy, że test DF jest regresją liniową i jak uzyskać wartość p z regresji liniowej, przejdźmy do ADF. Wzór ADF to:

Znów regresja liniowa. Część „rozszerzona” polega na tym, że musimy dopasować więcej współczynników.

Pakiet statsmodels umożliwia wyświetlenie szczegółowego podsumowania testu AFT. Rysunek 7 przedstawia wynik.

Rycina 7. Test ADF ze szczegółowym podsumowaniem (fot. autora)

Widzimy „Regresję OLS” (domyślne rozwiązanie dla regresji liniowej) i 17 współczynników. Nie określiłem maksymalnego opóźnienia, więc test spróbuje uzyskać liczbę opartą na długości szeregu czasowego, czyli 17.

Dopasowana jest również stała (przechwytywanie). Wartość wynosi 0.0596.

Spróbujmy zaimplementować test ADF, używając regresji liniowej w Scikit-learn. Rysunek 8 przedstawia kod i dane wyjściowe.

Rysunek 8. Test ADF (tylko część regresji liniowej) za pomocą narzędzia Scikit-learn (obrazek autora)

Punkt przecięcia wynosi 0.0596, a pozostałe współczynniki są takie same jak na rysunku 7. Regresja liniowa w Scikit-learn to po prostu OLS. Robimy to samo, więc nie jest zaskoczeniem, że wyniki są identyczne.

Koniec podróży

Po tym, jak wymyśliłem, jak ustawić ten parametr, przetestowałem oryginalny szereg czasowy na rysunku 1, używając wersji 1 (regresja = „n”) i uzyskałem wartość p wynoszącą 0.08, co sugeruje, że nie jest ona stacjonarna. Należy pamiętać, że dane na rysunku 1 mają średnią zerową, więc można sobie wyobrazić, że (0,0) jest bliżej punktów danych (∆yᵢ, yᵢ₋₁). Pomoże nam użycie testu wersji 1.

Ponieważ nachylenie trendu na rysunku 1 jest minimalne, możemy również ponownie próbkować szereg czasowy za pomocą kroków, co zwiększa nachylenie. Na przykład, jeśli przetestuję go w czterech krokach ( wartość [::4] ), nie przejdzie testu ADF z ustawieniem domyślnym (wartość p wynosi 0.17 dla regresji = „c”).

Problem rozwiązany.

Takeaways

Nie ufaj ślepo wynikom ADF. Wizualizacja jest Twoim przyjacielem.

Test ADF jest prostą regresją liniową, a implementacja modeli statystycznych wykorzystuje OLS do rozwiązania problemu regresji. Następnie wykorzystuje tabelę Dickeya – Fullera do wyodrębnienia wartości p, która potwierdza hipotezę zerową, że współczynnik pierwszej zmiennej opóźnienia z dopasowanej regresji wynosi 0.

Test ADF ma ograniczenia podczas testowania procesów bliskich pierwiastkowi jednostkowemu (δ jest bliskie 0).

Musimy odpowiednio wybrać odpowiednią wersję ADF. Na przykład, jeśli widzisz stały trend i chcesz przetestować „trend stacjonarny”, musisz wybrać „ct” jako parametr. Jeśli zamierzasz uchwycić powolny trend dla sygnału, którego średnia ma wynosić 0, jak na rysunkach 1 i 2, być może będziesz musiał wybrać „n” jako parametr, aby uniknąć wpływu dopasowania wyrazu wolnego. Statsmodels obsługują również trend ilościowy za pomocą parametru „ctt”. Ta zaawansowana opcja może być dobrym wyborem w niektórych przypadkach. Jeśli chcesz kopać dalej, zapoznaj się z Radzenie sobie z niepewnością dotyczącą uwzględnienia wyrazu wolnego i deterministycznych warunków trendu czasowego.

Mam nadzieję, że dowiedziałeś się czegoś o teście ADF.

Miłej zabawy ze swoimi seriami czasowymi!

Skontaktuj się ze mną LinkedIn.

PS: Mam doświadczenie i pasję do danych szeregów czasowych. Jeśli podoba Ci się ten artykuł, być może zainteresuje Cię mój inny posty na temat szeregów czasowych.

Referencje

Plik notatnika w serwisie GitHub

Dlaczego ta popularna seria czasowa jest stacjonarna? Opublikowano ponownie ze źródła https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 przez https://towardsdatascience.com/feed

<!–

->

Znak czasu:

Więcej z Konsultanci Blockchain