Décomposition par Modèle STL

La décomposition STL (Seasonal-Trend decomposition using Loess) est une méthode utilisée pour décomposer une série temporelle en trois composants : la tendance, la saisonnalité et le résidu (bruit). La décomposition STL est particulièrement utile lorsqu’on travaille avec des séries temporelles qui ont des saisons complexes ou non linéaires.

1. Les Composants de la Décomposition STL

STL décompose une série temporelle

yty_t

en trois composants :

La méthode STL est robuste aux variations non linéaires et peut traiter des saisons irrégulières.

2. Méthode de Décomposition STL

STL utilise l’algorithme LOESS (Locally Estimated Scatterplot Smoothing) pour estimer les composants saisonniers et tendanciels de manière lissée. L’idée est de lissage local pour estimer la tendance et la saisonnalité tout en conservant une certaine flexibilité par rapport à des comportements complexes dans les données.

Le processus de décomposition STL se déroule généralement comme suit :

  1. Lissage saisonnier : STL commence par isoler la composante saisonnière. Il utilise un lissage LOESS pour capturer la saisonnalité de la série.

  2. Estimation de la tendance : Après avoir extrait la saisonnalité, la tendance est estimée par un autre lissage LOESS des résidus.

  3. Résidu : Enfin, les résidus sont calculés comme la différence entre les données d’origine et la somme de la tendance et de la saisonnalité.

Fonctions :

  • STL()

    La fonction STL() (Seasonal and Trend decomposition using LOESS) de statsmodels permet de décomposer une série temporelle en ses trois composants principaux : tendance (trend), saisonnalité (seasonal) et résidu (residual), en utilisant la méthode LOESS (Local Polynomial Regression). Cette décomposition est particulièrement utile pour analyser les séries temporelles et pour isoler les effets saisonniers et les tendances sous-jacentes.

    Importation :

    from statsmodels.tsa.seasonal import STL

    Attributs :

    Nom Type Description
    period int La longueur du cycle saisonnier de la série temporelle (par exemple, 12 pour des données mensuelles avec une saisonnalité annuelle).
    seasonal int, optionnel Le degré de lissage saisonnier (par défaut, 7). Cela détermine le nombre de périodes à utiliser dans la décomposition saisonnière.
    trend int, optionnel Le degré de lissage pour la tendance (par défaut, 1).
    robust bool, optionnel Si True, une décomposition robuste est effectuée pour mieux gérer les valeurs aberrantes.
    jump int, optionnel Le pas de la décomposition à effectuer. Cela permet de contrôler le calcul de la tendance et de la saisonnalité en utilisant un sous-échantillon des données.

    Exemple de code :

    from statsmodels.tsa.seasonal import STL
    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 tendance saisonnière
    
    # Création d'une DataFrame
    series = pd.Series(data, index=dates)
    
    # Application de la décomposition STL
    stl = STL(series, period=30)
    result = stl.fit()
    
    # Affichage des résultats
    result.plot()
    plt.show()
    
    # Affichage des composants
    print(f"Tendance: \n{result.trend.head()}")
    print(f"Saisonnalité: \n{result.seasonal.head()}")
    print(f"Résidus: \n{result.resid.head()}")
    Résultat du code

    Explication du code :

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

    • STL de statsmodels.tsa.seasonal permet de réaliser une décomposition saisonnière de séries temporelles.
    • 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 saisonnière, à 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.

    Application de la décomposition STL

    La méthode STL est appliquée à la série temporelle. Le paramètre de période est fixé à 30, ce qui définit la longueur du cycle saisonnier (30 jours). La méthode fit effectue la décomposition de la série en trois composants principaux : la tendance, la saisonnalité et les résidus.

    Affichage des résultats

    Un graphique est généré pour visualiser les trois composants de la décomposition (tendance, saisonnalité, résidus). Ce graphique est ensuite affiché à l'écran.

    Affichage des composants

    Les composants de la décomposition (tendance, saisonnalité et résidus) sont extraits du résultat de la méthode STL et affichés. Le head() est utilisé pour afficher les 5 premières lignes de chaque composant.