Pontuação de Silhueta (Silhouette Score)

Visão geral

A pontuação de silhueta (silhouette score) (ou coeficiente de silhueta (silhouette coefficient)) é uma métrica de validação interna (internal validation metric) para agrupamento (clustering): ela avalia quão bem cada ponto de dados se encaixa no grupo (cluster) ao qual foi atribuído, em comparação com outros grupos próximos, usando uma noção de coesão e separação baseadas em distância (distance-based cohesion and separation).

Ao contrário de métricas externas de agrupamento (external clustering metrics) (que exigem rótulos de verdade de base (ground-truth labels)), a pontuação de silhueta usa apenas:

Ela é amplamente usada para:

  • selecionar o número de grupos (k)
  • comparar resultados de agrupamento entre diferentes algoritmos ou métricas de distância
  • diagnosticar grupos mal separados e atribuições incorretas

Intuição: coesão vs. separação

Para cada ponto (i), a pontuação de silhueta compara:

  • Coesão (cohesion): quão próximo (i) está dos pontos do seu próprio grupo
  • Separação (separation): quão próximo (i) está dos pontos do grupo vizinho mais próximo (o grupo “segunda melhor opção” para aquele ponto)

Se um ponto estiver muito mais próximo do seu próprio grupo do que de outros grupos, ele deve receber uma pontuação alta. Se estiver perto de uma fronteira entre grupos, deve ficar próximo de 0. Se estiver mais próximo de outro grupo do que daquele ao qual foi atribuído, a pontuação pode se tornar negativa.

Definição formal

Suponha que você tenha um agrupamento de (n) pontos e uma função de distância (distance function) (d(\cdot,\cdot)).

Para um ponto dado (i):

1) Distância intra-grupo \(a(i)\) (coesão)

Seja (C(i)) o grupo atribuído ao ponto (i). Defina:

[ a(i) = \frac{1}{|C(i)| - 1} \sum_{j \in C(i), j \neq i} d(i, j) ]

Essa é a distância média de (i) para todos os outros pontos do seu grupo.

2) Distância ao grupo mais próximo \(b(i)\) (separação)

Para cada outro grupo (C'\neq C(i)), compute a distância média de (i) para os pontos em (C'):

[ d(i, C') = \frac{1}{|C'|} \sum_{j \in C'} d(i, j) ]

Então:

[ b(i) = \min_{C' \neq C(i)} d(i, C') ]

Assim, (b(i)) é a distância média até o outro grupo mais próximo.

3) Silhueta para um único ponto \(s(i)\)

[ s(i) = \frac{b(i) - a(i)}{\max(a(i), b(i))} ]

Essa normalização mantém a pontuação limitada.

Intervalo e interpretação

A pontuação de silhueta está em ([-1, 1]).

  • Próxima de +1: o ponto combina bem com seu grupo e está longe de outros grupos
    • tipicamente significa grupos compactos com boa separação
  • Próxima de 0: o ponto está sobre ou próximo de uma fronteira de decisão (decision boundary) entre grupos
    • os grupos podem se sobrepor, ou o ponto é ambíguo
  • Negativa: o ponto está, em média, mais próximo de um grupo diferente do que daquele ao qual foi atribuído
    • sugere atribuição incorreta, grupos sobrepostos ou uma métrica de distância inadequada

Silhueta por amostra vs. pontuação geral

  • Silhueta por amostra (per-sample silhouette): (s(i)) indica quais pontos estão bem/mal agrupados.
  • Pontuação média de silhueta (average silhouette score) (mais comum):

[ S = \frac{1}{n}\sum_{i=1}^{n} s(i) ]

Esse número único resume a qualidade do agrupamento para um determinado resultado.

Você também pode calcular a média de silhueta por grupo (per-cluster average silhouette) para identificar quais grupos são problemáticos.

Como ela é calculada na prática

Etapas algorítmicas (conceitual)

  1. Calcule as distâncias par a par entre pontos (ou use uma função de distância sob demanda).
  2. Para cada ponto:
    • compute (a(i)): distância média ao seu grupo
    • compute (b(i)): menor distância média a qualquer outro grupo
    • compute (s(i))
  3. Faça a média de (s(i)) se quiser uma pontuação global.

Considerações de complexidade

Uma implementação direta depende de distâncias par a par, o que pode ser caro:

  • a matriz de distâncias par a par é (O(n^2)) em memória/tempo
  • computar (a(i)) e (b(i)) para todo (i) é tipicamente pelo menos (O(n^2))

Para conjuntos de dados grandes, estratégias comuns incluem:

  • calcular a silhueta em uma subamostra (subsample)
  • usar vizinhos mais próximos aproximados (approximate nearest-neighbor) ou representações resumidas de grupos (dependente do algoritmo)
  • usar bibliotecas otimizadas em C/NumPy

Exemplo prático: escolhendo \(k\) com k-médias (k-means)

Um fluxo de trabalho comum é executar um algoritmo de agrupamento para vários valores de (k) e escolher o (k) que maximiza a pontuação média de silhueta.

Abaixo está um exemplo mínimo em Python com scikit-learn:

import numpy as np
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score, silhouette_samples
from sklearn.preprocessing import StandardScaler

# Synthetic data with 3 blob-like clusters
X, _ = make_blobs(n_samples=800, centers=3, cluster_std=1.2, random_state=42)

# Always consider scaling for distance-based clustering/metrics
X = StandardScaler().fit_transform(X)

for k in range(2, 7):
    labels = KMeans(n_clusters=k, n_init=10, random_state=42).fit_predict(X)
    score = silhouette_score(X, labels, metric="euclidean")
    print(f"k={k}, silhouette={score:.3f}")

O que você tipicamente vê em dados do tipo “blob-like”:

  • (k=2) pode funcionar razoavelmente bem, mas junta grupos reais → silhueta moderada
  • (k=3) frequentemente atinge o pico (melhor correspondência com a estrutura subjacente)
  • (k) grande demais divide grupos reais, às vezes reduzindo a silhueta

Inspecionando silhuetas por ponto

Uma única média pode esconder problemas. Silhuetas por amostra podem revelar:

  • um grupo com muitos valores baixos/negativos (separação ruim)
  • outliers reduzindo a coesão
  • grupos com densidades muito diferentes
labels = KMeans(n_clusters=3, n_init=10, random_state=42).fit_predict(X)
s = silhouette_samples(X, labels)

print("Average:", s.mean())
print("Worst 10 points:", np.sort(s)[:10])

Uma visualização comum (frequentemente chamada de gráfico de silhueta (silhouette plot)) ordena os valores de silhueta dentro de cada grupo. Isso pode mostrar se os grupos são consistentemente fortes ou se têm muitos pontos limítrofes.

Relação com a ideia de “bom agrupamento”

A silhueta está fortemente alinhada com o objetivo clássico de muitos métodos de agrupamento:

  • as distâncias dentro do grupo devem ser pequenas (alta coesão)
  • as distâncias entre grupos devem ser grandes (alta separação)

Isso a torna especialmente compatível com algoritmos como:

  • agrupamento baseado em centróides (centroid-based clustering) (por exemplo, Agrupamento K-Means (K-Means Clustering))
  • agrupamento aglomerativo (agglomerative clustering) com critério de ligação (linkage) e métrica adequados
  • qualquer agrupamento em que “distância” reflita uma similaridade significativa

No entanto, isso também implica limitações importantes.

Alertas e armadilhas comuns

1) A escolha da métrica de distância importa (muito)

A silhueta só é tão significativa quanto a função de distância usada.

  • Distância euclidiana (Euclidean distance) funciona bem quando:
    • as características estão em escalas comparáveis
    • os grupos são aproximadamente esféricos/convexos
  • Distância cosseno (cosine distance) pode ser melhor para:
    • vetores de incorporação de texto ou vetores TF-IDF (TF-IDF vectors)
    • similaridade direcional em alta dimensionalidade
  • Manhattan / Minkowski podem se comportar de maneira diferente em alta dimensionalidade ou com características esparsas

Dica prática:

  • Se você mudou a métrica do seu agrupamento, calcule a silhueta usando a mesma métrica (ou uma compatível). Caso contrário, você pode avaliar um agrupamento com uma distância que não reflete o que o algoritmo otimizou.

2) Escalonamento de características e pré-processamento podem dominar a pontuação

Como a silhueta é baseada em distância, escolhas de pré-processamento podem alterá-la drasticamente.

  • Características sem escala, com unidades diferentes, podem distorcer distâncias.
  • Padronização (standardization) frequentemente ajuda em métodos baseados em distância euclidiana.
  • Redução de dimensionalidade (dimensionality reduction) (por exemplo, Análise de Componentes Principais (PCA) (Principal Component Analysis (PCA))) às vezes pode melhorar a “clusterabilidade” ao remover dimensões de ruído — mas também pode remover estrutura se aplicada de forma inadequada.

Regra prática:

  • Se o seu agrupamento usa distâncias, você deve ao menos considerar escalonamento antes de confiar nos valores de silhueta.

3) Sensibilidade ao formato do grupo (grupos não esféricos)

A silhueta tende a favorecer grupos compactos, bem separados e convexos.

Ela pode subestimar a qualidade de grupos que são:

  • não convexos (non-convex) (por exemplo, “two moons”)
  • conectados por pontes estreitas
  • de espessura variável ao longo de uma variedade (manifold)

Cenário de exemplo:

  • Um método baseado em densidade (density-based method) pode encontrar corretamente dois grupos curvos, mas distâncias médias euclidianas ao longo de cada grupo curvo podem ser grandes, reduzindo a qualidade de (a(i)) e diminuindo a silhueta — mesmo que o agrupamento esteja “correto” em um sentido geométrico.

Se você espera estrutura não convexa, considere avaliar com:

  • uma medida de distância mais apropriada
  • métricas internas alternativas
  • inspeção qualitativa + restrições do domínio

4) Sensibilidade a escala do grupo e desequilíbrio de densidade

A silhueta usa distâncias médias, então ela pode se comportar de modo estranho quando os grupos diferem muito em:

  • número de pontos (grupos muito pequenos vs. muito grandes)
  • densidade (grupos compactos vs. difusos)

Efeitos que você pode observar:

  • grupos pequenos e compactos podem obter silhuetas altas mesmo se estiverem segmentados em excesso (over-segmented)
  • grupos grandes e difusos podem obter silhuetas menores e dominar a média

Esse é um motivo para olhar resumos de silhueta por grupo, não apenas a média global.

5) Comportamento ao variar \(k\): não é um detector garantido do “\(k\) verdadeiro”

Um uso comum é selecionar (k) maximizando a silhueta entre candidatos. Isso é útil, mas não é infalível.

Comportamentos típicos:

  • A silhueta frequentemente prefere (k) menor quando os dados têm estrutura hierárquica (alguns grupos amplos com subgrupos).
  • Ela pode atingir o pico em (k=2) mesmo quando mais grupos são significativos, especialmente quando os dados têm uma primeira separação dominante.
  • Para (k) muito grande, os grupos ficam minúsculos; a coesão pode melhorar (menor (a(i))), mas a separação pode piorar de formas complexas.

Orientação prática:

  • Use a silhueta para reduzir o conjunto de (k) plausíveis e depois valide com conhecimento de domínio e outros sinais (estabilidade, interpretabilidade, desempenho em tarefas a jusante).

6) Grupos unitários e grupos minúsculos

Se um grupo contém apenas um ponto, (a(i)) não fica bem definido (divisão por (|C|-1 = 0)). Implementações lidam com isso de maneiras diferentes (frequentemente definindo a silhueta como 0 para aquele ponto ou gerando um erro). Grupos minúsculos também podem levar a estimativas instáveis.

Se o seu método de agrupamento pode produzir muitos grupos muito pequenos, interprete a silhueta com cautela.

7) Efeitos de alta dimensionalidade

Em espaços de alta dimensionalidade, distâncias podem se tornar menos informativas (muitos pontos acabam a distâncias semelhantes), o que pode comprimir valores de silhueta em direção a 0 e tornar comparações ruidosas.

Mitigações:

  • redução de dimensionalidade
  • medidas de similaridade mais apropriadas (por exemplo, cosseno para vetores de incorporação)
  • engenharia de características cuidadosa

Aplicações práticas

Seleção de modelo e ajuste de hiperparâmetros (hyperparameter tuning) para agrupamento

A silhueta é comumente usada para comparar:

  • diferentes valores de (k) para k-médias
  • critérios de ligação para agrupamento hierárquico
  • diferentes espaços de embedding (embedding spaces) (características brutas vs. vetores de incorporação (embeddings) aprendidos)

Como a silhueta é uma métrica interna, ela é particularmente útil quando você não tem rótulos — o que é o caso comum em agrupamento.

Diagnosticando atribuições de grupo

Silhuetas por amostra podem identificar:

  • pontos atribuídos incorretamente (silhueta negativa)
  • pontos ambíguos na fronteira (perto de zero)
  • grupos com inconsistência interna (grande dispersão de silhuetas)

Isso pode orientar:

  • remoção ou investigação de outliers
  • mudança de pré-processamento (escalonamento, transformações)
  • escolha de uma métrica de distância diferente

Verificação de sanidade antes do uso a jusante

Se grupos forem usados a jusante (por exemplo, segmentação, “baldes” de recuperação, rotulagem de dados), a silhueta fornece um sinal rápido de qualidade. Mas trate-a como uma heurística (heuristic), não como garantia de que os grupos são semanticamente significativos.

Fluxo de trabalho recomendado (boas práticas)

  1. Escolha uma métrica de distância que corresponda aos seus dados
    • euclidiana para características contínuas e escalonadas
    • cosseno para similaridade direcional em texto/vetores de incorporação
  2. Faça pré-processamento com cuidado
    • escale características quando apropriado
    • considere redução de dimensionalidade se as dimensões forem ruidosas/redundantes
  3. Calcule a silhueta em uma faixa de (k)
    • procure picos estáveis, não apenas o máximo absoluto
  4. Inspecione silhuetas por grupo/por amostra
    • encontre grupos fracos, não apenas pontuações gerais fracas
  5. Combine com outras evidências
    • outros índices internos (internal indices) (por exemplo, Davies–Bouldin, Calinski–Harabasz)
    • estabilidade do agrupamento sob reamostragem (resampling)
    • interpretabilidade no domínio e desempenho a jusante

Resumo

A pontuação de silhueta é uma métrica de validação interna amplamente usada para agrupamento, que quantifica, para cada ponto, o equilíbrio entre:

  • coesão: distância média ao seu próprio grupo ((a(i)))
  • separação: distância média ao grupo mais próximo ((b(i)))

Sua forma por amostra (s(i)\in[-1,1]) é interpretável e diagnóstica, e sua média fornece um critério conveniente de seleção de modelo (frequentemente para escolher (k)). Ao mesmo tempo, ela é sensível à métrica de distância, ao escalonamento de características, à geometria dos grupos, ao desequilíbrio de densidade/tamanho, e pode se comportar de forma não intuitiva conforme (k) muda.

Quando usada com pré-processamento bem informado e verificações complementares, a silhueta é uma ferramenta prática e eficaz para avaliar a qualidade de agrupamentos em fluxos de trabalho reais de aprendizado de máquina.