Segmenter les clients d'un site e-commerce

Introduction

Ce projet est basé sur le dataset Brazilian E-Commerce Public Dataset by Olist. Il s'agit en réalité d'un ensemble de datasets contenant les données sur les commandes passées auprès de la boutique en ligne Brésilienne Olist. Les datasets contiennent des informations sur environ 100 000 commandes effectuées de 2016 à 2018 sur plusieurs places de marché au Brésil. Plusieurs dimensions sont représentées : état de la commande, prix, paiement, performances de livraison à l'emplacement du client, attributs du produit et avis rédigés par les clients. Il y a aussi un dataset géolocalisation qui relie les codes postaux Brésiliens aux coordonnées GPS.

Les objectifs du projet sont les suivants :

  • Procéder à une segmentation des clients.
  • Comprendre les types d'utilisateurs des différents groupes.
  • Fournir une description actionnable pour ces groupes.
  • Évaluer la stabilité dans le temps pour déterminer les délais de maintenance.

Les étapes suivantes seront réalisées :

  • Préparation des données.
  • Analyse exploratoire.
  • Tests de différents modèles de clustering.
  • Mesure de la stabilité dans le temps.

Retrouvez tout le code de ce projet sur mon GitHub

Préparation des données.

Comme évoqué en introduction, nous avons à notre disposition un ensemble de dataset sous forme de fichiers CSV. Il va falloir assembler tous ces éléments avec les jointures appropriées afin de pouvoir réaliser la suite de notre travail.

Relations entre les différents datasets

