Ir al contenido principal

Silhouette score: cómo evaluar la calidad del clustering

Guía práctica del silhouette score: fórmula, rangos de interpretación, ejemplo con scikit-learn, cómo elegir el número de clústeres y comparación con otras métricas.
Actualizado 31 jul 2026  · 12 min leer

Explorar con IA

Abrir en ChatGPTAbrir en ClaudeAbrir en Perplexity

Después de entrenar un modelo de clustering, ¿cómo sabes si los clústeres son realmente buenos?

No hay una respuesta universal. En aprendizaje supervisado, puedes comparar predicciones con etiquetas reales y obtener una precisión. Con clustering eso no es posible. Has elegido k=5, pero ¿sería mejor otro valor de k? Sin etiquetas, no puedes saber si el algoritmo ha captado la estructura o si simplemente ha dividido los datos en grupos aleatorios.

El silhouette score es la métrica que necesitas. Indica lo bien que encaja cada punto en su clúster asignado en relación con el más cercano alternativo. Es una de las métricas más usadas, funciona sin etiquetas y es fácil de interpretar.

En este artículo, veremos la fórmula y cómo leerla, te mostraré un ejemplo en Python con scikit-learn y comentaremos cuándo es (y no es) la mejor opción.

¿Acabas de empezar con el clustering? Lee nuestro tutorial Introducción al clustering k-Means con scikit-learn para entender cómo funciona el algoritmo y cómo usarlo en Python. 

¿Qué es el silhouette score?

El silhouette score es un número entre -1 y 1 que te dice lo bien que encaja cada punto en su clúster.

El valor refleja dos cosas:

  1. Lo cerca que está un punto de los demás puntos de su propio clúster
  2. Lo lejos que está del clúster más cercano al que no pertenece

Si el punto está bien dentro de su grupo y lejos de los demás, la puntuación es alta. Si está en el borde, más cerca de un clúster vecino que del suyo, la puntuación es baja.

En pocas palabras, el silhouette score refleja el equilibrio entre la compacidad interna de los clústeres y su separación entre sí. Ambas cosas importan. Un clustering que agrupa bien los puntos pero coloca los clústeres unos encima de otros no sirve, igual que uno que separa bien los clústeres pero deja los puntos muy dispersos dentro de cada uno.

Well-separated clusters compared with overlapping clusters

Clústeres bien separados frente a clústeres solapados

Cuanto mayor es la puntuación, mejor definidos están los clústeres. Un valor cercano a 1 indica que los puntos están muy agrupados dentro de su clúster y lejos de los demás. Un valor cercano a 0 indica solapamientos o fronteras ambiguas. Un valor negativo significa que el punto está más cerca de otro clúster que del suyo.

¿Cómo funciona el silhouette score?

Cada punto tiene su propio silhouette score, calculado a partir de dos distancias.

La primera es la distancia media del punto al resto de puntos de su clúster asignado. Si es pequeña, el punto está cerca de los demás; si es grande, el punto está poco ligado a su clúster.

La segunda es la distancia media del punto a los puntos del clúster vecino más cercano. Si es grande, el punto está claramente separado de otros clústeres; si es pequeña, el punto está cerca de la frontera.

Distance of a point to the clusters

Distancia de un punto a los clústeres

El valor de silhouette compara estos dos números. Un punto bien dentro de su clúster y lejos de los demás obtiene una puntuación alta. Un punto en el borde (cerca de otro clúster) obtiene una puntuación baja. Si está más cerca de otro clúster que del suyo, la puntuación es negativa.

Recuerda que ninguna de las dos distancias basta por sí sola. 

Un clúster muy compacto puede estar pegado a otro. Un clúster muy separado puede estar disperso internamente. Necesitas ambas distancias para confiar en la asignación.

Fórmula del silhouette score

Esta es la fórmula para un punto:

Silhouette score formula

Fórmula del silhouette score

Donde:

  • a es la distancia media del punto al resto de puntos de su mismo clúster

  • b es la distancia media del punto a todos los puntos del clúster vecino más cercano

La fórmula divide la diferencia entre b y a por el mayor de los dos. 

En general, puedes interpretar la puntuación así:

  • Cuando b es mucho mayor que a: el punto está lejos de cualquier otro clúster y cerca del suyo. El numerador se aproxima a b, el denominador también es b y la puntuación se acerca a 1

  • Cuando a es mucho mayor que b: el punto está más cerca de otro clúster que del suyo. El numerador es un número negativo grande, próximo a -a, el denominador es a y la puntuación se acerca a -1

  • Cuando a y b son similares: el punto está en la frontera entre dos clústeres. El numerador está cerca de 0, y la puntuación también

Más detalles a continuación.

Cómo interpretar el silhouette score

Guía rápida para leer el silhouette score:

  • Cerca de 1: los puntos están bien dentro de sus clústeres y lejos de los demás
  • En torno a 0,7: buen clustering; grupos diferenciados y puntos cercanos a los de su clúster
  • En torno a 0,5: clustering razonable; hay algo de solapamiento, pero siguen siendo distinguibles
  • Cerca de 0: los clústeres se solapan o las fronteras no están claras. Puede que la estructura no sea real
  • Por debajo de 0: los puntos están más cerca del clúster equivocado. Suele ocurrir al elegir un número incorrecto de clústeres o cuando los datos no se agrupan bien de partida.

Estos umbrales son orientativos. Qué se considera un buen silhouette score depende del conjunto de datos.

Los datos escasos y de alta dimensionalidad suelen producir puntuaciones más bajas incluso cuando los clústeres son buenos. Datos densos y bien separados pueden superar 0,7. Compara puntuaciones entre modelos en el mismo dataset, no contra un umbral universal.

Cómo calcular el silhouette score

Se calcula punto a punto. Así funciona para un único punto:

Paso 1: calcula a, la distancia media del punto a cada uno de los puntos de su clúster. Si el punto está en un clúster con otros 4 puntos y las distancias son 1,2; 1,5; 1,0 y 1,3:

Silhouette score calculation (1)

Cálculo del silhouette score (1)

Paso 2: encuentra el clúster vecino más cercano (aquel, distinto al propio, con la menor distancia media desde el punto). Luego calcula b, la distancia media del punto a cada punto de ese clúster. Si el clúster más cercano tiene 5 puntos a distancias 2,4; 2,8; 3,0; 2,6 y 2,7:

Silhouette score calculation (2)

Cálculo del silhouette score (2)

Paso 3: introduce a y b en la fórmula:

Silhouette score calculation (3)

Cálculo del silhouette score (3)

Paso 4: repite para cada punto del conjunto de datos. El silhouette score global del clustering es la media de todas las puntuaciones individuales.

Ejemplo de silhouette score en Python

Scikit-learn ofrece dos funciones para calcular el silhouette score, ambas en sklearn.metrics:

  • silhouette_score() devuelve la media para todo el clustering

  • silhouette_samples() devuelve la puntuación de cada punto individual

Así se usan con KMeans sobre un dataset sintético:

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

# Synthetic data with 4 clusters
X, _ = make_blobs(n_samples=500, centers=4, cluster_std=1.0, random_state=42)

# Clustering model
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
labels = kmeans.fit_predict(X)

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

# Per-point silhouette values
sample_scores = silhouette_samples(X, labels)
print(f"First 5 point scores: {sample_scores[:5]}")

Al ejecutar el fragmento anterior, obtendrás una salida como esta:

Python example output

Salida del ejemplo en Python

La puntuación global de 0,791 indica que los cuatro clústeres están bien definidos y separados.

Las puntuaciones por punto te permiten analizar cada dato individual. 

Los puntos con valores altos están bien dentro de su clúster. Los puntos con valores bajos o negativos están en el borde o mal asignados, lo que ayuda a detectar outliers o revisar casos límite.

Elegir el número óptimo de clústeres

Uno de los usos más habituales del silhouette score es elegir el k adecuado para KMeans. 

El proceso tiene tres pasos:

  1. Ajusta KMeans para varios valores de k
  2. Calcula el silhouette score para cada ajuste
  3. Elige el k con la puntuación más alta

El código sería:

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)

# Fit KMeans for k=2 to k=10 and keep track of the silhouette score for each
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}")

Esta es la puntuación que verás para cada k:

Silhouette score across different values of k

Silhouette score en distintos valores de k

La puntuación más alta está en k=4. Ese sería el valor a elegir.

Ten en cuenta que el silhouette score no sustituye al conocimiento del negocio. Si tu problema requiere 5 segmentos de clientes y el mejor silhouette es con 4, no elijas 4 automáticamente. La métrica te indica dónde los datos tienen la estructura más limpia, pero a veces el número adecuado de clústeres es el que encaja con algo significativo para tu caso.

Silhouette score frente a otras métricas de clustering

El silhouette score es probablemente la métrica más utilizada para evaluar clustering, pero no es la única. Aquí lo comparamos con alternativas.

Silhouette score vs. método del codo

El método del codo es una técnica visual para elegir k en KMeans. Ajustas modelos para varios valores de k, representas la inercia (suma de cuadrados intra-clúster) frente a k y eliges el valor donde la curva hace un quiebro pronunciado.

El método del codo tiene la ventaja de ser rápido y sencillo. Pero el "codo" no siempre es evidente. Con datos ruidosos, la curva puede verse suave y es difícil detectar el quiebro.

El silhouette score te da un número concreto para cada k, lo que permite comparar con más fundamento. Es más lento de calcular, pero evita dejar la decisión a la interpretación visual.

Usa el método del codo para una comprobación rápida. Usa el silhouette score cuando necesites una respuesta sólida.

Silhouette score vs. índice de Davies-Bouldin

El índice de Davies-Bouldin (DBI) mide la similitud media entre cada clúster y su más similar. Un DBI menor indica mejor clustering, y la puntuación perfecta es 0.

El DBI usa centroides de clúster para calcular similitudes, lo que lo hace más rápido que el silhouette score en datasets grandes. Comparte la misma intuición de premiar clústeres compactos y bien separados.

La pega es que el DBI solo informa sobre el clustering global. El silhouette score también te da una puntuación por punto, útil para detectar casos límite y outliers.

Usa DBI si trabajas con conjuntos muy grandes y la velocidad importa. Usa silhouette si quieres analizar puntos individuales.

Silhouette score vs. índice de Calinski-Harabasz

El índice de Calinski-Harabasz (CH), también llamado criterio de razón de varianzas, es la razón entre la dispersión inter-clúster y la intra-clúster. Valores altos indican mejor clustering, y no tiene límite superior.

CH es rápido y funciona bien en datasets grandes porque solo usa estadísticas a nivel de clúster. Al igual que silhouette y DBI, funciona mejor con clústeres convexos y bien separados.

CH tampoco tiene una escala natural, así que solo puedes comparar sus valores entre modelos en el mismo dataset, no entre datasets distintos.

Usa CH cuando tu dataset es grande y necesitas resultados rápidos. Usa silhouette cuando buscas interpretabilidad y detalle por punto.

Métricas internas vs. externas

Las métricas anteriores (silhouette, DBI, CH, codo) son internas. Evalúan el clustering usando solo los datos, sin etiquetas reales. Por eso son la opción estándar en problemas de clustering del mundo real, donde no hay etiquetas.

Las métricas externas comparan las asignaciones de clúster con etiquetas conocidas. El Adjusted Rand Index (ARI), la Normalized Mutual Information (NMI) y la homogeneidad son ejemplos comunes. Se usan cuando tienes etiquetas y quieres medir qué tan bien un algoritmo de clustering las reproduce.

Usa métricas internas cuando no tengas etiquetas, que es lo habitual. Usa métricas externas al comparar algoritmos de clustering en datos etiquetados.

Resumen de métricas, lado a lado:

Método Rango Mejor valor Velocidad Úsalo para
Silhouette score -1 a 1 Cerca de 1 Lento en datasets grandes Interpretabilidad y análisis por punto
Método del codo 0 a infinito Busca el "codo" Rápido Comprobaciones rápidas
Índice de Davies-Bouldin 0 a infinito Cerca de 0 Rápido Datasets grandes
Índice de Calinski-Harabasz 0 a infinito Cuanto más alto, mejor Rápido Datasets grandes sin etiquetas

Silhouette score comparado con alternativas

Limitaciones del silhouette score

El silhouette score tiene algunas limitaciones que conviene conocer:

  • Asume clustering basado en distancias: por defecto usa distancia euclídea. Funciona bien con KMeans y otros algoritmos basados en centroides, pero no encaja con métodos de densidad como DBSCAN, donde los clústeres tienen formas arbitrarias y no hay un centro claro
  • Funciona mejor con clústeres pequeños y bien separados: premia clústeres compactos y esféricos alejados entre sí. Si tus datos tienen clústeres cercanos u overlapeados, la puntuación será baja aunque el clustering sea correcto
  • No es ideal con formas irregulares: en datos reales los clústeres no siempre son convexos. En esos casos, pueden obtener puntuaciones bajas aunque las asignaciones sean correctas
  • Coste computacional en datasets grandes: calcularlo requiere distancias por pares entre puntos, que escalan como O(n^2). En datasets con millones de puntos, es costoso
  • Sensibilidad a la métrica de distancia elegida: la puntuación cambia si usas euclídea, Manhattan, coseno u otra. Si tus datos no siguen las asunciones euclídeas, el silhouette score puede llevarte a conclusiones erróneas

Mejores prácticas al usar el silhouette score

El silhouette score funciona mejor si sigues estas pautas:

  • Compara varias soluciones de clustering: no calcules una única puntuación. Ajusta modelos con distintos valores de k (o algoritmos distintos) y compara sus puntuaciones
  • Visualiza los clústeres junto a la puntuación: un número por sí solo no cuenta toda la historia. Representa los clústeres y comprueba si las formas tienen sentido
  • No optimices solo para la puntuación más alta: con k=2 a menudo se obtiene un valor mayor que con k=5, incluso cuando 5 clústeres son más útiles para tu problema
  • Combínalo con conocimiento de dominio: la puntuación te indica dónde los datos tienen la estructura más limpia. El conocimiento del negocio te dice qué estructura es útil. Usa ambos
  • Evalúa varias métricas: silhouette, DBI, CH y otras miden la calidad de forma diferente. Si coinciden, vas por buen camino; si no, mira los datos

Conclusión

El silhouette score es una de las formas más intuitivas de evaluar clustering porque refleja tanto lo agrupados que están los puntos como lo separados que están los clústeres. 

Se calcula punto a punto, se promedia y se obtiene un único número entre -1 y 1. Cuanto más se acerca a 1, mejor definidos están los clústeres; valores cercanos o inferiores a 0 sugieren que la estructura no es sólida.

Pero el silhouette score es solo el principio. Acompáñalo de visualizaciones de clústeres y, sobre todo, de tu conocimiento del problema. Solo cuando todo apunte en la misma dirección podrás confiar en el resultado.

El silhouette score forma parte del panorama general de Unsupervised Learning in Python. Apúntate hoy y aprende a agrupar, transformar, visualizar y extraer insights de datos sin etiquetar.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Científico de Datos Senior con base en Croacia. Top Tech Writer con más de 700 artículos publicados, generando más de 10M de visitas. Autor del libro Automatización del aprendizaje automático con TPOT.
Temas

Aprende con DataCamp

Curso

Análisis de clústeres en R

4 h
44.1K
Desarrolla una sólida intuición sobre cómo funcionan el clustering jerárquico y k-means, y aprende a aplicarlos para extraer insights de tus datos.
Ver detallesRight Arrow
Iniciar Curso
Ver másRight Arrow