Modèle SARIMA (Seasonal ARIMA)

Le modèle SARIMA (Seasonal AutoRegressive Integrated Moving Average) est une extension du modèle ARIMA qui prend en compte les variations saisonnières dans les séries temporelles. Il est particulièrement utile pour les séries temporelles qui présentent des cycles ou des patterns saisonniers réguliers (par exemple, les données mensuelles, trimestrielles ou hebdomadaires).

Le modèle SARIMA combine des termes ARIMA classiques avec des termes saisonniers pour modéliser les comportements saisonniers dans les séries temporelles.

Composants du modèle SARIMA

Le modèle SARIMA est noté de la manière suivante :

SARIMA(p,d,q)×(P,D,Q)s\text{SARIMA}(p, d, q) \times (P, D, Q)_s

où :

Composants saisonniers de SARIMA

Les termes saisonniers

PP

,

DD

, et

QQ

correspondent à la même logique que pour ARIMA mais appliqués à la saisonnalité (par exemple, une saisonnalité annuelle pour les données mensuelles).

  1. AR saisonnier (P) : Comportement autorégressif observé à une période saisonnière.

  2. MA saisonnier (Q) : Moyenne mobile appliquée à une période saisonnière.

  3. Différence saisonnière (D) : Différence appliquée pour rendre la série stationnaire saisonnièrement (par exemple, en soustrayant une valeur d’il y a 12 mois pour les séries mensuelles).

Étapes pour appliquer un modèle SARIMA

  1. Stationnarité :

    • Comme pour ARIMA, il faut vérifier si la série est stationnaire. Si la série n’est pas stationnaire, vous pouvez appliquer des différences saisonnières pour la rendre stationnaire.

  2. Identification des paramètres :

    • Utilisez les graphiques ACF (autocorrélation) et PACF (autocorrélation partielle) pour identifier les paramètres saisonniers (AR, MA) et non saisonniers.

    • Identifiez également la longueur de la saison (s).

  3. Ajustement du modèle :

    • Ajustez le modèle SARIMA aux données en estimant les paramètres saisonniers et non saisonniers.

  4. Validation du modèle :

    • Vérifiez les résidus du modèle pour vous assurer qu’ils ne contiennent pas d’informations non capturées par le modèle.

  5. Prévision :

    • Utilisez le modèle ajusté pour effectuer des prévisions saisonnières.

Fonctions :

  • SARIMAX()

    La fonction SARIMAX() de statsmodels permet d'ajuster un modèle SARIMAX à une série temporelle.

    Importation :

    from statsmodels.tsa.statespace.sarimax import SARIMAX

    Attributs :

    Nom Type Description
    order tuple (p, d, q) Le paramètre `order` spécifie l'ordre du modèle ARIMA standard. `p` est l'ordre de l'auto-régression, `d` est le nombre de différenciations nécessaires pour rendre la série stationnaire, et `q` est l'ordre de la moyenne mobile.
    seasonal_order tuple (P, D, Q, s) Le paramètre `seasonal_order` définit la partie saisonnière du modèle. `P` est l'ordre de l'auto-régression saisonnière, `D` est le nombre de différenciations saisonnières, `Q` est l'ordre de la moyenne mobile saisonnière, et `s` est la longueur de la saisonnalité (par exemple, 12 pour une saisonnalité mensuelle sur 1 an).
    exog array-like, optionnel Variables exogènes à inclure dans le modèle. Par exemple, des facteurs externes qui peuvent influencer la série temporelle (ex. : politiques économiques, promotions, etc.).
    trend str, optionnel Spécifie le type de tendance à utiliser dans le modèle (par défaut, aucune tendance). Les valeurs possibles sont 'n' (pas de tendance), 'c' (constante), 't' (tendance linéaire) et 'ct' (constante et tendance).

    Exemple de code :

    from statsmodels.tsa.statespace.sarimax import SARIMAX
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    # Création d'une série temporelle d'exemple avec des tendances saisonnières
    np.random.seed(0)
    dates = pd.date_range('2020-01-01', periods=100, freq='D')
    data = np.sin(np.linspace(0, 20, 100)) + 0.1 * np.random.normal(size=100)  # Série avec une tendance saisonnière et un bruit
    
    # Création d'une DataFrame
    series = pd.Series(data, index=dates)
    
    # Définir l'ordre du modèle SARIMAX (p, d, q) et (P, D, Q, s)
    # Ici, p=1, d=1, q=1 pour la partie ARIMA et P=1, D=1, Q=1, s=7 pour la saisonnalité hebdomadaire (7 jours)
    model = SARIMAX(series, order=(1, 1, 1), seasonal_order=(1, 1, 1, 7))
    
    # Ajustement du modèle SARIMAX
    fitted_model = model.fit()
    
    # Affichage des résultats du modèle
    print(fitted_model.summary())
    
    # Prédictions avec le modèle SARIMAX
    forecast = fitted_model.forecast(steps=10)  # Prédire les 10 prochaines valeurs
    
    # Affichage de la série temporelle et des prévisions
    plt.plot(series, label='Données historiques')
    plt.plot(pd.date_range('2020-04-10', periods=10, freq='D'), forecast, label='Prévisions', color='red')
    plt.legend()
    plt.show()
    Résultat du code

    Explication du code :

    Les bibliothèques nécessaires sont importées :

    • SARIMAX de statsmodels.tsa.statespace.sarimax permet de modéliser une série temporelle en prenant en compte la saisonnalité à l’aide du modèle SARIMAX (Seasonal AutoRegressive Integrated Moving Average with eXogenous regressors).
    • pandas pour la gestion des données sous forme de DataFrame.
    • numpy pour les calculs mathématiques et la génération de données aléatoires.
    • matplotlib.pyplot pour créer des visualisations graphiques.
    Création d'une série temporelle d'exemple avec des tendances saisonnières

    Tout d'abord, une graine aléatoire est fixée pour garantir la reproductibilité des résultats. Ensuite, une série de 100 dates est générée, à partir du 1er janvier 2020 avec une fréquence journalière. Une série de données est créée en utilisant la fonction sinus pour générer une tendance saisonnière, à laquelle est ajouté un bruit aléatoire faible.

    Création d'une DataFrame

    Les données générées sont converties en un objet pandas.Series, avec les dates comme index pour former une série temporelle.

    Définir l'ordre du modèle SARIMAX

    Un modèle SARIMAX est défini pour modéliser la série temporelle. Les paramètres sont spécifiés comme suit :

    • order=(1, 1, 1) : il s'agit de l'ordre du modèle ARIMA (AutoRegressive Integrated Moving Average), avec p=1 (autoregressive), d=1 (differencing), q=1 (moving average).
    • seasonal_order=(1, 1, 1, 7) : ce modèle inclut une composante saisonnière avec P=1, D=1, Q=1 et une saisonnalité de période s=7 jours (hebdomadaire).
    Ajustement du modèle SARIMAX

    Le modèle SARIMAX est ensuite ajusté à la série temporelle à l'aide de la méthode fit().

    Affichage des résultats du modèle

    Une fois le modèle ajusté, un résumé des résultats est affiché avec la méthode summary(), contenant des informations détaillées sur les paramètres du modèle, leur significativité, ainsi que les performances du modèle.

    Prédictions avec le modèle SARIMAX

    Le modèle ajusté est utilisé pour prédire les 10 prochaines valeurs de la série temporelle à l'aide de la méthode forecast().

    Affichage de la série temporelle et des prévisions

    Un graphique est tracé pour afficher à la fois les données historiques et les prévisions obtenues avec le modèle SARIMAX. La série historique est représentée en bleu, tandis que les prévisions sont tracées en rouge.