Perché questa serie temporale di tendenza è stazionaria?

Uno studio sull'Augmented Dickey-Fuller (ADF) prova da un esempio strano

Foto di Jan Huber on Unsplash

La stazionarietà è uno dei concetti fondamentali per l’analisi delle serie temporali. In generale, la stazionarietà fornirà proprietà eccellenti per modellare le serie temporali con vari metodi statistici. Dickey-Fuller aumentato (ADF) Il test è probabilmente l’approccio più utilizzato per verificare la stazionarietà.

Ci sono tonnellate di articoli online su questo argomento. Non perderò il tuo tempo con l'introduzione di base, come la definizione di stazionarietà, come eseguire i test ADF, ecc. In questo post condividerò il mio viaggio nell'esplorazione del test ADF dopo aver riscontrato uno strano caso in un'applicazione.

Il percorso di apprendimento che mostrerò è tipico per l'apprendimento della scienza dei dati. Innanzitutto, pensiamo di comprendere uno strumento o un concetto, ma riconosciamo e ricordiamo semplicemente il termine. Quando lo applichiamo ai dati reali, potremmo trovare problemi inaspettati e stimolanti che ci spingono a indagare di più e a comprendere meglio.

Ancora una volta, condividerò il mio codice su GitHub; si prega di trovare finalmente il collegamento nella sezione di riferimento.

L'inizio di un viaggio inaspettato

Stavo lavorando con alcune serie temporali l'altro giorno. La Figura 1 ne mostra uno. Non esiste il doppio di un esiste una tendenza al rialzo, e la anche la varianza cambia nel tempo. Con questa chiara visualizzazione, non avevo bisogno di testare la stazionarietà. Per qualche motivo che non ricordo, l'ho comunque provato con il test ADF. Sorprendentemente, il valore p è quasi 0, il che implica che dovrei rifiutare l'ipotesi nulla e accettare che sia stazionaria.

Figura 1. Serie temporali con trend (Immagine dell'Autore)

È strano. Il risultato del test sembrava sbagliato. Volevo indagare su cosa sta succedendo dietro il test ADF. Il primo passo che ho provato è stato replicare questo problema con dati sintetici. Ho generato alcuni dati di test con il seguente codice. Il codice imitava solo il comportamento del trend lento ma non la stagionalità.

Ci sono 20,000 osservazioni nella Figura 1, il che implica che la tendenza sta aumentando molto lentamente. Creo una serie temporale con una piccola pendenza di 0.0005. Il valore medio della serie temporale aumenta da circa 0 a 0.5 dopo 1000 osservazioni. Quindi testiamolo con la funzione adfuller() di statsmodels.tsa.stattools con i parametri predefiniti. Il valore p è 0.01 e il “problema” si ripresenta. La Figura 2 mostra il risultato. Puoi ignorare il titolo e concentrarti sulla tendenza al rialzo. Spiegherò più avanti perché abbiamo valori p da tre diversi test ADF.

Figura 2. Serie temporali sintetiche con risultato del test ADF (immagine dell'autore)

La matematica dietro il test DF

Dobbiamo andare in profondità per vedere cosa sta facendo esattamente il test ADF. Si scopre che il suo background di matematica non è complicato. Innanzitutto, il test ADF è solo una versione avanzata del file Test Dickey-Fuller. Ci sono tre versioni principali del test DF (da Wikipedia):

Versione 1: Test per una radice unitaria: ∆yᵢ = δyᵢ₋₁ + uᵢ

Versione 2: Test per una radice unitaria con costante: ∆yᵢ = a₀ + δyᵢ₋₁ + uᵢ

Versione 3. Test per una radice unitaria con andamento costante e deterministico: ∆yᵢ = a₀ + a₁*t + δyᵢ₋₁ + uᵢ

In ogni versione, l'ipotesi nulla è che esista una radice unitaria, δ=0.

Il pacchetto Statsmodels supporta tutte e tre le versioni con il parametro "regressione".

Per la versione 1, la regressione è 'n' (nessuna costante, nessuna tendenza).

Per la versione 2, la regressione è 'c' (solo costante); Questa è l'impostazione predefinita.

Per la versione 3, la regressione è 'ct' (costante e tendenza).

Ho rieseguito il test con tre diverse impostazioni e di seguito sono riportati i nuovi risultati.

Per la versione 1, il valore p è 0.09. Non dovremmo rifiutare l’ipotesi Nulla.

Per la versione 2, il valore p è 0.01. Lo abbiamo già trattato come un problema perché questa è l'impostazione predefinita.

Per la versione 3, il valore p è 0.00. Ciò è previsto perché la serie temporale lo è davvero stazionario con andamento deterministico.

Quindi per questi dati di esempio, se li testiamo con la versione 1 (regression='n'), non diremo che sono stazionari. Probabilmente non dovremmo usare l'impostazione predefinita. Ma potresti anche chiederti: perché il termine costante ha fatto una così grande differenza in questo caso? Scaviamo di più.

Dal test DF alla regressione lineare

Sulla base della definizione di cui sopra, il test DF è solo una regressione lineare. La Figura 3 mostra tutti i punti per la regressione lineare. L'asse Y è ∆yᵢ, l'asse X è yᵢ₋₁ e uᵢ è il residuo. La versione 1 significa che dobbiamo adattare una linea senza intercetta (nessuna costante). La versione 2 significa che dobbiamo adattare una linea con intercetta (costante).

Figura 3. ∆yᵢ e yᵢ₋₁ (Immagine dell'autore)

Skitlearn LinearRegression supporta bene queste due opzioni con il parametro fit_intercept. Sotto la Figura 4 ci sono le due linee montate. Come puoi vedere, la linea con l'intercetta si adatta meglio della linea senza intercetta. Anche il punteggio R quadrato lo ha confermato chiaramente. Inoltre, nota che la pendenza della linea arancione è inferiore a quella della linea blu. In altre parole, la pendenza della linea arancione è più vicina allo 0.

Figura 4. Risultato della regressione lineare (immagine dell'autore)

Possiamo anche pensare tramite visualizzazione: i punti non sono centrati attorno a (0,0), quindi la linea di regressione adattata non dovrebbe passare (0,0). L'intercetta dovrebbe essere maggiore di 0. Poiché 0 è la media iniziale, ∆y dovrebbe essere maggiore di 0, quindi la media complessiva aumenterà. Se forziamo la linea di regressione a passare per (0,0), i dati saranno insufficienti e la pendenza si avvicinerà allo 0 a causa dell'influenza di (0,0).

Abbiamo visto se l'inclusione degli impatti dell'intercetta si adatta alla regressione lineare. Perché il modo in cui viene adattata una linea influisce sui risultati del test ADF e da dove proviene il valore p?

Dalla regressione lineare al valore p

Ora è dove diventa un po’ complicato. Il valore p finale del test DF non deriva dal valore p dei coefficienti della regressione lineare. Fondamentalmente, la statistica ha una distribuzione specifica nota come tabella Dickey-Fuller. Quindi utilizziamo il valore p approssimativo di MacKinnon per la statistica del test. Potresti trovare i dettagli in Codice sorgente di Statsmodels.

Perché l'ipotesi nulla è δ=0, il che significa che testare la pendenza della retta adattata è 0. Non è necessario entrare nei dettagli su come ottenere il valore p. La catena logica dell'associazione tra il valore p e la pendenza (δ nella regressione lineare, non la pendenza del trend) è così:

Generalmente, se la pendenza è lontana da 0, il valore p dovrebbe essere più piccolo, più probabilmente rifiutando l’ipotesi nulla e suggerendo l’assenza di radice unitaria e stazionario. Se la pendenza è 0 o molto vicina a 0, il valore p dovrebbe essere più alto, accettando più probabilmente l'ipotesi nulla e suggerendo una radice unitaria e non stazionario. Per il secondo scenario, Wikipedia afferma: "I test hanno un basso potere statistico in quanto spesso non sono in grado di distinguere tra veri processi a radice unitaria (δ = 0) e processi a radice unitaria vicina (δ è vicino a 0)". Ecco perché abbiamo il problema in primo luogo. Abbiamo a che fare con un processo quasi unitario. La versione 1 trova una radice unitaria e la versione 2 non riesce a trovare una radice unitaria.

Perché la versione 1 funziona per l'esempio sopra?

La versione 1 funziona per i dati nella Figura 2 perché avviciniamo la pendenza a 0, quindi il valore p è più alto.

Tuttavia, non possiamo utilizzare la versione 1 come impostazione predefinita. Esistono due casi per la versione 1 (forzare la linea a passare attraverso (0,0)):

Caso 1: (0,0) è più vicino a tutti i punti dati. Se la linea deve passare per (0,0), allora la linea sarà più piatta e la pendenza si avvicinerà allo 0. La Figura 4 illustra questo caso. Tieni presente che la dimostrazione nella Figura 4 si adatta solo a una variabile yᵢ₋₁, l'ADF effettivo si adatterà a più variabili di ritardo.

Caso 2: (0,0) è lontano da tutti i punti dati. Se la linea deve passare per (0,0), potremmo fallire l'adattamento; essenzialmente, la pendenza è 0, il che significa che non possiamo trovare una relazione lineare tra ∆yᵢ e yᵢ₋₁ tale che una linea passi (0,0) e copra la maggior parte dei punti dati. Pertanto, il risultato del test sarà sbilanciato verso la presenza di un'unità radice.

La Figura 5 di seguito mostra un esempio del test della Versione 1 che non riesce a rifiutare l'ipotesi nulla (valore p 0.6) e i dati sono stazionari con una media di 10. La Figura 6 spiega il motivo. Come puoi vedere, non possiamo trovare una linea senza intercetta (R al quadrato è 0), quindi la pendenza della linea adattata è 0 (∆yᵢ non dipende da yᵢ₋₁).

Figura 5. La versione 1 non è riuscita a riconoscere una serie temporale stazionaria (immagine dell'autore)
Figura 6. La regressione lineare non riesce a trovare una linea senza intercetta (passando (0,0)) (Immagine dell'autore)

Dal test DF al test ADF

Ora comprendiamo che il test DF è una regressione lineare e come ottenere il valore p dalla regressione lineare, passiamo all'ADF. La formula dell'ADF è:

Ancora una volta, regressione lineare. La parte “Aumentata” è che dobbiamo adattare più coefficienti.

Il pacchetto statsmodels consente di mostrare un riepilogo dettagliato del test AFT. La Figura 7 è il risultato.

Figura 7. Test ADF con un riepilogo dettagliato (immagine dell'autore)

Vediamo "Regressione OLS" (la soluzione predefinita per la regressione lineare) e 17 coefficienti. Non ho specificato il ritardo massimo, quindi il test proverà fino a un numero basato sulla lunghezza della serie temporale, ovvero 17.

Viene adattato anche il const (intercetta). Il valore è 0.0596.

Proviamo a implementare il test ADF utilizzando la regressione lineare in Scikit-learn. La Figura 8 è il codice e l'output.

Figura 8. Test ADF (solo la parte di regressione lineare) con Scikit-learn (immagine dell'autore)

L'intercetta è 0.0596 e gli altri coefficienti sono gli stessi della Figura 7. La regressione lineare in Scikit-learn è semplicemente OLS. Stiamo facendo la stessa cosa, quindi non sorprende che i risultati siano identici.

La fine del viaggio

Dopo aver capito come impostare il parametro, ho testato la serie temporale originale nella Figura 1 utilizzando la versione 1 (regressione ='n') e ho ottenuto il valore p di 0.08, suggerendo che non è stazionario. Tieni presente che i dati nella Figura 1 hanno media zero, quindi puoi immaginare che (0,0) sia più vicino ai punti dati (∆yᵢ, yᵢ₋₁). Usare il test della versione 1 ci aiuterà.

Poiché la pendenza del trend nella Figura 1 è minima, possiamo anche ricampionare la serie temporale con passaggi, che aumentano la pendenza. Ad esempio, se lo provo con quattro passaggi ( value[::4] ), non supererà il test ADF con l'impostazione predefinita (il valore p è 0.17 per regression='c').

Problema risolto.

Takeaways

Non fidarti ciecamente dei risultati dell'ADF. La visualizzazione è tua amica.

Il test ADF è una semplice regressione lineare e l'implementazione dei modelli statistici utilizza OLS per risolvere il problema della regressione. Quindi utilizza la tabella Dickey-Fuller per estrarre il valore p che convalida l'ipotesi nulla secondo cui il coefficiente della prima variabile ritardo della regressione adattata è 0.

Il test ADF presenta limitazioni quando si testano i processi di radice unitaria vicina (δ è vicino a 0).

Dobbiamo scegliere di conseguenza la versione ADF corretta. Ad esempio, quando vedi un trend costante e desideri testare il "trend stazionario", devi selezionare "ct" come parametro. Se intendi rilevare una tendenza lenta per un segnale la cui media dovrebbe essere 0 come nella Figura 1 e nella Figura 2, forse devi selezionare "n" come parametro per evitare l'impatto dell'adattamento dell'intercetta. I modelli statistici supportano anche il trend quantico con il parametro 'ctt.' Questa opzione avanzata potrebbe essere una buona scelta in alcuni casi. Nel caso in cui desideri approfondire, fai riferimento a Gestire l'incertezza sull'inclusione dell'intercetta e dei termini di tendenza temporale deterministica.

Spero che tu abbia imparato qualcosa sul test ADF.

Divertiti con le tue serie temporali!

Contattatemi LinkedIn.

PS: ho esperienza e passione per i dati delle serie temporali. Se ti piace questo articolo, potrebbe interessarti anche il mio altro post sulle serie temporali.

Riferimenti

File del taccuino su GitHub

Perché questa serie temporale di tendenza è stazionaria? Ripubblicato dalla fonte https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 tramite https://towardsdatascience.com/feed

<!–

->

Timestamp:

Di più da Consulenti Blockchain