Miksi tämä trendaava aikasarja on paikallaan?

Augmented Dickey-Fuller (ADF) -tutkimus testi oudosta esimerkistä

Kuva Jan Huber on Unsplash

Stationaarisuus on yksi peruskäsitteistä aikasarjaanalyysissä. Yleisesti ottaen stationaarisuus tarjoaa erinomaiset ominaisuudet aikasarjojen mallintamiseen erilaisilla tilastollisilla menetelmillä. Lisätty Dickey-Fuller (ADF) testi on luultavasti yleisimmin käytetty tapa tarkistaa paikallaan.

Netistä löytyy paljon artikkeleita tästä aiheesta. En tuhlaa aikaasi perusintroon, kuten stationaarisuuden määrittelyyn, ADF-testien tekemiseen jne. Tässä viestissä jaan matkani ADF-testin tutkimiseen sen jälkeen, kun olen törmännyt oudoon tapaukseen sovelluksessa.

Esittämäni oppimispolku on tyypillinen datatieteen oppimiselle. Ensinnäkin luulemme ymmärtävämme työkalun tai käsitteen, mutta vain tunnustamme ja muistamme termin. Kun käytämme sitä todelliseen tietoon, saatamme löytää odottamattomia, haastavia ongelmia, jotka pakottavat meidät tutkimaan ja ymmärtämään tarkemmin.

Jaan jälleen koodini GitHubissa; löydät vihdoin linkin viiteosiosta.

Odottamattoman matkan alku

Työskentelin eräiden aikasarjojen kanssa toissapäivänä. Kuvassa 1 on yksi niistä. Ei ole olemassa kaksinkertaista nouseva trendi, ja myös varianssi muuttuu ajan myötä. Tällä selkeällä visualisoinnilla minun ei tarvinnut testata paikallaan pysymistä. Jostain syystä en muista, kokeilin silti ADF-testillä. Yllättäen p-arvo on melkein 0, mikä tarkoittaa, että minun pitäisi hylätä Noll-hypoteesi ja hyväksyä se stationääriseksi.

Kuva 1. Aikasarja trendin kanssa (Tekijän kuva)

Se on outoa. Testitulos näytti väärältä. Halusin tutkia, mitä ADF-testin takana tapahtuu. Ensimmäinen askel, jonka yritin, oli replikoida tämä ongelma synteettisillä tiedoilla. Loin testidataa seuraavalla koodilla. Koodi matki vain hitaan trendin käyttäytymistä, mutta ei kausiluonteisuutta.

Kuvassa 20,000 on 1 0.0005 havaintoa, mikä viittaa siihen, että trendi on nousussa erittäin hitaasti. Luon aikasarjan, jonka kaltevuus on 0. Aikasarjan keskiarvo nousee noin 0.5:sta 1000:een XNUMX havainnon jälkeen. Testataan sitten sitä adfuller()-funktiolla from statsmodels.tsa.stattools oletusparametreilla. P-arvo on 0.01 ja "ongelma" toistuu. Kuvassa 2 näkyy tulos. Voit jättää otsikon huomiotta ja keskittyä nousuun. Selitän myöhemmin, miksi meillä on p-arvot kolmesta eri ADF-testistä.

Kuva 2. Synteettinen aikasarja ADF-testin tuloksella (Tekijän kuva)

Matematiikka DF-testin takana

Meidän on mentävä syvälle nähdäksemme, mitä ADF-testi tarkalleen tekee. Osoittautuu, että sen matemaattinen tausta ei ole monimutkainen. Ensinnäkin ADF-testi on vain edistynyt versio Dickey-Fuller testi. On olemassa DF-testin kolme pääversiota (Wikipediasta):

Versio 1: Testaa yksikköjuurta: ∆yᵢ = δyᵢ₋₁ + uᵢ

Versio 2: Testaa yksikköjuurta vakiolla: ∆yᵢ = a₀ + δyᵢ₋₁ + uᵢ

Version 3. Testaa yksikköjuurta, jolla on vakio ja deterministinen trendi: ∆yᵢ = a₀ + a₁*t + δyᵢ₋₁ + uᵢ

Jokaisessa versiossa nollahypoteesi on, että on olemassa yksikköjuuri, δ=0.

Statsmodels-paketti tukee kaikkia kolmea versiota parametrilla "regressio".

Versiossa 1 regressio on 'n' (ei vakiota, ei trendiä).

Versiossa 2 regressio on 'c' (vain vakio); tämä on oletusasetus.

Versiossa 3 regressio on "ct" (vakio ja trendi).

Suoritan testin uudelleen kolmella eri asetuksella, ja alla ovat uudet tulokset.

Versiossa 1 p-arvo on 0.09. Meidän ei pitäisi hylätä Noll-hypoteesia.

Versiossa 2 p-arvo on 0.01. Olemme jo käsitelleet sitä ongelmana, koska tämä on oletusasetus.

Versiossa 3 p-arvo on 0.00. Tämä on odotettavissa, koska aikasarja on todellakin paikallaan deterministisen trendin kanssa.

Joten tämän esimerkkidatan osalta, jos testaamme sitä versiolla 1 (regression='n'), emme sano, että se on paikallaan. Meidän ei luultavasti pitäisi käyttää oletusasetusta. Mutta saatat myös ihmetellä, miksi vakiotermi teki niin suuren eron tässä? Kaivetaan lisää.

DF-testistä lineaariseen regressioon

Yllä olevan määritelmän perusteella DF-testi on vain lineaarinen regressio. Kuva 3 esittää kaikki lineaarisen regression pisteet. Y-akseli on ∆yᵢ, X-akseli on yᵢ₋₁ ja uᵢ on jäännös. Versio 1 tarkoittaa, että meidän on sovitettava suora ilman leikkausta (ei vakiota). Versio 2 tarkoittaa, että meidän on sovitettava viiva, jossa on leikkaus (vakio).

Kuva 3. ∆yᵢ ja yᵢ₋₁ (tekijän kuva)

Skitlearn LinearRegression tukee näitä kahta vaihtoehtoa hyvin parametrilla fit_intercept. Kuvan 4 alla on kaksi sovitettua viivaa. Kuten näet, linja, jossa on leikkauspiste, sopii paremmin kuin linja ilman leikkausta. Myös R-neliön pisteet vahvistivat sen selvästi. Huomaa myös, että oranssin viivan kaltevuus on pienempi kuin sinisen viivan. Toisin sanoen oranssin viivan kaltevuus on lähempänä nollaa.

Kuva 4. Lineaarisen regression tulos (Tekijän kuva)

Voidaan ajatella myös visualisoinnilla: pisteet eivät ole keskitetty (0,0) ympärille, joten sovitetun regressioviivan ei pitäisi kulkea (0,0). Leikkauspisteen tulee olla suurempi kuin 0. Koska 0 on aloituskeskiarvo, ∆y:n tulisi olla suurempi kuin 0, joten kokonaiskeskiarvo kasvaa. Jos pakotamme regressioviivan kulkemaan (0,0) läpi, se ei sovi dataan ja kulmakerroin tulee lähemmäksi 0:ta johtuen (0,0) vaikutuksesta.

Olemme nähneet, sopiiko leikkausvaikutusten sisällyttäminen lineaariseen regressioon. Miksi linjan sovitus vaikuttaa ADF-testin tuloksiin ja mistä p-arvo tulee?

Lineaarisesta regressiosta p-arvoon

Nyt menee vähän monimutkaiseksi. DF-testin lopullinen p-arvo ei ole lineaarisen regression kertoimien p-arvosta. Periaatteessa tilastolla on tietty jakauma, joka tunnetaan nimellä Dickey-Fuller-taulukko. Sitten käytetään MacKinnonin likimääräistä p-arvoa testitilastossa. Voit löytää yksityiskohdat kohdasta Statsmodelsin lähdekoodi.

Koska nollahypoteesi on δ=0, eli sovitetun suoran kaltevuuden testaus on 0. Meidän ei tarvitse mennä yksityiskohtiin p-arvon saamiseksi. P-arvon ja kulmakertoimen (δ lineaarisessa regressiossa, ei trendikaltevuuden) välisen yhteyden logiikkaketju on seuraava:

Yleensä, jos kulmakerroin on kaukana 0:sta, p-arvon tulisi olla pienempi, mikä todennäköisemmin hylkää nollahypoteesin ja viittaa siihen, ettei yksikköjuurta ole ja että se on paikallaan. Jos kulmakerroin on 0 tai hyvin lähellä 0:ta, p-arvon tulisi olla suurempi, mikä todennäköisemmin hyväksyy nollahypoteesin ja viittaa yksikköjuureen ja ei-stationaariseen. Toisesta skenaariosta Wikipedia sanoo: "Testeillä on alhainen tilastollinen teho, koska ne eivät usein pysty erottamaan todellisia yksikköjuuriprosesseja (δ = 0) ja lähellä yksikköjuuriprosesseja (δ on lähellä 0)". Siksi meillä on ensimmäinen ongelma. Kyseessä on lähes yksikköjuuriprosessi. Versio 1 löytää yksikön juuria ja versio 2 ei löydä yksikköjuurta.

Miksi versio 1 toimii yllä olevassa esimerkissä?

Versio 1 toimii kuvan 2 tiedoille, koska teemme kaltevuuden lähemmäksi nollaa, joten p-arvo on suurempi.

Emme kuitenkaan voi käyttää versiota 1 oletusasetuksena. Versiossa 1 on kaksi tapausta (joka pakottaa rivin kulkemaan (0,0)):

Tapaus 1: (0,0) on lähempänä kaikkia datapisteitä. Jos viivan on mentävä läpi (0,0), viiva on tasaisempi ja kaltevuus tulee lähemmäksi arvoa 0. Kuva 4 esittää tämän tapauksen. Huomaa, että kuvan 4 esitys sopii vain yhteen muuttujaan yᵢ₋₁, varsinaiseen ADF:ään mahtuu useampi viivemuuttuja.

Tapaus 2: (0,0) on kaukana kaikista datapisteistä. Jos linjan täytyy mennä läpi (0,0), sovitus saattaa epäonnistua; pohjimmiltaan kulmakerroin on 0, mikä tarkoittaa, että emme voi löytää ∆yᵢ:n ja yᵢ₋₁:n lineaarista suhdetta siten, että suora kulkee (0,0) ja kattaa suurimman osan datapisteistä. Siksi testitulos on puolueellinen siihen, että sillä on juuriyksikkö.

Alla olevassa kuvassa 5 on esimerkki version 1 testistä, joka ei hylännyt Nolla-hypoteesia (p-arvo 0.6), ja data on paikallaan keskiarvolla 10. Kuva 6 selittää syyn. Kuten näet, emme löydä suoraa ilman leikkauspistettä (R-neliö on 0), joten sovitetun suoran kaltevuus on 0 (∆yᵢ ei riipu arvosta yᵢ₋₁).

Kuva 5. Versio 1 ei tunnistanut paikallaan olevaa aikasarjaa (Tekijän kuva)
Kuva 6. Lineaarinen regressio ei löydä suoraa ilman leikkauskohtaa (läpäisee (0,0)) (Tekijän kuva)

DF-testistä ADF-testiin

Nyt ymmärrämme, että DF-testi on lineaarinen regressio ja kuinka saada p-arvo lineaarisesta regressiosta, siirrytään ADF:ään. ADF:n kaava on:

Jälleen lineaarinen regressio. "Lisätty" osa on, että meidän on sovitettava enemmän kertoimia.

Statsmodels-paketti mahdollistaa yksityiskohtaisen yhteenvedon näyttämisen AFT-testistä. Kuva 7 on tulos.

Kuva 7. ADF-testi yksityiskohtaisella yhteenvedolla (Tekijän kuva)

Näemme "OLS-regression" (lineaarisen regression oletusratkaisu) ja 17 kerrointa. En määrittänyt enimmäisviivettä, joten testi yrittää enintään aikasarjan pituuteen perustuvaa numeroa, joka on 17.

Const (sieppaus) on myös asennettu. Arvo on 0.0596.

Yritetään toteuttaa ADF-testi käyttämällä lineaarista regressiota Scikit-learnissä. Kuva 8 on koodi ja tulos.

Kuva 8. ADF-testi (vain lineaarisen regression osa) Scikit-learnillä (Kuva tekijältä)

Leikkauspiste on 0.0596, ja muut kertoimet ovat samat kuin kuvassa 7. Lineaarinen regressio Scikit-learnissä on pelkkä OLS. Teemme saman asian, joten ei ole yllättävää, että tulokset ovat identtisiä.

Matkan loppu

Kun sain selville, kuinka parametri asetetaan, testasin kuvan 1 alkuperäistä aikasarjaa versiolla 1 (regressio ='n') ja sain p-arvon 0.08, mikä viittaa siihen, että se ei ole paikallaan. Huomaa, että kuvan 1 tiedot ovat nollakeskiarvoja, joten voit kuvitella, että (0,0) on lähempänä datapisteitä (∆yᵢ, yᵢ₋₁). Version 1 testin käyttö auttaa meitä.

Koska trendin jyrkkyys kuviossa 1 on minimaalinen, voimme myös ottaa aikasarjan uudelleen näytteille askelein, mikä lisää kaltevuutta. Jos esimerkiksi testaan ​​sitä neljällä askeleella ( arvo[::4] ), se ei läpäise ADF-testiä oletusasetuksella (p-arvo on 0.17 regressio='c').

Ongelma ratkaistu.

Takeaways

Älä luota ADF-tuloksiin sokeasti. Visualisointi on ystäväsi.

ADF-testi on yksinkertainen lineaarinen regressio, ja tilastomallien toteutus käyttää OLS:ää regressioongelman ratkaisemiseen. Sitten se käyttää Dickey–Fuller-taulukkoa poimimaan p-arvon, joka vahvistaa Null-hypoteesin, jonka mukaan sovitetun regression ensimmäisen viivemuuttujan kerroin on 0.

ADF-testillä on rajoituksia testattaessa lähellä yksikköjuuriprosesseja (δ on lähellä 0).

Meidän on valittava oikea ADF-versio vastaavasti. Jos esimerkiksi näet jatkuvan trendin ja haluat testata trendin paikallaan pysymistä, sinun on valittava parametriksi ct. Jos aiot saada hitaan trendin signaalille, jonka keskiarvon oletetaan olevan 0, kuten kuvassa 1 ja kuvassa 2, sinun on ehkä valittava 'n' parametriksi, jotta vältytään leikkauspisteen sovittamisesta. Statsmodels tukee myös kvanttitrendiä parametrilla "ctt". Tämä lisävaihtoehto voi olla hyvä valinta joissakin tapauksissa. Jos haluat kaivaa pidemmälle, katso Käsittelemme sieppauksen ja deterministisen aikatrendin termien sisällyttämistä koskevaa epävarmuutta.

Toivottavasti olet oppinut jotain ADF-testistä.

Pidä hauskaa aikasarjoidesi parissa!

Ota yhteyttä minuun LinkedIn.

PS: Minulla on kokemusta ja intohimoa aikasarjatietoihin. Jos pidät tästä artikkelista, saatat olla kiinnostunut toisestani viestit aikasarjoista.

Viitteet

Muistikirjatiedosto GitHubissa

Miksi tämä trendaava aikasarja on paikallaan? Julkaistu uudelleen lähteestä https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 kautta https://towardsdatascience.com/feed

<!-

->

Aikaleima:

Lisää aiheesta Blockchain-konsultit