Comment effectuer un test KPSS en Python
Un test KPSS peut être utilisé pour déterminer si une série chronologique a une tendance stationnaire.
Ce test utilise l’hypothèse nulle et alternative suivante :
- H 0 : La série chronologique est à tendance stationnaire.
- H A : La série temporelle n’est pas tendance stationnaire.
Si la valeur p du test est inférieure à un certain niveau de signification (par exemple α = 0,05), alors nous rejetons l’hypothèse nulle et concluons que la série chronologique n’a pas de tendance stationnaire.
Sinon, nous ne parviendrons pas à rejeter l’hypothèse nulle.
Les exemples suivants montrent comment effectuer un test KPSS en Python.
Exemple 1 : test KPSS en Python (avec données stationnaires)
Tout d’abord, créons de fausses données en Python avec lesquelles travailler :
import numpy as np
import matplotlib.pyplot as plt
#make this example reproducible
np.random.seed(1)
#create time series data
data = np.random.normal(size=100)
#create line plot of time series data
plt.plot(data)
Nous pouvons utiliser la fonction kpss() du package statsmodels pour effectuer un test KPSS sur ces données de série chronologique :
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.
Voici comment interpréter le résultat :
- La statistique du test KPSS : 0,04776
- La valeur p : 0,1
- Le paramètre de décalage de troncature : 1
- Les valeurs critiques à 10 % , 5 % , 2,5 % et 1 %
La valeur p est de 0,1 . Puisque cette valeur n’est pas inférieure à 0,05, nous ne parvenons pas à rejeter l’hypothèse nulle du test KPSS.
Cela signifie que nous pouvons supposer que la série chronologique a une tendance stationnaire.
Remarque 1 : La valeur p est en fait encore supérieure à 0,1, mais la valeur la plus basse que la fonction kpss() produira est 0,1.
Note 2 : Il faut utiliser l’argument regression=’ct’ pour préciser que l’hypothèse nulle du test est que la donnée est tendance stationnaire.
Exemple 2 : test KPSS en Python (avec des données non stationnaires)
Tout d’abord, créons de fausses données en Python avec lesquelles travailler :
import numpy as np
import matplotlib.pyplot as plt
#make this example reproducible
np.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)
Encore une fois, nous pouvons utiliser la fonction kpss() du package statsmodels pour effectuer un test KPSS sur ces données de série chronologique :
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})
Voici comment interpréter le résultat :
- La statistique du test KPSS : 0,1509
- La valeur p : 0,0458
- Le paramètre de décalage de troncature : 3
- Les valeurs critiques à 10 % , 5 % , 2,5 % et 1 %
La valeur p est de 0,0458 . Cette valeur étant inférieure à 0,05, nous rejetons l’hypothèse nulle du test KPSS.
Cela signifie que la série chronologique n’est pas stationnaire.
Remarque : Vous pouvez trouver la documentation complète de la fonction kpss() à partir du package statsmodels ici .
Ressources additionnelles
Les didacticiels suivants fournissent des informations supplémentaires sur la façon de travailler avec des données de séries chronologiques en Python :
Comment effectuer un test Dickey-Fuller augmenté en Python
Comment effectuer un test de tendance Mann-Kendall en Python
Comment tracer une série chronologique dans Matplotlib