Accueil / Factory / Algos ML / K-means — factory / algos ML / apprentissage non supervisé

ALGORITHME K-MEANS.

Un algorithme qui range chaque client dans le groupe dont il est le plus proche, sans qu'on lui dise à l'avance quels groupes existent. C'est la méthode de segmentation la plus utilisée : rapide, simple à expliquer, et ses résultats se lisent comme des profils moyens.

ClusteringSegmentation clientNon superviséDonnées numériquesNiveau : débutant

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceQualité des groupes : bonne s'ils sont compacts et de taille voisine
InterprétabilitéChaque segment se résume à un profil moyen lisible
VitesseQuelques secondes sur des centaines de milliers de clients
Facilité de réglageLe nombre de groupes k reste à choisir
Tolérance aux données brutesStandardisation obligatoire, sensible aux extrêmes et aux manquants
EN 30 SECONDES

Vous placez 4 drapeaux au hasard dans une foule. Chacun rejoint le drapeau le plus proche, puis on replante chaque drapeau au centre de son groupe. On recommence jusqu'à ce que plus personne ne change de drapeau.

1. On place k centres au hasard

Vous fixez le nombre de groupes k. L'algorithme choisit k points de départ parmi les clients : au hasard en R, par tirage espacé (k-means++) dans scikit-learn.

2. Chaque client rejoint le centre le plus proche

La proximité se mesure par la distance euclidienne sur toutes les variables. D'où l'importance de les mettre à la même échelle.

3. On recalcule les centres, et on recommence

Chaque centre devient la moyenne des clients de son groupe. On répète les étapes 2 et 3 jusqu'à stabilité. Le résultat dépend du départ : on lance donc plusieurs essais (nstart) et on garde le meilleur.

LE CAS MÉTIER

segmentation client · retail / e-commerce / banque
EN ENTRÉE

Une ligne par client, que des chiffres

Panier moyen, achats par mois, jours depuis le dernier achat, nombre de catégories achetées, part des achats faits en promotion. Aucune colonne cible : on ne sait pas à l'avance quels groupes existent.

EN SORTIE

4 segments à nommer

Sur ce jeu, on obtient par exemple des fidèles gros paniers (achats fréquents, peu de promo), des réguliers, des occasionnels, et des chasseurs de promos inactifs depuis des mois. Nommer les segments est un travail métier : l'algorithme ne donne que des numéros.

CE QU'ON MESURE

Des groupes utiles, pas seulement bien séparés

La silhouette (de -1 à 1) et la courbe du coude aident à choisir k. Mais le vrai test est métier : chaque segment appelle-t-il une action différente, et reste-t-il stable si l'on relance l'analyse le trimestre suivant ?

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Segmenter une base clients sur des indicateurs chiffrés (RFM, panier, fréquence)
  • Produire des profils moyens faciles à présenter à un comité de direction
  • Gros volumes : des millions de lignes restent traitables
  • Première exploration avant une méthode plus fine

NON

  • Variables catégorielles (région, canal) : préférer K-prototypes
  • Groupes de formes allongées ou de densités très différentes : essayer DBSCAN ou un mélange gaussien
  • Base pleine de valeurs extrêmes : un seul client hors norme déplace un centre, K-medoids résiste mieux
  • Besoin d'une probabilité d'appartenance à chaque segment : utiliser un mélange gaussien
LES 4 CHOIX QUI COMPTENT

K-means a peu de paramètres, mais chacun change le résultat. Noms donnés pour R (kmeans de base) et Python (scikit-learn).

centers / n_clusters

Le nombre de groupes k. On trace l'inertie de k = 2 à 8 et on cherche le coude, là où ajouter un groupe n'apporte plus grand-chose. La silhouette la plus haute confirme. Sur ce jeu, les deux pointent vers 4.

Standardisation

scale() en R, StandardScaler en Python. Sans elle, le panier en euros et la récence en jours écrasent la part de promo, comprise entre 0 et 1. C'est l'erreur la plus fréquente.

nstart / n_init

Nombre de départs aléatoires. L'algorithme garde celui qui donne les groupes les plus compacts. 25 évite de tomber sur une mauvaise solution par malchance.

Choix des variables

K-means donne le même poids à chaque variable. Deux variables qui mesurent la même chose comptent double. Retirer les doublons, ou passer d'abord par une ACP.

LE CODE MINIMAL

jeu d'exemple : clients_segmentation.csv ↓
# Segmentation clients : K-means en R
clients <- read.csv("clients_segmentation.csv")
vars <- c("panier_moyen", "achats_par_mois", "recence_jours", "nb_categories", "part_promo")

# Standardiser : chaque variable a une moyenne de 0 et un écart-type de 1
X <- scale(clients[, vars])

# Méthode du coude : inertie intra-groupe pour k = 2 à 8
set.seed(42)
inertie <- sapply(2:8, function(k) kmeans(X, centers = k, nstart = 25)$tot.withinss)
print(round(setNames(inertie, 2:8)))

# Segmentation finale en 4 groupes
set.seed(42)
modele <- kmeans(X, centers = 4, nstart = 25)
clients$segment <- modele$cluster

# Taille et profil moyen de chaque segment, en unités d'origine
print(table(clients$segment))
print(round(aggregate(clients[, vars], by = list(segment = clients$segment), FUN = mean), 2))

QUESTIONS FRÉQUENTES

Comment choisir le nombre de clusters dans K-means ?

On lance K-means pour plusieurs valeurs de k et on compare. La méthode du coude repère le k au-delà duquel l'inertie baisse peu. La silhouette mesure si chaque client est plus proche de son groupe que du groupe voisin : on retient le k où elle est la plus haute. Le choix final doit rester exploitable par le métier.

Faut-il normaliser les données avant un K-means ?

Oui, presque toujours. K-means calcule des distances : une variable en euros qui varie de 1 à 250 pèse bien plus qu'une proportion entre 0 et 1. On standardise chaque variable (moyenne 0, écart-type 1) pour que toutes comptent autant.

Pourquoi K-means donne-t-il des résultats différents à chaque exécution ?

Les centres de départ sont tirés au hasard, et l'algorithme peut s'arrêter sur une solution moins bonne. On fixe une graine aléatoire et on multiplie les départs (nstart en R, n_init en Python) pour obtenir un résultat stable. Les numéros de segments peuvent aussi changer d'un logiciel à l'autre sans que les groupes changent.

LES ALGOS VOISINS

à comparer avant de choisir
pour choisir k

Classification hiérarchique

Construit un arbre de regroupements qu'on coupe à la hauteur voulue. Pratique pour voir combien de groupes se dessinent, lent au-delà de quelques dizaines de milliers de lignes.

Voir la fiche →
plus souple

Mélange gaussien (GMM)

Des groupes en forme d'ellipses et une probabilité d'appartenance pour chaque client. Utile quand les segments se chevauchent.

Voir la fiche →
sans fixer k

DBSCAN

Trouve les zones denses et met à part les points isolés. Adapté aux formes irrégulières, moins aux profils moyens à présenter.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →