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.
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.
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).
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.
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.
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.
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.
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é.
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.
Noms donnés pour darts (Python). pytorch-forecasting propose le même modèle sous d'autres noms (max_encoder_length, max_prediction_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.
La taille interne du réseau. 16 à 64 sur des données d'entreprise ; plus grand, il récite l'historique.
QuantileRegression fixe les quantiles appris (par défaut une large gamme, du 1 % au 99 %). C'est ce qui donne la fourchette.
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.
# 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.
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.
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.
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.
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 statistiqueAccepte aussi des variables externes, série par série. Plus lisible, moins adapté à des centaines de séries.
Voir la fiche → sans variables externesUn réseau de prévision plus simple, qui ne lit que l'historique de la série.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus