estadistica.ar · Enciclopedia de Estadística en españolhttps://estadistica.ar/conceptos/agrupamiento-por-densidad-y-forma
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étodo | Qué busca | Qué hay que elegir |
|---|---|---|
| DBSCAN | regiones densas separadas por zonas vacías | y mínimo de puntos |
| Mezclas gaussianas | nubes normales superpuestas | y la forma de las covarianzas |
| Espectral | grupos conectados, aunque sean alargados | y los vecinos del grafo |
DBSCAN marca como núcleo a todo punto con al menos m vecinos a distancia , 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 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 de una grilla en cada réplica —una ventaja que en la práctica no se tiene—:
| Si los grupos son | k-medias | Mezclas | Espectral | DBSCAN |
|---|---|---|---|---|
| Esféricos, tamaño parecido | 0,914 | 0,908 | 0,904 | 0,723 |
| Tamaños 80/10/10 | 0,940 | 0,967 | 0,900 | 0,940 |
| Densidades muy distintas | 0,746 | 0,970 | 0,930 | 0,938 |
| Alargados | 0,002 | 0,019 | 1,000 | 1,000 |
| Dos lunas | 0,247 | 0,493 | 0,959 | 0,999 |
| Círculos anidados | −0,002 | −0,002 | 1,000 | 1,000 |
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étodo | Resultado |
|---|---|
| k-medias (=3) | los cuatro, exacto |
| Espectral (=3) | 7 casos: los cuatro + 3 más |
| Mezclas gaussianas | no se pueden ajustar (ver abajo) |
| DBSCAN | nunca lo encuentra, con ningún |
La mezcla ni siquiera se puede ajustar
Tres componentes con covarianzas diagonales en diez dimensiones piden para 32 observaciones. El resultado, con cuatro semillas distintas y diez arranques cada una:
| Semilla | Tamaño del grupo de Ushuaia |
|---|---|
| 0 | 14 |
| 1 | 4 |
| 7 | 5 |
| 2026 | 27 |
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ónicos | Los otros 28 | |
|---|---|---|
| Distancia media a sus 3 vecinos | 3,48 | 2,19 |
5 · Lo que cada uno pide a cambio
DBSCAN pide , 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 contra :
| Datos | El BIC responde “un solo grupo” |
|---|---|
| Una sola nube normal, 300 casos | 100 % de las veces |
Y ese 65 % es culpa del valor por defecto
Con grupos verdaderamente esféricos, y separación 2,5, según qué estructura de covarianzas se le pida al modelo:
covariance_type | Parámetros por grupo | Acierta |
|---|---|---|
spherical (la verdad) | 1 | 100 % |
diag | 4 | 96 % |
tied | 1 matriz común | 96 % |
full (el valor por defecto) | 10 | 65 % |
7 · Cuál usar
| Situación | Método |
|---|---|
| Nubes aproximadamente elípticas y separadas | k-medias |
| Nubes normales de distinta dispersión | mezclas gaussianas |
| Hace falta la probabilidad de pertenencia | mezclas gaussianas |
| Formas arbitrarias: espirales, lunas, anillos | espectral |
| Hay que identificar casos que no pertenecen a nada | DBSCAN |
| Muchos puntos, pocas dimensiones, densidad real | DBSCAN |
| ¿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 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_typeen su valor por defecto sin pensarlo. Cuesta 35 puntos de acierto al elegir . - 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
Estadística para Economía y Administración · Modelos y análisis avanzado · 264 de 318
Probabilidad y Estadística · Modelos y análisis avanzado · 250 de 302
Estadística para Ciencias Sociales · Modelos y análisis avanzado · 226 de 288
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.