Le succès d’une entreprise dépend largement de sa connaissance du comportement de sa clientèle. Dans la plupart des cas, il est impossible de connaître chaque client de façon individuelle. Heureusement, il existe des techniques (Clustering) permettant de classer tous les clients en groupes en fonction de similitudes indentiées (charactéristiques communes).
L’objectif de ce projet est d’appliquer des techniques de clustering pour identifier les segments pertinents pour certaines activités commerciales, comme le déploiement d’une campagne marketing.
L’ensemble de données fait référence aux clients d’un distributeur en gros. Il comprend les dépenses annuelles en unités monétaires (m.u.) pour diverses catégories de produits.
#Importation des données
cust_data <- read.csv("Wholesale_customers_ data.csv")
#Structure des données
glimpse(cust_data)
## Observations: 440
## Variables: 8
## $ Channel <int> 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, ...
## $ Region <int> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ...
## $ Fresh <int> 12669, 7057, 6353, 13265, 22615, 9413, 12126,...
## $ Milk <int> 9656, 9810, 8808, 1196, 5410, 8259, 3199, 495...
## $ Grocery <int> 7561, 9568, 7684, 4221, 7198, 5126, 6975, 942...
## $ Frozen <int> 214, 1762, 2405, 6404, 3915, 666, 480, 1669, ...
## $ Detergents_Paper <int> 2674, 3293, 3516, 507, 1777, 1795, 3140, 3321...
## $ Delicassen <int> 1338, 1776, 7844, 1788, 5185, 1451, 545, 2566...
#Y a t-il de valeurs manqquantes ?
sum(is.na(cust_data))
## [1] 0
Dans ce jeu de données, il y a 440 observations et 8 variables. il n’y a aucune donnée manquante. Les six dernières variables représentent la vente annuelle, en unité monétaire (u.m), de différents produits (Frais, Lait, etc.). Donc il s’agit bel et bien de variables numériques. Les deux premières variables représentent respectivement le canal et la localisation de l’achat. Donc ces variables sont catégorielles. Vous trouverez ici une description des variables des données de ce projets. L’objectif de ce projet étant d’identifier les segments en fonction des ventes dans différents produits, les variables de localisation et de canal dans les données ne sont pas très utiles.
#Suppression des deux premières colonnes
cust_data <- cust_data[, c(-1, -2)]
#Résumé statistique des données
summary(cust_data)
## Fresh Milk Grocery Frozen
## Min. : 3 Min. : 55 Min. : 3 Min. : 25.0
## 1st Qu.: 3128 1st Qu.: 1533 1st Qu.: 2153 1st Qu.: 742.2
## Median : 8504 Median : 3627 Median : 4756 Median : 1526.0
## Mean : 12000 Mean : 5796 Mean : 7951 Mean : 3071.9
## 3rd Qu.: 16934 3rd Qu.: 7190 3rd Qu.:10656 3rd Qu.: 3554.2
## Max. :112151 Max. :73498 Max. :92780 Max. :60869.0
## Detergents_Paper Delicassen
## Min. : 3.0 Min. : 3.0
## 1st Qu.: 256.8 1st Qu.: 408.2
## Median : 816.5 Median : 965.5
## Mean : 2881.5 Mean : 1524.9
## 3rd Qu.: 3922.0 3rd Qu.: 1820.2
## Max. :40827.0 Max. :47943.0
Le résumé statistique nous montre que l’échelle sur toutes les colonnes est la même donc nous n’avons pas besoin de normaliser les données. Il est important de toujours vérifier l’échelle des différentes variables avant de procéder à la segmentation car la plupart des algorithmes de Clustering se base sur le calcul de la distance entre des points. De ce fait, si les valeurs ne sont pas à la même échelle le calcul sera biaisé et on aura pas un résultat exploitable. De plus il faut vérifier la faisabilité de l’analyse de clustering en calculant la statistique Hopkins.
#Calcul de la statistique Hopkins
get_clust_tendency(cust_data, graph = FALSE, n = 50, seed = 123)
## $hopkins_stat
## [1] 0.06354846
##
## $plot
## NULL
La statistique Hopkins est entre 0 et 1. Une valeur de Hopkins plus proche de 1 indique des structures aléatoires dans l’ensemble de données. Ici, la statistique Hopkins est égale à 0,064 donc très proche de 0. Donc il existe des clusters valides dans l’ensemble de nos données.
L’algorithme de clustering K-means est un algorithme de partitionnement qui permet de trouver un nombre pré-défini k de sous-groupes (clusters) homogènes dans un grand ensemble de données. Il fait partie de l’apprentissage non supervisé. L’idée basique des méthodes de regroupement (ou de partitionnement) est de définir des clusters de telle sorte sorte que la variation inter-groupe (en anglais, c’est le “total within sum of square”) soit minimisée.
Sauf dans certains cas précis, on ne connait pas d’avance le nombre de clusters. Plusieurs méthodes comme la méthode du coude, la méthode de la silhouette, Méthode statistique des écarts permettent de déterminer le nombre optimal de clusters. Trouver ici des explications claires sur ces méthodes.
Nous utiliserons trois différentes méthodes pour choisir la valeur de k.
La méthode de statistique d’écart compare le total de la variation intra-groupe pour différentes valeurs de k avec les valeurs attendues dans la distribution de référence nulle des données. L’estimation du nombre optimal de groupes sera une valeur qui maximisera la statistique d’écart (c’est-à-dire qui produit la statistique d’écart la plus grande). Pour cette méthode, on utilise simplement la fonction NbClust().
Avec la méthode du coude (Elbow method), le meilleur k est celui à partir duquel on observe plus d’amélioration sensible de la qualié du modèle (c’est-à-dire le total within sum of square) au fur et à mesure que le k augmente (k = 1 à 10 par exemple). Pour cette valeur k, on observera une coude au niveau de la courbe total within sum of square en fonction de Number of clusters k.
La méthode de la silhouette moyenne mesure à quel point chaque individu (observation) est intégré dans son groupe. Une largeur de silhouette moyenne élevée indique un bon cluster. La méthode de la silhouette moyenne calcule la silhouette moyenne des observations pour différentes valeurs de k. Le nombre optimal de groupes k est celui qui maximise la silhouette moyenne sur une plage de valeurs possibles pour k.
#Calcul du nombe optimal de clusters par la fonction : NbClust()
NbClust(data = cust_data, distance = "euclidean", method = "kmeans")
## *** : The Hubert index is a graphical method of determining the number of clusters.
## In the plot of Hubert index, we seek a significant knee that corresponds to a
## significant increase of the value of the measure i.e the significant peak in Hubert
## index second differences plot.
##
## *** : The D index is a graphical method of determining the number of clusters.
## In the plot of D index, we seek a significant knee (the significant peak in Dindex
## second differences plot) that corresponds to a significant increase of the value of
## the measure.
##
## *******************************************************************
## * Among all indices:
## * 1 proposed 2 as the best number of clusters
## * 11 proposed 3 as the best number of clusters
## * 2 proposed 4 as the best number of clusters
## * 1 proposed 5 as the best number of clusters
## * 4 proposed 8 as the best number of clusters
## * 1 proposed 10 as the best number of clusters
## * 1 proposed 12 as the best number of clusters
## * 1 proposed 14 as the best number of clusters
## * 1 proposed 15 as the best number of clusters
##
## ***** Conclusion *****
##
## * According to the majority rule, the best number of clusters is 3
##
##
## *******************************************************************
## $All.index
## KL CH Hartigan CCC Scott Marriot TrCovW
## 2 0.2002 139.3467 213.8768 3.6894 850.0183 1.306955e+60 7.820519e+20
## 3 2.6942 210.1526 104.2839 5.6955 1207.5655 1.304765e+60 2.240733e+20
## 4 1.0783 207.8197 95.4616 3.2062 1595.2669 9.610274e+59 1.752255e+20
## 5 2.3433 213.3661 54.7550 3.7014 1832.3089 8.761683e+59 9.448263e+19
## 6 0.8998 202.6626 55.2290 4.6762 2030.7408 8.036949e+59 7.329863e+19
## 7 0.7423 199.1221 67.4358 6.1912 2228.1542 6.984435e+59 6.343697e+19
## 8 12.5452 206.4132 21.1059 8.9657 2577.5180 4.123648e+59 4.472581e+19
## 9 0.1497 191.6292 42.2033 8.4139 2656.3555 4.362861e+59 4.025367e+19
## 10 3.2703 191.2608 22.1807 9.7579 2832.5330 3.609054e+59 3.307582e+19
## 11 0.6117 182.8059 26.5497 9.7197 3017.8060 2.866211e+59 3.095422e+19
## 12 0.8903 178.4687 27.7134 10.1796 3109.5297 2.769179e+59 2.635593e+19
## 13 1.2817 176.0864 23.5879 10.8531 3278.5027 2.213571e+59 2.767068e+19
## 14 9.8981 172.9287 8.6155 11.3109 3368.3957 2.092837e+59 2.446771e+19
## 15 0.0359 164.0536 48.3885 10.6840 3417.7369 2.147635e+59 2.401787e+19
## TraceW Friedman Rubin Cindex DB Silhouette Duda Pseudot2
## 2 119558984543 23.8160 2.2783 0.1410 1.4434 0.4560 0.6337 224.2598
## 3 80332413843 26.4792 3.3908 0.1268 1.1175 0.4784 1.2170 -26.9273
## 4 64855545528 31.7989 4.1999 0.1065 1.0629 0.3866 0.9585 5.3233
## 5 53206131318 35.5905 5.1195 0.0924 1.0817 0.3725 1.3944 -44.9731
## 6 47257645388 38.3343 5.7639 0.0997 1.1541 0.3186 1.4368 -27.3624
## 7 41922735726 41.2473 6.4974 0.0908 1.1485 0.3159 2.1220 -80.3708
## 8 36273469993 45.3672 7.5093 0.1033 1.0286 0.3195 1.7861 -51.0527
## 9 34583835238 47.2070 7.8762 0.0977 1.0728 0.3108 1.1325 -9.5946
## 10 31499429426 53.2201 8.6474 0.0967 1.1261 0.2766 1.4466 -29.6358
## 11 29954296529 55.1001 9.0935 0.0920 1.0917 0.2776 2.2725 -27.9981
## 12 28208543911 60.0246 9.6562 0.0866 1.0579 0.2665 1.2820 -16.9388
## 13 26493094146 61.6382 10.2815 0.0970 1.1698 0.2493 2.4068 -47.3447
## 14 25106204367 64.4749 10.8494 0.0969 1.0718 0.2604 2.7999 -69.4272
## 15 24608516850 66.1667 11.0689 0.0977 1.1350 0.2262 3.5971 -30.3241
## Beale Ratkowsky Ball Ptbiserial Frey McClain Dunn Hubert
## 2 2.2178 0.2920 59779492271 0.4106 -0.0007 0.1641 0.0148 0
## 3 -0.6745 0.3260 26777471281 0.6010 3.3450 0.2588 0.0169 0
## 4 0.1636 0.3289 16213886382 0.5238 1.4382 0.4616 0.0155 0
## 5 -1.0774 0.3025 10641226264 0.4840 3.4153 0.6721 0.0145 0
## 6 -0.9747 0.2937 7876274231 0.4389 1.1288 0.8795 0.0146 0
## 7 -1.9881 0.2801 5988962247 0.4081 -0.1092 1.1064 0.0142 0
## 8 -1.6539 0.2858 4534183749 0.4093 0.9357 1.1024 0.0163 0
## 9 -0.4394 0.2716 3842648360 0.3935 8.0415 1.2351 0.0167 0
## 10 -1.1768 0.2595 3149942943 0.3531 0.6273 1.5827 0.0054 0
## 11 -2.0410 0.2527 2723117866 0.3427 0.5080 1.7139 0.0142 0
## 12 -0.8207 0.2424 2350711993 0.3327 0.9585 1.8470 0.0086 0
## 13 -2.2107 0.2360 2037930319 0.3228 0.5016 1.9785 0.0154 0
## 14 -2.4195 0.2287 1793300312 0.3156 -6.3132 2.0804 0.0095 0
## 15 -2.7065 0.2215 1640567790 0.2843 -0.4692 2.6072 0.0152 0
## SDindex Dindex SDbw
## 2 8e-04 12586.767 1.4125
## 3 7e-04 10492.876 1.3148
## 4 9e-04 9511.550 1.4042
## 5 8e-04 8447.811 1.2716
## 6 1e-03 8117.653 1.3865
## 7 9e-04 7470.396 1.2558
## 8 9e-04 7261.920 1.2275
## 9 8e-04 7020.144 1.1501
## 10 8e-04 6683.115 1.0208
## 11 8e-04 6492.153 0.9631
## 12 8e-04 6233.716 0.8927
## 13 8e-04 6049.322 0.7696
## 14 8e-04 5836.016 0.6135
## 15 9e-04 5725.528 0.5905
##
## $All.CriticalValues
## CritValue_Duda CritValue_PseudoT2 Fvalue_Beale
## 2 0.8055 93.6752 0.0388
## 3 0.6721 73.6763 1.0000
## 4 0.6683 61.0529 0.9861
## 5 0.7238 60.6832 1.0000
## 6 0.2445 278.1308 1.0000
## 7 0.6378 86.3332 1.0000
## 8 0.6349 66.7150 1.0000
## 9 0.6319 47.7728 1.0000
## 10 0.7301 35.4937 1.0000
## 11 0.5097 48.0978 1.0000
## 12 0.5992 51.4987 1.0000
## 13 0.6721 39.5217 1.0000
## 14 0.6433 59.8918 1.0000
## 15 0.6222 25.4996 1.0000
##
## $Best.nc
## KL CH Hartigan CCC Scott Marriot
## Number_clusters 8.0000 5.0000 3.0000 14.0000 4.0000 8.000000e+00
## Value_Index 12.5452 213.3661 109.5928 11.3109 387.7014 3.100001e+59
## TrCovW TraceW Friedman Rubin Cindex DB
## Number_clusters 3.000000e+00 3 10.000 8.000 12.0000 8.0000
## Value_Index 5.579786e+20 23749702385 6.013 -0.645 0.0866 1.0286
## Silhouette Duda PseudoT2 Beale Ratkowsky Ball
## Number_clusters 3.0000 3.000 3.0000 3.0000 4.0000 3
## Value_Index 0.4784 1.217 -26.9273 -0.6745 0.3289 33002020990
## PtBiserial Frey McClain Dunn Hubert SDindex Dindex
## Number_clusters 3.000 1 2.0000 3.0000 0 3e+00 0
## Value_Index 0.601 NA 0.1641 0.0169 0 7e-04 0
## SDbw
## Number_clusters 15.0000
## Value_Index 0.5905
##
## $Best.partition
## [1] 3 3 3 3 1 3 3 3 3 2 3 3 1 3 1 3 3 3 3 3 3 3 1 2 1 3 3 3 2 1 3 3 3 1 3
## [36] 3 1 3 2 1 1 3 3 2 3 2 2 2 3 2 3 3 1 3 1 3 2 3 3 3 3 2 3 3 3 2 3 3 3 3
## [71] 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 2 2 1 3 1 3 3 2 3 3 3 3 3 3 3 3 3 3 1 3
## [106] 3 3 3 3 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 3 1 3 3 3 3 3 3 3 3 3 3
## [141] 3 1 1 3 3 2 3 3 3 1 3 3 3 3 3 2 3 3 3 3 3 3 3 2 3 2 3 3 3 3 3 2 3 2 3
## [176] 3 1 3 3 3 3 1 3 1 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 2 2 1 3 3 2 3 3 3 2
## [211] 3 2 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 1 1 1 3 3 3
## [246] 3 3 3 3 3 3 2 3 1 3 1 3 3 1 1 3 3 1 3 3 2 2 3 2 3 3 3 3 1 3 3 1 3 3 3
## [281] 3 3 1 1 1 1 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 2 3 3 2 3 2 3 3 2 3 1 2 3 3
## [316] 3 3 3 3 2 3 3 3 3 1 1 3 3 3 3 3 2 3 2 3 1 3 3 3 3 3 3 3 2 3 3 3 1 3 2
## [351] 3 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 1 3 3 1 3 1 3 2
## [386] 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 1 1 1 3 3 1 2 3 3 3 3 3 3 3 3 3 3 2 3
## [421] 3 3 1 3 3 3 3 1 3 3 3 3 3 3 3 1 1 2 3 3
#Méthode du coude pour déterminer le meilleur nombre de clusters
elbow_method <- fviz_nbclust(cust_data, FUNcluster = kmeans, method = "wss")
elbow_method
#Méthode de la silhouette moyenne
silhouette_method <- fviz_nbclust(cust_data, FUNcluster = kmeans, method = "silhouette")
silhouette_method
Parmi les trois méthodes, deux nous suggèrent de considérer k = 3. Seule la méthode de la silhouette moyenne nous a donné une valeur du k optimal égale à 2. En appliquant la règle de la majorité (Vive la démocratie :) ), le meilleur nombre de clusters est 3.
Nous pouvons à présent implémenter l’algorithme k-means à l’ensemble de nos données en considérant 3 comme nombre de clusters.
set.seed(123)
#Exécutation de l'algorithme k-means avec k = 3
kmeans_out <- kmeans(cust_data, centers = 3, nstart = 50)
kmeans_out
## K-means clustering with 3 clusters of sizes 60, 50, 330
##
## Cluster means:
## Fresh Milk Grocery Frozen Detergents_Paper Delicassen
## 1 35941.40 6044.450 6288.617 6713.967 1039.667 3049.467
## 2 8000.04 18511.420 27573.900 1996.680 12407.360 2252.020
## 3 8253.47 3824.603 5280.455 2572.661 1773.058 1137.497
##
## Clustering vector:
## [1] 3 3 3 3 1 3 3 3 3 2 3 3 1 3 1 3 3 3 3 3 3 3 1 2 1 3 3 3 2 1 3 3 3 1 3
## [36] 3 1 3 2 1 1 3 3 2 3 2 2 2 3 2 3 3 1 3 1 3 2 3 3 3 3 2 3 3 3 2 3 3 3 3
## [71] 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 2 2 1 3 1 3 3 2 3 3 3 3 3 3 3 3 3 3 1 3
## [106] 3 3 3 3 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 3 1 3 3 3 3 3 3 3 3 3 3
## [141] 3 1 1 3 3 2 3 3 3 1 3 3 3 3 3 2 3 3 3 3 3 3 3 2 3 2 3 3 3 3 3 2 3 2 3
## [176] 3 1 3 3 3 3 1 3 1 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 2 2 1 3 3 2 3 3 3 2
## [211] 3 2 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 1 1 1 3 3 3
## [246] 3 3 3 3 3 3 2 3 1 3 1 3 3 1 1 3 3 1 3 3 2 2 3 2 3 3 3 3 1 3 3 1 3 3 3
## [281] 3 3 1 1 1 1 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 2 3 3 2 3 2 3 3 2 3 1 2 3 3
## [316] 3 3 3 3 2 3 3 3 3 1 1 3 3 3 3 3 2 3 2 3 1 3 3 3 3 3 3 3 2 3 3 3 1 3 2
## [351] 3 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 1 3 3 1 3 1 3 2
## [386] 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 1 1 1 3 3 1 2 3 3 3 3 3 3 3 3 3 3 2 3
## [421] 3 3 1 3 3 3 3 1 3 3 3 3 3 3 3 1 1 2 3 3
##
## Within cluster sum of squares by cluster:
## [1] 25765310312 26382784678 28184318853
## (between_SS / total_SS = 49.0 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss"
## [5] "tot.withinss" "betweenss" "size" "iter"
## [9] "ifault"
# Visualisation des résultats
fviz_cluster(kmeans_out, data = cust_data)
Évidemment, trois clusters sont formés et cela est conforme à notre paramètre k qui a été transmis à l’algorithme. Nous voyons que le premier groupe contient 60 observations, le deuxième groupe contient 50 observations et le troisième groupe contient 330 observations. Chacune des observations de notre ensemble des données est affectée à l’un de ces trois groupes (1, 2 ou 3).
Ce qui est aussi intéressant dans le résultat est que l’algorithme fournit également le centroïde (centre de gravité) de chaque cluster. Le centroïde est représentatif de tous les points d’un cluster particulier. Comme il n’est pas possible d’étudier chacune des observations individuelles affectées à un cluster et de déterminer les caractéristiques commerciales du cluster, le centre de gravité du cluster peut être utilisé comme représentant de tous les points du cluster. Le centre de gravité du cluster nous aide à arriver rapidement à une conclusion en termes de définition du contenu d’un cluster ce qui est très important par exemple en Marketing.
En Apprentissage supervisé, on dispose de données étiquettées ce qui permet de comparer les prédictions du modèle aux réelles observations. En apprentissage non-supervisé, comme c’est le cas ici, cette comparaison ne peut se faire car les données ne sont pas étiquettées. Comment mesurer alors la qualité de notre partitionnement ?
L’objectif du clustering est d’obtenir des clusters de bonne qualité. Le clustering est de haute qualité si la distance dans les observations (intra-cluster) d’un cluster donné est minimale et la distance séparant les clusters eux-mêmes (inter-cluster) est maximale. Malheureusement, il n’y aucune valeur seuil (ou valeur de référence) pour dire la distance intra-cluster est minimale ou si la distance inter-cluster est maximale.
Pour mesurer la qualité du clustering, on peut calculer le coefficient de Silhouette pour chacun des trois groupes. L’indice Silhouette est calculé en utilisant la distance intra-cluster moyenne, a, et la distance moyenne du cluster le plus proche, b, pour chacune des observations participant à l’exercice de clustering. Pour une observation, l’indice Silhouette est donné par la formule : (b - a)/max(a, b).
#Calcul de l'indice Silhouette
si <- silhouette(kmeans_out$cluster, dist(cust_data, "euclidean"))
summary(si)
## Silhouette of 440 units in 3 clusters from silhouette.default(x = kmeans_out$cluster, dist = dist(cust_data, from "euclidean")) :
## Cluster sizes and average silhouette widths:
## 60 50 330
## 0.2524346 0.1800059 0.5646307
## Individual silhouette widths:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.1544 0.3338 0.5320 0.4784 0.6743 0.7329
La largeur de silhouette moyenne de chaque cluster est positive et plus proche de 1 plutôt que de -1. Donc, on peut dire que ce clustering est de bonne qualité.
Il ne s’agit pas de faire du clustering et de s’en arrêter là ! Le data scientist doit pouvoir comprendre ce que chacun de ces clusters formés signifie pour l’entreprise.
#Centre de gravité de chaque cluster
centroide <- kmeans_out$centers
centroide
## Fresh Milk Grocery Frozen Detergents_Paper Delicassen
## 1 35941.40 6044.450 6288.617 6713.967 1039.667 3049.467
## 2 8000.04 18511.420 27573.900 1996.680 12407.360 2252.020
## 3 8253.47 3824.603 5280.455 2572.661 1773.058 1137.497
#Dépense moyenne effectuée par les clients pour chaque groupe
for (i in 1:3) {
print(sum(centroide[i, ]))
}
## [1] 59077.57
## [1] 70741.42
## [1] 22841.74
En ayant les caractériques de chaque centre de gravité, nous pouvons tirer des informations pour chacun des groupes qui permettront d’avoir une campagne marketing efficace.
Le groupe 3 est le moins dépensier (22841,74 u.m) avec la majorité des dépenses allouées à la catégorie “Frais” ;
Le groupe 2 est le plus dépensier (70741,42 u.m) avec la majorité des dépenses allouées à la catégorie “Epicerie” ;
Le groupe 1 est dépensier moyen (59077,57 u.m) avec la majorité des dépenses allouées à la catégorie “Frais”.
Si par exemple, l’objectif est de faire dépenser davantage les clients, l’entreprise peut déployer une campagne marketing auprès des clients du groupe 2 dont les dépenses pour chaque catégorie de produits sont inférieures à celles du centroïde du groupe 2.
L’exploitation des résultats d’un clustering déppend des objectifs business fixés au départ par l’entreprise.
Le clustering est une technique d’apprentissage automatique non-supervisé. L’algorithme K-means est l’algorithme de clustering le plus populaire. Tout exercice de clustering doit commencer d’abord par la vérification de l’existence de groupes similaires distincts dans un ensemble des données. S’il n’y a aucune structuration dans les données (données purement aléatoires), il est donc inutile d’implémenter un algorithme de clustering. La vérification est faite par le calcul statistique Hopkins. Ensuite, nous avons déterminé le nombre optimal de clusters (k) à utiliser dans l’implémentation de l’algorithme K-means. Enfin, après avoir implémenter le K-means, nous avons mesuré la qualité du partitionnement puis tiré des informations utiles à l’entreprise dans le déployement de sa campagne marketing.
Trouvez ici un très bon document pour en appendre davantage sur le clustering dans R.