Prévision de la demande de produits pour des milliers de produits dans plusieurs magasins

9

Je travaille actuellement sur une tâche de prévision de la demande, avec des données sur des dizaines de milliers de produits dans quelques milliers de magasins. Plus précisément, j'ai quelques années de données de ventes quotidiennes par produit dans chaque magasin, et mon objectif est de prévoir les ventes futures de chaque article dans chaque magasin, un jour à l'avance; puis deux jours à l'avance, etc.

Jusqu'à présent, j'ai envisagé de diviser chaque paire de produits-magasins en une seule série chronologique et de faire une prévision pour chaque série chronologique comme cela a été fait dans l'article de Neal Wagner, Techniques intelligentes pour prévoir plusieurs séries chronologiques dans des systèmes du monde réel . En d'autres termes, je n'utiliserai que les informations historiques des ventes du produit d'un magasin particulier pour prévoir les ventes futures de ce produit dans ce magasin.

Cependant, j'ai parcouru Kaggle et des compétitions comme Corporación Favorita Grocery Sales Forecasting suggèrent une approche différente, qui consiste à utiliser les informations de tous les magasins et de tous les produits pour prédire les ventes futures. Si je comprends bien, les informations historiques sur les ventes de tous les produits dans tous les magasins sont transférées dans l'ensemble de formation, à partir duquel le modèle apprendra à prévoir les ventes futures. C'est très différent des méthodes traditionnelles de séries chronologiques, mais apparemment, selon les résultats de la compétition, cela fonctionne.

Cette dernière méthode semble prometteuse et plus robuste. Cependant, il y a le problème d'avoir à traiter des centaines de millions de points de données.

Quelle méthode est la plus appropriée pour ma tâche? Pour ceux qui ont travaillé sur des problèmes similaires, quelle méthodologie recommanderiez-vous?

meraxes
la source
1
Lorsque j'y ai travaillé, j'ai utilisé l'approche des séries chronologiques uniques, MAIS avec une saisonnalité tirée de produits similaires (par exemple une catégorie) dans des magasins similaires (par exemple, un segment géographique où les conditions météorologiques seraient similaires). Mais cela est dû en partie aux contraintes de temps: toutes les données ne sont pas arrivées en même temps, et le temps entre la dernière arrivée des données et le moment où la prévision était nécessaire était faible (parfois négatif!). C'étaient des considérations opérationnelles, pas statistiques.
zbicyclist
@zbicyclist Merci d'avoir partagé cela! Puis-je savoir comment vous avez pu intégrer la saisonnalité de produits similaires dans les prévisions? par exemple, avez-vous pris la saisonnalité moyenne et l'ajoutez comme autre fonctionnalité dans le modèle?
meraxes
Désaisonnaliser, modéliser, prévoir, puis resaisonner.
zbicyclist

Réponses:

9

Je ne recommanderais pas l'approche utilisée par Neal et al. . Leurs données sont uniques pour deux raisons:

  • Ils travaillent avec des données sur les aliments, qui sont généralement plus denses et plus stables que les autres données sur les ventes au détail de produits. Un emplacement donné vendra des dizaines de cartons de lait ou de paquets d'œufs par semaine et vendra ces mêmes produits depuis des décennies, par rapport à la mode ou aux pièces automobiles où il n'est pas inhabituel de vendre un seul article toutes les 3 ou 4 semaines, et les données ne sont disponibles que pour un an ou deux.

  • Ils prévoient des entrepôts et non des magasins. Un seul entrepôt couvre plusieurs magasins, de sorte que leurs données sont encore plus denses que la moyenne. En fait, un entrepôt est généralement utilisé comme niveau d'agrégation / de regroupement naturel pour les magasins, de sorte qu'ils effectuent déjà essentiellement un regroupement des données du magasin.

En raison de la nature de leurs données, ils peuvent se passer directement de la modélisation de séries chronologiques individuelles. Mais les données de la plupart des détaillants seraient trop clairsemées au niveau de chaque sku / magasin pour qu'ils puissent retirer cela.

Comme l'a dit zbicycliste, ce problème est généralement abordé à l'aide de prévisions hiérarchiques ou multi-échelons . Les packages de prévision de la demande commerciale utilisent tous une forme de prévision hiérarchique

L'idée est de regrouper les produits et les magasins dans des produits et des régions similaires, pour lesquels des prévisions agrégées sont générées et utilisées pour déterminer la saisonnalité et la tendance globales, qui sont ensuite réparties réconciliées en utilisant une approche descendante avec les prévisions de base générées pour chaque référence individuelle. / combinaison de magasin.

Outre le défi que zbicycliste a mentionné, un problème plus important est que trouver les regroupements optimaux de produits et de magasins n'est pas une tâche triviale, qui nécessite une combinaison d'expertise de domaine et d'analyse empirique. Les produits et les magasins sont généralement regroupés dans des hiérarchies élaborées (par département, fournisseur, marque, etc. pour les produits, par région, climat, entrepôt, etc. pour l'emplacement) qui sont ensuite transmises à l'algorithme de prévision avec les ventes historiques les données elles-mêmes.


Répondre aux commentaires meraxes

Que diriez-vous des méthodes utilisées dans le concours de Kaggle de prévision de ventes d'épicerie de Corporación Favorita, où elles permettent aux modèles d'apprendre des histoires de ventes de plusieurs produits (probablement sans rapport), sans faire aucun groupement explicite? Est-ce toujours une approche valable?

Ils effectuent le regroupement implicitement en utilisant magasin, article, famille, classe, cluster comme fonctionnalités catégorielles.

Je viens de lire un peu de la section de Rob Hyndman sur les prévisions hiérarchiques. Il me semble que faire une approche descendante fournit des prévisions fiables pour les niveaux agrégés; cependant, il présente l'énorme inconvénient de la perte d'informations en raison de l'agrégation qui peut affecter les prévisions pour les nœuds de niveau inférieur. Il peut également être "incapable de capturer et de tirer parti des caractéristiques de séries individuelles telles que la dynamique du temps, les événements spéciaux".

Trois points à ce sujet:

  • L'inconvénient qu'il pointe dépend du regroupement des données. Si vous regroupez tous les produits et magasins, alors oui, ce serait un problème. Par exemple, l'agrégation de tous les magasins de toutes les régions brouillerait toute saisonnalité spécifique à une région. Mais vous ne devriez agréger que jusqu'au groupe pertinent, et comme je l'ai souligné, cela nécessitera une analyse et une expérimentation pour trouver.
  • Dans le cas spécifique de la demande de détail, nous ne sommes pas inquiets de "perdre des informations en raison de l'agrégation" car souvent les séries chronologiques au niveau des nœuds inférieurs (c'est-à-dire SKU / Store) contiennent très peu d'informations, c'est pourquoi nous les regroupons jusqu'au niveau supérieur. niveaux en premier lieu.
  • Pour les événements spécifiques SKU / magasin, la façon dont nous l'abordons au sein de mon équipe consiste à supprimer les effets spécifiques à l'événement avant de générer une prévision, puis de les rajouter plus tard, une fois la prévision générée. Voir ici pour plus de détails.
Skander H.
la source
Merci pour cet aperçu! Qu'en est-il des méthodes utilisées dans le concours Kaggle de prévision des ventes des épiceries de la Corporación Favorita, où elles permettent aux modèles de tirer des enseignements de l'historique des ventes de plusieurs produits (éventuellement non liés), sans faire de regroupement explicite? Est-ce toujours une approche valable?
meraxes
Je viens de lire un peu de la section de Rob Hyndman sur les prévisions hiérarchiques. Il me semble que faire une approche descendante fournit des prévisions fiables pour les niveaux agrégés; cependant, il présente l'énorme inconvénient de la perte d'informations en raison de l'agrégation qui peut affecter les prévisions pour les nœuds de niveau inférieur. Il peut également être "incapable de capturer et de tirer parti des caractéristiques de séries individuelles telles que la dynamique du temps, les événements spéciaux".
meraxes
@meraxes voir ma modification.
Skander H.
Merci pour l'explication détaillée, @Alex! En ce qui concerne votre dernier point, et cela peut être un peu hors sujet, mais traitez-vous les vacances de la même manière? c'est-à-dire supprimer leurs effets avant de générer des prévisions, puis les réintégrer ultérieurement?
meraxes
^ Je demande parce que je remarque que mes prévisions semblent être très sensibles aux valeurs aberrantes dans les données. Mon approche actuelle est de winoriser les données, puis d'utiliser l'analyseur de pointes en série comme décrit dans l'article de Neal Wagner et al. d'identifier les pointes explicables par les vacances pour les rajouter par la suite. Je comprends qu'une autre façon serait d'utiliser des variables factices pour supprimer l'effet des vacances. Quelle approche recommanderiez-vous?
meraxes