Etude de cas Classic Ride : Prédictions pour les sites de e-commerce Thelia

Publié le mercredi 22 septembre 2021 à 08:23 , mis à jour le mercredi 22 septembre 2021
11 mins

Avoir un temps d’avance est primordial pour tout commerçant afin de se différencier en proposant les meilleurs prestations sur le marché du e-commerce. Thelia.Services intègre un système d’intelligence artificielle qui peut prédire les achats en prenant en compte de nombreux facteurs extérieurs comme la météo, la tendance, ainsi que la saisonnalité. Grâce à ce module, les e-commerçants peuvent améliorer leurs performances, en bénéficiant de prédictions en temps réel, dans un tableau de bord dédié.

Contexte et objectif

OpenStudio développe un module de prédiction dans la solution Thelia.Services. La prédiction permet à un e-commerçant d’anticiper les ventes, de prévoir sa charge de travail par exemple ou ses besoins en réapprovisionnement.

Nos modèles de prévision tiennent compte de nombreuses données complémentaires à l’historique des ventes . En effet, nous tenons compte de la météo et du calendrier (période de vacances, jours fériés ou de week-end, etc). En mettant en corrélation toutes ces données, des modèles d’intelligence artificielle permettent une analyse beaucoup plus poussée afin d’atteindre une certitude élevée sur les ventes à venir, par exemple.

Notre premier objectif était d’analyser des séries temporelles, comprendre les facteurs externes ayant une influence, construire, entraîner et tester des modèles de prédiction. Le deuxième objectif était d’industrialiser les modèles choisis en illustrant leurs résultats dans un tableau de bord.

Dans cet article, nous présentons nos modèles de prédictions en détaillant les étapes de recherche, jusqu’à la mise à la disposition de la solution via une API (interface de programmation d’applications).

Preuve de concept

Pour démontrer la faisabilité de cette innovation sur les boutiques Thelia, Notre client e-commerçant Classic Ride nous a confié son historique de données afin de lui fournir des prédictions. Pour cette boutique, nous avions des données, en nombre suffisant et de bonnes qualité, à partir de janvier 2016.

Après plusieurs entretiens avec des e-commençants, nous avons définis les fonctionnalités qui leur seraient les plus utiles. De ce travail, nous avons conclu à la création de 3 types de prédictions :

  • Prédire le nombre de commandes pour anticiper les périodes plus ou moins active, ou bien prévoir le nombre de colis à expédier.
  • Prédire le chiffre d’affaires pour estimer les gains/pertes à venir et avoir une projection comptable par exemple.
  • Prédire le nombre d’unités vendus pour optimiser les stocks du catalogue et anticiper les approvisionnements.

Les données disponibles et nos ajouts

Après un long travail d’organisation et de nettoyage de données, nous disposions d’une base de données de 2016 à nos jours. Celle-ci était constituée de séries temporelles sur les ventes journalières total, par catégorie, par marque ainsi que le chiffre d’affaires correspondant. En plus de cet historique, nous avons créé d’autres variables à partir des informations dont nous disposions.

Extraction de connaissances sur le calendrier

À partir des dates calendaires, nous avons pu extraire de nombreuses caractéristiques, qui ont permis d’améliorer la qualité des prédictions pour chaque jour. Cette technique de « feature engineering » a créé les variables suivantes :

  • Le mois,
  • Le jour du mois,
  • La semaine,
  • Le jour de la semaine,
  • Les jours fériés,
  • Le type de vacances scolaires (hiver, printemps, été, automne, fin d’année).
Les données climatiques

Les conditions météorologiques ont une influence sur le e-commerce. La récupération de ces informations peut se faire via l’interrogation d’API météo qui nous retournent :

  • Un gros volume historique météo depuis 2016 à aujourd’hui pour l’entrainement des modèles. Nous avons choisi Meteostat pour leur base de données météorologiques et climatiques avec des enregistrements détaillés depuis des milliers de stations météorologiques dans le monde entier, remontant parfois à une centaine d’années. Cet historique de données servira uniquement lors de l’entrainement des modèles.
  • Des prédictions météorologiques de qualité sur une période de 15 jours pour réaliser des prédictions en temps réel. Nous avons choisi Visualcrossing car cette API fournit des données historiques à court terme (30 jours minimum) et 15 jours de prédiction.

Pour Classic Ride, la grande majorité des ventes ont lieu en France métropolitaine. Ainsi, pour avoir un indicateur journalier sur les conditions climatiques, nous avons récupéré les valeurs médianes de 96 stations (une par département métropolitain) pour chaque journée. Bien sûr, le choix de la zone météorologie peut être personnalisable selon la boutique Thelia.