Maintenant que nos données sont assemblées dans un unique dataset, nous allons procéder à une étape de feature engineering.

  • Création de variables :
  • —  customer_seller_distance
    —  shipping_fees_proportion
    —  avg_spent
    —  recency
    —  frequency

  • Simplification de variables :
  • —  preferred_payment_type : 4 modalités → 2 modalités
    —  preferred_category : 72 modalités → 10 modalités

    Exploration des données

    Matrice de corrélation

    Nous constatons des corrélations et anti-corrélations entre certaines variables numériques.

    Distributions des variables numériques

    Nous constatons en bas à droite que les notes données par les clients sont globalement très bonnes.

    Répartition des modes de paiement

    Répartition des commandes en fonction des catégories

    Nombre de commandes

    Cette dernière observation doit nous interpeller. Seulement 3 % des clients auraient passé plusieurs commandes ?

    Plusieurs hypothèses pourraient l'expliquer :

    • Les données fournies sont incomplètes.
    • Le taux de rétention des clients est catastrophique. Mais ceci serait étonnant puisque nous avons vu dans la distribution des variables numériques que les notes étaient bonnes, si elles sont réelles.
    • Il est possible pour les clients de commander sans créer de compte, un ID unique est créé lors de la commande et c'est ce mode qui est privilégié.

    Répartition géographique des clients

    Les clients se concentrent majoritairement sur la côte est du Brésil. Ceci est facilement explicable par la répartition de la population dans ce pays.
    Le site ne semble pas expédier à l'étranger, ou alors les données fournies sont incomplètes.

    Notes des clients en fonction du délai de livraison

    Sans grande surprise, les clients ont tendance à moins bien noter la prestation quand les délais de livraisons sont élevés.

    Tests des modèles de clustering

    Avant de débuter cette partie, il est important de bien déterminer ce que l'on souhaite faire et de quelle manière.

    Les différents modèles que nous allons tester :

    1. KMeans
    2. DBSCAN
    3. Birch
    4. Bisecting KMeans
    Les modèles Spectral Clustering et Agglomerative Clustering avaient également été envisagés, mais se sont avérés inadaptés pour un tel volume de données.

    Critères de comparaison des modèles :
    1. Score de silhouette.
    2. Score de Davies Bouldin.
    3. Score de Calinski Harabasz.
    4. Distances interclusters.
    5. Répartition des clients dans les clusters.
    6. Nombre de clusters.
    La répartition des clients dans les clusters, critère orienté métier, est important. Le but de cette segmentation est de fournir des groupes actionnables, notamment par un service marketing. Le nombre de clients dans chaque groupe doit donc être suffisant pour justifier les ressources nécessaires à la création d'un support de communication dédié. Pour les mêmes raisons, le nombre de clusters doit être raisonnable.

    Représentation des clusters :
    1. Projection sur t-SNE.
    2. Graphiques en barres.
    3. Diagrammes.
    Il y a forcément de la perte d'information lorsque nous réalisons une projection sur t-SNE, puisqu'il y a une réduction de dimension. Néanmoins, cette visualisation peut nous donner une impression générale quant à la qualité de la segmentation.

    Features retenues pour nos segmentations :
    Pour que nos clusters soient plus facilement interprétables et la segmentation de bonne qualité, nous allons pour l'instant limiter le nombre de features utilisées.
    1. orders_number
    2. recency
    3. frequency
    4. total_spent
    5. avg_delivery_time
    6. avg_review_score

    1. KMeans

    Pour ce modèle, il est nécessaire de définir un nombre de clusters, il va donc falloir déterminer le nombre apportant les meilleurs résultats.

    Pour ce modèle et les suivants, les résultats présentés sont les meilleurs obtenus après tuning des hyperparamètres.

    Choix du nombre de clusters

    7 semble être un bon choix pour le nombre de clusters.

    Projection sur t-SNE

    Nous voyons apparaître des groupes assez distincts.

    Répartition des clients dans les différents groupes

    La répartition est intéressante.

    Silhouettes des différents groupes

    Distances interclusters

    Attention : il s'agit ici d'une projection, des clusters apparaissant superposés pourraient ne pas l'être dans la réalité.
    En revanche, nous pouvons affirmer que ceux qui n'apparaissent pas superposés ne le sont effectivement pas.

    2. DBSCAN

    Pour ce modèle, il n'est pas possible de définir un nombre de clusters à l'avance.

    Projection sur t-SNE

    Nous voyons clairement que le clustering n'est pas satisfaisant.

    Répartition des clients dans les différents groupes

    La répartition n'est pas exploitable en l'état.

    Ce modèle n'apporte clairement pas les résultats attendus pour notre problématique, pas la peine d'aller plus loin dans les mesures.

    3. Birch

    Pour ce modèle non plus, il n'est pas possible de définir un nombre de clusters à l'avance.

    Par ailleurs, un plus grand nombre de features a été utilisé avec Birch :

    1. orders_number
    2. first_purchase_date
    3. last_purchase_date
    4. recency
    5. frequency
    6. avg_spent
    7. total_spent
    8. preferred_payment_type
    9. avg_payment_installments
    10. avg_customer_seller_distance_km
    11. avg_delivery_time
    12. avg_review_score
    Une ACP a ensuite été réalisée, pour ne garder que 8 composantes.

    Projection sur t-SNE

    La segmentation apparaît moins nette qu'avec KMEANS.

    Répartition des clients dans les différents groupes

    La répartition est moins intéressante qu'avec KMEANS.

    4. Bisecting KMeans

    Pour ce modèle, une variante de KMEANS, il est aussi nécessaire de définir un nombre de clusters, il va donc falloir déterminer le nombre apportant les meilleurs résultats.

    Choix du nombre de clusters

    5 semble être un bon choix pour le nombre de clusters.

    Projection sur t-SNE

    Nous voyons apparaître des groupes bien distincts.

    Répartition des clients dans les différents groupes

    La répartition est intéressante.

    Silhouettes des différents groupes

    Distances interclusters

    Il semble y avoir moins de superpositions qu'avec KMEANS.
    Pour rappel, il s'agit d'une projection sur deux composantes.

    Choix du modèle

    Bilan des métriques classiques

    Bisecting KMeans a les meilleurs résultats sur les scores de silhouette et de Davies Bouldin, le deuxième meilleur pour celui de Calinski Harabasz.

    Compte tenu des résultats récapitulés dans ce tableau, ainsi que nos autres critères que sont les distances interclusters et les critères métier répartition des clients et nombre de clusters, le modèle que je retiens est Bisecting KMeans.

    Stabilité à l'initialisation

    Les résultats obtenus avec Bisecting KMeans sont-ils stables lors de différentes exécutions du modèle ? Pour l'évaluer, un premier run sera réalisé en fixant le Random State, puis de multiples runs seront lancés sans fixer ce paramètre. Ensuite, la similarité entre les clusters obtenus lors du run initial et les runs suivants sera déterminée avec le score ARI (Adjusted Rand Index).

    Procédure d'évaluation de la stabilité

    Seuls les résultats des 10 premières itérations sont présentées ici.

    Nous constatons que la stabilité à l'initialisation est bonne, puisque le score ARI ne descend pas en dessous de 0,8.

    Interprétations et recommandations

    Observons les valeurs de nos variables en fonction des groupes de clients obtenus.


    Seuls les résultats des 10 premières itérations sont présentées ici.

    Ces résultats nous permettent de comprendre les types d'utilisateurs des différents groupes et de proposer des recommandations d'actions appropriées.

    Type de clients et recommandations

    Fréquence de mise à jour

    Pour évaluer à quelle fréquence il faut mettre à jour le modèle, un premier clustering va être réalisé sur une portion de notre dataset qui correspondra à une période initiale. Nous pouvons faire ceci, puisque nous disposons des dates des commandes.

    Puis, nous réaliserons ensuite des clustering successifs en ajoutant à chaque fois une tranche de temps supplémentaire à la période initiale. Il ne nous restera alors qu'à comparer les clusters de la période initiale avec ceux obtenus lors des différentes itérations à l'aide du score ARI.

    Stabilité du clustering dans le temps

    Le score ARI diminue assez rapidement dans le temps.

    On constate qu'il sera nécessaire de mettre à jour régulièrement le modèle (réentraînement) pour qu'il conserve un maximum de pertinence.

    Ceci ne posera pas de problème car la durée d'entraînement pour Bisecting KMeans dure moins d'une seconde. Et il serait de toute façon assez dommage de ne pas intégrer les potentiels nouveaux clients dans nos clusters avant le lancement des campagnes marketing.

    Conclusion

    Nous avons atteint les objectifs que nous nous étions fixés, à savoir :

    • Procéder à une segmentation des clients.
    • Comprendre les types d'utilisateurs des différents groupes.
    • Fournir une description actionnable pour ces groupes.
    • Évaluer la stabilité dans le temps pour déterminer les délais de maintenance.

    Perspectives

    À l'issue de ce premier travail, nous pouvons envisager les perspectives suivantes :

    • Tester d'autres algorithmes de clustering.
    • Faire des clusterings sur la base d'autres features.
    • Obtenir plus de données sur les clients.
    • Considérer d'autres méthodes pour partitionner les clients.
    Ce dernier point est très important. Le but de ce projet était de me familiariser avec différentes méthodes de clustering basées sur le machine learning. Mais dans un contexte métier, il est indispensable, avant de mettre en place un tel système qui peut s'avérer complexe, d'évaluer si d'autres méthodes de clustering plus simples peuvent être utilisées.

    Ici, les features choisies nous rappellent la segmentation classique RFM. Obtenir une telle segmentation ne nécessite pas d'algorithmes de machine learning. Gardons en tête que plus le nombre de features utilisées pour la segmentation sera important, plus il sera complexe d'interpréter les groupes obtenus.

    Si le manque d'interprétabilité ne pose pas forcément de problème lors de la création d'un moteur de recommandations par exemple, cela sera plus problématique si un service marketing est censé mettre en place des supports de communication spécifiques aux groupes obtenus.

    Retrouvez tout le code de ce projet sur mon GitHub