Agrupamento

O que é clusterização?

Clusterização é uma tarefa de aprendizado não supervisionado (unsupervised learning) em que agrupamos pontos de dados de modo que itens no mesmo grupo sejam mais semelhantes entre si do que em relação a itens de outros grupos. Diferentemente da classificação, não há rótulos de verdade-terreno (ground-truth)—então a clusterização é tanto sobre descobrir estrutura quanto sobre escolher suposições que combinem com seus dados e seu objetivo.

A clusterização aparece em diversos fluxos de trabalho de AM:

  • Análise exploratória de dados (EDA, exploratory data analysis): entender modos/subpopulações nos dados
  • Segmentação: clientes, usuários, documentos, produtos
  • Compressão / sumarização: representar dados por centróides ou protótipos de cluster
  • Pré-processamento: criar atributos de “ID do cluster” para modelos supervisionados a jusante
  • Detecção de anomalias: pontos que não pertencem a nenhum cluster podem ser outliers (veja Detecção de Anomalias)
  • Análise de embeddings (embeddings): clusterizar vetores de modelos profundos ou de Aprendizado Métrico

Este artigo foca em três famílias de clusterização amplamente usadas—k-means, Modelos de Mistura Gaussiana (Gaussian Mixture Models, GMMs) e DBSCAN—e em como escolher entre elas na prática.

Fundamentos: o que significa “semelhante”

Quase todos os métodos de clusterização dependem de ao menos um destes itens:

  1. Uma representação de cada exemplo (atributos brutos, um embedding, etc.)
  2. Uma noção de similaridade (distância, densidade, modelo probabilístico)
  3. Um viés indutivo sobre o formato do cluster (esférico, elíptico, formatos arbitrários, etc.)

Visões baseadas em distância vs probabilísticas vs baseadas em densidade

  • Baseada em distância (k-means): clusters são conjuntos de pontos próximos a um centro representativo.
  • Probabilística (GMM): os dados são gerados por uma mistura de distribuições; cada cluster é um componente de distribuição.
  • Baseada em densidade (DBSCAN): clusters são regiões contíguas de alta densidade de pontos separadas por baixa densidade; o ruído é explícito.

O pré-processamento importa (frequentemente mais do que o algoritmo)

A clusterização é sensível a como os atributos são escalados e codificados:

  • Escale atributos numéricos (por exemplo, padronização) para que uma unidade não “valha mais” do que outra.
  • Trate dados categóricos com cuidado; one-hot ingênuo pode distorcer distâncias. Considere métricas especializadas ou embeddings.
  • Alta dimensionalidade pode tornar distâncias menos significativas (a “maldição da dimensionalidade”). Prática comum:
    • Usar Redução de Dimensionalidade (por exemplo, PCA) antes de clusterizar
    • Ou clusterizar em espaços de embeddings aprendidos (por exemplo, de aprendizado contrastivo / aprendizado métrico)

Clusterização k-means

Intuição e objetivo

k-means particiona dados em (k) clusters minimizando a distância euclidiana quadrática intra-cluster até os centróides dos clusters:

[ \min_{{c_i}, {\mu_j}} \sum_{i=1}^{n} \lVert x_i - \mu_{c_i} \rVert^2 ]

Onde:

  • (x_i) é um ponto de dados
  • (c_i \in {1,\dots,k}) é sua atribuição de cluster
  • (\mu_j) é o centróide do cluster (j)

Esse objetivo implica uma forte suposição geométrica: os clusters são aproximadamente esféricos (no espaço euclidiano) e de tamanho semelhante.

Algoritmo (algoritmo de Lloyd)

Itere até convergir:

  1. Atribuir: cada ponto vai para o centróide mais próximo
  2. Atualizar: cada centróide se torna a média dos pontos atribuídos a ele

Ele converge para um ótimo local, então a inicialização importa.

Pontos fortes e fracos na prática

Pontos fortes

  • Simples, rápido, escalável (especialmente com k-means em mini-lotes (mini-batch k-means))
  • Funciona bem para clusters compactos e bem separados
  • Fácil de implementar e interpretar (centróides como protótipos)

Pontos fracos

  • É preciso escolher (k)
  • Sensível ao escalonamento de atributos e a outliers
  • Dificulta clusters não esféricos e densidades variáveis
  • Usa distância euclidiana implicitamente; outras distâncias exigem variantes (por exemplo, k-medoids)

Escolhendo \(k\)

Heurísticas comuns:

  • Método do cotovelo: plote a inércia (SSE intra-cluster) vs (k) e procure retornos decrescentes
  • Índice de silhueta: mede separação vs coesão (maior é melhor)
  • Estabilidade: os clusters persistem entre seeds aleatórias / amostras bootstrap?
  • Validação a jusante: se a clusterização é usada como atributos, avalie o impacto na tarefa a jusante

Exemplo: k-means em blobs sintéticos

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

X, _ = make_blobs(n_samples=2000, centers=4, cluster_std=1.2, random_state=0)

X = StandardScaler().fit_transform(X)

kmeans = KMeans(n_clusters=4, n_init="auto", random_state=0)
labels = kmeans.fit_predict(X)

print("Silhouette:", silhouette_score(X, labels))
print("Centroids:", kmeans.cluster_centers_)

Quando k-means é uma boa escolha

Escolha k-means quando:

  • Você espera clusters globulares / esféricos
  • Você precisa de velocidade e escalabilidade
  • Você quer atribuições rígidas (cada ponto em exatamente um cluster)
  • Você consegue escolher (k) de forma razoável e já escalou os atributos apropriadamente

Modelos de Mistura Gaussiana (GMM)

Intuição: clusterização suave com um modelo gerativo

Um Modelo de Mistura Gaussiana assume que os dados são gerados a partir de uma mistura de (k) distribuições Gaussianas:

[ p(x) = \sum_{j=1}^{k} \pi_j , \mathcal{N}(x \mid \mu_j, \Sigma_j) ]

  • (\pi_j) são os pesos da mistura (somam 1)
  • Cada componente tem média (\mu_j) e covariância (\Sigma_j)

Ao contrário do k-means, o GMM fornece atribuições suaves: [ \gamma_{ij} = p(z=j \mid x_i) ] Essas são chamadas de responsabilidades (responsibilities).

Relação com k-means

k-means pode ser visto como um caso limite do GMM:

  • As covariâncias são esféricas e idênticas
  • As atribuições se tornam “rígidas” conforme a variância diminui

Assim, o GMM generaliza k-means ao permitir:

  • Clusters elípticos via matrizes de covariância
  • Tamanhos/formatos de cluster desiguais
  • Pertencimento probabilístico

Aprendizado via Maximização de Expectativa (Expectation-Maximization, EM)

GMMs normalmente são ajustados com EM:

  • Etapa E: calcular responsabilidades dados os parâmetros atuais
  • Etapa M: atualizar parâmetros para maximizar a log-verossimilhança esperada

Assim como k-means, EM pode convergir para ótimos locais; a inicialização importa.

Escolhas de covariância (importante na prática)

Opções comuns:

  • full: cada cluster tem sua própria covariância geral (mais flexível, mais parâmetros)
  • diag: cada covariância de cluster é diagonal (assume atributos independentes dentro do cluster)
  • tied: todos os clusters compartilham uma covariância
  • spherical: variância escalar por cluster

Em alta dimensionalidade com dados limitados, covariância completa pode sofrer overfitting ou tornar-se numericamente instável.

Seleção de modelo: escolhendo \(k\) com BIC/AIC

Como o GMM é probabilístico, você pode usar critérios que equilibram ajuste e complexidade:

  • BIC (Critério de Informação Bayesiano, Bayesian Information Criterion): frequentemente preferido para modelos de mistura
  • AIC (Critério de Informação de Akaike, Akaike Information Criterion)

Quanto menor, melhor.

Exemplo: GMM com seleção baseada em BIC

import numpy as np
from sklearn.mixture import GaussianMixture
from sklearn.preprocessing import StandardScaler

X = ...  # shape (n_samples, n_features)
X = StandardScaler().fit_transform(X)

bics = []
models = []
for k in range(1, 11):
    gmm = GaussianMixture(n_components=k, covariance_type="full", random_state=0)
    gmm.fit(X)
    bics.append(gmm.bic(X))
    models.append(gmm)

best = models[int(np.argmin(bics))]
labels = best.predict(X)              # hard labels
probs  = best.predict_proba(X)        # soft assignments

print("Best k:", best.n_components)
print("First point membership:", probs[0])

Quando GMM é uma boa escolha

Escolha GMM quando:

  • Clusters são elípticos ou têm dispersões diferentes
  • Você quer clusterização suave (incerteza / pertencimento misto)
  • Uma verossimilhança gerativa é útil (por exemplo, estimação de densidade, pontuação de anomalias)
  • Você consegue assumir razoavelmente que os clusters são bem modelados por Gaussianas

GMMs também se conectam naturalmente a Modelos Bayesianos: um tratamento Bayesiano pode colocar priors sobre parâmetros, quantificar incerteza e (com não paramétricos como misturas de Processo de Dirichlet) relaxar a necessidade de pré-definir (k). Na prática, muitas equipes começam com GMM padrão + BIC e só vão para Bayesiano se necessário.

DBSCAN (Clusterização Espacial Baseada em Densidade de Aplicações com Ruído)

Intuição: clusters como regiões densas, com ruído

DBSCAN agrupa pontos que estão densamente concentrados e rotula pontos em regiões esparsas como ruído/outliers.

Parâmetros-chave:

  • eps ((\varepsilon)): raio da vizinhança
  • min_samples: número mínimo de pontos em uma (\varepsilon)-vizinhança para formar um ponto “núcleo”

Conceitos:

  • Ponto núcleo: tem pelo menos min_samples vizinhos dentro de (\varepsilon)
  • Ponto de borda: alcançável a partir de um ponto núcleo, mas não é, ele próprio, um núcleo
  • Ponto de ruído: não alcançável a partir de nenhum ponto núcleo

O DBSCAN produz:

  • Qualquer número de clusters (sem necessidade de especificar (k))
  • Rótulo explícito de ruído (tipicamente -1 em implementações)
  • Clusters com formatos arbitrários (não esféricos)

Pontos fortes e fracos

Pontos fortes

  • Ótimo para formatos de cluster não convexos (por exemplo, “duas luas”)
  • Lida naturalmente com outliers
  • Não precisa predefinir o número de clusters

Pontos fracos

  • Dificulta quando clusters têm densidades variáveis
  • A escolha de parâmetros ((\varepsilon)) pode ser difícil, especialmente em alta dimensionalidade
  • A métrica de distância ainda importa; euclidiana em alta dimensão pode ser problemática

Uma alternativa moderna comum é o HDBSCAN, que lida melhor com densidades variáveis ao construir uma hierarquia sobre níveis de densidade. O DBSCAN continua sendo um baseline forte, especialmente para dados espaciais/geográficos e dimensionalidade moderada.

Ajuste prático de parâmetros

Regras gerais:

  • Comece com min_samples ≈ 2 * d (onde (d) é a dimensão dos atributos), ou pelo menos 5–10
  • Escolha eps inspecionando um gráfico k-distance: compute, para cada ponto, a distância até seu k-ésimo vizinho mais próximo (k = min_samples), ordene e procure um “joelho”

Exemplo: DBSCAN em um conjunto de dados não linear

from sklearn.datasets import make_moons
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler

X, _ = make_moons(n_samples=2000, noise=0.05, random_state=0)
X = StandardScaler().fit_transform(X)

db = DBSCAN(eps=0.2, min_samples=10)
labels = db.fit_predict(X)

n_noise = (labels == -1).sum()
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)

print("Clusters:", n_clusters, "Noise points:", n_noise)

Quando DBSCAN é uma boa escolha

Escolha DBSCAN quando:

  • Você espera formatos arbitrários de cluster
  • Outliers/ruído são significativos e devem ser detectados
  • Você não sabe o número de clusters antecipadamente
  • Os dados estão em um espaço de baixa a moderada dimensionalidade, onde distâncias permanecem significativas (frequentemente após PCA)

Como escolher entre k-means, GMM e DBSCAN

1) Quais formatos de cluster você espera?

  • Manchas esféricas / variância igualk-means
  • Elípticos / dispersões diferentesGMM
  • Formatos não convexos (anéis, luas), ou clusters definidos por conectividade de densidade → DBSCAN

2) Você precisa de pertencimento suave / incerteza?

  • Atribuição rígida é suficiente → k-means ou DBSCAN
  • Você quer probabilidades ou pertencimento misto → GMM

Isso costuma ser decisivo em aplicações reais (por exemplo, “um usuário é 60% segmento A, 40% segmento B”).

3) O tratamento de outliers é importante?

  • Outliers devem ser atribuídos a algum lugar → k-means / GMM (embora possam ser distorcidos por outliers)
  • Outliers devem ser sinalizados como ruído → DBSCAN (ou variantes baseadas em densidade)

Se seu objetivo principal é detectar pontos raros, você pode preferir métodos adjacentes à clusterização de Detecção de Anomalias em vez de (ou junto com) clusterização.

4) Você sabe o número de clusters?

  • Você sabe (k) ou consegue escolhê-lo com confiabilidade → k-means / GMM
  • Você não sabe (k) e espera ruído → DBSCAN
  • Você quer uma forma fundamentada de selecionar (k) → GMM com BIC/AIC pode ajudar

5) Qual é o tamanho do seu conjunto de dados?

  • Muito grande (milhões), precisa de velocidade → k-means em mini-lotes
  • Médio-grande com dimensionalidade modesta → k-means ainda é forte; DBSCAN pode ficar pesado dependendo de indexação e dimensionalidade
  • GMM pode ser mais pesado que k-means, especialmente com covariância completa; covariâncias diagonais escalam melhor

6) Em qual espaço de atributos você está clusterizando?

Se você está clusterizando texto, imagens, usuários etc., frequentemente você está clusterizando embeddings em vez de entradas brutas:

  • Gere embeddings (por exemplo, a partir de um modelo neural)
  • Opcionalmente reduza a dimensionalidade com PCA/UMAP (veja Redução de Dimensionalidade)
  • Depois clusterize com k-means/GMM/DBSCAN

Em espaços de embeddings, k-means é um padrão comum porque é rápido e frequentemente “bom o suficiente”, mas DBSCAN pode ajudar quando há um piso de ruído significativo, e GMM ajuda quando a incerteza importa.

Avaliação e validação (sem rótulos)

É difícil “pontuar” clusterização de forma objetiva sem verdade-terreno. Boas práticas combinam métricas internas, estabilidade e validação humana/de domínio.

Métricas internas (use com cuidado)

  • Índice de silhueta: compara distâncias intra-cluster vs distâncias ao cluster mais próximo
    Funciona melhor para clusters compactos e bem separados; pode enganar para formatos não convexos.
  • Índice de Davies–Bouldin: menor é melhor
  • Índice de Calinski–Harabasz: maior é melhor
  • Log-verossimilhança / BIC/AIC: para modelos probabilísticos como GMM

Checagens de estabilidade

  • Execute novamente com diferentes seeds aleatórias (k-means, GMM)
  • Faça amostras bootstrap e meça consistência (por exemplo, informação mútua ajustada entre execuções)
  • Perturbe os atributos levemente e verifique robustez

Avaliação a jusante / baseada em tarefa

Se a clusterização é usada para:

  • construir segmentos que orientam políticas,
  • criar atributos para um preditor,
  • comprimir dados,

então avalie de ponta a ponta: a clusterização melhora o objetivo a jusante?

Checklist de fluxo de trabalho prático

  1. Esclareça o objetivo
    • Exploração? segmentação? filtragem de anomalias? seleção de protótipos?
  2. Escolha/aprenda uma representação
    • Escale atributos; considere embeddings; considere PCA
  3. Escolha um algoritmo baseline
    • Comece com k-means (baseline rápido) a menos que você espere densidade/ruído (DBSCAN) ou precise de incerteza (GMM)
  4. Ajuste hiperparâmetros-chave
    • k-means: (k), inicialização, n_init
    • GMM: (k), tipo de covariância, regularização (reg_covar)
    • DBSCAN: eps, min_samples, métrica
  5. Valide
    • Métricas internas + estabilidade + interpretação de domínio
  6. Interprete e itere
    • Examine centros/componentes de cluster, pontos representativos, distribuições de atributos por cluster

Armadilhas comuns

  • Não escalar atributos: k-means/GMM/DBSCAN podem se comportar mal se um atributo dominar as distâncias.
  • Clusterizar em altíssima dimensionalidade sem cuidado: distâncias se tornam menos informativas; use PCA ou embeddings.
  • Superinterpretar clusters: estrutura não supervisionada nem sempre é significativa; valide com conhecimento de domínio.
  • Assumir que clusters devem existir: alguns conjuntos de dados são contínuos e sem separações claras.
  • Ignorar inicialização/ótimos locais: execute múltiplas inicializações para k-means e GMM.
  • Usar DBSCAN com densidades variáveis: ele pode dividir clusters densos ou mesclar os esparsos; considere alternativas como HDBSCAN.

Resumo: escolhendo rapidamente

  • k-means: mais rápido, baseline forte; melhor para clusters aproximadamente esféricos; requer (k).
  • GMM: probabilístico, atribuições suaves; lida com elipses e dispersões variáveis; escolha (k) via BIC/AIC.
  • DBSCAN: baseado em densidade; formatos arbitrários e ruído explícito; sem (k), mas sensível a eps e a espaços de alta dimensionalidade.

Em pipelines modernos de AM, a qualidade da clusterização frequentemente depende mais da representação (engenharia de atributos, embeddings, redução de dimensionalidade) do que de qual algoritmo você escolhe. Uma abordagem confiável é: começar simples (k-means), diagnosticar incompatibilidades (formato, incerteza, ruído) e então migrar para GMM ou DBSCAN conforme os dados exigirem.