En machine learning, il faut que les données d’entraînement et les données en entrée du modèle de prédiction aient le même format. Ce critère a aussi été important dans le choix de ces deux API météo. Les variables climatiques que nous avons sélectionnées sont :

  • La température, moyenne, minimal et maximal
  • Les précipitations et la neige
  • La vitesse du vent
La pertinence d’ajouter des données météorologiques

La météo a une influence sur notre vie de tous les jours : ventes, visites, consommation, etc. Les saisons dictent nos comportements d’achat. Mais, est-ce qu’il s’agit d’une simple saisonnalité ou d’une météo-sensibilité ? Pour savoir si l’intégration de la météo au sein de nos modèles était pertinente, nous avons fait un comparatif.

Le comparatif des modèles s’est fait dans des conditions d’expériences égales. C’est-à-dire que nous avons utilisé le même modèle (un gradient boosting), effectué des cross-validations sur un même échantillon de données : le nombre de commandes de 2016 à mars 2020 (avant COVID19). L’apprentissage s’est fait sur trois années et le test des modèles se fait sur une quatrième année. L’évaluation de nos modèles se fait avec les prédictions d’une semaine entière via un système de “fenêtre glissante”. Nous calculons le score RMSE (écart quadratique moyen) entre les semaines prédites et les semaines tests/réelles. Nos métriques d’évaluation des modèles sont un score global RMSE entre les semaines et un vecteur de scores RMSE pour chaque jour de la semaine.

\operatorname{RMSE}(y, \hat{y})=\sqrt{\frac{1}{n_{\text {samples }}} \sum_{i=0}^{n_{\text {samples }}-1}\left(y_{i}-\hat{y}_{i}\right)^{2}}

On va chercher à minimiser l’erreur de prédiction et donc le score RMSE qui contient les paramètres suivants :

  • n_{samples} est le nombre de prédictions attendues.
  • \hat{y} est la prédiction.
  • y est la valeur réelle.

Les différents scénarios testés sont :

  • Apprentissage sur l’historique + données calendaires
  • Apprentissage sur l’historique + données météo
  • Apprentissage sur l’historique + données calendaires + données météo

Cette expérience nous a montré que l’ajout des données météo aux données calendaires améliore la prédiction de plus de 2% par rapport à un modèle qui aurait en entrée : l’historique et les données calendaires. Ainsi, nous avons conclu à une météo-sensibilité des comportements d’achat.

Le choix du modèle LSTM

Afin de sélectionner un modèle de machine learning performant, nous avons comparé trois types de modèles prédictifs. Pour chaque modèle, nous avons procédé à une paramétrisation et sélectionner l’architecture optimale en effectuant une recherche sur grille avec la fonction sklearn GridSearchCV. Nous avons testé les 3 modèles suivant :

  • Le Gradient Boosting (GB) comme lors du challenge Intermarché
  • Le réseau de neurones multicouches (MLP)
  • Le réseau de neurones LSTM (Long Short Term Memory)

Le comparatif des modèles s’est fait dans les mêmes conditions d’expériences que précédemment. Cependant, au lieu de modifier les données en entrée du modèle, nous testions les 3 modèles avec les mêmes données en entrée des 3 modèles.

Ce benchmark de modèles montre que l’utilisation du réseau de neurones LSTM améliore la prédiction de plus de 8,5% par rapport à un modèle de gradient boosting et MLP. Pour vérifier la reproductibilité de cette conclusion, nous avons aussi fait cette expérience sur les différentes données de prédiction : le chiffre d’affaires et le nombre d’unité vendu. Le modèle LSTM était ici aussi meilleur de 5.2% et 5,6%, respectivement, par rapport au modèle MLP et GB.

Durant cette phase d’expérimentation, nous avons pu déterminer d’autres paramètres aux modèles LSTM afin qu’ils fournissent les meilleures prédictions possibles. Par exemple, 30 est le nombre de jours passés nécessaires aux LSTM pour qu’il puisse prédire la suite de cette petite série temporelle.

Le principe d’un réseau de neurones

Les réseaux de neurones forment la famille du Deep Learning au sein des méthodes d’apprentissage. L’histoire de cette technologie remonte aux années 1950 puisqu’elle est directement inspirée des réseaux de neurones biologiques qui permettent le traitement de l’information vers le cortex des mammifères.

Structure d’un perceptron

