5 février 2021
Dans cet article, Maxime Lutel, scientifique de Data, résume les enseignements qu'il a tirés du concours de prévision des ventes M5, qui consistait à prédire les ventes futures dans plusieurs magasins Walmart. Il vous guidera à travers notre solution et discutera du modèle d'apprentissage automatique qui a le mieux fonctionné pour cette tâche.

Utiliser l'apprentissage automatique pour relever les défis commerciaux des détaillants

La précision des prévisions de vente est essentielle pour que les entreprises de vente au détail puissent produire la quantité requise au bon moment. Mais même si éviter le gaspillage et les pénuries est l'une de leurs principales préoccupations, les détaillants ont encore une grande marge d'amélioration. C'est du moins ce que pensent les employés de Walmart, qui ont lancé en mars 2020 un concours scientifique ouvert data... le concours M5 - pour voir comment ils pourraient améliorer leurs modèles de prévision.

Le concours visait à prédire les ventes futures au niveau du produit, sur la base de l'historique des data. Plus de 5 000 équipes d'amateurs de data et d'experts en prévision ont discuté pendant des mois des méthodes, des caractéristiques et des modèles qui conviendraient le mieux pour résoudre ce problème bien connu d'apprentissage automatique. Ces débats ont mis en lumière certains problèmes récurrents rencontrés dans presque tous les projets de prévision. Plus important encore, ils ont mis en évidence une grande variété d'approches pour les résoudre.

Cet article vise à résumer quelques les principales idées qui se sont dégagées du défi. Chez Artefact, nous croyons en l'apprentissage par la pratique, nous avons donc décidé de tenter notre chance et de coder notre propre solution pour l'illustrer. Nous allons maintenant parcourir l'ensemble du pipeline de prévision et nous arrêter en cours de route pour comprendre ce qui a fonctionné et ce qui a échoué.

Énoncé du problème : Prévision hiérarchique des séries temporelles

L'ensemble dataset contient un historique des ventes sur 5 ans, de 2011 à 2016, pour divers produits et magasins. Certaines informations supplémentaires sont fournies, telles que les prix de vente et les événements du calendrier. Data est organisé de manière hiérarchique : les magasins sont divisés en trois états et les produits sont regroupés par catégories et sous-catégories.

Notre tâche consiste à Prévision des ventes pour tous les produits dans chaque magasin, les jours suivant la date de disponibilité dataset. Cela signifie que 30 490 prévisions doivent être effectuées pour chaque jour de l'horizon de prévision.

Cette hiérarchie guidera nos choix de modélisation, car les interactions au sein des catégories de produits ou des magasins contiennent des informations très utiles à des fins de prédiction. En effet, des articles appartenant aux mêmes magasins et aux mêmes catégories peuvent avoir une évolution similaire des ventes ou, au contraire, se cannibaliser les uns les autres. Par conséquent, nous allons décrire chaque échantillon par des caractéristiques qui capturent ces interactions, et privilégier les approches basées sur l'apprentissage automatique par rapport aux approches prévisionnelles traditionnelles, afin de prendre en compte cette information lors de l'apprentissage du modèle.

Deux défis principaux : des valeurs intermittentes et un horizon de prédiction étendu

À ce stade, vous pensez peut-être qu'il s'agit d'un problème de prévision très courant. Vous avez raison et c'est pour cela qu'il est intéressant : il peut se rapporter à un large éventail d'autres projets, même si chaque secteur a ses propres caractéristiques. Cependant, ce défi présente deux spécificités importantes qui rendront la tâche plus difficile que prévu.

La première est que les séries temporelles avec lesquelles nous travaillons présentent de nombreuses valeurs intermittentes, c'est-à-dire de longues périodes de jours consécutifs sans ventes, comme l'illustre le graphique ci-dessous. Cela peut être dû à des ruptures de stock ou à une surface d'étalage limitée dans les magasins. Quoi qu'il en soit, cela complique la tâche, car l'erreur montera en flèche si les ventes sont prédites à un niveau régulier alors que le produit n'est pas en rayon.

La seconde provient de la tâche elle-même, et plus précisément de la taille de l'horizon de prédiction. Les concurrents doivent établir des prévisions non seulement pour la semaine suivante, mais aussi pour une période de quatre semaines. Préféreriez-vous vous fier aux prévisions météorologiques pour le lendemain ou pour le mois suivant ? Il en va de même pour les prévisions de ventes : un horizon de prévision étendu rend le problème plus complexe, car l'incertitude augmente avec le temps.

Ingénierie des fonctionnalités - Modélisation des facteurs déterminants des ventes

Maintenant que nous avons compris la tâche à accomplir, nous pouvons commencer à calculer les caractéristiques modélisant tous les phénomènes susceptibles d'affecter l'évolution des ventes. L'objectif est ici de décrire chaque triplet Jour x Produit x Magasin par un ensemble d'indicateurs qui saisissent les effets de facteurs tels que la saisonnalité, les tendances ou les prix.

Saisonnalité

Plutôt que d'utiliser la date de vente directement comme indicateur, il est généralement plus pertinent de la décomposer en plusieurs éléments pour caractériser la saisonnalité : l'année, le mois, le numéro de semaine, jour de la semaine... Ce dernier point est particulièrement intéressant car le problème présente une forte périodicité hebdomadaire : les volumes de vente sont plus importants le week-end, lorsque les gens passent plus de temps dans les supermarchés.

Calendrier des événements tels que les vacances ou les finales de la NBA ont également un fort impact saisonnier. Une caractéristique a été créée pour chaque événement, avec les valeurs suivantes :

  • Valeurs négatives pour les 15 jours précédant l'événement (-15 à -1)

  • 0 le jour J

  • Valeurs positives pour les 15 jours suivant l'événement (1 à 15)
  • Pas de valeur pour les périodes à plus de 15 jours de l'événement

L'idée est de modéliser l'impact saisonnier non seulement le jour J, mais aussi avant et après. Par exemple, un produit qui sera souvent offert comme cadeau de Noël connaîtra un pic de ventes les jours précédents et une chute juste après.

Tendances

Les tendances récentes fournissent également des informations utiles sur les ventes futures et sont modélisées grâce à caractéristiques du décalage. Un décalage est la valeur de la variable cible décalée d'une certaine période. Pour un article spécifique dans un magasin donné, la valeur décalée d'une semaine correspondrait aux ventes réalisées il y a une semaine pour cet article et ce magasin. Différentes valeurs de décalage peuvent être envisagées, et la moyenne de plusieurs décalages est également calculée, afin d'obtenir des prédicteurs plus robustes. Les décalages peuvent également être calculés sur des ventes agrégées pour saisir des tendances plus globales, par exemple au niveau du magasin ou de la catégorie de produits.

Tarification

Le prix d'un produit peut varier d'un magasin à l'autre, voire d'une semaine à l'autre au sein d'un même magasin. Ces variations influencent fortement les ventes et doivent donc être décrites par certaines caractéristiques. plutôt que par des prix absolus, les différences de prix relatifs entre les produits concernés sont plus susceptibles d'expliquer l'évolution des ventes. C'est pourquoi les prédicteurs suivants ont été calculés :

  • Différence relative entre le prix actuel d'un article et son prix moyen historique, pour mettre en évidence l'impact des offres promotionnelles.
  • Différence relative de prix avec le même article vendu dans d'autres magasins, afin de comprendre si le magasin propose un prix attractif ou non.
  • Différence relative de prix avec d'autres articles vendus dans le même magasin et dans la même catégorie de produits, afin de tenir compte de certains effets de cannibalisation.

Codage des variables catégorielles

