Olist : Construire un modèle de segmentation client

Contexte

Olist est une place de marché en ligne qui permet à des e-marchands de proposer leurs produits aux internautes Brésiliens. Afin d'optimiser les campagnes de communication, il est nécessaire de bien adapter le discours à chaque catégorie de clients, et donc de bien comprendre chaque typologie de clients. Pour répondre à cette problématique, il faut définir une stratégie de segmentation des clients efficace.

L'équipe marketing utilisera le modèle de segmentation. Ils auront besoin d'un outil fiable, rapide et facile à utiliser.

Chargement des modules du projet

Afin de simplifier le Notebook, les fonctions utiles sont placées dans le dossier src/.

Nous allons utiliser le langage Python, et présenter ici le code, les résultats et l'analyse sous forme de Notebook JupyterLab.

Nous allons aussi utiliser les bibliothèques usuelles d'exploration et analyse de données, afin d'améliorer la simplicité et la performance de notre code :

Chargement des données

Nous allons télécharger et dé-zipper les fichiers CSV, puis les charger en mémoire, en prenant soin d'utiliser le bon type pour chaque variable.

Le schema de données nous est donné :

Construction des variables RFM (Recency, Frequency, Monetary)

La segmentation des clients selon les variables RFM (Recency, Frequency, Monetary) est une méthode classique en marketing.

Pour un client donné, nous définissons les variables comme :

Il n'y a pas de valeurs vides et toutes les valeurs semblent "possibles" (pas de valeur impossible : une date d'achat dans le futur, ou un montant négatif...).

Observons la distribution de nos variables.

Distributions des variables

Observons les points de données dans l'espace RFM.

Nous voyons que le nombre d'achats a tendance à augmenter dans le temps. La plupart (93%) des clients achètent n'ont effectué qu'un seul achat. Le panier moyen est de 161 Reals.

Nous voyons que les clients "fréquents" ont tendance à être plus "récents", ce qui est plutôt logique (le second achat est forcément postérieur au premier...).

Scaling, Cleaning & Sampling

Nous voyons que nos variables ont des ordres de grandeur très différents et qu'il y a quelques valeurs "extrêmes" qui pourront perturber l'entraînement de nos modèles. Nous allons donc transformer nos données pour les rendre plus facilement exploitables.

Nos données sont maintenant prêtes à être exploitées.

EDA & Visualization

Distances

Nous allons chercher à observer quelle est la répartition de la distance euclidienne entre nos clients dans l'espace RFM transformé. Cette information nous donnera une indication utile pour les modèles de segmentation utilisant le voisinage des points (comme DBSCAN).

En utilisant la méthode du coude, nous voyons que la distance euclidienne entre deux points est inférieure à 0.025 pour 95% des couples de points.

Dendrogram

Nous allons voir ici la hiérarchie des variables RFM. Ceci nous permettra d'anticiper un nombre "idéal" de clusters pour notre segmentation.

Nous voyons qu'avec 4 clusters, nous sommes dans la zone la plus large entre deux nouveaux clusters. Une segmentation à 2, 5 ou 8 clusters seraient aussi possibles.

PCA (Principal Component Analysis)

Nous allons voir ici la projection des variables RFM sur les deux premières composantes principales. Ceci nous permettra de voir à quel point il sera difficile de segmenter nos clients.

Nous voyons que nos données ne semblent pas très facilement segmentables dans cet espace et que la variance expliquée par les deux premières composantes ne représente que ~67% de la variance totale. Nous devons donc bien exploiter les trois variables RFM.

Évaluation des modèles

Nous allons tenter de segmenter nos clients en utilisant différents modèles, et pour chacun de ces modèles, nous allons chercher à trouver les hyper-paramètres permettant d'obtenir les meilleurs résultats.

Nous cherchons un modèle stable, rapide à entraîner et à évaluer. et simple à interpréter : il doit proposer peu de clusters (moins de 10) qui doivent être suffisamment équilibrés et facilement différenciables.

KMeans

Le modèle K-Means est le modèle le plus simple à utiliser, et le plus rapide à entraîner. Il est donc le modèle le plus adapté pour notre problématique. De plus, nous pouvons choisir explicitement le nombre de clusters.

Ce modèle n'est pas adapté aux clusters de topologie complexe.

Meilleur résultat : 4 clusters

Nous voyons que les clusters sont bien équilibrés et définis. Il est facile de les interpréter en observant les centroïdes des clusters, ainsi que les différences de répartitions des variables :

Second meilleur résultat : 7 clusters

Nous voyons que les clusters sont un peu moins bien équilibrés et définis. Il est tout de même assez facile de les interprétés en observant les centroïdes des clusters, ainsi que les différences de répartitions des variables :

