Ir al contenido
σestadistica.ar

estadistica.ar · Enciclopedia de Estadística en españolhttps://estadistica.ar/conceptos/agrupamiento-por-densidad-y-forma

M14 · MultivariadoAvanzadoProcedimiento

Agrupamiento por densidad y por forma

Qué hacer cuando los grupos no son esféricos: DBSCAN, mezclas gaussianas y agrupamiento espectral, con lo que cada uno pide a cambio.

Por Jorge Luis Montivero, Licenciado en Estadística · Mu3Sigma

1 · El problema que resuelven

K-medias asigna cada caso al centro más cercano, así que las fronteras entre grupos son rectas y los grupos, esféricos. Cuando la estructura real no tiene esa forma, no la encuentra mal: no la encuentra.

2 · Los tres métodos

MétodoQué buscaQué hay que elegir
DBSCANregiones densas separadas por zonas vacíasε\varepsilon y mínimo de puntos
Mezclas gaussianaskk nubes normales superpuestaskk y la forma de las covarianzas
Espectralgrupos conectados, aunque sean alargadoskk y los vecinos del grafo

DBSCAN marca como núcleo a todo punto con al menos m vecinos a distancia ε\varepsilon, y encadena núcleos vecinos en un grupo. Lo que no llega a ningún grupo queda como ruido: es el único de los tres que puede decir “este caso no pertenece a ninguno”.

Las mezclas gaussianas modelan los datos como suma de kk normales multivariadas y estiman, para cada caso, la probabilidad de pertenecer a cada una. K-medias es su caso particular con covarianzas esféricas iguales y asignación dura.

El espectral arma un grafo de vecinos, lo corta donde hay menos conexiones y agrupa sobre los valores propios de ese grafo. Por eso no le importa la forma: le importa qué está conectado con qué.

3 · Qué formas encuentra cada uno

Índice de Rand ajustado contra la verdad, 400 casos, dos dimensiones. A DBSCAN se le da el mejor ε\varepsilon de una grilla en cada réplica —una ventaja que en la práctica no se tiene—:

Si los grupos sonk-mediasMezclasEspectralDBSCAN
Esféricos, tamaño parecido0,9140,9080,9040,723
Tamaños 80/10/100,9400,9670,9000,940
Densidades muy distintas0,7460,9700,9300,938
Alargados0,0020,0191,0001,000
Dos lunas0,2470,4930,9590,999
Círculos anidados−0,002−0,0021,0001,000
ARI 0,00 Alargados k-medias ARI 1,00 DBSCAN ARI 0,33 Dos lunas ARI 1,00 ARI 0,00 Círculos anidados ARI 1,00
K-medias corta cualquier forma en dos mitades redondas. DBSCAN sigue la densidad y recupera los grupos, siempre que ε esté bien elegido.ARI: 1 es acierto perfecto y 0, azar. Los valores de ε son los que funcionan para cada forma.Fuente: Simulación propia: 300 puntos por forma.

4 · Sobre datos reales pierden

Los 32 aglomerados y sus diez indicadores, buscando el grupo patagónico que el jerárquico y k-medias encuentran:

MétodoResultado
k-medias (kk=3)los cuatro, exacto
Espectral (kk=3)7 casos: los cuatro + 3 más
Mezclas gaussianasno se pueden ajustar (ver abajo)
DBSCANnunca lo encuentra, con ningún ε\varepsilon

La mezcla ni siquiera se puede ajustar

Tres componentes con covarianzas diagonales en diez dimensiones piden 3×(10+10)+2=62 paraˊmetros3 \times (10 + 10) + 2 = \textbf{62 parámetros} para 32 observaciones. El resultado, con cuatro semillas distintas y diez arranques cada una:

SemillaTamaño del grupo de Ushuaia
014
14
75
202627

Por qué DBSCAN no lo encuentra nunca

No es la dimensión —tampoco lo encuentra sobre los dos primeros componentes—. Es que busca otra cosa:

Los 4 patagónicosLos otros 28
Distancia media a sus 3 vecinos3,482,19

5 · Lo que cada uno pide a cambio

DBSCAN pide ε\varepsilon, y no hay forma de elegirlo mirando el resultado sin hacer trampa. En la tabla de la sección 3 el óptimo va de 0,20 a 0,95 según el escenario: un valor que funciona en un conjunto de datos no dice nada sobre el siguiente.

Las mezclas piden la forma de las covarianzas, y la decisión pesa más de lo que parece.

El espectral pide cuántos vecinos conectar en el grafo, y con pocos puntos eso decide el resultado.

6 · Lo único que sabe decir “acá no hay grupos”

Todo el módulo viene mostrando que estas técnicas siempre devuelven algo. Las mezclas gaussianas son la excepción parcial, porque el BIC puede comparar k=1k = 1 contra k>1k > 1:

DatosEl BIC responde “un solo grupo”
Una sola nube normal, 300 casos100 % de las veces

Y ese 65 % es culpa del valor por defecto

Con grupos verdaderamente esféricos, k=3k = 3 y separación 2,5, según qué estructura de covarianzas se le pida al modelo:

covariance_typeParámetros por grupoAcierta k=3k=3
spherical (la verdad)1100 %
diag496 %
tied1 matriz común96 %
full (el valor por defecto)1065 %

7 · Cuál usar

SituaciónMétodo
Nubes aproximadamente elípticas y separadask-medias
Nubes normales de distinta dispersiónmezclas gaussianas
Hace falta la probabilidad de pertenenciamezclas gaussianas
Formas arbitrarias: espirales, lunas, anillosespectral
Hay que identificar casos que no pertenecen a nadaDBSCAN
Muchos puntos, pocas dimensiones, densidad realDBSCAN
¿Hay grupos, o ninguno?BIC de una mezcla

8 · Errores frecuentes

  • Pasar a un método sofisticado sin mirar la forma de los datos. Con nubes elípticas y separadas, k-medias le gana a los tres.
  • Usar DBSCAN para encontrar grupos separados. Busca grupos densos: el grupo patagónico está separado y es un 59 % menos denso que el resto, y lo marca como ruido.
  • Elegir ε\varepsilon probando hasta que el resultado guste. El óptimo varía entre 0,20 y 0,95 según el conjunto de datos.
  • Aplicar DBSCAN con pocos puntos y muchas dimensiones: no hay densidad que detectar.
  • Dejar covariance_type en su valor por defecto sin pensarlo. Cuesta 35 puntos de acierto al elegir kk.
  • Ajustar una mezcla con más parámetros que observaciones. En el caso son 62 para 32, y cuatro corridas dan cuatro respuestas distintas sin ningún aviso.
  • Leer el BIC como si resolviera cuántos grupos hay. Resuelve si hay alguno.
  • Reportar los puntos de ruido de DBSCAN como un grupo más. No lo son.
  • Comparar métodos por el resultado que más gusta en lugar de por su desempeño en la geometría que los datos tienen.

9 · En el software

# R
library(dbscan); library(mclust); library(kernlab)

# DBSCAN — el gráfico de k-distancias ayuda a proponer eps
kNNdistplot(Z, k = 4); abline(h = 0.6, lty = 2)
db <- dbscan(Z, eps = 0.6, minPts = 5)
db$cluster            # 0 es ruido, no un grupo

# Mezclas: Mclust prueba las formas de covarianza y los k, y elige por BIC
m <- Mclust(Z)
m$G                   # cuántos grupos eligió (puede ser 1)
m$modelName           # y con qué forma de covarianzas
m$z                   # probabilidades de pertenencia

# Espectral
specc(as.matrix(Z), centers = 3)
# Python
from sklearn.cluster import DBSCAN, SpectralClustering
from sklearn.mixture import GaussianMixture

DBSCAN(eps=0.6, min_samples=5).fit_predict(Z)      # -1 es ruido
SpectralClustering(3, affinity='nearest_neighbors',
                   n_neighbors=10).fit_predict(Z)

# El BIC decide k, incluido k=1; y conviene comparar formas de covarianza
for ct in ('spherical', 'diag', 'tied', 'full'):
    for k in range(1, 8):
        print(ct, k, GaussianMixture(k, covariance_type=ct,
                                     random_state=0).fit(Z).bic(Z))

Seguir leyendo

Cómo citar: Montivero, J. L. (2026). Agrupamiento por densidad y por forma. estadistica.ar. https://estadistica.ar/conceptos/agrupamiento-por-densidad-y-forma

estadistica.ar es gratuita y sin publicidad. Si te sirvió, podés invitar un cafecito por transferencia al alias mu3sigma. Asesoramiento estadístico, encuestas y capacitaciones: m3s.pro · WhatsApp +54 9 383 499-7929.

Cómo citar esta entrada

APA (7.ª edición)

Montivero, J. L. (2026). Agrupamiento por densidad y por forma. estadistica.ar. https://estadistica.ar/conceptos/agrupamiento-por-densidad-y-forma

BibTeX

@misc{estadistica_ar_agrupamiento_por_densidad_y_forma,
  author       = {Montivero, Jorge Luis},
  title        = {{Agrupamiento por densidad y por forma}},
  year         = {2026},
  howpublished = {\url{https://estadistica.ar/conceptos/agrupamiento-por-densidad-y-forma}},
  note         = {estadistica.ar. Consultado el \today},
  urldate      = {2026-09-27}
}

Última actualización: 27 de septiembre de 2026. El contenido está bajo licencia CC BY-NC-SA 4.0: se puede reutilizar citando la fuente y sin fines comerciales.