À retenir
- Les ventes enregistrées sont le plus petit de deux nombres, la demande et le stock en rayon ; un jour où le rayon se vide, le reste de la demande ne laisse aucune trace.
- Les prévisions entraînées sur ces ventes sous-estiment la demande, et l’erreur est la plus forte dans les catégories de frais qui tombent le plus souvent en rupture.
- L’erreur s’auto-entretient : une prévision plus basse donne une commande plus petite, une rupture plus précoce et un historique encore plus bas.
- Les chefs de magasin font la même erreur à la main quand ils réduisent une commande après une rupture.
- Traitez les jours de rayon vide comme des données manquantes ou comme un plancher, et vérifiez que le stock théorique sur lequel repose le signalement est juste.
Une caisse enregistre ce qui s’est vendu, pas ce que les clients voulaient. Quand le yaourt manque à trois heures de l’après-midi, l’historique du jour s’arrête à ce qu’il y avait en rayon, et les clients venus le soir ne laissent aucune trace. Les statisticiens appellent ces données censurées. L’essentiel du réapprovisionnement des chaînes de magasins repose sur elles, et l’erreur qu’elles introduisent ne reste pas figée.
1. Les ventes, c’est la demande plafonnée par le stock
Notons D la demande du jour et I le stock disponible. La caisse voit y = min(D, I) : toute la demande un jour où le rayon tient, et exactement le stock un jour où il ne tient pas. La part perdue, D − y, n’est jamais enregistrée. Une moyenne des ventes sur 28 jours mélange donc deux sortes de jours, et ceux qui ont fini en rupture la tirent vers le bas. Il en va de même pour la dispersion des ventes, l’autre donnée d’entrée du stock de sécurité. Repérer ces jours est la première étape ; le guide des ruptures de stock montre comment les détecter dans les données de ventes et de stock.
2. Ce qu’une journée cache
La mesure publique la plus nette vient de FreshRetailNet-50K, un jeu de données publié en 2025 par l’épicier en ligne chinois Dingdong : les ventes horaires de 863 produits périssables sur 898 sites dans 18 villes, chaque heure étant marquée quand le produit était en rupture1. Ces sites sont de petits entrepôts de produits frais qui livrent en 30 minutes, que l’article appelle des magasins. Après le réassort de 6 h, les ruptures tombaient sous 2 % ; elles remontaient ensuite régulièrement jusqu’à 26 % à 20 h.
En vente à 6 h, après le réassort98Encore en vente à 20 h74
Un produit épuisé dans l’après-midi affiche quand même des ventes pour la journée, si bien qu’un rapport quotidien le compte comme disponible. Son historique est amputé de tout ce que la soirée aurait vendu. Sur l’ensemble du jeu de données, reconstituer la demande cachée a supprimé une sous-estimation systématique de 7,37 %1. Une étude de 2026 sur les mêmes données a détaillé la censure par catégorie2 :
| Catégorie | Heures-magasin en rupture | Erreur de prévision, entraînée sur les ventes | Erreur de prévision, tenant compte de la censure | Baisse des pertes simulée |
|---|---|---|---|---|
| Légumes-feuilles | Heures-magasin en rupture31,2 % | Erreur de prévision, entraînée sur les ventes42,8 % | Erreur de prévision, tenant compte de la censure38,9 % | Baisse des pertes simulée4,7 points |
| Poisson et fruits de mer | Heures-magasin en rupture27,6 % | Erreur de prévision, entraînée sur les ventes41,5 % | Erreur de prévision, tenant compte de la censure38,0 % | Baisse des pertes simulée4,2 points |
| Fruits | Heures-magasin en rupture21,4 % | Erreur de prévision, entraînée sur les ventes39,4 % | Erreur de prévision, tenant compte de la censure36,9 % | Baisse des pertes simulée3,4 points |
| Viande | Heures-magasin en rupture19,8 % | Erreur de prévision, entraînée sur les ventes38,3 % | Erreur de prévision, tenant compte de la censure36,2 % | Baisse des pertes simulée3,0 points |
| Légumes racines | Heures-magasin en rupture17,3 % | Erreur de prévision, entraînée sur les ventes37,6 % | Erreur de prévision, tenant compte de la censure35,8 % | Baisse des pertes simulée2,6 points |
| Produits laitiers | Heures-magasin en rupture8,9 % | Erreur de prévision, entraînée sur les ventes35,2 % | Erreur de prévision, tenant compte de la censure34,4 % | Baisse des pertes simulée1,4 point |
La tendance est monotone : plus une catégorie tombe souvent en rupture, plus une prévision entraînée sur les ventes se trompe, et plus une prévision qui tient compte de la censure regagne de terrain. Les produits laitiers, qui se conservent longtemps et manquent rarement, bougent à peine.
3. Le modèle apprend le rayon
Tout modèle chargé de reproduire les ventes reproduit aussi leur plafond. Yin, Zheng et Kong le disent sans détour : « Tout modèle entraîné à reproduire les ventes sous-estime la demande d’environ huit pour cent »2. Quand ils ont masqué une plus grande part des heures de pointe, d’un dixième à la moitié, le biais d’un modèle performant entraîné sur les ventes est passé de −4,2 % à −21,1 %. Leur modèle traite une heure en rupture comme un plancher, et non comme la demande : la demande était au moins égale à ce qui s’est vendu. Dans leur simulation, commander à partir de ce modèle a fait baisser les pertes modélisées de 9,8 % à 6,4 %, tandis que la part de la demande servie passait de 92,9 % à 94,7 %2. Moins de pertes et une meilleure disponibilité en même temps, c’est la signature d’un biais corrigé ; un modèle qui se serait contenté de commander davantage aurait sacrifié l’une à l’autre.
4. La spirale
Avec le temps, le biais s’aggrave, car la prévision fixe la commande suivante et la commande fixe l’historique suivant :
Le rayon se vide dans l’après-midiLes ventes s’arrêtent à ce qu’il contenait
La journée entre dans l’historique comme une journée faibleLa demande du soir n’y figure pas
La prévision apprend le chiffre plus bas
La commande suivante est plus petite
Le rayon se vide plus tôtet l’historique baisse encore
Pedregal, Trapero et Holgado de Frutos l’ont testé sur la série d’un produit du jeu de données M5, tiré des ventes de Walmart, en la censurant au niveau du stock qu’une politique de commande aurait détenu3. Avec un objectif de 70 %, une prévision classique par lissage exponentiel a suivi la demande pendant cinq semaines, jusqu’aux premières ruptures ; après une mauvaise semaine, « ETS ne se remet jamais de cette mauvaise prévision », car chaque commande trop faible produisait l’historique trop faible suivant. Leur variante Tobit, qui lit un jour en rupture comme une borne inférieure, a tenu le cap. Avec un objectif de 80 % de cycles de commande sans rupture :
Lissage exponentiel classique
Lissage exponentiel Tobit
Même série, même objectif
Les humains font de même. Dans une chaîne de supermarchés haut de gamme dont les chefs de magasin pouvaient modifier les propositions de commande du système pour les produits frais, une étude de 2026 a montré qu’après une rupture, les chefs de magasin étaient plus enclins à réduire la proposition, comme si le rayon vide avait prouvé que le produit se vend moins, et que ces réductions rendaient la rupture suivante plus probable4. Bloquer les corrections à la baisse qui suivaient une rupture a réduit ces ruptures auto-infligées pour un coût de stock raisonnable4.
5. Quand le signalement lui-même est faux
Repérer un rayon vide dans les données dépend du stock théorique, et celui-ci peut se tromper justement dans le sens qui le masque. Quand le système affiche des unités que le rayon n’a pas, les ventes s’arrêtent, rien ne déclenche de commande, et la journée ressemble à une journée sans demande plutôt qu’à une rupture. Dans une étude portant sur environ 24 000 produits dans 11 magasins d’un grand distributeur alimentaire européen, un inventaire complet a fait progresser les ventes de l’ensemble du magasin de 11 %, et toute cette hausse venait des produits dont le stock théorique dépassait ce qu’il y avait en rayon5. Sur ces produits, l’effet atteignait 2,67 fois la moyenne du magasin. Censure et erreurs de stock sont un même problème vu sous deux angles : dans les deux cas, un stock manquant passe pour une demande manquante.
6. Que faire des jours de rayon vide
- Signalez chaque jour magasin-produit clos sans stock, et chaque série de ventes nulles alors que le stock théorique affiche encore du stock.
- Excluez les jours signalés de la moyenne et de la dispersion des ventes, ou traitez-les comme un plancher, comme le font Tobit et les modèles similaires. Jamais comme un jour de demande nulle ou faible.
- Pour les produits frais, conservez l’heure à laquelle le rayon s’est vidé. Une journée en rupture dès 14 h a perdu bien plus qu’une journée en rupture à 20 h.
- Ne réduisez pas une commande parce que les ventes de la semaine passée étaient faibles si le rayon a été vide une partie du temps.
- Comptez les produits qui affichent du stock mais ont cessé de se vendre, pour que les signalements eux-mêmes soient fiables.
La moyenne corrigée alimente ensuite le point de commande et le stock de sécurité comme d’habitude.
7. Limites
FreshRetailNet-50K provient des sites de livraison d’un épicier en ligne en Chine, et non de magasins physiques, et l’article qui le présente est une prépublication. Le tableau par catégorie et les chiffres de pertes proviennent de simulations sur ces données, avec une demande reconstituée sous hypothèses. Les chiffres de la spirale viennent de la prépublication de l’article publié et reposent sur la série d’un seul produit. L’étude sur les chefs de magasin est citée d’après son résumé, et l’étude sur les inventaires porte sur un seul distributeur. Aucune ne mesure directement les ventes perdues d’une chaîne de magasins européenne, ce qu’aucune caisse ne permet de faire.
Comment marql traite les rayons vides
Dans Retail-Bench, la simulation ouverte construite par marql pour tester des politiques de réapprovisionnement, chaque estimateur lit une journée terminée rayon vide au niveau des journées sans rupture, qu’il s’agisse de la formule des manuels, de la règle appliquée à la main ou du moteur de marql6. La simulation connaît la demande réelle derrière chaque vente : elle peut donc mesurer ce que coûtent les rayons vides, ce qu’une vraie chaîne ne peut qu’estimer.
Sources
- Wang, Y., Gu, J., Long, L. et al. (2025). FreshRetailNet-50K: a stockout-annotated censored demand dataset for latent demand recovery and forecasting in fresh retail. arXiv:2505.16319, prépublication. arxiv.org
- Yin, C., Zheng, Y. and Kong, Z. (2026). Demand hidden by stockouts: censored demand recovery and green waste-reduction forecasting for sustainable fresh-food consumption under emerging-market urbanization. Sustainability, 18(15), 7642. doi.org
- Pedregal, D. J., Trapero, J. R. and Holgado de Frutos, E. (2025). Tobit exponential smoothing, towards an enhanced demand planning in the presence of censored data. International Journal of Production Research. Chiffres tirés de la prépublication, arXiv:2407.17920. doi.org
- Özdemir, B. and Tenhiälä, A. (2026). Discretion in automated supermarket replenishment: censorship bias and self-inflicted stockouts. Manufacturing & Service Operations Management. doi.org
- Rekik, Y., Oliva, R., Syntetos, A. and Glock, C. H. (2026). Inventory record inaccuracy in grocery retailing: impact of promotions and product perishability, and targeted effect of audits. Journal of Business Logistics. doi.org
- MARQL Retail-Bench (2026). Méthodologie, équation 2. retail-bench.marql.one
SujetsDemande censurée, Ventes perdues, Prévision de la demande, Réapprovisionnement des magasins