Les variables catégorielles telles que l'état, le magasin, le nom du produit ou sa catégorie ont également un pouvoir prédictif important. Ces informations doivent être codées en caractéristiques pour aider le modèle à tirer parti de la hiérarchie dataset. L'encodage à chaud n'est pas une option ici car certaines de ces variables catégorielles ont une cardinalité très élevée (3049 produits distincts). Au lieu de cela, nous avons utilisé un codage cible ordonné, ce qui signifie que chaque observation est codée par la moyenne des ventes des observations passées ayant la même valeur catégorielle. L'ensemble data est ordonné en fonction du temps pour cette tâche afin d'éviter les fuites de data.

Toutes les variables catégorielles et certaines de leurs combinaisons ont été codées avec cette méthode. Il en résulte des caractéristiques très informatives, la meilleure étant le codage de la combinaison produit et magasin. Si vous souhaitez expérimenter d'autres codeurs, vous pouvez trouver un large éventail de méthodes ici.

La perte de Tweedie pour gérer les valeurs intermittentes

Différentes stratégies peuvent être utilisées pour traiter le problème des valeurs intermittentes. Certains participants ont décidé de créer deux modèles distincts : l'un pour prédire si le produit sera disponible ou non un jour donné, et l'autre pour prévoir les ventes. Comme beaucoup d'autres, nous avons choisi une autre option, qui consiste à s'appuyer sur une fonction objective adaptée au problème : la fonction perte de tweedie.

Sans entrer dans les détails mathématiques, essayons de comprendre pourquoi cette fonction de perte est appropriée à notre problème, en comparant la distribution des ventes dans la formation data et la distribution tweedie :

Elles se ressemblent beaucoup et ont toutes deux des valeurs concentrées autour de 0. En définissant la perte de tweedie comme fonction objective, vous obligez le modèle à maximiser la probabilité de cette distribution et donc de prédire la bonne quantité de 0. En outre, cette fonction de perte est assortie d'un paramètre - dont les valeurs sont comprises entre 1 et 2 - qui peut être ajusté pour correspondre à la distribution du problème en question :

Sur la base de notre distribution dataset, nous pouvons nous attendre à ce que la valeur optimale soit comprise entre 1 et 1,5, mais pour être plus précis, nous ajusterons ce paramètre plus tard avec la validation croisée. Cette fonction objective est également disponible pour d'autres modèles de gradient boosting tels que XGBoost ou CatBoost, et vaut donc la peine d'être essayée si vous avez affaire à des valeurs intermittentes.

Comment prévoir 28 jours à l'avance ? Tirer le meilleur parti des caractéristiques de décalage

Comme expliqué ci-dessus, les caractéristiques de décalage sont des ventes décalées d'une période donnée. Leur valeur dépend donc de l'endroit où vous vous situez dans l'horizon de prévision. Les ventes réalisées un jour J particulier peuvent être considérées comme un décalage d'un jour si vous prévoyez un jour à l'avance, ou comme un décalage de 28 jours si vous prévoyez 28 jours à l'avance. Le diagramme suivant illustre ce point :

Ce concept est important pour comprendre quelles sont les caractéristiques qui seront utilisées. disponible au moment de la prédiction. Ici, nous sommes au jour J et nous souhaitons prévoir les ventes pour les 28 jours suivants. Si nous voulons utiliser le même modèle - et donc les mêmes caractéristiques - pour faire des prévisions pour l'ensemble de l'horizon de prévision, nous ne pouvons utiliser que les décalages disponibles pour prévoir tous les jours entre J+1 et J+28. Cela signifie que si nous utilisons la caractéristique de décalage d'un jour pour entraîner le modèle, cette variable devra également être remplie pour les prévisions à J+2, J+3, ... et J+28, alors qu'elle se réfère à des dates dans l'avenir.

Néanmoins, les décalages sont probablement la caractéristiques ayant le plus grand pouvoir prédictif, Il est donc important de trouver un moyen d'exploiter au mieux ces informations. Nous avons envisagé trois options pour contourner ce problème, voyons ce qu'il en est.

Option 1 : Un modèle pour toutes les semaines

La première option est la plus évidente. Elle consiste à utiliser le même modèle pour faire des prévisions pour toutes les semaines de l'horizon de prévision. Comme nous venons de l'expliquer, elle s'accompagne d'une contrainte de taille : seules les caractéristiques disponibles pour les prévisions à J+28 peuvent être utilisées. Il faut donc se débarrasser de toutes les informations fournies par les 27 derniers décalages. C'est dommage car les décalages les plus récents sont aussi les plus instructifs, nous avons donc envisagé une autre option.

Option 2 : modèles hebdomadaires

Cette alternative consiste à former un modèle LightGBM différent pour chaque semaine. Sur le diagramme ci-dessus, chaque modèle apprend à partir des décalages les plus récents possibles en fonction de la contrainte imposée par son horizon de prédiction. En suivant la même logique que l'option précédente, cela signifie que chaque modèle peut tirer parti de tous les décalages, à l'exception de ceux qui sont plus récents que le jour le plus éloigné à prédire.

Plus précisément :

  • Le modèle 1 établit des prévisions pour les jours 1 à 7, en s'appuyant sur tous les décalages, à l'exception des 6 plus récents.
  • Le modèle 2 établit des prévisions pour les jours 8 à 14, en s'appuyant sur tous les décalages, à l'exception des 13 plus récents.
  • Le modèle 3 établit des prévisions pour les jours 15 à 21, en s'appuyant sur tous les décalages, à l'exception des 20 plus récents.
  • Le modèle 4 établit des prévisions pour les jours 22 à 28, en s'appuyant sur tous les décalages, à l'exception des 27 plus récents, comme dans l'option 1.

Cette méthode permet de de mieux exploiter les informations en retard pour les 3 premières semaines et d'améliorer ainsi la précision des prévisions de notre solution.. Cela en valait la peine car il s'agissait d'un concours Kaggle, mais... pour un projet industrialisé, les questions de complexité, de maintenance et d'interprétabilité doivent également être prises en considération.

En effet, cette option pourrait être coûteuse en termes de calcul et, si nous visons un déploiement à l'échelle d'un pays entier, elle nécessiterait de maintenir des centaines de modèles en direct. Dans ce cas, il serait nécessaire d'évaluer si l'augmentation des performances est suffisamment importante pour justifier cette mise en œuvre plus complexe.

Option 3 : Modélisation récursive

La dernière option utilise également des modèles hebdomadaires, mais cette fois-ci de manière récursive. Modélisation récursive signifie que les prédictions générées pour une semaine donnée seront utilisées comme caractéristiques de décalage pour les semaines suivantes. Cela se produit séquentiellementOption 1 : nous faisons d'abord des prévisions pour la première semaine en utilisant tous les décalages à l'exception des 6 plus récents. Ensuite, nous prévoyons la deuxième semaine en utilisant nos prévisions précédentes comme décalages d'une semaine, au lieu d'exclure d'autres décalages comme dans l'option 2. En répétant le même processus, nous disposons toujours de décalages récents, même pour les semaines 3 et 4, ce qui nous permet d'exploiter cette information pour entraîner les modèles.

Cette méthode vaut la peine d'être testée, mais gardez à l'esprit qu'elle est assez difficile à mettre en œuvre. instable, les erreurs se propageant d'une semaine à l'autre. Si le modèle de la première semaine commet des erreurs importantes, ces erreurs seront considérées comme la vérité par le modèle suivant, qui sera alors inévitablement peu performant, et ainsi de suite. C'est pourquoi nous avons décidé de s'en tenir à l'option 2, qui semble plus fiable.

Assurer la robustesse des modèles par une validation croisée appropriée : Pourquoi la validation croisée est essentielle pour les séries temporelles

Dans tout projet d'apprentissage automatique, l'adoption d'une stratégie de validation croisée appropriée est essentielle pour simuler correctement la précision hors échantillon, sélectionner minutieusement les hyperparamètres et éviter l'ajustement excessif. En ce qui concerne les prévisions, il convient de procéder avec précaution car il existe une dépendance temporelle entre les observations qui doit être préservée. En d'autres termes, nous voulons empêcher le modèle de se projeter dans l'avenir lorsque nous le formons.

La période de validation au cours de laquelle le modèle est testé revêt également une plus grande importance lorsqu'il s'agit de séries temporelles. Les performances du modèle et l'ensemble optimal d'hyperparamètres peuvent varier considérablement en fonction de la période au cours de laquelle le modèle est formé et testé. Par conséquent, notre objectif est de trouver les paramètres les plus susceptibles de maximiser les performances non pas sur une période aléatoire, mais sur la période que nous voulons prévoir, c'est-à-dire les 4 prochaines semaines.

Adapter le processus de validation au problème posé

Pour atteindre cet objectif, nous avons sélectionné 5 ensembles de validation qui ont été pertinentes pour la période de prévision. Le diagramme ci-dessous montre comment ils sont répartis dans le temps. Pour chaque pli de validation croisée, le modèle est formé avec diverses combinaisons de paramètres sur l'ensemble d'apprentissage et évalué sur l'ensemble de validation à l'aide de l'erreur quadratique moyenne.

Les plis 1, 2 et 3 visent à identifier les paramètres qui auraient maximisé la performance sur des périodes récentes, essentiellement sur les trois derniers mois. Le problème est que ces trois mois peuvent avoir des spécificités différentes de celles de la période à venir que nous voulons prévoir. Par exemple, imaginons que les magasins aient lancé une vaste campagne de promotion au cours des derniers mois et qu'elle se soit arrêtée aujourd'hui.

Ces promotions auraient probablement un impact sur le comportement du modèle, mais il serait risqué de se baser uniquement sur ces périodes récentes pour l'ajuster, car elles ne sont pas représentatives de ce qui va se passer par la suite.

Pour atténuer ce risque, nous avons également inclus les plis 4 et 5, qui correspondent à la période de prévision décalée respectivement de 1 et 2 ans. Ces périodes sont susceptibles d'être similaires car le problème présente une forte saisonnalité annuelle, ce qui est souvent le cas dans le commerce de détail. Dans le cas d'une périodicité différente, nous pourrions choisir n'importe quelle stratégie de validation croisée plus logique d'un point de vue commercial. Au final, nous avons sélectionné la combinaison d'hyperparamètres présentant l'erreur la plus faible sur les 5 plis pour entraîner le modèle final.

Résultats

Les différentes techniques mentionnées ci-dessus nous ont permis d'atteindre une 0,59 RMSSE pondéré - la métrique utilisée sur Kaggle - ce qui équivaut à une précision de prévision pondérée de 82,8%. Le graphique ci-dessous résume la performance incrémentale générée par chaque étape :

Ces chiffres sont indicatifs : l'augmentation de la précision dépend également de l'ordre dans lequel chaque étape est mise en œuvre.

Principaux enseignements

Nous avons beaucoup appris de ce défi grâce aux idées partagées par les participants et nous espérons qu'il vous a également donné matière à réflexion. Voici les principaux enseignements que nous en avons tirés :

  • Travaillez sur un sous-ensemble restreint mais représentatif de data afin d'itérer rapidement.
  • Faites très attention aux fuites data dans le processus d'ingénierie des caractéristiques : assurez-vous que toutes les caractéristiques que vous calculez seront disponibles au moment de la prédiction.
  • Choisissez une architecture de modèle qui vous permette d'exploiter au maximum les décalages, mais gardez également à l'esprit les considérations de complexité si vous souhaitez passer à la production.
  • Mettez en place une stratégie de validation croisée adaptée à votre problème d'entreprise afin d'évaluer correctement les performances de vos expériences.

Merci beaucoup pour votre lecture et n'hésitez pas à nous contacter si vous avez des commentaires sur le sujet !

Cet article a été publié pour la première fois sur le site Artefact Tech Blog sur Medium.