🧪
🧠 ¿Qué es DBSCAN?
DBSCAN es un algoritmo de clustering que agrupa datos según su densidad, es decir, forma grupos si encuentra suficientes puntos cerca unos de otros. A diferencia de K-Means, no necesita que le digas cuántos grupos hay.
Imagina una ciudad vista desde arriba: DBSCAN encontraría barrios (grupos densos de casas) y separaría las zonas vacías o ruidosas.
🎯 ¿Para qué sirve?
- Detectar grupos de datos de forma irregular (no solo círculos).
- Encontrar anomalías o valores atípicos (outliers).
- Analizar datos espaciales o geográficos.
- Cuando no sabes cuántos clusters hay.
🔧 ¿Cómo funciona?
Tiene 2 parámetros clave:
eps
(radio): el tamaño del “barrio”.min_samples
: cuántos vecinos debe haber para formar un grupo.
Clasifica puntos en 3 tipos:
- Punto central (core point): tiene muchos vecinos cercanos.
- Punto frontera: está cerca de un punto central, pero no tiene suficientes vecinos por sí mismo.
- Ruido (outlier): no pertenece a ningún grupo.
💥 Ventajas
✅ No necesitas decir cuántos grupos hay
✅ Encuentra formas raras (no solo redondas)
✅ Distingue entre ruido y grupos reales
✅ Ideal para detectar fraudes, anomalías, patrones geográficos
⚠️ Desventajas
❌ Elegir eps
y min_samples
puede ser difícil
❌ No funciona tan bien si los grupos tienen densidades muy distintas
❌ Sensible a la escala (requiere normalizar los datos)
🧑💻 Ejemplo en Python
pythonCopyEditimport pandas as pd
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
# Datos simulados
data = pd.DataFrame({
'x': [1, 2, 2, 8, 8, 25, 24, 26, 100],
'y': [1, 2, 3, 8, 9, 25, 26, 27, 100]
})
# Escalar datos
scaler = StandardScaler()
X_scaled = scaler.fit_transform(data)
# Aplicar DBSCAN
dbscan = DBSCAN(eps=0.8, min_samples=2)
clusters = dbscan.fit_predict(X_scaled)
# Añadir resultados
data['cluster'] = clusters
# Visualizar
plt.scatter(data['x'], data['y'], c=data['cluster'], cmap='rainbow')
plt.title("Clustering con DBSCAN")
plt.xlabel("x")
plt.ylabel("y")
plt.show()
📌 Interpretación del resultado
- Los puntos con
cluster = -1
son ruido o anomalías. - El resto son los grupos detectados.
🧩 En resumen
Aspecto | Detalle |
---|---|
Tipo | No supervisado (clustering basado en densidad) |
Define # de grupos | Automáticamente |
Detecta ruido | Sí (outliers) |
Forma de grupos | Libre (no solo círculos) |
Parámetros clave | eps , min_samples |
Escalado necesario | Sí |