Come eseguire un test kpss in python
Un test KPSS può essere utilizzato per determinare se una serie temporale ha un trend stazionario.
Questo test utilizza la seguente ipotesi nulla e alternativa:
- H 0 : La serie storica ha un andamento stazionario.
- H A : La serie storica non ha un andamento stazionario.
Se il p-value del test è inferiore ad un certo livello di significatività (es. α = 0,05), allora rifiutiamo l’ipotesi nulla e concludiamo che la serie storica non ha un trend stazionario.
Altrimenti non riusciremo a rifiutare l’ipotesi nulla.
Gli esempi seguenti mostrano come eseguire un test KPSS in Python.
Esempio 1: test KPSS in Python (con dati stazionari)
Innanzitutto, creiamo alcuni dati falsi in Python con cui lavorare:
import numpy as np
import matplotlib. pyplot as plt
#make this example reproducible
n.p. random . seed ( 1 )
#create time series data
data = np. random . normal (size= 100 )
#create line plot of time series data
plt. plot (data)
Possiamo utilizzare la funzione kpss() dal pacchetto statsmodels per eseguire un test KPSS su questi dati di serie temporali:
import statsmodels. api as sm
#perform KPSS test
sm. tsa . stattools . kpss (data, regression=' ct ')
(0.0477617848370993,
0.1,
1,
{'10%': 0.119, '5%': 0.146, '2.5%': 0.176, '1%': 0.216})
InterpolationWarning: The test statistic is outside of the range of p-values available
in the look-up table. The actual p-value is greater than the p-value returned.
Ecco come interpretare il risultato:
- La statistica del test KPSS: 0,04776
- Il valore p: 0,1
- Il parametro di offset del troncamento: 1
- Valori critici al 10% , 5% , 2,5% e 1%
Il valore p è 0,1 . Poiché questo valore non è inferiore a 0,05, non riusciamo a rifiutare l’ipotesi nulla del test KPSS.
Ciò significa che possiamo assumere che la serie storica abbia un andamento stazionario.
Nota 1 : il valore p in realtà è ancora maggiore di 0,1, ma il valore più basso prodotto dalla funzione kpss() è 0,1.
Nota 2 : è necessario utilizzare l’argomento regression=’ct’ per specificare che l’ipotesi nulla del test è che i dati abbiano un trend stazionario.
Esempio 2: test KPSS in Python (con dati non stazionari)
Innanzitutto, creiamo alcuni dati falsi in Python con cui lavorare:
import numpy as np
import matplotlib. pyplot as plt
#make this example reproducible
n.p. random . seed ( 1 )
#create time series data
data =np. array ([0, 3, 4, 3, 6, 7, 5, 8, 15, 13, 19, 12, 29, 15, 45, 23, 67, 45])
#create line plot of time series data
plt. plot (data)
Ancora una volta, possiamo utilizzare la funzione kpss() del pacchetto statsmodels per eseguire un test KPSS su questi dati di serie temporali:
import statsmodels. api as sm
#perform KPSS test
sm. tsa . stattools . kpss (data, regression=' ct ')
(0.15096358910843685,
0.04586367574296928,
3,
{'10%': 0.119, '5%': 0.146, '2.5%': 0.176, '1%': 0.216})
Ecco come interpretare il risultato:
- La statistica del test KPSS: 0,1509
- Il valore p: 0,0458
- Il parametro di offset del troncamento: 3
- Valori critici al 10% , 5% , 2,5% e 1%
Il valore p è 0,0458 . Essendo questo valore inferiore a 0,05, rifiutiamo l’ipotesi nulla del test KPSS.
Ciò significa che la serie storica non è stazionaria.
Nota : puoi trovare la documentazione completa per la funzione kpss() nel pacchetto statsmodels qui .
Risorse addizionali
I seguenti tutorial forniscono informazioni aggiuntive su come lavorare con i dati delle serie temporali in Python:
Come eseguire un test Dickey-Fuller aumentato in Python
Come eseguire un test di tendenza di Mann-Kendall in Python
Come tracciare una serie temporale in Matplotlib