Accéder au contenu principal

Indice de silhouette : comment évaluer la qualité d’un clustering

Un guide pratique de l’indice de silhouette : formule, plages d’interprétation, exemple avec scikit-learn, utilisation pour choisir le bon nombre de clusters et comparaison aux autres métriques de clustering.
Actualisé 31 juil. 2026  · 12 min lire

Explorer avec l’IA

Ouvrir dans ChatGPTOuvrir dans ClaudeOuvrir dans Perplexity

Une fois votre modèle de clustering entraîné, comment savoir si les clusters sont pertinents ?

Il n’y a pas de réponse universelle. En apprentissage supervisé, on compare les prédictions aux vraies étiquettes pour obtenir un taux de précision. En clustering, ce n’est pas possible. Vous avez choisi k=5, mais une autre valeur de k serait-elle meilleure ? Sans étiquettes, difficile de savoir si l’algorithme a capté la structure ou s’il a simplement découpé les données au hasard.

L’indice de silhouette est la métrique qu’il vous faut. Il indique dans quelle mesure chaque point est cohérent avec son cluster par rapport au cluster le plus proche, et c’est l’une des métriques les plus utilisées. Il fonctionne sans étiquettes et s’interprète facilement.

Dans cet article, nous passons en revue la formule et son interprétation, proposons un exemple en Python avec scikit-learn, et expliquons quand cette métrique est (ou n’est pas) la plus adaptée.

Nouveau sur le clustering ? Lisez notre tutoriel Introduction à k-Means clustering avec scikit-learn pour comprendre le fonctionnement de l’algorithme et son utilisation en Python. 

Qu’est-ce que l’indice de silhouette ?

L’indice de silhouette est un nombre compris entre -1 et 1 qui mesure la qualité d’appartenance de chaque point à son cluster.

Ce score renseigne deux aspects :

  1. La proximité d’un point avec les autres points de son cluster
  2. L’éloignement du point vis-à-vis du cluster voisin le plus proche auquel il n’appartient pas

Si le point est bien au cœur de son groupe et loin des autres, le score est élevé. S’il est en bordure, plus proche d’un cluster voisin que du sien, le score est faible.

En résumé, l’indice de silhouette reflète l’équilibre entre la compacité intra-cluster et la séparation inter-clusters. Les deux comptent autant. Un clustering qui regroupe bien les points mais superpose les clusters ne sert à rien, pas plus qu’un clustering avec des clusters très séparés mais des points dispersés en leur sein.

Clusters bien séparés comparés à des clusters qui se chevauchent

Clusters bien séparés versus clusters qui se chevauchent

Plus le score est élevé, mieux les clusters sont définis. Un score proche de 1 indique des points très regroupés au sein de leur cluster et éloignés des autres. Un score proche de 0 traduit un chevauchement des clusters ou des frontières floues. Un score négatif signifie que le point est plus proche d’un autre cluster que de celui auquel il a été affecté.

Comment fonctionne l’indice de silhouette ?

Chaque point a son propre score de silhouette, calculé à partir de deux distances.

La première est la distance moyenne entre le point et les autres points de son cluster. Si elle est faible, le point est proche de ses pairs. Si elle est élevée, le point est faiblement rattaché à son cluster.

La seconde est la distance moyenne entre le point et les points du cluster voisin le plus proche. Si elle est élevée, le point est clairement séparé des autres clusters. Si elle est faible, le point est près de la frontière.

Distance d’un point aux clusters

Distance d’un point aux clusters

La valeur de silhouette compare ces deux quantités. Un point bien au centre de son cluster et loin des autres obtient un score élevé. Un point en bordure (proche d’un autre cluster) a un score faible. Un point plus proche d’un cluster différent que du sien a un score négatif.

À retenir : aucune des deux distances ne suffit à elle seule. 

Un cluster compact peut se trouver juste à côté d’un autre. Un cluster bien séparé peut être interne­ment dispersé. Il faut les deux distances pour juger l’affectation.

Formule de l’indice de silhouette

Voici la formule pour un point donné :

Formule de l’indice de silhouette

Formule de l’indice de silhouette

Où :

  • a est la distance moyenne du point à tous les autres points de son cluster

  • b est la distance moyenne du point à tous les points du cluster voisin le plus proche

La formule divise l’écart entre b et a par la plus grande des deux valeurs. 

