Accueil / Factory / Algos ML / Temporal Fusion Transformer — factory / algos ML / prévision de séries temporelles

TEMPORAL FUSION TRANSFORMER.

Un réseau de neurones de prévision qui combine l'historique de plusieurs séries, des variables connues à l'avance (calendrier, promotions, prix) et des caractéristiques fixes de chaque série. Il rend une fourchette de quantiles sur tout l'horizon, ce qui en fait un outil de dimensionnement des stocks, des effectifs et des capacités.

PrévisionMulti-horizonQuantilesDeep learningVariables explicativesNiveau : avancé

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceParmi les meilleurs quand les variables externes pèsent
InterprétabilitéPoids d'attention et importance des variables consultables
VitesseEntraînement lourd, GPU conseillé au-delà de quelques milliers de séries
Facilité de réglageBeaucoup d'hyperparamètres, sensible à leur choix
Tolérance aux données brutesDates régulières, variables futures à fournir sur tout l'horizon
EN 30 SECONDES

Un planificateur qui relit l'historique de chaque référence, garde un œil sur le calendrier des promotions à venir, sait que telle pièce équipe un vieux modèle, et donne pour chaque semaine un chiffre central et un chiffre prudent.

1. Trois familles d'entrées

Le passé observé (ventes, stocks), le futur connu (calendrier, promotions planifiées, prix) et les caractéristiques fixes de la série (référence, famille, magasin).

2. Le tri des variables

Des réseaux de sélection donnent un poids à chaque variable. Celles qui n'aident pas sont atténuées, et ces poids se consultent après l'entraînement.

3. La mémoire puis l'attention

Une couche récurrente (LSTM) résume l'enchaînement des semaines. L'attention va ensuite chercher les semaines passées les plus utiles pour chaque semaine à prévoir.

4. Des quantiles plutôt qu'un chiffre

Le modèle sort plusieurs quantiles à chaque horizon, par exemple 10 %, 50 % et 90 %. Le P90 est la demande qui ne sera dépassée qu'une semaine sur dix.

LE CAS MÉTIER

supply chain · pièces détachées / après-vente / maintenance
EN ENTRÉE

Trois ans de demande par référence

156 semaines de sorties de stock pour 3 références, avec beaucoup de semaines à zéro. Le mois de l'année sert de variable connue à l'avance. Ce jeu est volontairement réduit : en production, le TFT se justifie sur des centaines de références, et doit battre Croston pour être retenu.

EN SORTIE

Une fourchette par semaine et par pièce

Pour chacune des 8 semaines suivantes : la demande médiane et le P90. Le stock de sécurité se cale sur l'écart entre les deux, selon le taux de service visé.

CE QU'ON MESURE

La perte quantile et le taux de couverture

On vérifie que la demande réelle dépasse le P90 environ une semaine sur dix, pas plus. Au-delà, le stock sera trop court ; bien en dessous, il est surdimensionné. La perte quantile résume cette qualité en un seul chiffre.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Beaucoup de séries liées : références, magasins, entrepôts, à prévoir avec un seul modèle
  • Variables connues à l'avance qui pèsent : promotions, prix, jours fériés, calendrier d'ouverture
  • Besoin d'une fourchette pour dimensionner un stock, un effectif ou une capacité
  • Horizon de plusieurs semaines produit d'un bloc

NON

  • Une poignée de séries courtes : trop de paramètres, préférer SARIMAX ou un lissage exponentiel
  • Demande très intermittente sur peu de pièces : Croston reste plus simple et souvent aussi bon
  • Variables futures inconnues au moment de prévoir : le modèle ne peut pas les deviner
  • Pas de GPU ni d'équipe deep learning pour le maintenir : un gradient boosting sur variables de calendrier est plus robuste
LES 4 RÉGLAGES QUI COMPTENT

Noms donnés pour darts (Python). pytorch-forecasting propose le même modèle sous d'autres noms (max_encoder_length, max_prediction_length).

input_chunk_length / output_chunk_length

La fenêtre d'historique lue (ici 26 semaines) et l'horizon produit d'un bloc (8 semaines). L'horizon suit le délai de réapprovisionnement.

hidden_size

La taille interne du réseau. 16 à 64 sur des données d'entreprise ; plus grand, il récite l'historique.

likelihood

QuantileRegression fixe les quantiles appris (par défaut une large gamme, du 1 % au 99 %). C'est ce qui donne la fourchette.

Variables futures

Calendrier, promotions, prix planifiés, fournis sur tout l'horizon. add_encoders en fabrique automatiquement à partir des dates, comme le mois de l'année ici.

LE CODE MINIMAL

jeu d'exemple : pieces_detachees.csv ↓
# Stock de pièces détachées : Temporal Fusion Transformer en Python (darts)
import numpy as np
import pandas as pd
from darts import TimeSeries
from darts.models import TFTModel
from darts.utils.likelihood_models import QuantileRegression

pieces = pd.read_csv("pieces_detachees.csv", parse_dates=["semaine"])
references = sorted(pieces["reference"].unique())
series = [TimeSeries.from_dataframe(pieces[pieces["reference"] == r], "semaine", "quantite", freq="W-MON").astype(np.float32)
          for r in references]
train = [s[:-8] for s in series]      # on cache les 8 dernières semaines

# Un seul modèle pour toutes les références ; le mois de l'année est une variable connue à l'avance
modele = TFTModel(input_chunk_length=26, output_chunk_length=8, hidden_size=16, num_attention_heads=2,
                  dropout=0.1, n_epochs=100, batch_size=16, likelihood=QuantileRegression(),
                  add_encoders={"cyclic": {"future": ["month"]}}, random_state=42)
modele.fit(train)
previsions = modele.predict(n=8, series=train, num_samples=500)

# Médiane et quantile 90 % de la demande, semaine par semaine
for ref, reel, prev in zip(references, series, previsions):
    scenarios = prev.all_values()[:, 0, :]          # 8 semaines x 500 scénarios
    print(ref, "| réel    :", reel[-8:].values().ravel().astype(int))
    print("        | médiane :", np.median(scenarios, axis=1).round(1))
    print("        | P90     :", np.quantile(scenarios, 0.9, axis=1).round(1))

Le Temporal Fusion Transformer se pratique en Python (darts, pytorch-forecasting) : pas d'implémentation R courante en entreprise.

QUESTIONS FRÉQUENTES

Qu'est-ce qu'une prévision multi-horizon ?

C'est prévoir d'un coup plusieurs périodes à venir, par exemple les 8 prochaines semaines, plutôt qu'une seule. Le TFT produit tout l'horizon en une passe, ce qui évite de réinjecter ses propres prévisions comme entrées et d'accumuler les erreurs.

Pourquoi prévoir des quantiles plutôt qu'une moyenne ?

Parce que les décisions se prennent sur un risque. Pour un stock, on veut la quantité qui couvre la demande 9 semaines sur 10 : c'est le quantile 90 %, pas la moyenne. Le TFT apprend directement ces quantiles avec une perte adaptée.

TFT ou XGBoost pour prévoir des ventes ?

Un gradient boosting sur des variables de calendrier et de décalage (ventes de la semaine précédente, du même mois l'an dernier) est souvent aussi précis et bien plus simple à maintenir. Le TFT prend l'avantage sur de gros volumes de séries, avec des variables futures riches et un besoin de quantiles sur tout l'horizon.

LES ALGOS VOISINS

à comparer avant de choisir
pour la demande intermittente

Croston

Sépare la taille des commandes et l'intervalle entre elles. Simple, robuste, souvent suffisant sur des pièces lentes.

Voir la fiche →
l'alternative statistique

SARIMA / SARIMAX

Accepte aussi des variables externes, série par série. Plus lisible, moins adapté à des centaines de séries.

Voir la fiche →
sans variables externes

N-BEATS

Un réseau de prévision plus simple, qui ne lit que l'historique de la série.

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 →