Algorithme k-means : Exemple simple
Notre article vous guide à travers un exercice pratique pour mieux comprendre l’algorithme k-means. Plongez dans cette lecture pour élucider cette méthode de clustering et découvrir comment elle peut transformer vos données en informations claires et exploitables.
INTRODUCTION
L’entreprise MAAV réalise une étude sur ses clients afin de les regrouper en trois clusters. Son objectif est d’attribuer des bonus en fonction de leurs transferts sur la puce les mardis et vendredis. Pour le premier groupe, elle souhaite offrir un bonus de 100 %, pour le second, un bonus de 150 % et pour le troisième, un bonus de 200 %. Elle fait donc appel à vous pour cette tâche.
Vous décidez d’utiliser un échantillon des clients de l’entreprise MAAV pour effectuer votre analyse.
- Pour rappel, un échantillon est un sous-ensemble représentatif de la population. (Voir article Statistique inférentielle : Importance et exemples concrets).
DEVELOPPEMENT
Vous sélectionnez donc les clients suivants :
NOMS | MARDI | VENDREDI |
ABOULE (A) | 4 000 | 6 000 |
BADOLO (B) | 2 000 | 1 000 |
COULIBALY (C) | 8 000 | 300 |
DAGNOGO (D) | 3 000 | 8 000 |
ETOHO (E) | 7 000 | 9 000 |
FOFANA (F) | 400 | 800 |
GOGOUA (G) | 1 500 | 6 500 |
HOUNGBEDI (H) | 9 000 | 9 500 |
KOUAME (K) | 700 | 500 |
NADOU (N) | 300 | 300 |
Votre objectif est d’utiliser l’algorithme k-means pour créer trois groupes, chacun ayant son propre bonus.
À partir de cette base de donnée, nous pouvons faire une représentation graphique dans laquelle nous placerons les points suivants : A(4 000 ; 6 000), B(2 000 ; 1 000), C(8 000 ; 300), D(3 000 ; 8 000), E(7 000 ; 9 000), F(400 ; 800), G(1 500 ; 6 500), H(9 000 ; 9 500), K(700 ; 500) et N(300 ; 300).
On obtient donc le graphique suivant :
Puisque nous voulons former trois groupes, nous allons choisir aléatoirement trois points sur le plan, comme le fait l’algorithme. Ces points sont appelés centroïdes. Soient donc les points : C1(5 000 ; 7 000), C2(8 000 ; 7 000) et C3(5 000 ; 10 000).
Représentation graphique :
Dessinons un tableau pour représenter tout cela :
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
5000 | 7000 | 8000 | 7000 | 5000 | 10000 | |||||
A | 4000 | 6000 | ||||||||
B | 2000 | 1000 | ||||||||
C | 8000 | 300 | ||||||||
D | 3000 | 8000 | ||||||||
E | 7000 | 9000 | ||||||||
F | 400 | 800 | ||||||||
G | 1500 | 6500 | ||||||||
H | 9000 | 9500 | ||||||||
K | 700 | 500 | ||||||||
N | 300 | 300 |
D’abord, nous calculerons les distances des points A, B, C, D, E, F, G, H, K et N jusqu’aux centroïdes c1, c2 et c3 en utilisant la distance euclidienne.
Pour calculer la distance du point A au centroïde C1, on utilise la formule de la distance euclidienne :
1414,213562
Et on note le résultat dans le tableau comme suit :
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
5000 | 7000 | 8000 | 7000 | 5000 | 10000 | |||||
A | 4000 | 6000 | 1414,213562 | |||||||
B | 2000 | 1000 | ||||||||
C | 8000 | 300 | ||||||||
D | 3000 | 8000 | ||||||||
E | 7000 | 9000 | ||||||||
F | 400 | 800 | ||||||||
G | 1500 | 6500 | ||||||||
H | 9000 | 9500 | ||||||||
K | 700 | 500 | ||||||||
N | 300 | 300 |
Nous procédons de la même manière pour les autres centroïdes et on obtient :
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
5000 | 7000 | 8000 | 7000 | 5000 | 10000 | |||||
A | 4000 | 6000 | 1414,213562 | 4123,105626 | 4123,105626 | |||||
B | 2000 | 1000 | ||||||||
C | 8000 | 300 | ||||||||
D | 3000 | 8000 | ||||||||
E | 7000 | 9000 | ||||||||
F | 400 | 800 | ||||||||
G | 1500 | 6500 | ||||||||
H | 9000 | 9500 | ||||||||
K | 700 | 500 | ||||||||
N | 300 | 300 |
Après cela, on note dans la colonne ” Cluster ” le numéro du centroïde le plus proche du point ( celui par rapport auquel la distance est la plus petite ). Par exemple le centroïde le plus proche du point A est c1, on notera donc 1.
De cette même manière, on obtient les résultats suivants :
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
5000 | 7000 | 8000 | 7000 | 5000 | 10000 | |||||
A | 4000 | 6000 | 1414,213562 | 4123,105626 | 4123,105626 | 1 | ||||
B | 2000 | 1000 | ||||||||
C | 8000 | 300 | ||||||||
D | 3000 | 8000 | ||||||||
E | 7000 | 9000 | ||||||||
F | 400 | 800 | ||||||||
G | 1500 | 6500 | ||||||||
H | 9000 | 9500 | ||||||||
K | 700 | 500 | ||||||||
N | 300 | 300 |
En faisant pareil pour tous les points, on obtient le tableau suivant:
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
5000 | 7000 | 8000 | 7000 | 5000 | 10000 | |||||
A | 4000 | 6000 | 1414,213562 | 4123,105626 | 4123,105626 | 1 | ||||
B | 2000 | 1000 | 6708,203932 | 8485,281374 | 9486,832981 | 1 | ||||
C | 8000 | 300 | 7340,980861 | 6700 | 10153,32458 | 2 | ||||
D | 3000 | 8000 | 2236,067977 | 5099,019514 | 2828,427125 | 1 | ||||
E | 7000 | 9000 | 2828,427125 | 2236,067977 | 2236,067977 | 3 | ||||
F | 400 | 800 | 7720,103626 | 9808,159868 | 10285,9127 | 1 | ||||
G | 1500 | 6500 | 3535,533906 | 6519,202405 | 4949,747468 | 1 | ||||
H | 9000 | 9500 | 4716,990566 | 2692,582404 | 4031,128874 | 2 | ||||
K | 700 | 500 | 7793,587107 | 9774,456507 | 10427,84733 | 1 | ||||
N | 300 | 300 | 8184,130986 | 10206,86044 | 10778,68267 | 1 |
En image, voici le clustering fait par l’ordinateur :
L’on voit bien le cluster 1 en violet, le cluster 2 en bleu et le cluster 3 en orange.
Ensuite, nous mettons à jour les centroïdes. Pour minimiser les erreurs, comme mentionné dans notre article précédent, nous choisissons les centres de gravité des points formant chaque cluster comme nouveaux centroïdes.
Nous obtenons ainsi les nouveaux centroïdes : c1(1 700 ; 3 300), c2(8 500 ; 4 900) et c3(7 000 ; 9 000). Nous refaisons alors les mêmes calculs de distance.
Ensuite, nous notons dans la colonne “Nouveau Cluster” le numéro du centroïde le plus proche pour chaque point.
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
1700 | 3300 | 8500 | 4900 | 7000 | 9000 | |||||
A | 4000 | 6000 | 3546,82957 | 4632,493929 | 4242,640687 | 1 | 1 | |||
B | 2000 | 1000 | 2319,482701 | 7580,237463 | 9433,981132 | 1 | 1 | |||
C | 8000 | 300 | 6977,82201 | 4627,094121 | 8757,282684 | 2 | 2 | |||
D | 3000 | 8000 | 4876,474136 | 6313,477647 | 4123,105626 | 1 | 3 | |||
E | 7000 | 9000 | 7783,315489 | 4365,775991 | 0 | 3 | 3 | |||
F | 400 | 800 | 2817,800561 | 9078,546139 | 10526,15789 | 1 | 1 | |||
G | 1500 | 6500 | 3206,243908 | 7180,529228 | 6041,522987 | 1 | 1 | |||
H | 9000 | 9500 | 9577,577982 | 4627,094121 | 2061,552813 | 2 | 3 | |||
K | 700 | 500 | 2973,213749 | 8955,445271 | 10580,17013 | 1 | 1 | |||
N | 300 | 300 | 3310,589071 | 9402,127419 | 10980,8925 | 1 | 1 |
On obtient le clustering suivant :
Enfin, nous allons effacer les éléments de la colonne ” Cluster ” et les remplacer par ceux de la colonne ” Nouveau Cluster “. Puis nous allons tout simplement reprendre les calculs des distances afin d’obtenir de nouveaux clustering.
L’on s’arrêtera lorsque les clustering se seront stabilisés ( c’est a dire que le clustering obtenu a l’étape n+1 est le même que celui obtenu a l’étape n ).
On obtient donc :
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
1483,33 | 2516,67 | 8000 | 300 | 6333,3 | 8833,33 | |||||
A | 4000 | 6000 | 4297,349855 | 6963,476143 | 3670,428828 | 1 | 3 | |||
B | 2000 | 1000 | 1602,259585 | 6040,695324 | 8952,013616 | 1 | 1 | |||
C | 8000 | 300 | 6883,35774 | 0 | 8694,573582 | 2 | 2 | |||
D | 3000 | 8000 | 5689,217501 | 9180,958556 | 3435,888208 | 3 | 3 | |||
E | 7000 | 9000 | 8512,767809 | 8757,282684 | 687,2174175 | 3 | 3 | |||
F | 400 | 800 | 2029,9162 | 7616,42961 | 9986,913426 | 1 | 1 | |||
G | 1500 | 6500 | 3983,364881 | 8982,761268 | 5367,049262 | 1 | 1 | |||
H | 9000 | 9500 | 10259,98176 | 9254,188241 | 2748,77023 | 3 | 3 | |||
K | 700 | 500 | 2163,461065 | 7302,739212 | 10058,75031 | 1 | 1 | |||
N | 300 | 300 | 2512,74666 | 7700 | 10450,76216 | 1 | 1 |
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
980 | 1820 | 8000 | 300 | 5750 | 8125 | |||||
A | 4000 | 6000 | 5156,820726 | 6963,476143 | 2752,839443 | 3 | 3 | |||
B | 2000 | 1000 | 1308,739852 | 6040,695324 | 8051,591458 | 1 | 1 | |||
C | 8000 | 300 | 7182,673597 | 0 | 8142,059015 | 2 | 2 | |||
D | 3000 | 8000 | 6501,75361 | 9180,958556 | 2752,839443 | 3 | 3 | |||
E | 7000 | 9000 | 9369,781214 | 8757,282684 | 1525,819452 | 3 | 3 | |||
F | 400 | 800 | 1173,371212 | 7616,42961 | 9070,729023 | 1 | 1 | |||
G | 1500 | 6500 | 4708,800272 | 8982,761268 | 4550,068681 | 1 | 3 | |||
H | 9000 | 9500 | 11104,17939 | 9254,188241 | 3528,898553 | 3 | 3 | |||
K | 700 | 500 | 1349,370223 | 7302,739212 | 9145,66154 | 1 | 1 | |||
N | 300 | 300 | 1665,172664 | 7700 | 9535,886168 | 1 | 1 |
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
850 | 650 | 8000 | 300 | 4900 | 7800 | |||||
A | 4000 | 6000 | 6208,461967 | 6963,476143 | 2012,46118 | 3 | 3 | |||
B | 2000 | 1000 | 1202,081528 | 6040,695324 | 7392,563831 | 1 | 1 | |||
C | 8000 | 300 | 7158,561308 | 0 | 8115,417426 | 2 | 2 | |||
D | 3000 | 8000 | 7658,00235 | 9180,958556 | 1910,497317 | 3 | 3 | |||
E | 7000 | 9000 | 10370,39054 | 8757,282684 | 2418,677324 | 3 | 3 | |||
F | 400 | 800 | 474,341649 | 7616,42961 | 8321,658489 | 1 | 1 | |||
G | 1500 | 6500 | 5886,00034 | 8982,761268 | 3640,054945 | 3 | 3 | |||
H | 9000 | 9500 | 12031,00162 | 9254,188241 | 4438,468204 | 3 | 3 | |||
K | 700 | 500 | 212,1320344 | 7302,739212 | 8421,995013 | 1 | 1 | |||
N | 300 | 300 | 651,9202405 | 7700 | 8798,295289 | 1 | 1 |
On obtient donc les 3 clusters suivants :
Cluster 1 : B, F, K, N ( Celui des clients qui dépensent peu ) donc bonus de 100 %
Cluster 2 : C ( Celui de ceux qui dépensent fortement seulement le MARDI ou en semaine ) donc bonus de 150 %
Cluster 3 : A, D, E, G, H ( Celui de ceux qui dépensent assez les MARDI et VENDREDI ) donc bonus de 200 %
Remarquons que si nous étions tombé de façon aléatoire sur d’autres centroïdes, nous aurions eu un autre clustering. Par exemple si nous avions eu comme centroïdes de départ, les points : c1(1 000 ; 3 000), c2(1 500 ; 8 000) et c3( 8 000 ; 5 000), au bout de seulement 2 itérations, les clusters se seraient stabilisés et nous aurions eu :
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
1000 | 3000 | 1500 | 8000 | 8000 | 5000 | |||||
A | 4000 | 6000 | 4242,640687 | 3201,562119 | 4123,105626 | 2 | ||||
B | 2000 | 1000 | 2236,067977 | 7017,834424 | 7211,102551 | 1 | ||||
C | 8000 | 300 | 7502,666193 | 10076,70581 | 4700 | 3 | ||||
D | 3000 | 8000 | 5385,164807 | 1500 | 5830,951895 | 2 | ||||
E | 7000 | 9000 | 8485,281374 | 5590,169944 | 4123,105626 | 3 | ||||
F | 400 | 800 | 2280,35085 | 7283,543094 | 8683,317338 | 1 | ||||
G | 1500 | 6500 | 3535,533906 | 1500 | 6670,832032 | 2 | ||||
H | 9000 | 9500 | 10307,76406 | 7648,52927 | 4609,772229 | 3 | ||||
K | 700 | 500 | 2517,935662 | 7542,545989 | 8575,54663 | 1 | ||||
N | 300 | 300 | 2789,265136 | 7792,945528 | 9021,086409 | 1 |
CLIENTS | Distance à : | Cluster | Nouveau Cluster | |||||||
NOMS | Mardi | Vendredi | Centroïde 1 | Centroïde 2 | Centroïde 3 | |||||
850 | 650 | 2833,33 | 6833,33 | 8000 | 6266,67 | |||||
A | 4000 | 6000 | 6208,461967 | 1433,721653 | 4008,879256 | 2 | 2 | |||
B | 2000 | 1000 | 1202,081528 | 5892,552739 | 7983,596488 | 1 | 1 | |||
C | 8000 | 300 | 7158,561308 | 8329,398524 | 5966,67 | 3 | 3 | |||
D | 3000 | 8000 | 7658,00235 | 1178,515073 | 5291,921474 | 2 | 2 | |||
E | 7000 | 9000 | 10370,39054 | 4696,338763 | 2910,514197 | 3 | 3 | |||
F | 400 | 800 | 474,341649 | 6505,548845 | 9361,86311 | 1 | 1 | |||
G | 1500 | 6500 | 5886,00034 | 1374,3645 | 6504,186566 | 2 | 2 | |||
H | 9000 | 9500 | 12031,00162 | 6718,552506 | 3384,438342 | 3 | 3 | |||
K | 700 | 500 | 212,1320344 | 6682,975818 | 9302,928726 | 1 | 1 | |||
N | 300 | 300 | 651,9202405 | 7007,29347 | 9741,208903 | 1 | 1 |
CONCLUSION
Voici ainsi expliqué l’algorithme k-means. Si vous voulez mieux le comprendre, vous pouvez lire cette vidéo qui m’a servi de référence : K Means Clustering Algorithm
Une question vous trouble sans doute : les résultats diffèrent-ils en fonction des centroïdes initiaux, et donc, deux machines peuvent-elles obtenir des résultats différents ? Cela pourrait être dangereux pour la prise de décision. Ne vous inquiétez pas. Pour remédier à cela, l’algorithme effectue au moins 30 clustering différents et affiche comme résultat une moyenne des différents clustering obtenus.
On comprend donc que les centroïdes initiaux n’affectent pas notre résultat final. Cependant, une autre question se pose : “Pourquoi forcément trois clusters ? Pourquoi pas plus ? Et comment savoir si nous avons choisi le bon nombre de clusters ?”
Nous répondrons à ces questions dans notre prochain article !
Laisser un commentaire