Mini-Batch K-Means

Le modèle Mini-Batch K-Means est une optimisation du modèle K-Means, permettant d'accélérer le temps d'entraînement du modèle.

Les résultats sont très similaires au K-Means et s'interprètent de la mème manière.

Meilleur résultat : 4 clusters

Nous voyons que les clusters sont bien équilibrés et définis. Il est facile de les interpréter en observant les centroïdes des clusters, ainsi que les différences de répartitions des variables :

Second meilleur résultat : 7 clusters

Nous voyons que les clusters sont un peu moins bien équilibrés et définis. Il est tout de même assez facile de les interprétés en observant les centroïdes des clusters, ainsi que les différences de répartitions des variables :

Affinity Propagation

Le modèle Affinity Propagation cherche à créer des clusters en envoyant des "messages" entre paires de points jusqu'à ce que l'algorithme ait convergé vers une segmentation stable. L'inconvénient majeur de ce modèle est sa complexité, en revanche il n'est pas nécessaire de connaître à l'avance le nombre de clusters.

Ce modèle n'est pas adapté aux clusters de topologie complexe.

Dans notre cas, nous voyons que le modèle n'a pas réussi à trouver un nombre raisonnable de clusters, malgré une recherche des meilleurs hyper-paramètres. Ce modèle n'est pas très stable et long à entraîner.

Meilleur résultat : 4 clusters

Nous voyons que les clusters sont bien définis, mais pas équilibrés. Il est facile de les interpréter en observant les centroïdes et les différences de répartitions des variables : le modèle s'est contenté de répartir les clients selon le nombre d'achats effectués :

Second meilleur résultat : 4 clusters

Le second meilleur modèle propose exactement la même classification que le premier.

Agglomerative Clustering

Le modèle Agglomerative Clustering est un modèle hiérarchique "bottom-up" qui cherche regrouper les points en fonction de leur distance. De plus, nous pouvons choisir explicitement le nombre de clusters.

Ce modèle peut obtenir de bons résultats même avec certaines topologies complexes et est assez rapide à entraîner, mais très gourmand en mémoire. Un inconvénient est qu'il n'est pas possible de prédire le cluster d'une donnée ne faisant pas partie du jeu d'entraînement.

Meilleur résultat : 2 clusters

Nous voyons que les clusters sont bien définis, mais pas très équilibrés. Il est facile de les interpréter en observant les différences de répartitions des variables. Le modèle s'est contenté de répartir les clients en deux groupes :

Second meilleur résultat : 4 clusters

Nous voyons que les clusters sont bien équilibrés et définis. Nous retrouvons la même répartition qu'avec le modèle K-Means :

Mean Shift

Le modèle Mean Shift cherche à découvrir des formes denses parmis les données. Ce modèle n'est pas très performant et ne permet pas de choisir le nombre de clusters.

Ce modèle n'est pas toujours adapté aux clusters de topologie complexe.

Meilleur résultat : 2 clusters

Nous voyons que les clusters sont bien définis, mais pas très équilibrés. Il est facile de les interpréter en observant les centroïdes et les différences de répartitions des variables. Le modèle s'est contenté de répartir les clients en deux groupes :

Second meilleur résultat : 2 clusters

Le second meilleur modèle propose exactement la même classification que le premier.

Spectral clustering

Le modèle Spectral clustering cherche à effectuer une classification (avec K-Means par exemple) après projection des données dans un espace de plus faible dimension. Ce modèle n'est pas très performant, mais permet pas de choisir le nombre de clusters.

Ce modèle est particulièrement adapté aux clusters de topologie complexe.

Meilleur résultat : 2 clusters

Nous voyons que les clusters sont bien définis, mais pas très équilibrés. Il est facile de les interpréter en observant les différences de répartitions des variables. Le modèle s'est contenté de répartir les clients en deux groupes :

Second meilleur résultat : 3 clusters

Nous voyons que les clusters sont définis mais très mal équilibrés. Le modèle s'est contenté de répartir les clients selon la fréquence :

DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

Le modèle DBSCAN cherche à identifier des groupes de haute densité, puis étendre les clusters de proche en proche à partir de ces noyaux. Ce modèle est souvent très efficace, mais gourmand en mémoire et ne permet pas de choisir le nombre de clusters.

Ce modèle est particulièrement adapté aux clusters de topologie complexe, mais de densité similaire.

Meilleur résultat : 4 clusters

Nous voyons que les clusters ne sont pas très bien équilibrés et définis. Ceci est dû au fait que les clusters ont des densités différentes et sont très "séparés". Nous pouvons identifier les clusters :

Second meilleur résultat : 4 clusters

Le second meilleur modèle propose exactement la même classification que le premier.

OPTICS (Ordering Points To Identify the Clustering Structure)

Le modèle OPTICS est proche du modèle DBSCAN et cherche à identifier des groupes de haute densité, puis étendre les clusters de proche en proche à partir de ces noyaux. Ce modèle est souvent très efficace, mais gourmand en mémoire et ne permet pas de choisir le nombre de clusters.

Ce modèle est particulièrement adapté aux clusters de topologie complexe.

Meilleur résultat : 2 clusters

Nous voyons que les clusters sont bien définis, mais pas très équilibrés. Il est facile de les interpréter en observant les différences de répartitions des variables. Le modèle s'est contenté de répartir les clients en deux groupes :

Second meilleur résultat : 2 clusters

Le second meilleur modèle propose exactement la même classification que le premier.

Birch

Le modèle OPTICS est proche du modèle DBSCAN et cherche à identifier des groupes de haute densité, puis étendre les clusters de proche en proche à partir de ces noyaux. Ce modèle est souvent très efficace, mais gourmand en mémoire et ne permet pas de choisir le nombre de clusters.

Ce modèle est particulièrement adapté aux clusters de topologie complexe.

Meilleur résultat : 2 clusters

Nous voyons que les clusters sont bien définis, mais pas très équilibrés. Il est facile de les interpréter en observant les différences de répartitions des variables. Le modèle s'est contenté de répartir les clients en deux groupes :

Second meilleur résultat : 3 clusters

Nous voyons que les clusters sont définis mais très mal équilibrés. Le modèle s'est contenté de répartir les clients selon la fréquence :

GMM (Gaussian Mixture Model)

Gaussian Mixture est un modèle probabiliste qui cherche à optimiser le maximum de vraisemblance d'un mélange de variables Gaussiennes. Ce modèle est souvent très efficace et permet de choisir le nombre de clusters.

Ce modèle n'est pas adapté aux clusters de topologie complexe.

Meilleur résultat : 2 clusters

Nous voyons que les clusters sont bien définis, mais pas très équilibrés. Il est facile de les interpréter en observant les différences de répartitions des variables. Le modèle s'est contenté de répartir les clients en deux groupes :

Second meilleur résultat : 4 clusters

Nous voyons que les clusters sont bien équilibrés et définis. Il est facile de les interpréter en observant les différences de répartitions des variables :

Bayesian Gaussian Mixture

Bayesian Gaussian Mixture est une variante du modèle Gaussian Mixture qui une régularisation pour éviter les problèmes de convergence. Ce modèle est souvent très efficace et permet de choisir le nombre de clusters, mais s'il y a plus de clusters que "nécessaires", ceux-ci ne sont pas "utilisés".

Ce modèle n'est pas adapté aux clusters de topologie complexe.

Meilleur résultat : 2 clusters

Nous voyons que les clusters sont bien définis, mais pas très équilibrés. Il est facile de les interpréter en observant les différences de répartitions des variables. Le modèle s'est contenté de répartir les clients en deux groupes :

Second meilleur résultat : 2 clusters

Le second meilleur modèle propose exactement la même classification que le premier. Le modèle est sensé trouver 5 clusters, mais n'en "utilise" que 2, qui sont suffisant pour lui pour bien décrire les données.

Comparaison

Nous pouvons distinguer plusieurs groupes de modèles, selon leurs résultats :

Par ailleurs, les modèles basés sur les méthodes "transductives" (contrairement aux méthodes "inductives") ne permettent pas de prédire le segment d'un nouveau client, seulement de décrire les clients du jeu de données initial : Agglomerative Clustering, Spectral Clustering, DBSCAN, OPTICS.

Certains modèles sont aussi trop gourmands en mémoire ou temps de traitement et donc pas adapté à notre contexte : Affinity Propagation, Mean Shift et Birch.

Au final, nous allons donc retenir le modèle K-Means à 4 clusters qui permet d'obtenir les meilleurs résultats.

Contrat de maintenance

Nous allons maintenant chercher à proposer un contrat de maintenance qui permettra de mettre à jour notre modèle en fonction des nouvelles données.

Pour celà, nous allons observer la performance de notre modèle au cours du temps en fonction de sa fréquence de mise à jour (mensuelle, trimestrielle, semestrielle ou annuelle).

Nous pouvons alors proposer 4 offres de maintenance :

Fréquence de mise à jour Performance moyenne cible Performance minimale garantie Montant Annuel
Mensuelle 0.95 0.35 12000 € HT
Trimestrielle 0.87 0.20 4000 € HT
Semestrielle 0.79 0.20 2000 € HT
Annuelle 0.79 0.20 1000 € HT