Accueil / Factory / Algos ML / Décomposition STL — factory / algos ML / analyse de séries temporelles

DÉCOMPOSITION STL.

Une méthode qui sépare une série en trois morceaux : la tendance de fond, le cycle qui se répète et le reste. On voit alors ce que le cycle masquait : un changement de niveau, une dérive, des pics isolés. STL (Seasonal-Trend decomposition using Loess) est robuste aux valeurs aberrantes et s'applique à n'importe quelle période : jour, semaine, année.

Séries temporellesSaisonnalitéDétection d'anomaliesAnalyseNiveau : intermédiaire

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceDécomposition fiable, qui sert de base à l'analyse et à la prévision
InterprétabilitéTrois courbes que tout le monde comprend
VitesseQuelques secondes, même sur des années de données horaires
Facilité de réglagePériode à donner, fenêtres de lissage souvent laissées par défaut
Tolérance aux données brutesVersion robuste peu sensible aux pics, mais dates régulières exigées
EN 30 SECONDES

Une photo de groupe où l'on retire successivement le décor et la foule pour ne garder que la personne qui fait une grimace. La tendance est le décor, le cycle la foule, le reste la grimace.

1. On estime le cycle

Pour chaque position du cycle (chaque heure de la journée, par exemple), on lisse les valeurs observées d'un cycle à l'autre. On obtient le profil saisonnier.

2. On estime la tendance

Sur la série privée de son cycle, un lissage local (loess) dégage le niveau de fond. On répète ces deux étapes jusqu'à stabilisation.

3. On lit le reste

Série = tendance + saison + reste. Le reste doit ressembler à du bruit ; ce qui en dépasse nettement est une anomalie. En version robuste, les points aberrants sont repérés et n'influencent plus la tendance ni la saison.

LE CAS MÉTIER

maintenance · industrie / énergie / bâtiment
EN ENTRÉE

2 000 heures de température d'une machine

Une mesure par heure, avec un cycle quotidien marqué qui masque le reste : quelques pics anormaux, et un changement de niveau fin février qu'on devine mal sur la courbe brute.

EN SORTIE

Trois courbes et une liste d'heures anormales

La tendance fait apparaître le saut de niveau du 28 février, net une fois le cycle retiré. Les pics isolés ressortent dans le reste et sont listés avec leur horodatage. La force de la saisonnalité chiffre le poids du cycle quotidien.

CE QU'ON MESURE

La lecture du reste

Pas de métrique de précision : on vérifie que le reste ressemble à du bruit, sans cycle ni tendance résiduels. Les anomalies se jugent ensuite avec les équipes de maintenance : capteur défaillant ou vrai incident.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Comprendre une série avant de la prévoir : poids du cycle, tendance, points atypiques
  • Retirer la saisonnalité pour comparer des périodes (données corrigées des variations saisonnières)
  • Détecter des anomalies ou des ruptures masquées par un cycle quotidien, hebdomadaire ou annuel
  • Préparer une prévision : on prévoit la série désaisonnalisée, puis on rajoute le cycle

NON

  • Prévoir directement : STL décrit le passé, il faut un modèle de prévision ensuite (Holt-Winters, ARIMA, ou STL suivi d'une prévision)
  • Plusieurs cycles imbriqués (jour et semaine) : utiliser MSTL, qui enchaîne plusieurs STL
  • Dater précisément une rupture : la tendance lisse la marche sur plusieurs heures, compléter par une détection de ruptures
  • Cycle multiplicatif (amplitude proportionnelle au niveau) : passer d'abord au logarithme
LES 4 RÉGLAGES QUI COMPTENT

Noms donnés pour R (stl, base) et Python (statsmodels).

frequency / period

La longueur du cycle, en nombre de points : 24 pour un cycle quotidien en données horaires, 7 pour une semaine en journalier, 12 pour une année en mensuel. En R, elle se déclare dans ts().

s.window / seasonal

La souplesse du profil saisonnier. En R, "periodic" impose un cycle identique sur toute la série. En Python, seasonal (7 par défaut, impair) fixe sur combien de cycles le profil est lissé : plus grand, plus stable.

t.window / trend

La souplesse de la tendance. Plus la fenêtre est courte, plus la tendance suit les changements rapides, au risque d'absorber une partie du bruit. La valeur par défaut convient le plus souvent.

robust

À activer dès que la série contient des pics ou des erreurs : les points aberrants reçoivent un poids faible et se retrouvent dans le reste, au lieu de déformer la tendance et la saison.

LE CODE MINIMAL

jeu d'exemple : capteurs_machine.csv ↓
# Surveillance machine : décomposition STL en R
capteurs <- read.csv("capteurs_machine.csv")
temp <- ts(capteurs$temperature, frequency = 24)  # cycle de 24 heures

# robust = TRUE : les pics isolés ne déforment ni la tendance ni la saison
dec <- stl(temp, s.window = "periodic", robust = TRUE)
comp <- dec$time.series

# Force de la saisonnalité : part de la variation expliquée par le cycle (0 à 1)
force <- max(0, 1 - var(comp[, "remainder"]) / var(comp[, "seasonal"] + comp[, "remainder"]))
cat("Force de la saisonnalité :", round(force, 2), "\n")

# Tendance moyenne par jour autour du 28 février : le saut de niveau apparaît sans le cycle
jours <- substr(capteurs$horodatage, 1, 10)
tendance <- tapply(as.numeric(comp[, "trend"]), jours, mean)
print(round(tendance[names(tendance) >= "2025-02-24" & names(tendance) <= "2025-03-04"], 1))

# Anomalies : restes au-delà de 6 écarts-types robustes (mad)
reste <- as.numeric(comp[, "remainder"])
anomalies <- which(abs(reste) > 6 * mad(reste))
cat(length(anomalies), "heures anormales\n")
print(data.frame(horodatage = capteurs$horodatage[anomalies], reste = round(reste[anomalies], 1)))

QUESTIONS FRÉQUENTES

Que signifie STL ?

Seasonal and Trend decomposition using Loess : décomposition en saison et tendance par régression locale (loess). La méthode a été publiée en 1990 par Cleveland et ses coauteurs, et elle est disponible en standard dans R.

Quelle différence entre STL et la décomposition classique ?

La décomposition classique utilise des moyennes mobiles et impose un profil saisonnier identique chaque année. STL laisse la saison évoluer lentement, accepte n'importe quelle période et possède une version robuste aux valeurs aberrantes.

Comment désaisonnaliser une série avec STL ?

On retire la composante saisonnière de la série : série désaisonnalisée = série - saison. Il reste la tendance et le reste, ce qui permet de comparer des mois ou des heures différents sans l'effet du cycle.

LES ALGOS VOISINS

à comparer avant de choisir
pour dater un changement

Détection de ruptures

Trouve les instants où le niveau ou la variance change. Complète STL, dont la tendance lisse les marches.

Voir la fiche →
la décomposition qui prévoit

Prophet

Décompose aussi en tendance et saisons, puis prolonge chaque composante pour prévoir.

Voir la fiche →
la décomposition du pauvre

Moyenne mobile

Une moyenne mobile sur un cycle complet donne une tendance. Plus simple, mais sensible aux pics et sans profil saisonnier.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →