Série chronologique - ARIMA
Nous avons déjà compris que pour une série temporelle stationnaire, une variable au temps «t» est une fonction linéaire d'observations antérieures ou d'erreurs résiduelles. Il est donc temps pour nous de combiner les deux et d'avoir un modèle de moyenne mobile auto-régressive (ARMA).
Cependant, parfois la série chronologique n'est pas stationnaire, c'est-à-dire que les propriétés statistiques d'une série comme la moyenne, la variance change avec le temps. Et les modèles statistiques que nous avons étudiés jusqu'à présent supposent que la série chronologique est stationnaire, par conséquent, nous pouvons inclure une étape de pré-traitement de différenciation de la série chronologique pour la rendre stationnaire. Maintenant, il est important pour nous de savoir si la série chronologique à laquelle nous avons affaire est stationnaire ou non.
Diverses méthodes pour trouver la stationnarité d'une série chronologique recherchent la saisonnalité ou la tendance dans le tracé de la série chronologique, vérifiant la différence de moyenne et de variance pour différentes périodes de temps, test de Dickey-Fuller augmenté (ADF), test KPSS, exposant de Hurst, etc. .
Voyons si la variable «température» de notre jeu de données est une série temporelle stationnaire ou non en utilisant le test ADF.
Dans [74]:
from statsmodels.tsa.stattools import adfuller
result = adfuller(train)
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value In result[4].items()
print('\t%s: %.3f' % (key, value))
Statistique ADF: -10.406056
valeur p: 0,000000
Valeurs critiques:
1%: -3,431
5%: -2,862
10%: -2,567
Maintenant que nous avons exécuté le test ADF, interprétons le résultat. Nous allons d'abord comparer la statistique ADF avec les valeurs critiques, une valeur critique inférieure nous indique que la série est très probablement non stationnaire. Ensuite, nous voyons la valeur p. Une valeur de p supérieure à 0,05 suggère également que la série chronologique n'est pas stationnaire.
Alternativement, une valeur p inférieure ou égale à 0,05, ou une statistique ADF inférieure aux valeurs critiques suggèrent que la série chronologique est stationnaire.
Par conséquent, la série chronologique à laquelle nous avons affaire est déjà stationnaire. Dans le cas de séries temporelles stationnaires, nous définissons le paramètre «d» sur 0.
Nous pouvons également confirmer la stationnarité des séries temporelles en utilisant l'exposant de Hurst.
Dans [75]:
import hurst
H, c,data = hurst.compute_Hc(train)
print("H = {:.4f}, c = {:.4f}".format(H,c))
H = 0,1660, c = 5,0740
La valeur de H <0,5 indique un comportement anti-persistant et H> 0,5 indique un comportement persistant ou une série de tendances. H = 0,5 montre une marche aléatoire / un mouvement brownien. La valeur de H <0,5, confirmant que notre série est stationnaire.
Pour les séries temporelles non stationnaires, nous définissons le paramètre «d» sur 1. De plus, la valeur du paramètre de tendance auto-régressive «p» et le paramètre de tendance de moyenne mobile «q» sont calculées sur la série temporelle stationnaire, c'est-à-dire en traçant ACP et PACP après différenciation des séries chronologiques.
Le modèle ARIMA, qui est caractérisé par 3 paramètres, (p, d, q) sont maintenant clairs pour nous, alors modélisons notre série chronologique et prédisons les valeurs futures de la température.
Dans [156]:
from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(train.values, order=(5, 0, 2))
model_fit = model.fit(disp=False)
Dans [157]:
predictions = model_fit.predict(len(test))
test_ = pandas.DataFrame(test)
test_['predictions'] = predictions[0:1871]
Dans [158]:
plt.plot(df['T'])
plt.plot(test_.predictions)
plt.show()
Dans [167]:
error = sqrt(metrics.mean_squared_error(test.values,predictions[0:1871]))
print ('Test RMSE for ARIMA: ', error)
Test RMSE pour ARIMA: 43.21252940234892