Le perceptron est la structure la plus basique d’un réseau de neurones. La première couche d’unités, en bleu dans la figure ci-dessus, correspond à p variables d’entrée. De plus, une unité de biais x_{0} reste activée pour toutes données en entrée. Toutes ces informations sont reliées vers une seule unité de sortie. Cette dernière reçoit la somme des unités qui lui sont reliées, pondérée par des poids de connexion w. Enfin, l’unité de sortie applique une fonction d’activation a. Nous obtenons donc la fonction de décision : f(x)=a\left(\sum_{j=1}^{p}\left(w_{j} x_{j}\right)+w_{0}\right).

L’entrainement d’un réseau de neurones est un processus itératif. On initialise les poids w_{j} avec des valeurs quelconques. Après chaque observation de données, les poids de connexion vont être modifiés afin de réduire l’erreur de prédiction faite par le réseau de neurones. Cette méthode d’amélioration est la descente de gradient. Il est destiné à minimiser une fonction, qui dans notre cas, est la fonction d’erreur de prédiction.

Il existe différents types de réseaux de neurones. Par exemple, un réseau de neurone multicouche est en réalité un perceptron multicouche. Certains sont principalement dédiés aux traitements des images comme les réseaux de neurones convolutifs. Pour traiter les séries temporelles, ceux sont les réseaux de neurones récurrents qui sont majoritairement utilisés.

Réseaux de neurones récurrents

Un réseau de neurones récurrents (RNN en anglais) est constitué de connexions récurrentes. En effet, les unités qui constituent le réseau sont interconnectées et interagissent entre elles, comme le montre la figure ci-dessous. De plus, comme un réseau de neurones classique, chaque connexion a un poids différent. Ainsi, la sortie d’un neurone est une combinaison non-linéaire de ses entrées.

Schéma d’un réseau de neurones récurrents

Ces types de réseau sont utilisés pour les séries temporelles. Considérons que notre série temporelle est constituée de t valeurs notées X_{0} ; X_{1} ; … ; X_{t} dans la figure ci-dessus (Rappel : t = 30 pour notre cas Classic Ride). Pour entrainer ce réseau de neurones, la première valeur X_{0} en entrée va prédire la deuxième valeur h_{0} (correspondant à X_{1}) en passant par une ou plusieurs couches de neurones noté A. Par la suite, pour prédire la troisième valeur noté h_{1}, la couche de neurones A prendra en entrée la deuxième vraie valeur X_{1} mais aussi, les poids et les valeurs d’activation de la couche précédente. Ainsi, en généralisant ce mécanisme, la prédiction d’une valeur X_{t} se fera en prenant en compte les données précédentes de X_{0} à X_{t-1} ainsi que leurs couches A respectives.

Les réseaux de neurones récurrents sont donc très utiles lorsqu’une information pertinente est apparue longtemps avant le moment où elle est nécessaire. Malheureusement, lorsque les données temporelles couvrent un long espace-temps, les RNN deviennent incapables d’apprendre à connecter ces informations capitales pour des prédictions lointaines. Ce phénomène s’explique par la disparition de gradient qui empêche de modifier les poids en fonction des événements passés. Pour pallier ce problème de dépendances à long terme, un type de RNN a été créé.

LSTM : Réseau de neurones récurrent à mémoire court et long terme

Un réseau Long Short Term Memory (LSTM) est un type de RNN. Sa principale force est de répondre au problème de disparition de gradient ce qui lui permet de gérer les dépendances à long terme. La nouveauté associée aux LSTM est l’introduction d’un état C (flèche horizontale dans les figures ci-dessous) qui va jouer le rôle de mémoire entre chaque unité A. Ce nouvel état sera toujours associé à h représentant l’unité A précédente. Ainsi, le passage de C_{t-1} à C_{t} permet de garder les informations les plus pertinentes sans problème de disparition de gradient. Nous allons décrire étape par étape le fonctionnement de ces LSTM.

Forget gate

Cette étape consiste à déterminer quelles informations ne seront pas pertinentes pour la suite des prédictions. La concaténation de l’input x_{t} et h_{t-1} passe par une fonction sigmoïde \sigma qui donnera un score f_{t} compris entre 0 et 1. Si le score de f est proche de 1, nous conserverons certainement les données. Au contraire, s’il est proche de 0, nous oublierons ces données.

Input gate

Durant cette deuxième étape, nous déterminerons les nouvelles informations que l’on stockera dans la mémoire C_{t}. Comme précédemment, la fonction sigmoïde \sigma donne un score i_{t}. Nous multiplierons ce score par \widetilde{C}_{t} proposé par la fonction de la tangente hyperbolique. Ainsi, i_{t} \times \widetilde{C}_{t} seront les nouveaux candidats. Le vecteur de mémoire sera C_{t} = f_{t} \times C_{t-1} + i_{t} \times \widetilde{C}_{t}.

