Aller au contenu principal

Architecture du réseau de neurones

Eaternity Forecast utilise un réseau de neurones sophistique base sur les transformeurs avec des mécanismes d'attention pour prédire la demande quotidienne des articles de menu des restaurants. Ce document explique l'architecture technique et la méthodologie d'intelligence artificielle.

Aperçu de l'architecture

Type de modèle : Architecture Transformeur

Forecast emploie une architecture transformeur, la même technologie fondamentale qui sous-tend les modèles de langage modernes comme GPT et BERT, adaptee spécifiquement pour la prévision de demande de series temporelles.

Pourquoi les transformeurs pour la prévision de demande ?

Les méthodes de prévision traditionnelles (ARIMA, lissage exponentiel) ont du mal avec :

  • Les relations complexes multi-facteurs
  • Les dépendances temporelles à long terme
  • Les tendances non stationnaires
  • Les cycles saisonniers multiples simultanes

Les transformeurs excellent dans :

  • La reconnaissance de tendances à différentes échelles temporelles (quotidienne, hebdomadaire, saisonnière)
  • Les mécanismes d'attention qui identifient les périodes historiques pertinentes
  • L'intégration multi-facteurs (météo, événements, changements de menu)
  • La gestion des tendances irregulieres (jours fériés, événements spéciaux)

Composants principaux

Couche d'entree

Encodage temporel

Attention multi-tetes (×4 couches)

Reseaux a propagation avant

Projection de sortie

Prevision + Intervalles de confiance

Architecture détaillée

1. Couche d'entrée

Objectif : Transformer les données de ventes brutes et les facteurs externes en représentations numériques

Caractéristiques d'entrée (par article, par jour) :

Caractéristiques des ventes historiques

  • Ventes des 7 derniers jours (quantités quotidiennes)
  • Ventes du même jour de la semaine des 4 semaines precedentes
  • Moyenne des ventes du mois precedent
  • Ventes à la même date l'année précédente (si disponible)

Caractéristiques temporelles

  • Jour de la semaine (encodage one-hot : Lundi=1, Mardi=2, etc.)
  • Semaine de l'année (1-52)
  • Mois (1-12)
  • Est un week-end (binaire : 0/1)
  • Est un jour ferie (binaire : 0/1)

Caractéristiques externes

  • Température (°C, normalisée)
  • Précipitations (mm, normalisées)
  • Prévisions météo du lendemain
  • Événements locaux (indicateurs binaires ou categoriques)

Caractéristiques du menu

  • Catégorie de l'article (entrée, plat, dessert, etc.)
  • Niveau de prix (normalisé)
  • Jours depuis le lancement de l'article (pour les nouveaux articles)
  • Disponibilité de l'article (binaire : 0/1)

Exemple d'ingenierie des caractéristiques :

Vecteur d'entree pour « Pasta Carbonara » le mercredi 20 janvier 2024 :

Ventes historiques :
[52, 48, 45, 51, 49, 0, 0] # 7 derniers jours (0 = ferme)
[49, 51, 48, 52] # 4 derniers mercredis
47.3 # Moyenne du mois dernier

Temporel :
[0, 0, 1, 0, 0, 0, 0] # Jour de la semaine (Mer = position 3)
3 # Semaine de l'annee
1 # Mois (janvier)
0 # Est un week-end
0 # Est un jour ferie

Externe :
8.2 # Temperature (°C)
0.0 # Precipitations
7.5 # Temperature prevue demain

Menu :
[0, 1, 0, 0] # Categorie (Plat principal)
14.50 # Prix (normalise sur l'echelle 0-1)
450 # Jours depuis le lancement
1 # Disponible aujourd'hui

2. Encodage temporel

Objectif : Encoder les tendances basées sur le temps et les relations cycliques

Encodage positionnel :

Utilise des fonctions sinusoidales pour capturer les tendances périodiques :

PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

Ou :

  • pos = position dans la séquence (numero du jour)
  • i = dimension
  • d_model = dimension de l'encodage (256)

Pourquoi l'encodage sinusoidal ?

  • Capture des cycles multiples (quotidien, hebdomadaire, mensuel, annuel)
  • Le modèle apprend quels cycles sont pertinents pour chaque article
  • Permet l'extrapolation au-delà de la période d'entrainement
  • Gère l'espacement irregulier (jours fériés, jours de fermeture)

Exemple :

# Encodage du cycle hebdomadaire pour le jour de la semaine
weekly_encoding = [
sin(day_of_week / 7 * 2π),
cos(day_of_week / 7 * 2π)
]

# Encodage du cycle annuel
annual_encoding = [
sin(day_of_year / 365 * 2π),
cos(day_of_year / 365 * 2π)
]

3. Mecanisme d'attention multi-têtes

Objectif : Identifier quelles périodes historiques sont les plus pertinentes pour la prévision actuelle

Fonctionnement de l'attention :

Le modèle demande : « Pour prédire le déjeuner du mercredi, à quels jours precedents dois-je preter attention ? »

Formule d'attention :

Attention(Q, K, V) = softmax(QK^T / √d_k) V

Ou :

  • Q (Requête) : Ce que nous essayons de prédire (demandé du jour)
  • K (Clés) : Jours historiques à considérer
  • V (Valeurs) : Ventes réelles de ces jours
  • d_k : Dimension des vecteurs de clés

Approche multi-têtes :

Au lieu d'un seul mecanisme d'attention, nous utilisons 8 têtes d'attention paralleles :

  1. Tête 1 : Se concentre sur les tendances du même jour de la semaine

    • « Les mercredis sont similaires aux mercredis precedents »
  2. Tête 2 : Se concentre sur les tendances récentes

    • « La tendance de la semaine dernière continue »
  3. Tête 3 : Se concentre sur les tendances saisonnières

    • « Similaire à cette période l'année dernière »
  4. Tête 4 : Se concentre sur les corrélations météorologiques

    • « Les jours froids comme aujourd'hui ont une demande similaire »
  5. Tête 5 : Se concentre sur les tendances d'événements

    • « Jours avec des événements similaires à proximité »
  6. Tête 6 : Se concentre sur la dynamique du menu

    • « Jours avec une composition de menu similaire »
  7. Tête 7 : Se concentre sur la sensibilité aux prix

    • « Jours avec des stratégies de prix similaires »
  8. Tête 8 : Se concentre sur les tendances à long terme

    • « Direction de la tendance sur plusieurs mois »

Exemple de poids d'attention :

Prevision pour le mercredi 20 janvier 2024 pour Pasta Carbonara :

Attention de la tete 1 (jour de la semaine) aux mercredis precedents :
13 jan (dernier mer) : 0.35 (le plus recent, poids le plus eleve)
6 jan : 0.28
30 dec : 0.18
23 dec : 0.12
Autres mercredis : 0.07

Attention de la tete 2 (tendance recente) aux 7 derniers jours :
19 jan (hier) : 0.42
18 jan : 0.24
17 jan : 0.15
16 jan : 0.10
Plus anciens : 0.09

Attention de la tete 3 (saisonniere) a l'annee derniere :
21 jan 2023 : 0.55 (meme date l'annee derniere)
14-28 jan 2023 : 0.45 (dates environnantes)

4. Réseaux à propagation avant

Objectif : Transformation non linéaire et combinaison des caractéristiques

Architecture :

Entree (256 dimensions)

Couche lineaire 1 (256 → 1024)

Activation ReLU

Abandon (0.1)

Couche lineaire 2 (1024 → 256)

Abandon (0.1)

Connexion residuelle + Normalisation de couche

Pourquoi deux couches ?

  • Expansion (256→1024) : Crée un espace de représentation de haute dimension
  • Compression (1024→256) : Extrait les caractéristiques les plus pertinentes

Régularisation par abandon :

Desactive aleatoirement 10 % des neurones pendant l'entrainement pour prevenir le surapprentissage :

  • Le modèle apprend des tendances robustes, pas une memorisation
  • Améliore la generalisation aux nouvelles données
  • Essentiel pour les petits ensembles de données (certains restaurants, nouveaux articles)

5. Empilement des couches

Quatre blocs transformeurs empiles sequentiellement :

Bloc 1 : Reconnaissance initiale des tendances

Bloc 2 : Extraction affinee des tendances

Bloc 3 : Apprentissage des caracteristiques de haut niveau

Bloc 4 : Representation finale

Chaque bloc contient :

  • Couche d'attention multi-têtes
  • Normalisation de couche
  • Réseau à propagation avant
  • Connexions residuelles

Pourquoi quatre couches ?

Equilibre entre :

  • Complexité : Plus de couches = plus de tendances reconnues
  • Efficacité : Moins de couches = entrainement et inférence plus rapides
  • Risque de surapprentissage : Trop de couches = memorisation au lieu d'apprentissage

Les tests empiriques ont montré que 4 couches sont optimales pour la prévision de demande en restauration.

6. Projection de sortie

Objectif : Convertir la représentation apprise en prévision de quantité

Approche de regression quantile :

Au lieu de prédire une seule valeur, le modèle produit trois quantiles :

Couche lineaire (256 → 3)

Sorties :
- 10e percentile (borne inferieure)
- 50e percentile (mediane/estimation ponctuelle)
- 90e percentile (borne superieure)

Exemple de sortie :

{
"item": "Pasta Carbonara",
"date": "2024-01-20",
"predictions": {
"lower_bound": 45, // 10e percentile
"point_estimate": 52, // 50e percentile (mediane)
"upper_bound": 59 // 90e percentile
}
}

Pourquoi la regression quantile ?

  • Capture naturellement l'incertitude de la prévision
  • Fournit des intervalles de confiance exploitables
  • Plus robuste aux valeurs aberrantes que les approches basées sur la variance
  • S'aligne sur les besoins decisionnels (préparer pour une fourchette, pas une seule valeur)

Processus d'entrainement

Préparation des données

1. Collecte des données

Exigences minimales :

  • 30 jours de données historiques de ventes (90 jours ou plus recommandés)
  • Enregistrements quotidiens complets (pas de lacunes)
  • Quantités par article

2. Prétraitement des données

Normalisation :

# Normalisation z-score pour les quantites
normalized_quantity = (quantity - mean) / std_dev

# Normalisation min-max pour les caracteristiques externes
normalized_temp = (temp - min_temp) / (max_temp - min_temp)

Gestion des valeurs manquantes :

  • Jours de fermeture : Explicitement marques (pas d'imputation)
  • Ventes manquantes : Report si moins de 3 jours consecutifs
  • Données météo : Interpolation à partir des stations voisines

Détection des valeurs aberrantes :

# Identifier et marquer (mais ne pas supprimer) les valeurs aberrantes
z_score = (quantity - rolling_mean) / rolling_std
if abs(z_score) > 3:
flag_as_potential_outlier()

Valeurs aberrantes conservees mais pondérées plus faiblement pendant l'entrainement.

3. Génération de sequences

Créer des sequences d'entrée de longueurs variables :

Contexte court (7 derniers jours) :

[jour-7, jour-6, jour-5, jour-4, jour-3, jour-2, jour-1] → [predire : jour-0]

Contexte moyen (4 dernières semaines) :

[sem-4-meme-jour, sem-3-meme-jour, sem-2-meme-jour, sem-1-meme-jour] → [predire : aujourd'hui]

Contexte long (saisonnier) :

[mois-12-meme-date, mois-6-meme-date, mois-3-meme-date] → [predire : aujourd'hui]

Algorithme d'entrainement

Fonction de perte : Perte quantile

Pour chaque quantile q (0.1, 0.5, 0.9) :

L_q = (q - 1) * erreur  si erreur < 0  (sous-prevision)
q * erreur si erreur ≥ 0 (sur-prevision)

Perte totale = L_0.1 + L_0.5 + L_0.9

Pourquoi cette perte ?

  • Penalise davantage la sous-prévision pour le quantile supérieur (90e)
  • Penalise davantage la sur-prévision pour le quantile inférieur (10e)
  • Équilibrée pour la médiane (50e)
  • Assure l'ordre correct des quantiles (inférieur < médiane < supérieur)

Optimisation

Optimiseur : AdamW (Adam avec decroissance des poids)

Hyperparametres :

learning_rate = 0.001       # Taux d'apprentissage initial
weight_decay = 0.01 # Regularisation L2
beta_1 = 0.9 # Momentum
beta_2 = 0.999 # Taux d'apprentissage adaptatif
epsilon = 1e-8 # Stabilite numerique

Calendrier du taux d'apprentissage : Recuit cosinus avec phase de chauffe

# Phase de chauffe (premiers 10 % de l'entrainement)
lr = initial_lr * (step / warmup_steps)

# Phase de recuit cosinus
lr = min_lr + 0.5 * (max_lr - min_lr) * (1 + cos(π * step / total_steps))

Avantages :

  • La chauffe graduelle previent la divergence precoce
  • La decroissance cosinus permet un affinage près de la fin
  • Les cycles multiples permettent d'echapper aux minima locaux

Itérations d'entrainement

Epoques : 100-200 selon la taille des données

Taille de lot : 32 sequences

Partition de validation : 20 % des données mises de cote

Arret anticipe :

if validation_loss_not_improved_for(patience=15_epochs):
stop_training()
restore_best_model()

Techniques de régularisation

1. Abandon

  • Abandon d'attention : 0.1
  • Abandon de propagation avant : 0.1
  • Abandon d'encodage : 0.05

2. Decroissance des poids

  • Penalite L2 sur les poids : 0.01
  • Empeche les poids de devenir trop grands

3. Lissage des étiquettes

  • Floute légèrement les valeurs cibles
  • Améliore le calibrage des intervalles de confiance

4. Augmentation des données

  • Variation aleatoire des valeurs historiques (±5 %)
  • Simule l'incertitude de mesure
  • Améliore la robustesse

Validation et test

Partition Entrainement/Validation/Test

Donnees historiques (180 jours au total) :
- Entrainement : Jours 1-126 (70 %)
- Validation : Jours 127-162 (20 %)
- Test : Jours 163-180 (10 %)

Validation progressive :

Au lieu d'une partition aleatoire, utiliser une partition temporelle :

  • Entraîner uniquement sur les données passees
  • Valider sur les données futures
  • Previent les fuites de données (utiliser le futur pour prédire le passe)

Métriques de performance

Erreur absolue moyenne en pourcentage (MAPE) :

MAPE = (1/n) * Σ |reel - prevu| / reel * 100 %

Note de calibrage :

Attendu : 80 % des reels dans l'intervalle de confiance
Reel : Compter combien de reels tombent dans [inferieur, superieur]
Calibrage = Couverture reelle / Couverture attendue

Perte quantile :

QL = Σ tous les quantiles (perte quantile comme definie ci-dessus)

Processus d'inférence

Génération quotidienne des prévisions

Calendrier : S'execute automatiquement à 3h00 heure locale

Processus :

  1. Collecte des données (3h00-3h05)

    • Recuperer les données de ventes finales de la veille
    • Recuperer les prévisions météo pour les 7 prochains jours
    • Vérifier le calendrier des événements pour les dates à venir
    • Charger la configuration actuelle du menu
  2. Ingenierie des caractéristiques (3h05-3h10)

    • Calculer les moyennes mobiles et les tendances
    • Encoder les caractéristiques temporelles
    • Normaliser les variables externes
    • Créer les sequences d'entrée
  3. Inférence du modèle (3h10-3h15)

    • Passage avant dans le réseau de neurones
    • Générer les prévisions pour les 7 prochains jours
    • Calculer les intervalles de confiance
    • Calculer les métriques de précision
  4. Post-traitement (3h15-3h20)

    • Arrondir les prévisions aux entiers
    • Appliquer les règles metier (minimum=0, maximum=capacité)
    • Marquer les prévisions inhabituelles pour révision
    • Générer les rapports de précision
  5. Livraison (3h20-3h25)

    • Publier vers les points d'accès de l'interface de programmation
    • Mettre à jour l'interface du tableau de bord
    • Envoyer des alertes par e-mail (si configure)
    • Journaliser les prévisions pour le suivi

Latence : moins de 5 minutes pour un restaurant typique (100 articles de menu)

Apprentissage continu

Comment le modèle s'améliore au fil du temps :

Re-entrainement hebdomadaire

Chaque lundi à 4h00 :

  1. Incorporer les ventes réelles de la semaine précédente
  2. Re-entraîner le modèle avec les données mises à jour
  3. Évaluer les améliorations de performance
  4. Deployer le modèle mis à jour si la précision s'améliore

Intégration des retours

Écarts signales par les utilisateurs reinjectes dans l'entrainement :

  • Événements spéciaux marques manuellement
  • Circonstances inhabituelles documentées
  • Raisons des modifications analysées
  • Ingenierie des caractéristiques améliorée

Détection de derive conceptuelle

Surveiller les changements dans les tendances de demande :

if recent_accuracy < historical_accuracy - threshold:
trigger_model_refresh()
investigate_potential_concept_drift()

Causes courantes :

  • Changements de menu
  • Nouvelle concurrence
  • Transitions saisonnières
  • Changements opérationnels

Fonctionnalités avancées

Corrélation multi-articles

Attention inter-articles :

Le modèle apprend les relations entre les articles :

  • Effets de substitution : « Si le saumon est populaire, la demande de salade diminué »
  • Effets complémentaires : « Les ventes de desserts correlent avec le volume de plats principaux »
  • Ingenierie du menu : « Les specials cannibalisent les articles réguliers »

Implémentation :

# Attention non seulement a l'historique propre de l'article, mais aussi aux articles lies
attention_context = [
item_own_history,
substitute_items_history,
complement_items_history,
category_average_history
]

Prévisions d'ensemble

Variantes de modèles multiples :

Entraîner plusieurs modèles avec différentes architectures :

  • Modèle A : Transformeur (principal)
  • Modèle B : LSTM (base recurrente)
  • Modèle C : Gradient boosting (base sur les arbres)

Combinaison pondérée :

final_prediction = (
0.70 * transformer_prediction +
0.20 * lstm_prediction +
0.10 * gbm_prediction
)

Poids determines par la précision historique.

Quantification de l'incertitude

Sources d'incertitude :

  1. Aleatoire (caractere aleatoire irreductible)

    • Comportement des clients intrinsequement imprevisible
    • Événements aleatoires (fluctuations météorologiques)
  2. Epistemique (incertitude du modèle)

    • Données d'entrainement insuffisantes
    • Limitations de capacité du modèle
    • Nouveaux scénarios absents de l'ensemble d'entrainement

Notation de confiance :

confidence_score = f(
data_quality, # Quelle est la qualite des donnees historiques ?
training_data_volume, # Combien de donnees disponibles ?
similarity_to_training, # A quel point le jour de prevision ressemble aux jours d'entrainement ?
model_agreement # Les modeles de l'ensemble sont-ils d'accord ?
)

Confiance plus élevée → intervalles plus etroits Confiance plus faible → intervalles plus larges

Apprentissage par transfert

Apprentissage inter-sites :

Pour les chaînes de restaurants :

  • Pre-entrainement sur les données de tous les sites
  • Affinage sur les données de chaque site
  • Transfert des tendances (saisonnières, météo, événements)
  • Démarrage plus rapide pour les nouveaux sites

Avantages :

  • Prévisions disponibles immédiatement pour un nouveau site
  • Précision initiale plus élevée
  • Convergence du modèle plus rapide
  • Apprentissage partage dans toute l'organisation

Performance du modèle

Comparatifs

Précision vs références :

MéthodeMAPENotes
Eaternity Forecast12,8 %Architecture transformeur
Prévisionniste expert humain17,1 %25 % moins précis
Même jour semaine précédente22,4 %Référence naive
Moyenne sur 4 semaines19,7 %Référence statistique simple
ARIMA16,2 %Series temporelles traditionnelles
LSTM14,1 %Réseau de neurones récurrent

Calibrage des intervalles de confiance :

Attendu : 80 % des reels dans [inférieur, supérieur] Atteint : 78,5 % (bien calibre)

Exigences de calcul

Entrainement :

  • GPU : NVIDIA RTX 4090 ou équivalent
  • RAM : 32 Go minimum
  • Temps d'entrainement : 2-6 heures (selon le volume de données)
  • Stockage : 5-20 Go par restaurant

Inférence :

  • CPU : Suffisant pour les prévisions en temps réel
  • RAM : 8 Go
  • Latence : moins de 100 ms par prévision
  • Stockage : moins de 1 Go pour le modèle deploye

Fondements scientifiques

Références académiques

Forecast s'appuie sur des recherches évaluées par des pairs :

  1. Architecture Transformeur

    • Vaswani et al. (2017) « Attention Is All You Need »
    • Article original sur les transformeurs pour le traitement du langage naturel
  2. Prévision de series temporelles

    • Zhou et al. (2021) « Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting »
    • Transformeurs temporels pour la prévision
  3. Prévision de demande

    • Taylor et Letham (2018) « Forecasting at Scale » (Facebook Prophet)
    • Systèmes de prévision a l'échelle industrielle
  4. Regression quantile

    • Koenker et Bassett (1978) « Regression Quantiles »
    • Theorie fondamentale de la regression quantile
  5. Opérations de restauration

    • Miller et al. (2015) « Forecasting Restaurant Demand »
    • Défis de prévision spécifiques au domaine

Améliorations futures

Feuille de route

T2 2024 : Visualisation de l'attention

  • Montrer sur quels jours historiques le modèle se concentre
  • Expliquer les prévisions aux utilisateurs

T3 2024 : Prévision au niveau des recettes

  • Prédire directement les besoins en ingrédients
  • Intégration avec les systèmes d'inventaire

T4 2024 : Inférence causale

  • Comprendre l'incidence des changements de menu avant implémentation
  • Simuler les effets promotionnels

2025 : Apprentissage multimodal

  • Incorporer le sentiment des réseaux sociaux
  • Analyse visuelle du menu
  • Sentiment des avis clients

Voir aussi