Sesión 3.1: Clustering y reducción de dimensionalidad
Primera parte
Segunda parte
Fuente: Machine Learning CoBan
Método del codo
Suma de distancias internas
│
│\
│ \
│ \
│ \
│ \.___.___.___ ← "codo" en K=3
│
└──────────────────▶
K=1 2 3 4 5 6
Se elige el K donde la curva “se aplana”: agregar más clusters ya no mejora mucho.
Supuestos que hace
Aplicaciones en ciencias sociales
K-means es un punto de partida, no el final. Sirve para explorar los datos y generar hipótesis, no para confirmar teorías causales.
Fuente: Vizuara
Fuente: Medium
Ventajas
Limitaciones
\[s(i) = \frac{b(i) - a(i)}{\max(a(i), b(i))}\]
Interpretación del promedio de silueta:
| Valor | Interpretación |
|---|---|
| 0.71 - 1.00 | Estructura fuerte |
| 0.51 - 0.70 | Estructura razonable |
| 0.26 - 0.50 | Estructura débil |
| < 0.25 | Sin estructura clara |
Podemos usar la silueta promedio para elegir K: el K con mayor silueta indica clusters mejor definidos.
Ejemplo
Silueta promedio por K:
K=2: 0.52
K=3: 0.58 ← máximo
K=4: 0.51
K=5: 0.44
K=6: 0.38
La silueta sugiere K=3.
El método del codo podría
sugerir otro valor.
Usar ambos + teoría para decidir.
library(tidyverse)
library(cluster) # Para silhouette()
# Escalar los datos (siempre antes de K-means)
datos_scaled <- datos |>
select(where(is.numeric)) |>
scale()
# Ejecutar K-means
set.seed(2026)
km <- kmeans(datos_scaled, centers = 3, nstart = 25)
# Ver asignaciones
km$cluster
# Calcular silueta
sil <- silhouette(km$cluster, dist(datos_scaled))
mean(sil[, 3]) # Silueta promedio
# Visualizar
fviz_cluster(km, data = datos_scaled) # Con factoextranstart = 25 ejecuta el algoritmo 25 veces con diferentes inicializacionesDendrograma
┌────────────────┐
│ Todos │ Altura
├───────┬────────┤ alta
│ │ │
┌───┤ ┌───┴───┐ │
│ │ │ │ │
┌─┴─┐ │ ┌─┴─┐ ┌─┴─┐ │
A B C D E F G │ Altura
│ baja
Si cortamos a altura media:
Cluster 1: {A, B}
Cluster 2: {C}
Cluster 3: {D, E}
Cluster 4: {F, G}
| Método | Distancia entre clusters | Características |
|---|---|---|
| Single (mínimo) | Puntos más cercanos | Puede crear cadenas largas |
| Complete (máximo) | Puntos más lejanos | Clusters compactos |
| Average (promedio) | Promedio de todas las distancias | Balance entre ambos |
| Ward | Minimiza varianza interna | Similar a K-means, muy usado |
hclust(dist(datos), method = "ward.D2")# Calcular matriz de distancias
d <- dist(datos_scaled, method = "euclidean")
# Clustering jerárquico con método Ward
hc <- hclust(d, method = "ward.D2")
# Visualizar dendrograma
plot(hc, hang = -1, cex = 0.8)
# Cortar para obtener K clusters
grupos <- cutree(hc, k = 3)
# O cortar a cierta altura
grupos <- cutree(hc, h = 5)
# Agregar al dataframe
datos$cluster <- factor(grupos)| Criterio | K-means | Jerárquico |
|---|---|---|
| Elegir K | Antes de ejecutar | Después (cortando) |
| Forma de clusters | Esféricos | Cualquier forma |
| Escalabilidad | Muy rápido | Lento para n grande |
| Reproducibilidad | Depende de inicialización | Determinístico |
| Visualización | Scatter plot | Dendrograma |
| Jerarquía | No | Sí (anidamiento) |
Scree plot
Varianza explicada (%)
50│ ■
│
30│ ■
│
15│ ■
│ ■
5│ ■ ■ ■ ■
└─────────────────────
PC1 PC2 PC3 PC4 ...
El "codo" está en PC3:
conservamos PC1-PC3 (~95% varianza).
PC4 en adelante agregan poco.
Ejemplo de loadings
PC1 PC2
PIB 0.45 -0.12
educación 0.42 0.08
salud 0.38 0.15
internet 0.40 -0.05
desigualdad -0.35 0.62
rural -0.28 0.55
PC1 = "desarrollo general"
(PIB, educación, salud, internet
cargan positivo)
PC2 = "ruralidad/desigualdad"
(desigualdad y rural cargan positivo)
El problema:
Enfoque:
Posibles hallazgos:
Cluster 1: "Alto desarrollo"
- Uruguay, Chile, Costa Rica
- Alto PIB, educación, internet
Cluster 2: "Desarrollo medio"
- México, Brasil, Colombia
- Industrializados pero desiguales
Cluster 3: "En desarrollo"
- Honduras, Nicaragua, Bolivia
- Más rurales, menor PIB
PC1 captura "desarrollo general"
PC2 captura "desigualdad/ruralidad"
El problema:
Enfoque:
Aplicaciones reales:
Estas técnicas son exploratorias. Generan hipótesis sobre cómo se estructuran las opiniones, no confirman teorías causales.
Clustering:
PCA:
En el laboratorio (Sesión 3.3) aplicaremos estas técnicas a datos reales de países latinoamericanos.
Clustering:
PCA:
Son herramientas de exploración: generan hipótesis, no las confirman.
Nos vemos en la próxima sesión.