Output gate

Finalement, nous devons déterminer notre sortie h_{t}. Pour cela, nous déterminons o_{t} avec la fonction sigmoïde. La mémoire C_{t} passe par la fonction d’activation de la tangente hyperbolique afin de retenir uniquement les données pertinentes. La valeur de sortie sera donc h_{t} = o_{t} \times tanh(C_{t}).

Industrialisation des prédictions

Une fois l’algorithme d’entraînement du modèle validé, plusieurs étapes sont nécessaires pour assurer le passage de l’expérimentation à l’industrialisation. La mise en production de modèles de machine learning nécessite le déploiement et l’accessibilité des modèles. De plus, l’apport des données, en temps réel, est essentiel pour réaliser les prédictions à partir de ces modèles.

Les données des boutiques Thelia pour Thelia.Services sont stocké en temps réel dans le Système de Gestion de Base de Données (SGBD) PostgreSQL. Ainsi, nous interrogeons le SGBD pour créer une petite série temporelle sur les 30 derniers jours.

L’industrialisation des modèles passe par une API (nous avons utilisé FastAPI). Ainsi, pour toute demande de prédiction, l’utilisateur doit fournir une date de fin de prédiction qui est aussi une durée de prédiction.

  • Pour une durée de prédiction inférieure à 15 jours, nous pouvons utiliser un modèle LSTM ayant été entrainé avec des données météo.
  • Pour une durée supérieure à 15 jours, nous utilisons le même modèle LSTM météo (pour la première quinzaine de jours), mais aussi un modèle basé uniquement sur l’historique et les données calendaires. En effet, nous ne pouvons pas obtenir des prévisions météorologiques de bonne qualité après 15 jours. Ainsi, pour la prédiction des jours au-delà du quinzième jour, nous utilisons un modèle sans météo.

Pour prédire les données, nous utilisons la méthode de la « fenêtre glissante ». Le réseaux LSTM prédit chaque valeur jour par jour. Ainsi, les modèles vont, à partir des 30 jours précédents disponibles, prédire le 31ème jour (qui est le lendemain en réalité) et ainsi de suite. Voici un exemple pour faire une prédiction à 40 jours :

  • X1 = [x1, x2, x3, …, x29, x30] et Y1 = [y31]
  • X2 = [x2, x3, x4, …, x30, y31] et Y2 = [y32]
  • X3 = [x3, x4, x5, …, y31, y32] et Y3 = [y33]
  • X30 = [x30, y31, y32, …, y58, y59] et Y30 = [y60]
  • X40 = [y40, y41, y42, …, y68, y69] et Y40 = [y70]

Ici,

  • Les X sont l’ensemble des valeurs en entrée du modèle LSTM.
  • Les Y sont l’unique valeur prédite à chaque étape.
  • Les x_{i} sont composés de la valeur historique à l’instant i, des données calendaires i et de la météo à l’instant i.
  • Les y_{i} sont composés de la valeur prédite à l’instant i, des données calendaires i et des prévisions météo pour l’instant i (si et seulement si elles sont disponibles, c’est-à-dire prédiction inférieure à 15 jours)

Pour finir, un pré-traitement des séries temporelles est effectué. Le modèle LSTM va apprendre la saisonnalité des séries temporelles mais la tendance peut facilement être apprise par une simple régression linéaire. Ainsi, avant l’entraînement et la prédiction, on soustrait la tendance linéaire aux données. De plus, nous centrons et normalisons les les séries temporelles. Les données prédites par le réseau LSTM sont donc traitées en annulant la normalisation et en leur ajoutant la tendance linaire.

Les prédictions sont dorénavant dans le même ordre de grandeur que les données historiques. L’affichage des résultats se fait dans un tableau de bord comme ci-dessous. Les prédictions sont en vert tandis que les données récentes sont en bleu.

Tableau de bord Thelia.Services

Notre offre de prédiction permettra d’améliorer le pilotage des sites de e-commerce équipés de Thelia.Services. Les modèles LSTM et la méthodologie présentés dans cet article pourront être modifiés selon la boutique Thelia. En effet, plusieurs approches sont possibles dans le but d’obtenir la meilleure qualité de prédiction possible. OpenStudio sait personnaliser cette offre de prédiction comme nous l’avions fait lors du challenge Intermarché sur la prédiction des volumes de ventes.