Série chronologique - Variations d'ARIMA

Dans le chapitre précédent, nous avons maintenant vu comment le modèle ARIMA fonctionne et ses limites, car il ne peut pas gérer les données saisonnières ou les séries chronologiques multivariées et, par conséquent, de nouveaux modèles ont été introduits pour inclure ces fonctionnalités.

Un aperçu de ces nouveaux modèles est donné ici -

Auto-régression vectorielle (VAR)

Il s'agit d'une version généralisée du modèle d'auto-régression pour les séries chronologiques stationnaires multivariées. Il est caractérisé par le paramètre «p».

Moyenne mobile vectorielle (VMA)

Il s'agit d'une version généralisée du modèle de moyenne mobile pour les séries chronologiques stationnaires multivariées. Il est caractérisé par le paramètre «q».

Moyenne mobile de régression automatique vectorielle (VARMA)

C'est la combinaison de VAR et VMA et une version généralisée du modèle ARMA pour les séries temporelles stationnaires multivariées. Il est caractérisé par les paramètres «p» et «q». Tout comme, ARMA est capable d'agir comme un modèle AR en définissant le paramètre 'q' sur 0 et en tant que modèle MA en définissant le paramètre 'p' sur 0, VARMA est également capable d'agir comme un modèle VAR en définissant le paramètre 'q' comme 0 et comme modèle VMA en définissant le paramètre «p» sur 0.

Dans [209]:

df_multi = df[['T', 'C6H6(GT)']]
split = len(df) - int(0.2*len(df))
train_multi, test_multi = df_multi[0:split], df_multi[split:]

Dans [211]:

from statsmodels.tsa.statespace.varmax import VARMAX

model = VARMAX(train_multi, order = (2,1))
model_fit = model.fit()
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\statespace\varmax.py:152: 
   EstimationWarning: Estimation of VARMA(p,q) models is not generically robust, 
   due especially to identification issues. 
   EstimationWarning)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\base\tsa_model.py:171: 
   ValueWarning: No frequency information was provided, so inferred frequency H will be used. 
  % freq, ValueWarning)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\base\model.py:508: 
   ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals 
  "Check mle_retvals", ConvergenceWarning)

Dans [213]:

predictions_multi = model_fit.forecast( steps=len(test_multi))
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\base\tsa_model.py:320: 
   FutureWarning: Creating a DatetimeIndex by passing range endpoints is deprecated.  Use `pandas.date_range` instead.
   freq = base_index.freq)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\statespace\varmax.py:152: 
   EstimationWarning: Estimation of VARMA(p,q) models is not generically robust, due especially to identification issues.
   EstimationWarning)

Dans [231]:

plt.plot(train_multi['T'])
plt.plot(test_multi['T'])
plt.plot(predictions_multi.iloc[:,0:1], '--')
plt.show()

plt.plot(train_multi['C6H6(GT)'])
plt.plot(test_multi['C6H6(GT)'])
plt.plot(predictions_multi.iloc[:,1:2], '--')
plt.show()

Le code ci-dessus montre comment le modèle VARMA peut être utilisé pour modéliser des séries chronologiques multivariées, bien que ce modèle ne soit peut-être pas le mieux adapté à nos données.

VARMA avec variables exogènes (VARMAX)

C'est une extension du modèle VARMA où des variables supplémentaires appelées covariables sont utilisées pour modéliser la variable principale qui nous intéresse.

Moyenne mobile saisonnière intégrée auto-régressive (SARIMA)

Il s'agit de l'extension du modèle ARIMA pour traiter les données saisonnières. Il divise les données en composantes saisonnières et non saisonnières et les modélise de la même manière. Il est caractérisé par 7 paramètres, pour les paramètres de la partie non saisonnière (p, d, q) comme pour le modèle ARIMA et pour les paramètres de la partie saisonnière (P, D, Q, m) où 'm' est le nombre de périodes saisonnières et P, D, Q sont similaires aux paramètres du modèle ARIMA. Ces paramètres peuvent être calibrés à l'aide de la recherche de grille ou d'un algorithme génétique.

SARIMA avec variables exogènes (SARIMAX)

Il s'agit de l'extension du modèle SARIMA pour inclure des variables exogènes qui nous aident à modéliser la variable qui nous intéresse.

Il peut être utile de faire une analyse de co-relation sur des variables avant de les placer comme variables exogènes.

Dans [251]:

from scipy.stats.stats import pearsonr
x = train_multi['T'].values
y = train_multi['C6H6(GT)'].values

corr , p = pearsonr(x,y)
print ('Corelation Coefficient =', corr,'\nP-Value =',p)
Corelation Coefficient = 0.9701173437269858
P-Value = 0.0

La corrélation de Pearson montre une relation linéaire entre 2 variables, pour interpréter les résultats, nous regardons d'abord la valeur p, si elle est inférieure à 0,05 alors la valeur du coefficient est significative, sinon la valeur du coefficient n'est pas significative. Pour une valeur p significative, une valeur positive du coefficient de corrélation indique une corrélation positive et une valeur négative indique une corrélation négative.

Par conséquent, pour nos données, «température» et «C6H6» semblent avoir une corrélation très positive. Par conséquent, nous allons

Dans [297]:

from statsmodels.tsa.statespace.sarimax import SARIMAX

model = SARIMAX(x, exog = y, order = (2, 0, 2), seasonal_order = (2, 0, 1, 1), enforce_stationarity=False, enforce_invertibility = False)
model_fit = model.fit(disp = False)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\base\model.py:508: 
   ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
   "Check mle_retvals", ConvergenceWarning)

Dans [298]:

y_ = test_multi['C6H6(GT)'].values
predicted = model_fit.predict(exog=y_)
test_multi_ = pandas.DataFrame(test)
test_multi_['predictions'] = predicted[0:1871]

Dans [299]:

plt.plot(train_multi['T'])
plt.plot(test_multi_['T'])
plt.plot(test_multi_.predictions, '--')

Sortie [299]:

[<matplotlib.lines.Line2D at 0x1eab0191c18>]

Les prédictions ici semblent prendre de plus grandes variations maintenant par opposition à la modélisation ARIMA univariée.

Il va sans dire que SARIMAX peut être utilisé comme modèle ARX, MAX, ARMAX ou ARIMAX en définissant uniquement les paramètres correspondants sur des valeurs non nulles.

Moyenne mobile intégrée auto-régressive fractionnaire (FARIMA)

Parfois, il peut arriver que notre série ne soit pas stationnaire, mais la différenciation avec le paramètre «d» prenant la valeur 1 peut la surdifférer. Nous devons donc différencier la série chronologique en utilisant une valeur fractionnaire.

Dans le monde de la science des données, il n'y a pas de modèle supérieur, le modèle qui fonctionne sur vos données dépend grandement de votre ensemble de données. La connaissance de divers modèles nous permet de choisir celui qui fonctionne sur nos données et d'expérimenter avec ce modèle pour obtenir les meilleurs résultats. Et les résultats doivent être considérés comme des tracés ainsi que des métriques d'erreur, parfois une petite erreur peut également être mauvaise, par conséquent, le traçage et la visualisation des résultats sont essentiels.

Dans le prochain chapitre, nous examinerons un autre modèle statistique, le lissage exponentiel.