De manière générale, voici comment interpréter le score :

  • Quand b est largement supérieur à a : le point est loin des autres clusters et proche du sien. Le numérateur est proche de b, le dénominateur aussi (b), et le score est proche de 1

  • Quand a est largement supérieur à b : le point est plus proche d’un autre cluster que du sien. Le numérateur est un grand nombre négatif, proche de -a, le dénominateur est a, et le score est proche de -1

  • Quand a et b sont à peu près égaux : le point est à la frontière entre deux clusters. Le numérateur est proche de 0, tout comme le score

Passons aux détails.

Comment interpréter l’indice de silhouette

Voici un repère pour lire l’indice de silhouette :

  • Proche de 1 : les points sont bien à l’intérieur de leurs clusters et loin des autres
  • Autour de 0,7 : bon clustering, groupes distincts et points proches de leurs pairs dans le cluster
  • Autour de 0,5 : clustering correct, avec un certain chevauchement mais des groupes encore différenciables
  • Près de 0 : clusters qui se chevauchent ou frontières floues. La structure perçue peut être illusoire
  • En dessous de 0 : les points sont plus proches d’un mauvais cluster. Cela peut arriver si vous choisissez un mauvais nombre de clusters ou si les données se prêtent mal au clustering.

Ces seuils sont indicatifs. La notion de « bon » score dépend du jeu de données.

Des données creuses et de grande dimension donnent souvent des scores plus faibles, même avec de bons clusters. Des données denses et bien séparées peuvent dépasser 0,7. Comparez les scores entre modèles sur un même jeu de données, pas à un seuil universel.

Comment calculer l’indice de silhouette

Le calcul se fait point par point. Voici la démarche pour un point.

Étape 1 : calculez a, la distance moyenne du point à tous les autres points de son cluster. Si le point est dans un cluster avec 4 autres points et des distances de 1,2, 1,5, 1,0 et 1,3 :

Calcul de l’indice de silhouette (1)

Calcul de l’indice de silhouette (1)

Étape 2 : trouvez le cluster voisin le plus proche (celui, autre que le cluster du point, avec la distance moyenne la plus faible). Calculez ensuite b, la distance moyenne du point à tous les points de ce cluster. Si le cluster le plus proche comporte 5 points à des distances 2,4, 2,8, 3,0, 2,6 et 2,7 :

Calcul de l’indice de silhouette (2)

Calcul de l’indice de silhouette (2)

Étape 3 : remplacez a et b dans la formule :

Calcul de l’indice de silhouette (3)

Calcul de l’indice de silhouette (3)

Étape 4 : répétez pour chaque point du jeu de données. Le score global du clustering est la moyenne des scores de tous les points.

Exemple d’indice de silhouette en Python

Scikit-learn propose deux fonctions pour calculer l’indice de silhouette, toutes deux dans sklearn.metrics :

  • silhouette_score() renvoie le score moyen pour l’ensemble du clustering

  • silhouette_samples() renvoie le score pour chaque point individuellement

Voici comment les utiliser avec KMeans sur un jeu de données synthétique :

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score, silhouette_samples

# Données synthétiques avec 4 clusters
X, _ = make_blobs(n_samples=500, centers=4, cluster_std=1.0, random_state=42)

# Modèle de clustering
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
labels = kmeans.fit_predict(X)

# Score de silhouette global
score = silhouette_score(X, labels)
print(f"Overall silhouette score: {score:.3f}")

# Valeurs de silhouette par point
sample_scores = silhouette_samples(X, labels)
print(f"First 5 point scores: {sample_scores[:5]}")

Vous obtiendrez cette sortie en exécutant le code ci-dessus :

Sortie d’exemple Python

Sortie d’exemple Python

Le score global de 0,791 indique que les quatre clusters sont bien définis et séparés.

Les scores par point vous permettent d’analyser chaque observation. 

Des scores individuels élevés signalent des points bien ancrés dans leur cluster. Des scores faibles ou négatifs indiquent des points en frontière ou mal affectés, utiles pour repérer des valeurs aberrantes ou examiner les cas limites.

Choisir le nombre optimal de clusters

L’un des usages les plus courants de l’indice de silhouette est de choisir le bon k pour KMeans. 

La démarche en trois étapes :

  1. Ajustez KMeans pour un éventail de valeurs de k
  2. Calculez l’indice de silhouette pour chaque ajustement
  3. Choisissez le k qui maximise le score

Voici le code correspondant :

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score

X, _ = make_blobs(n_samples=500, centers=4, cluster_std=1.0, random_state=42)

# Ajuster KMeans pour k=2 à k=10 et suivre le score de silhouette pour chacun
k_values = range(2, 11)
scores = []
for k in k_values:
    kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
    labels = kmeans.fit_predict(X)
    scores.append(silhouette_score(X, labels))
    print(f"k={k}: silhouette = {scores[-1]:.3f}")

Voici les scores obtenus pour chaque valeur de k :

Score de silhouette selon différentes valeurs de k

Indice de silhouette selon différentes valeurs de k

Le score maximal se trouve à k=4. C’est la valeur à privilégier.

Gardez en tête que l’indice de silhouette ne remplace pas l’expertise métier. Si votre enjeu business nécessite 5 segments clients et que l’indice est maximal à 4, ne choisissez pas automatiquement 4. La métrique indique où la structure des données est la plus « propre », mais le bon nombre de clusters est parfois celui qui a du sens pour votre cas d’usage.

Indice de silhouette vs. autres métriques de clustering

L’indice de silhouette est sans doute la métrique la plus courante pour évaluer un clustering, mais ce n’est pas la seule. Voici comment il se compare aux alternatives.

Indice de silhouette vs. méthode du coude

La méthode du coude est une technique visuelle pour choisir k avec KMeans. On ajuste des modèles pour plusieurs valeurs de k, on trace l’inertie (somme des carrés intra-cluster) en fonction de k, puis on choisit la valeur où la courbe « plie » nettement.

L’avantage de la méthode du coude est sa rapidité et sa simplicité. Mais le « coude » n’est pas toujours évident. Avec des données bruitées, la courbe peut être lisse et l’emplacement du coude ambigu.

L’indice de silhouette fournit un nombre pour chaque k, ce qui permet une comparaison plus objective. Son calcul est plus lent, mais évite une décision purement visuelle.

Utilisez la méthode du coude pour une vérification rapide. Appuyez-vous sur l’indice de silhouette lorsque vous avez besoin d’un arbitrage solide.

Indice de silhouette vs. indice de Davies-Bouldin

L’indice de Davies-Bouldin (DBI) mesure la similarité moyenne entre chaque cluster et le cluster le plus similaire. Plus le DBI est faible, meilleur est le clustering, avec un score idéal de 0.

Le DBI utilise les centroïdes de clusters pour calculer la similarité, ce qui le rend plus rapide à calculer que l’indice de silhouette sur de grands jeux de données. Son intuition est proche : récompenser des clusters compacts et bien séparés.

La limite, c’est qu’il renseigne uniquement sur le clustering global. L’indice de silhouette, lui, fournit aussi un score par point, pratique pour repérer les frontières et les valeurs aberrantes.

Préférez le DBI pour de très grands jeux de données quand la vitesse prime. Utilisez l’indice de silhouette si vous voulez analyser les points individuellement.

Indice de silhouette vs. indice de Calinski-Harabasz

L’indice de Calinski-Harabasz (CH), ou critère du rapport de dispersion, est le rapport entre la dispersion inter-clusters et la dispersion intra-cluster. Plus le score est élevé, meilleur est le clustering, et il n’a pas de borne supérieure.

CH est rapide et efficace sur de grands jeux de données, car il ne requiert que des statistiques au niveau des clusters. Comme la silhouette et le DBI, il est adapté aux clusters convexes et bien séparés.

Il n’a pas non plus d’échelle naturelle : on ne compare des scores CH qu’entre modèles sur le même jeu de données, pas entre jeux différents.

Utilisez CH si votre jeu de données est volumineux et que vous avez besoin de résultats rapides. Préférez l’indice de silhouette pour l’interprétabilité et l’analyse point par point.

Métriques de clustering internes vs. externes

Les métriques ci-dessus (silhouette, DBI, CH, coude) sont internes. Elles évaluent le clustering uniquement à partir des données, sans étiquettes de référence. Elles sont donc le choix standard en contexte réel, où les étiquettes n’existent pas.

Les métriques externes comparent les affectations de clusters à des étiquettes connues. L’Adjusted Rand Index (ARI), la Normalized Mutual Information (NMI) et l’homogénéité en sont des exemples. Elles servent quand vous disposez d’étiquettes et souhaitez vérifier la capacité d’un algorithme de clustering à les retrouver.

Utilisez des métriques internes quand vous n’avez pas d’étiquettes, ce qui est le cas le plus fréquent. Utilisez des métriques externes pour benchmarker des algorithmes sur des données étiquetées.

Voici un récapitulatif des métriques, côte à côte :

Méthode Plage Meilleure valeur Vitesse À utiliser pour
Indice de silhouette -1 à 1 Proche de 1 Lent sur grands jeux de données Interprétabilité et analyse par point
Méthode du coude 0 à l’infini Repérer le coude Rapide Vérifications rapides
Indice de Davies-Bouldin 0 à l’infini Proche de 0 Rapide Grands jeux de données
Indice de Calinski-Harabasz 0 à l’infini Plus élevé = mieux Rapide Données volumineuses non étiquetées

Indice de silhouette comparé aux alternatives

Limites de l’indice de silhouette

L’indice de silhouette présente quelques limites à connaître :

  • Suppose un clustering basé sur la distance : par défaut, il s’appuie sur la distance euclidienne. Il fonctionne bien pour KMeans et les algorithmes à centroïde, mais convient moins aux méthodes basées sur la densité comme DBSCAN, où les clusters ont des formes arbitraires et pas de centroïde clair
  • Plus efficace avec des clusters petits et bien séparés : la métrique favorise des clusters compacts et sphériques, éloignés les uns des autres. Si vos clusters sont proches ou se chevauchent, le score sera faible même si l’affectation est correcte
  • Peu adapté aux formes irrégulières : dans le monde réel, les clusters ne sont pas toujours convexes. Dans ce cas, les scores peuvent être faibles même si les affectations sont correctes
  • Coût de calcul sur de grands jeux de données : le calcul nécessite des distances par paires, en O(n^2). Sur des millions de points, cela devient coûteux
  • Sensibilité au choix de la métrique de distance : le score varie selon que vous utilisez une distance euclidienne, Manhattan, cosinus, etc. Si vos données ne respectent pas les hypothèses euclidiennes, l’indice peut induire en erreur

Bonnes pratiques d’utilisation

L’indice de silhouette donne le meilleur de lui-même si vous suivez quelques principes simples :

  • Comparer plusieurs solutions de clustering : ne calculez pas un seul score. Ajustez des modèles avec différentes valeurs de k (ou différents algorithmes) et comparez leurs scores
  • Visualiser les clusters en plus du score : un nombre seul ne raconte pas toute l’histoire. Tracez vos clusters et vérifiez si les formes ont du sens
  • Ne pas optimiser uniquement le score maximal : un clustering avec k=2 donne souvent un score plus élevé que k=5, même si 5 clusters sont plus parlants pour votre problème
  • Combiner avec la connaissance métier : le score indique où la structure des données est la plus nette. La connaissance métier indique quelle structure est réellement utile. Utilisez les deux
  • Évaluer plusieurs métriques de clustering : silhouette, DBI, CH, etc. mesurent différemment la qualité. Quand elles convergent, vous êtes sur la bonne voie ; sinon, examinez les données

Conclusion

L’indice de silhouette est l’une des manières les plus intuitives d’évaluer un clustering, car il reflète à la fois la compacité des points et la séparation des clusters. 

On le calcule point par point, on moyenne, et l’on obtient un nombre entre -1 et 1. Plus il est proche de 1, mieux les clusters sont définis ; près de 0 (ou négatif), cela suggère que la « structure » n’en est pas vraiment une.

Mais l’indice de silhouette n’est qu’un point de départ. Complétez-le par des visualisations et, surtout, par votre connaissance du domaine. Ce n’est que lorsque tout converge que vous pouvez avoir confiance dans le résultat.

L’indice de silhouette s’inscrit dans le cadre plus large de Unsupervised Learning in Python. Inscrivez-vous dès aujourd’hui pour apprendre à regrouper, transformer, visualiser et extraire des insights à partir de données non étiquetées.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Scientifique de données senior basé en Croatie. Rédacteur technique de premier plan avec plus de 700 articles publiés, générant plus de 10 millions de vues. Auteur du livre Machine Learning Automation with TPOT.
Sujets

Apprenez avec DataCamp

Cours

Analyse de clusters avec R

4 h
44.1K
Développez votre intuition sur les regroupements hiérarchiques et via k-means, et appliquez-les pour extraire des infos pertinentes.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow