Optimiser les revenus des détaillants grâce à l'IA de prévision des ventes
Publié: 2022-03-11La prévision est une technique qui utilise des données et des événements historiques pour établir des estimations sur les tendances futures, les catastrophes potentielles et le comportement général de tout sujet. Les prévisions peuvent être utilisées comme support probabiliste pour l'analyse des décisions, pour estimer les dépenses, les revenus et les plans budgétaires.
La prévision en entreprise peut être divisée en deux catégories distinctes : la prévision qualitative et la prévision quantitative .
- Prévision qualitative. Les prévisions qualitatives concernent les études de marché et les stratégies de marché, elles sont donc davantage axées sur des experts et influencées par des facteurs humains. Il vise généralement l'élaboration d'une stratégie à court terme.
- Prévision quantitative. Les prévisions quantitatives excluent tout facteur humain. Cela dépend uniquement des données historiques dont dispose une entité et vise à prédire ce que certains facteurs tels que les ventes, les prix et d'autres aspects financiers seront à long terme.
Pour plus d'informations, vous pouvez consulter l'introduction aux prévisions financières d'Investopedia.
Les deux types de prévisions se sont révélés très prometteurs et ont réussi à créer des améliorations commerciales pour de nombreuses entités.
Si vous souhaitez en savoir plus sur la façon dont les prévisions peuvent affecter les décisions de marché, un bon point de départ est Prediction Markets: Fundamentals, Designs, and Applications par Stefan Luckner et al.
Un problème que nous pouvons résoudre à l'aide de la prévision quantitative est la prévision de la demande ou la prévision des ventes.
Approches de prévision de la demande et de prévision des ventes
Supposons que vous soyez un détaillant exploitant de nombreux magasins et que chaque magasin dispose d'un système de réapprovisionnement statique des stocks de produits basé sur des décisions humaines basées sur certains événements tels que les saisons et les tendances du marché.
Parfois, vous rencontrerez l'un de ces problèmes qui peut entraîner deux problèmes majeurs :
- Produits surstockés. Avoir un stock substantiel de produits destinés à être vendus pendant un certain laps de temps mais non vendus.
- Produits en rupture de stock. Avoir une opportunité de vendre un produit mais ne pas pouvoir parce que le produit n'est pas disponible.
Selon une enquête du groupe IHL auprès de 600 ménages et détaillants, les détaillants perdent près de 1 000 milliards de dollars de ventes par an en raison de problèmes de rupture de stock.
"Les acheteurs rencontrent des ruptures de stock dans un voyage d'achat sur trois, selon le rapport, qui a été envoyé par e-mail à Retail Dive. Chez les détaillants alimentaires, pharmaceutiques et de masse, ils rencontrent des articles en rupture de stock dans un voyage sur cinq, dans les grands magasins et les détaillants spécialisés, c'est un sur quatre, et dans les magasins d'électronique, un sur trois », a constaté IHL Group.
Il semble que ces deux problèmes entraînent une diminution des revenus, car soit nous avons perdu une probabilité de vente, soit nous avons investi plus d'argent dans des produits invendus, ce qui signifie avoir des actifs qui ne généreront pas de revenus de sitôt pour compenser leurs coûts.
Cela est clairement préjudiciable au flux de trésorerie de l'entité, et pour faire face à ce risque, nous avons besoin de deux choses :
- Plus d'informations pour nous aider à prendre la décision
- Une équipe de prévision qui peut faire une planification stratégique à long terme pour les systèmes de réapprovisionnement des stocks
Donc, la question est : quelles sont les indications dont vous avez besoin pour adopter l'IA dans votre entreprise pour faciliter votre processus de prévision ?
Pour prendre cette décision, vous avez besoin de réponses d'experts aux questions suivantes :
- Est-il difficile de prévoir votre pipeline de ventes ?
- Vos prévisions de ventes sont-elles inexactes ou pas assez précises (même si vous disposez de données historiques) ?
- Vous rencontrez des problèmes de rupture de stock ou de surstock ?
- Êtes-vous incapable d'extraire des informations descriptives et inférentielles des données que vous possédez pour orienter vos décisions et votre planification ?
Les réponses à ces questions doivent être un signal clair qui vous aide à décider si vous souhaitez ou non commencer à utiliser l'IA dans vos stratégies de prévision.
Comment l'IA peut-elle bénéficier au processus de prévision des ventes ?
L'IA a montré d'excellents résultats en surpassant les prévisions humaines dans de nombreuses entreprises, permettant une prise de décision et une planification plus rapides ainsi que des stratégies de gestion des risques plus fiables. C'est pourquoi les grandes entreprises adoptent l'IA dans leur planification.
Lorsqu'il s'agit d'un problème de prévision de la demande, la méthode de prévision des séries chronologiques peut être utilisée pour prédire les ventes de chaque produit, permettant ainsi aux entreprises d'optimiser le réapprovisionnement des stocks et de minimiser l'apparition des problèmes susmentionnés. Cependant, de nombreux modèles ont du mal à effectuer des prévisions au niveau d'un produit individuel ou d'une catégorie de produits, en raison du manque de fonctionnalités nécessaires. La question est donc : comment pouvons-nous le faire fonctionner et tirer le meilleur parti de nos données ?
Pour les détaillants réels, ces problèmes sont tout sauf anodins. Soit vous avez plus de 1 000 produits qui introduisent beaucoup de non-linéarité dans l'ensemble de données et des dépendances multivariées, soit vous devez être averti du montant du réapprovisionnement prévu des stocks avec beaucoup de préavis pour pouvoir le produire ou l'acheter, ou faites tout ce dont vous avez besoin pour l'acquérir au moment où la demande se matérialise.
Dans ce cas, les modèles classiques comme ARIMA et ETS ne fonctionneront pas, et nous aurons besoin d'une méthode plus robuste comme les RNN et XGBoost, et c'est pourquoi nous avons besoin de beaucoup de création de fonctionnalités pour résoudre ce problème.
Pour que cela fonctionne, nous devons :
- Acquérir les caractéristiques d'entrée nécessaires pour expliquer la variété et la diversité des produits.
- Catégorisez nos données, de sorte que chaque catégorie présente le même comportement de série chronologique, et chaque catégorie sera traitée à l'aide d'un modèle autonome.
- Entraînez nos modèles sur les caractéristiques d'entrée catégorisées acquises.
Pour les besoins de cet article, nous prendrons XGBoost comme exemple d'un tel modèle.
Fonctionnalités requises dans les modèles de prévision des ventes
L'ensemble des fonctionnalités nécessaires à ce problème est classé en quatre groupes principaux :
- Fonctionnalités liées au temps
- Fonctionnalités liées aux ventes
- Fonctionnalités liées au prix
- Fonctionnalités liées aux stocks
Fonctionnalités liées au temps
Contrairement à l'apprentissage en profondeur (réseau de neurones récurrent), les modèles d'apprentissage automatique ne peuvent pas obtenir de dépendances à long terme ou à court terme dans une série temporelle sans créer une couche d'extraction manuelle de caractéristiques pour la fonction datetime .
De nombreuses fonctionnalités peuvent être extraites de la date, telles que :
- An
- Jour
- Heure
- Week-end ou jour de semaine (que le jour soit un jour de semaine ou un week-end)
- Jour de la semaine
De nombreuses approches extraient simplement ces caractéristiques temporelles et les utilisent comme entrées et modèles de train, mais une ingénierie plus poussée peut être effectuée. Comme nous pouvons le voir, les caractéristiques (jour, heure, jour de la semaine) sont périodiques, ce qui signifie qu'elles ont une plage de valeurs répétitives. Comment un modèle peut-il gérer cela ?
La réponse courte est que ce n'est pas possible car ce que le modèle voit, c'est que l'heure 00:00 est à 23 heures de 23:00, mais en fait, c'est à une heure. Une façon de résoudre ce problème consiste à convertir ces caractéristiques en transformation cyclique.
En utilisant le concept de sinus et de cosinus, ou représentation vectorielle, on peut convertir chaque heure (24 heures) en un angle, et l'utilisation du sinus et du cosinus d'entre eux rendra beaucoup plus facile pour le modèle de détecter les proportions réelles entre les heures, indépendamment de la périodicité.
Cela supprimera la discontinuité qui se produit dans les fonctions temporelles périodiques, ou toute fonction périodique.
Pour notre article, nous utiliserons l'ensemble de données Sample Superstore trouvé publiquement et essaierons de prédire les ventes mensuelles cibles pour une certaine catégorie de produits.
De plus, nous utiliserons l'environnement Python 3.7 avec les bibliothèques suivantes :
- NumPy
- Pandas
- XGBoost
- Sklearn
Maintenant, je vais vous montrer comment créer la fonction de conversion des caractéristiques de période et tester si cela a été utile ou non.

def convert_periodic(val,period): theta = 2*np.pi*val/period sin_period = np.sin(theta) cos_period = np.cos(theta) return sin_period,cos_period def convert_month(x): return convert_periodic(x,12) df['sin_month'], df['cos_month'] = zip(*df['month'].map(convert_month))Avec cela en place, nous sommes prêts à tester si la fonctionnalité ajoutée améliorera les performances ou non.
X = df.drop(['Order Date','Sales','sin_month', 'cos_month'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False)Comme nous pouvons le voir, nous avons effectué une transformation log 1p pour notre fonctionnalité de vente cible, car il s'agit d'une fonctionnalité asymétrique (non distribuée normalement).
Maintenant, nous allons ajuster un régresseur XGBoost sur les données.
y_pred = model.predict(X_test) print(f'Loss without cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss without cyclic conversion on testing set is 0.4313676193485837Ensuite, nous allons essayer avec notre fonctionnalité créée.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with cyclic conversion on testing set is 0.33868030449130826Comme nous pouvons le voir, la perte s'est améliorée de 0,43 RMSE à 0,33 RMSE.
Certaines autres fonctionnalités liées au temps auxquelles vous pouvez penser, en fonction de votre problème, sont :
- Nombre de mois depuis que l'article était dans le magasin
- Nombre de jours depuis la dernière vente
Fonctionnalités liées aux ventes
Il s'agit de la principale fonctionnalité d'entrée de base nécessaire pour prédire nos ventes, alors comment tirer le meilleur parti des données de vente ? Nous pouvons y parvenir en utilisant le concept de décalage et d'autocorrélation.
Les caractéristiques de décalage sont des enregistrements de ventes historiques pour les produits. Par exemple, si nous prenons une fonction de décalage de 12 pour les ventes mensuelles comme entrée dans notre modèle pour prédire les ventes de mai 2020, cela signifie que nous fournirons au modèle des enregistrements de données entre mai 2019 et avril 2020. Cela peut être très utile.
En outre, il peut être interprété à l'aide de tracés d'autocorrélation pour vérifier dans quelle mesure l'entité cible est corrélée avec ses entités décalées. Cela permet également de sélectionner uniquement les fonctionnalités corrélées parmi les fonctionnalités décalées, ce qui réduit l'utilisation de la mémoire et la redondance des fonctionnalités.
Voici comment nous pouvons ajouter des fonctionnalités de décalage dans notre dataframe :
for i in range(3): df[f'lag_{i+1}'] = df['Sales'].shift(i+1) df = df.dropna() df.head() Ici, j'ai choisi une valeur d'une fonctionnalité à trois décalages à inclure dans notre ensemble de formation. Cette fonctionnalité est un hyperparamètre. Vous pouvez la choisir en fonction du tracé d'autocorrélation ou en essayant de nombreuses valeurs et en choisissant simplement la meilleure lors de la phase de réglage.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with lag features on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with lag and aggregated sales features on testing set is 0.2862175857169188Désormais, le RMSE est passé à 0,28, en utilisant à la fois les fonctionnalités de décalage et les conversions cycliques.
Certaines fonctionnalités supplémentaires liées aux ventes que vous pouvez ajouter :
- Fraction d'articles vendus (fraction d'articles vendus par rapport au total des ventes dans un magasin)
- Fréquence des événements de vente pour la catégorie de l'article
- Ajout de la notion d'ancienneté
L'ancienneté est un concept introduit pour attribuer un niveau d'ancienneté aux nouveaux articles dans un magasin :
- Ancienneté 0 : nouveautés dans l'entreprise
- Ancienneté 1 : articles jamais vendus dans ce magasin mais vendus dans d'autres magasins de l'entreprise
- Ancienneté 2 : articles qui ont déjà été vendus dans ce magasin
Fonctionnalités liées au prix
Un argument simple est que l'une des causes directes de la hausse et de la baisse des ventes est le prix et les promotions. Le prix est l'un des meilleurs moyens de différencier les différentes catégories, sous-catégories et super-catégories de produits.
Par exemple, en supposant qu'une catégorie et une sous-catégorie ont été attribuées à chaque produit, on peut créer les caractéristiques de prix suivantes :
- Prix (moyen, max, min, médian) par catégorie
- Prix (moyen, max, min, médian) dans la sous-catégorie
- Comparaisons entre ces statistiques, telles que la différence entre chaque statistique dans la catégorie et la sous-catégorie
Cette agrégation peut être effectuée plusieurs fois en utilisant de nombreux regroupements par sujet (en supposant que nous visons à prédire la demande mensuelle), tels que :
- Mensuel, Magasin, catégorie
- Mensuel, Magasin, sous-catégorie
- Mensuel, magasin, article, catégorie
- Mensuel, Magasin, Article, sous-catégorie
En outre, d'autres fonctionnalités peuvent être ajoutées en excluant le regroupement mensuel pour étudier le comportement des prix dans leur ensemble.
Fonctionnalités liées aux stocks
Celui-ci n'est pas si courant chez les détaillants et les prévisionnistes des ventes, mais il fait une grande différence dans les modèles de prévision des ventes. Les ensembles de données de stock contiennent principalement les données d'inventaire de chaque produit, quotidiennement dans chaque magasin. À partir de là, nous pouvons le combiner avec les données de vente pour obtenir un ratio de chiffre d'affaires mensuel pour chaque produit. Ce ratio indiquera à quelle vitesse le stock d'un produit est entièrement vendu, et il présente deux avantages principaux :
- Cela peut aider le modèle à prévoir les ventes en fonction du niveau de stock actuel.
- Cela peut nous aider à utiliser cette valeur pour regrouper les produits en produits à rotation lente, moyenne et rapide. Ce regroupement nous aidera dans la prise de décision et la modélisation.
Pour cela, vous avez besoin des données d'inventaire quotidiennes pour chaque produit, ainsi que des données de vente, puis vous pouvez calculer le taux de rotation des stocks comme suit :
Conseil : Ces agrégations sont effectuées sur la base d'une plage de temps. Par exemple, si nous travaillons sur la prévision des ventes mensuelles, l'ITO sera calculé en tant que ventes totales au cours du dernier mois sur la valeur moyenne des stocks au cours du même mois.
La prévision des ventes peut transformer les données en opportunité
En résumé, la prévision des ventes peut aider les entreprises à augmenter leurs revenus et à réaliser des bénéfices, à condition qu'elles disposent des bons pipelines de données et utilisent les bonnes méthodes d'ingénierie des fonctionnalités. Cet article était un essai pour montrer que toutes sortes de données peuvent être utiles pour résoudre ce problème.
Chaque entreprise devrait déterminer si l'IA est nécessaire pour ses problèmes de prévision, et si c'est le cas, elle aura besoin d'ingénieurs experts en IA et des conseils d'ingénieurs en apprentissage automatique pour créer son propre système de prévision des ventes.
Si vous êtes une entreprise/un détaillant désireux d'appliquer cette technique de prévision des ventes, commencez par rassembler toutes les données que vous pouvez, en particulier les ventes quotidiennes, les stocks quotidiens et les transactions quotidiennes.
Une fois que vous possédez ces données, vous pouvez les utiliser pour augmenter vos revenus et optimiser les stratégies de réapprovisionnement des stocks, permettant à votre entreprise de réaliser le profit le plus élevé possible avec les ressources disponibles, comme le démontrent plusieurs exemples ci-dessus, ainsi que les pratiques de prévision des ventes utilisées par les principaux détaillants. .
Les références:
Le jeu de données
Lectures complémentaires sur les prévisions financières
