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
en trois composants :
-
Tendance (Trend) : La composante qui représente la direction à long terme de la série.
-
Saisonnalité (Seasonal) : La composante qui représente les variations périodiques dans la série, généralement de manière régulière (ex. : mensuel, hebdomadaire).
-
Résidu (Residual) : Ce qui reste après avoir extrait la tendance et la saisonnalité. Ce composant représente le bruit ou les anomalies.
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 :
-
Lissage saisonnier : STL commence par isoler la composante saisonnière. Il utilise un lissage LOESS pour capturer la saisonnalité de la série.
-
Estimation de la tendance : Après avoir extrait la saisonnalité, la tendance est estimée par un autre lissage LOESS des résidus.
-
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()}")
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.