Clustering (Regroupement)
Le clustering est une technique d’apprentissage non supervisé qui consiste à regrouper des données non étiquetées en sous-groupes homogènes (clusters), de sorte que les points d’un même cluster soient plus similaires entre eux qu’avec ceux des autres clusters.
Contrairement à la classification supervisée où les catégories sont connues à l’avance, le clustering découvre la structure cachée des données sans aucun label. L’algorithme ne sait pas combien de groupes existent ni ce qu’ils représentent : il identifie les regroupements naturels en se basant uniquement sur la similarité entre les observations.
Le clustering est utilisé massivement en segmentation client, détection d’anomalies, compression de données, analyse exploratoire, bioinformatique, traitement d’images et bien d’autres domaines.
- Type
- Apprentissage non supervisé
- Entrée
- Données non étiquetées (pas de labels)
- Sortie
- Affectation de chaque point à un cluster (ID de groupe)
- Algorithmes principaux
- K-Means, DBSCAN, hiérarchique, Gaussian Mixture
- Métriques internes
- Silhouette Score, inertie, Davies-Bouldin
- Calcul Python
sklearn.cluster(KMeans, DBSCAN, AgglomerativeClustering)
Le principe du clustering
L’idée fondamentale est simple : mesurer la « distance » ou la « similarité » entre les observations dans un espace multidimensionnel, puis regrouper les observations les plus proches. La définition de « proche » dépend de la métrique de distance choisie :
Distance euclidienne : la plus courante. Mesure la distance « en ligne droite » entre deux points. Sensible à l’échelle des variables, d’où la nécessité de normaliser les données.
Distance de Manhattan : somme des différences absolues sur chaque dimension. Plus robuste aux outliers que l’euclidienne.
Distance cosinus : mesure l’angle entre deux vecteurs, indépendamment de leur magnitude. Très utilisée pour les données textuelles et les embeddings.
Distance de Mahalanobis : prend en compte les corrélations entre variables. Utile quand les clusters ont des formes ellipsoïdales.
Les grandes familles d’algorithmes de clustering
Clustering par partitionnement
K-Means : l’algorithme le plus utilisé. Divise les données en K clusters en assignant chaque point au centroïde le plus proche, puis recalcule les centroïdes itérativement jusqu’à convergence. Rapide (complexité O(n·K·t)), simple à implémenter, mais nécessite de fixer K à l’avance et ne fonctionne bien que sur des clusters sphériques de tailles similaires.
K-Medoids (PAM) : variante de K-Means qui utilise des points réels (medoids) comme centres de clusters au lieu de moyennes. Plus robuste aux outliers, mais plus lent.
Mini-Batch K-Means : version de K-Means qui utilise des sous-échantillons aléatoires à chaque itération. Beaucoup plus rapide sur les grands datasets, avec une légère perte de qualité.
Clustering par densité
DBSCAN (Density-Based Spatial Clustering of Applications with Noise) : identifie les clusters comme des zones de haute densité séparées par des zones de faible densité. Avantages majeurs : pas besoin de fixer le nombre de clusters, détecte des clusters de forme arbitraire, et identifie automatiquement les outliers (points dans les zones de faible densité). Nécessite deux paramètres : epsilon (rayon de voisinage) et min_samples (nombre minimum de points pour former un cluster).
HDBSCAN : version hiérarchique de DBSCAN qui s’adapte automatiquement aux variations de densité. Un seul paramètre principal (min_cluster_size). Souvent considéré comme le meilleur choix par défaut pour le clustering exploratoire.
OPTICS : similaire à DBSCAN mais produit un ordonnancement des points qui peut être coupé à différents niveaux de densité. Plus flexible que DBSCAN mais plus complexe à interpréter.
Clustering hiérarchique
Construit une hiérarchie de clusters, visualisable sous forme de dendrogramme. Deux approches :
Agglomératif (bottom-up) : chaque point commence dans son propre cluster, puis les clusters les plus proches sont fusionnés itérativement. C’est l’approche la plus courante.
Divisif (top-down) : tous les points commencent dans un seul cluster, qui est divisé itérativement. Moins courant car plus coûteux en calcul.
La méthode de liaison (linkage) détermine comment mesurer la distance entre clusters : single (minimum), complete (maximum), average (moyenne), Ward (minimisation de la variance intra-cluster). Ward est généralement le meilleur choix par défaut.
Clustering probabiliste
Gaussian Mixture Models (GMM) : modélise les données comme un mélange de distributions gaussiennes. Chaque point a une probabilité d’appartenance à chaque cluster (soft clustering), contrairement au K-Means qui fait une assignation dure. Plus flexible que K-Means car il permet des clusters ellipsoïdaux de tailles différentes.
Comparaison des algorithmes
| Algorithme | Nombre de clusters | Forme des clusters | Scalabilité | Détecte les outliers | Quand l’utiliser |
|---|---|---|---|---|---|
| K-Means | Fixé (K) | Sphériques | Excellent | Non | Grand dataset, clusters bien séparés |
| DBSCAN | Automatique | Arbitraire | Bon | Oui | Clusters de forme irrégulière, données bruitées |
| HDBSCAN | Automatique | Arbitraire | Bon | Oui | Densité variable, clustering exploratoire |
| Hiérarchique (Ward) | À couper | Convexes | Limité (O(n²)) | Non | Petit dataset, besoin d’un dendrogramme |
| GMM | Fixé (K) | Ellipsoïdales | Moyen | Oui (probabilité) | Soft clustering, clusters de tailles différentes |
Clustering en Python avec scikit-learn
K-Means
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import numpy as np
# Normaliser les données
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# K-Means avec 4 clusters
kmeans = KMeans(n_clusters=4, n_init=10, random_state=42)
labels = kmeans.fit_predict(X_scaled)
# Centroïdes et inertie
print(f"Inertie : {kmeans.inertia_:.2f}")
print(f"Centroïdes :n{kmeans.cluster_centers_}")
DBSCAN
from sklearn.cluster import DBSCAN
# DBSCAN : pas besoin de fixer K
dbscan = DBSCAN(eps=0.5, min_samples=5)
labels = dbscan.fit_predict(X_scaled)
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
n_noise = list(labels).count(-1)
print(f"Clusters trouvés : {n_clusters}")
print(f"Points de bruit : {n_noise}")
Clustering hiérarchique avec dendrogramme
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
# Calcul du linkage pour le dendrogramme
Z = linkage(X_scaled, method='ward')
# Tracé du dendrogramme
plt.figure(figsize=(12, 6))
dendrogram(Z, truncate_mode='lastp', p=30)
plt.title('Dendrogramme (Ward)')
plt.xlabel('Échantillons')
plt.ylabel('Distance')
plt.tight_layout()
plt.show()
# Clustering agglomératif
agg = AgglomerativeClustering(n_clusters=4, linkage='ward')
labels = agg.fit_predict(X_scaled)
Comment choisir le nombre de clusters
Le choix de K est l’un des défis majeurs du clustering. Plusieurs méthodes existent :
Méthode du coude (Elbow)
Tracez l’inertie (somme des distances intra-cluster) en fonction de K. Le « coude » de la courbe (point d’inflexion où l’ajout d’un cluster n’apporte plus d’amélioration significative) suggère le K optimal.
inertias = []
K_range = range(2, 11)
for k in K_range:
km = KMeans(n_clusters=k, n_init=10, random_state=42)
km.fit(X_scaled)
inertias.append(km.inertia_)
plt.plot(K_range, inertias, 'bo-')
plt.xlabel('Nombre de clusters (K)')
plt.ylabel('Inertie')
plt.title('Méthode du coude')
plt.show()
Score de silhouette
Le score de silhouette mesure la qualité de chaque assignation. Pour chaque point, il compare la distance moyenne aux points du même cluster (cohésion) avec la distance moyenne aux points du cluster le plus proche (séparation). Le score varie de -1 (mauvaise assignation) à +1 (assignation parfaite). Le K qui maximise le score de silhouette moyen est le meilleur candidat.
from sklearn.metrics import silhouette_score
for k in range(2, 11):
km = KMeans(n_clusters=k, n_init=10, random_state=42)
labels = km.fit_predict(X_scaled)
score = silhouette_score(X_scaled, labels)
print(f"K={k} : Silhouette = {score:.4f}")
BIC / AIC pour les GMM
Pour les modèles de mélange gaussien, les critères d’information de Bayes (BIC) et d’Akaike (AIC) pénalisent la complexité du modèle. Le K qui minimise le BIC est le choix optimal.
Évaluer la qualité du clustering
L’évaluation est plus complexe qu’en apprentissage supervisé car il n’y a pas de « bonne réponse » connue. Deux familles de métriques existent :
Métriques internes (sans labels de référence)
| Métrique | Plage | Optimum | Mesure quoi |
|---|---|---|---|
| Silhouette Score | -1 à +1 | Max (proche de 1) | Cohésion vs séparation des clusters |
| Inertie (SSW) | 0 à ∞ | Min | Variance intra-cluster (K-Means) |
| Davies-Bouldin Index | 0 à ∞ | Min (proche de 0) | Ratio de dispersion intra/inter-cluster |
| Calinski-Harabasz | 0 à ∞ | Max | Ratio de variance inter/intra-cluster |
Métriques externes (si des labels existent)
Quand vous disposez de labels de référence (pour valider votre approche), vous pouvez mesurer la correspondance entre les clusters et les classes réelles avec l’Adjusted Rand Index (ARI), le Normalized Mutual Information (NMI) ou le V-Measure. L’ARI varie de -1 à +1, avec 0 correspondant à une assignation aléatoire et 1 à une correspondance parfaite.
Applications concrètes du clustering
Segmentation client
L’application la plus classique. On regroupe les clients selon leur comportement d’achat, leurs données démographiques et leurs interactions. Chaque cluster représente un segment avec des besoins distincts, permettant de personnaliser le marketing, les offres et la communication. Les modèles RFM (Récence, Fréquence, Montant) combinés au K-Means sont un standard de l’industrie.
Détection d’anomalies
Les points qui n’appartiennent à aucun cluster dense (outliers de DBSCAN) ou qui sont très éloignés de leur centroïde (K-Means) sont des candidats pour la détection d’anomalies : transactions frauduleuses, intrusions réseau, défauts de fabrication.
Compression de données et prétraitement
Remplacer les features originales d’une observation par son ID de cluster réduit drastiquement la dimensionnalité. Cette technique est utilisée en compression d’images (quantification de couleurs par K-Means) et comme prétraitement avant des modèles supervisés.
NLP et analyse de texte
Clustering de documents par sujet, regroupement de requêtes de recherche similaires, organisation automatique de tickets de support. Les embeddings de phrases ou de documents sont clustérisés pour identifier les thèmes émergents.
Bioinformatique
Clustering de gènes par profil d’expression, regroupement de séquences protéiques, identification de sous-types de cancer à partir de données omiques. C’est l’un des domaines historiques du clustering hiérarchique.
Pièges courants du clustering
Piège n°1 : ne pas normaliser les données
Si une variable est en milliers et une autre en dizaines, la variable à grande échelle domine le calcul de distance. Résultat : les clusters reflètent surtout cette variable, ignorant les autres. Standardisez toujours avant le clustering (sauf si l’échelle a une signification métier que vous voulez préserver).
Piège n°2 : choisir K arbitrairement
Fixer K = 3 « parce que ça semble raisonnable » sans validation est une erreur fréquente. Utilisez la méthode du coude, le silhouette score, et surtout la connaissance métier pour valider le choix.
Piège n°3 : utiliser K-Means sur des clusters non sphériques
K-Means suppose des clusters convexes de tailles similaires. Sur des données avec des clusters en forme de croissant, de spirale ou de densité variable, il échouera. Utilisez DBSCAN ou HDBSCAN pour des formes arbitraires.
Piège n°4 : le fléau de la dimensionnalité
En haute dimension (des centaines de features), les distances deviennent moins discriminantes : tous les points semblent « également éloignés ». Appliquez une réduction de dimensionnalité (PCA, UMAP) avant le clustering pour améliorer les résultats.
Piège n°5 : confondre clusters et vérité
Le clustering trouve toujours des groupes, même dans des données aléatoires. Un K-Means avec K = 5 produira toujours 5 clusters, même si la structure réelle est continue sans groupes distincts. Validez toujours avec des métriques (silhouette > 0,5 est un bon signe) et un sens métier.
Clustering vs classification
La confusion est fréquente mais la distinction est nette :
La classification est supervisée : les catégories sont connues à l’avance, le modèle apprend à les reproduire. Le clustering est non supervisé : les groupes sont découverts par l’algorithme, sans aucune catégorie prédéfinie.
En pratique, les deux sont souvent complémentaires. Le clustering peut servir de première étape pour découvrir des segments, qui sont ensuite utilisés comme labels pour entraîner un classifieur supervisé (semi-supervised learning). Inversement, un classifieur peut être utilisé pour affecter de nouvelles observations aux clusters découverts.
Verdict
Le clustering est l’outil fondamental de l’exploration de données non étiquetées. Pour un premier essai, commencez par K-Means (rapide, simple) et DBSCAN (pas besoin de fixer K, détecte les outliers). Si vous avez le temps, testez HDBSCAN, qui est souvent le meilleur compromis flexibilité/performance.
Le piège principal n’est pas algorithmique mais interprétatif : les clusters doivent avoir un sens métier. Un clustering statistiquement parfait (silhouette élevée) qui ne correspond à aucune réalité du domaine est un exercice mathématique inutile. Commencez par la question métier (« quels segments de clients existent ? »), puis utilisez le clustering comme outil de découverte.
Questions fréquentes sur le clustering
Quelle est la différence entre clustering et classification ?
La classification est une tâche supervisée : les catégories sont définies à l’avance et le modèle apprend à les prédire à partir d’exemples étiquetés. Le clustering est non supervisé : il découvre des groupes dans des données sans aucun label. En classification, vous dites au modèle « voici des chats et des chiens, apprends à les distinguer ». En clustering, vous dites « voici des données, trouve les groupes naturels ». Les algorithmes, les métriques et les cas d’usage sont fondamentalement différents.
Comment choisir entre K-Means et DBSCAN ?
Utilisez K-Means quand vous avez une idée du nombre de clusters, que vos clusters sont approximativement sphériques et de tailles similaires, et que vous avez un grand dataset (K-Means est très rapide). Utilisez DBSCAN quand vous ne connaissez pas le nombre de clusters, que vos données contiennent du bruit/des outliers, ou que les clusters ont des formes irrégulières. DBSCAN est aussi meilleur quand les densités sont homogènes. Si les densités varient, essayez HDBSCAN.
Comment savoir si le clustering est bon sans labels ?
Utilisez les métriques internes : le silhouette score (> 0,5 = bon, > 0,7 = excellent), le Davies-Bouldin Index (plus bas = mieux) et l’inspection visuelle (en projetant les données en 2D avec UMAP ou t-SNE). Mais la meilleure validation reste le sens métier : les clusters correspondent-ils à des segments réels et actionnables ? Un silhouette score de 0,3 avec des clusters qui ont une signification business claire vaut mieux qu’un score de 0,8 sur des groupes sans interprétation.
Faut-il normaliser les données avant le clustering ?
Oui, presque toujours. Les algorithmes basés sur la distance (K-Means, DBSCAN, hiérarchique) sont sensibles à l’échelle des variables. Une variable en milliers dominera une variable en dizaines. Standardisez les données (moyenne 0, écart-type 1) avec StandardScaler de scikit-learn. Exception : si l’échelle a une signification métier importante que vous voulez préserver (par exemple, des coordonnées géographiques avec DBSCAN pour trouver des zones géographiques).
Le clustering peut-il servir pour la détection d’anomalies ?
Oui, c’est l’un de ses usages les plus courants. Les points identifiés comme bruit par DBSCAN (label = -1) sont des anomalies candidates. Avec K-Means, les points très éloignés de leur centroïde (distance > seuil) peuvent être considérés comme anomalies. Avec les GMM, les points avec une faible probabilité d’appartenance à tous les clusters sont suspects. Pour une détection d’anomalies dédiée, des algorithmes spécialisés comme Isolation Forest ou LOF (Local Outlier Factor) sont souvent préférés.