Modèle ARIMA (AutoRegressive Integrated Moving Average)

Le modèle ARIMA (AutoRegressive Integrated Moving Average) est l’un des modèles les plus utilisés pour l’analyse et la prévision des séries temporelles. Il combine trois composants principaux :

  1. AR (AutoRegressive) : Composante autorégressive qui utilise les valeurs passées de la série temporelle pour prédire les valeurs futures.

  2. I (Integrated) : Composante d’intégration, qui consiste à rendre la série stationnaire en appliquant des différences successives.

  3. MA (Moving Average) : Composante de moyenne mobile qui utilise les erreurs passées de prévision pour ajuster les valeurs futures.

Un modèle ARIMA est souvent noté

ARIMA(p,d,q)ARIMA(p,d,q)

, où :

Étapes pour appliquer un modèle ARIMA

  1. Stationnarité :

    • Vérifiez si la série temporelle est stationnaire. Une série stationnaire a des propriétés statistiques constantes au fil du temps.

    • Si la série n’est pas stationnaire, vous pouvez appliquer une transformation par différence pour la rendre stationnaire.

  2. Identification des paramètres (p, d, q) :

    • p : Le nombre de lags (retards) dans le modèle autorégressif. Vous pouvez déterminer cela en observant l’autocorrélation (ACF) et l’autocorrélation partielle (PACF).

    • d : Le nombre de différences nécessaires pour rendre la série stationnaire.

    • q : Le nombre de termes de moyenne mobile, déterminé aussi par l’analyse de l’ACF.

  3. Ajustement du modèle :

    • Ajustez le modèle ARIMA aux données à l’aide de la méthode des moindres carrés ou de la maximisation de la vraisemblance.

  4. Validation du modèle :

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

  5. Prévision :

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

Fonctions :

  • ARIMA()

    La fonction ARIMA() de statsmodels est utilisée pour ajuster un modèle ARIMA (AutoRegressive Integrated Moving Average) à une série temporelle.

    Importation :

    from statsmodels.tsa.arima.model import ARIMA

    Attributs :

    Nom Type Description
    order tuple (p, d, q) Le paramètre `order` spécifie l'ordre du modèle ARIMA, où `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.
    exog array-like, optionnel Variables exogènes à inclure dans le modèle (facultatif). Elles sont utiles si des facteurs externes influencent la série temporelle.
    trend str, optionnel Modèle de tendance à utiliser. 'n' pour aucune tendance, 'c' pour une constante (intercept), 't' pour une tendance linéaire, 'ct' pour constante et tendance. Par défaut, 'c'.

    Exemple de code :

    from statsmodels.tsa.arima.model import ARIMA
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    # Création d'une série temporelle d'exemple
    np.random.seed(0)
    dates = pd.date_range('2020-01-01', periods=100, freq='D')
    data = np.sin(np.linspace(0, 20, 100)) + np.random.normal(size=100)  # Série avec une tendance et un bruit
    
    # Création d'une DataFrame
    series = pd.Series(data, index=dates)
    
    # Ajustement du modèle ARIMA (1, 1, 1) à la série temporelle
    model = ARIMA(series, order=(1, 1, 1))  # p=1, d=1, q=1
    fitted_model = model.fit()
    
    # Affichage des résultats du modèle
    print(fitted_model.summary())
    
    # Prédictions avec le modèle ARIMA
    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 :

    • ARIMA de statsmodels.tsa.arima.model permet de modéliser une série temporelle en utilisant le modèle ARIMA (AutoRegressive Integrated Moving Average).
    • pandas est utilisé pour la gestion des données sous forme de DataFrame.
    • numpy permet d’effectuer des calculs mathématiques et de générer des données aléatoires.
    • matplotlib.pyplot est utilisé pour créer des visualisations graphiques.
    Création d'une série temporelle d'exemple

    D'abord, une graine aléatoire est fixée pour garantir la reproductibilité des résultats. Ensuite, une séquence de 100 dates est générée, allant du 1er janvier 2020 avec une fréquence journalière. Une série de données est créée à partir de la fonction sinus pour simuler une tendance, à laquelle on ajoute un bruit aléatoire.

    Création d'une DataFrame

    La série de données est convertie en un objet pandas.Series avec les dates comme index.

    Ajustement du modèle ARIMA (1, 1, 1)

    Un modèle ARIMA est ajusté à la série temporelle avec les paramètres (1, 1, 1). Cela signifie que :

    • p=1 : le modèle utilise 1 observation passée pour prédire la valeur actuelle (modèle autorégressif).
    • d=1 : le modèle applique une différence première pour rendre la série temporelle stationnaire.
    • q=1 : le modèle utilise 1 observation de l'erreur passée pour prédire la valeur actuelle (moyenne mobile).

    Le modèle est ensuite ajusté à la série temporelle en utilisant la méthode fit().

    Affichage des résultats du modèle

    Le résumé des résultats du modèle ajusté est affiché à l'écran grâce à la méthode summary(). Ce résumé contient des informations sur les paramètres du modèle, les erreurs estimées, ainsi que les tests de significativité.

    Prédictions avec le modèle ARIMA

    Le modèle ARIMA ajusté est utilisé pour faire des prévisions sur les 10 prochaines valeurs de la série temporelle avec la méthode forecast().

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

    Un graphique est généré pour afficher à la fois les données historiques et les prévisions obtenues avec le modèle ARIMA. La série temporelle est tracée en bleu, tandis que les prévisions sont tracées en rouge.