En 05-03 proyectamos los clientes de MercaFresh sobre el plano PC1-PC2 y obtuvimos un mapa útil pero imperfecto: solo el 73% de la varianza cabía en el dibujo, y dos segmentos podían solaparse en el papel estando separados en la realidad. La causa es de fábrica: PCA solo sabe rotar, y hay estructuras que ninguna rotación despliega. Esta lección cierra el módulo con las dos técnicas modernas de visualización no lineal — t-SNE y UMAP — que producen mapas 2D donde los grupos se separan de forma a menudo espectacular. Aprenderás su intuición sin matemática pesada, sus parámetros clave (perplexity, n_neighbors, min_dist), cómo aplicarlas a los clientes de MercaFresh coloreados por sus segmentos de 05-01 y — tan importante como lo anterior — las reglas de prudencia para no leer en esos mapas cosas que no dicen.
Contenido
- Por qué el mapa de PCA a veces no separa
- t-SNE: preservar vecindades locales
- El parámetro perplexity y lo que t-SNE no preserva
- UMAP: más rápido y con mejor estructura global
- Los clientes MercaFresh en t-SNE y UMAP
- Reglas de interpretación prudente
- Tabla comparativa: PCA vs. t-SNE vs. UMAP
- Cierre del módulo: el mapa del no supervisado
Por qué el mapa de PCA a veces no separa
PCA elige el plano de proyección que conserva la máxima varianza global — pero conservar varianza no es lo mismo que conservar grupos:
- Si dos segmentos se distinguen en una dirección de poca varianza, PCA la descartará y en el mapa aparecerán mezclados.
- Si la estructura es curva (imagina los clientes distribuidos sobre una superficie enrollada, o las medialunas de 05-04), la proyección lineal la aplasta: puntos lejanos a lo largo de la curva caen uno encima de otro.
- Y con muchas dimensiones, un plano es poco espacio: PCA reparte su presupuesto entre todas las direcciones grandes, no entre las que separan grupos.
La idea que cambia el juego: para visualizar no necesitamos conservar distancias ni varianzas globales — necesitamos que los puntos que eran vecinos en el espacio original sigan siendo vecinos en el papel. Renunciar a la fidelidad global a cambio de fidelidad local es el trato que hacen t-SNE y UMAP. Son técnicas de visualización, no de compresión general: producen mapas para ojos humanos, no features para modelos (volveremos sobre esto).
t-SNE: preservar vecindades locales
t-SNE (t-distributed Stochastic Neighbor Embedding) opera en tres pasos conceptuales:
- En el espacio original, calcula para cada punto qué otros puntos son sus vecinos cercanos, convirtiendo distancias en probabilidades de vecindad: los muy próximos tienen probabilidad alta de "elegirse" como vecinos; los lejanos, prácticamente nula. Nota lo que esto implica: entre puntos lejanos t-SNE ni distingue — 20 o 200 unidades de distancia son ambas "probabilidad ~0".
- En el plano 2D, coloca los puntos inicialmente al azar y define las mismas probabilidades de vecindad sobre sus posiciones.
- Mueve los puntos del plano iterativamente (descenso de gradiente, el viejo conocido de 04-01) hasta que las vecindades del plano se parezcan lo máximo posible a las del espacio original: atrae a los que deberían ser vecinos y separa a los que no.
El resultado: cada grupito de vecinos del espacio original aparece como un islote compacto en el mapa. De ahí la fama de t-SNE: clusters que en PCA se veían borrosos aparecen como islas nítidamente separadas.
El parámetro perplexity y lo que t-SNE no preserva
perplexitycontrola el tamaño efectivo del vecindario que cada punto considera — intuitivamente, "a cuántos vecinos presto atención". Valores típicos: 5-50 (por defecto 30). Perplexity baja → atención muy local: los clusters se fragmentan en migas. Alta → vecindarios amplios: estructuras más globales, pero grupos pequeños pueden difuminarse. Debe ser menor que el número de puntos, y conviene probar 2-3 valores: si la estructura sobrevive a varios, es real.- Es estocástico: la inicialización aleatoria y el gradiente hacen que dos ejecuciones den mapas distintos (rotados, reflejados o con islas recolocadas). Fija
random_statepara reproducibilidad. - Es lento: su versión exacta es $O(n^2)$; la aproximación de Barnes-Hut lo baja a $O(n \log n)$, pero con cientos de miles de puntos sigue costando minutos u horas.
Y lo crucial — el precio del trato local:
t-SNE no preserva las distancias ni la estructura global. Que dos islas queden lejos en el mapa no significa que esos grupos sean muy distintos; que una isla sea grande no significa que ese cluster sea disperso. t-SNE reparte el espacio del papel para que todo se vea, expandiendo zonas densas y comprimiendo vacías.
Esto no es un defecto menor: es la propiedad que define qué preguntas puede responder el mapa (¿hay grupos? ¿cuáles son vecinos de cuáles?) y cuáles no (¿cómo de lejos están? ¿cuál es más compacto?).
UMAP: más rápido y con mejor estructura global
UMAP (Uniform Manifold Approximation and Projection) llega en 2018 con la misma filosofía — preservar vecindades locales — y una construcción diferente: primero teje un grafo de vecinos sobre los datos (cada punto conectado a sus n_neighbors más próximos, la maquinaria de 04-05 otra vez) y luego busca la disposición 2D que mejor conserva ese grafo. En la práctica aporta tres ventajas:
- Velocidad: típicamente 10-100 veces más rápido que t-SNE; escala a millones de puntos.
- Mejor estructura global: sin ser fiel del todo, las posiciones relativas entre clusters suelen ser más significativas que en t-SNE (grupos parecidos tienden a quedar cerca).
- Puede transformar puntos nuevos: tiene
transform()para proyectar datos no vistos sobre un mapa ya ajustado, cosa que el t-SNE de scikit-learn no ofrece.
Sus dos mandos principales:
| Parámetro | Controla | Valor bajo | Valor alto |
|---|---|---|---|
n_neighbors (defecto 15) |
Tamaño del vecindario del grafo | Foco muy local: muchos islotes finos | Visión más global: menos grupos, más conectados |
min_dist (defecto 0,1) |
Distancia mínima entre puntos en el mapa | Islas densas y apretadas (bueno para ver clusters) | Puntos más repartidos (bueno para ver topología) |
n_neighbors es el primo de perplexity; min_dist es puramente estético, no cambia qué es vecino de qué.
Detalle práctico: UMAP no viene en scikit-learn; es el paquete aparte umap-learn (pip install umap-learn), que se importa como umap y sigue la API fit_transform habitual.
Los clientes MercaFresh en t-SNE y UMAP
Dibujemos el mapa definitivo del módulo: los clientes con sus 7 features (matriz X_esc de 05-03, escalada — regla de siempre), coloreados por los segmentos que K-means descubrió en 05-01.
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
import umap # pip install umap-learn
# t-SNE (scikit-learn)
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X_esc) # solo fit_transform: no hay transform()
# UMAP (paquete umap-learn)
reducer = umap.UMAP(n_neighbors=15, min_dist=0.1, random_state=42)
X_umap = reducer.fit_transform(X_esc)
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
for ax, X_2d, titulo in [(axes[0], X_tsne, "t-SNE (perplexity=30)"),
(axes[1], X_umap, "UMAP (n_neighbors=15)")]:
sc = ax.scatter(X_2d[:, 0], X_2d[:, 1], c=rfm["segmento"],
cmap="tab10", s=12)
ax.set_title(titulo)
ax.set_xticks([]); ax.set_yticks([]) # los ejes NO tienen unidades interpretables
fig.colorbar(sc, label="segmento K-means (05-01)")
plt.show()Puntos del código que merecen comentario:
- Los colores vienen de
rfm["segmento"]: estamos superponiendo el resultado de un algoritmo (K-means) sobre el mapa de otro (t-SNE/UMAP). Si cada isla del mapa sale de un color casi puro, dos métodos independientes coinciden — la misma validación cruzada de métodos que hicimos con el jerárquico en 05-02, ahora visual. - Quitamos las marcas de los ejes a propósito: en t-SNE/UMAP las coordenadas no significan nada (no son "recencia" ni "PC1"; son posiciones optimizadas para la legibilidad).
- Resultado típico en MercaFresh: los cuatro segmentos forman islas más nítidas que en el PCA de 05-03; los ~70 clientes fronterizos de la tabla de contingencia de 05-02 aparecen como puntos de color "equivocado" en los bordes de las islas — otra forma de ver que son casos límite.
Reglas de interpretación prudente
Los mapas de t-SNE/UMAP son tan vistosos que invitan a sobre-interpretarlos. Reglas de prudencia, todas consecuencia de "local sí, global no":
- Las distancias entre islas no son proporcionales a nada. Dos clusters pegados no son necesariamente similares; dos alejados no son necesariamente opuestos. (UMAP es algo más fiable aquí, pero solo algo.)
- Los tamaños y densidades de las islas engañan. t-SNE expande los grupos densos y encoge los dispersos para que todo se vea: una isla grande no es un segmento heterogéneo.
- Pueden aparecer clusters donde no los hay. Con perplexity/n_neighbors bajos, t-SNE fragmenta hasta el ruido uniforme en aparentes grupitos. Verifica que la estructura sobrevive a varios valores del parámetro antes de creértela — y contrástala con un método de clustering, no solo con el ojo.
- No uses las coordenadas como features de un modelo. No son features: no tienen significado, cambian con la semilla y (en t-SNE) ni siquiera puedes calcularlas para un dato nuevo. Para comprimir de cara a un modelo, la herramienta es PCA (05-03) sobre criterios de varianza; t-SNE/UMAP son para comunicar y explorar.
- Ejecuta dos veces antes de presentar. Si una conclusión depende de un detalle que cambia con la semilla, no era una conclusión.
Tabla comparativa: PCA vs. t-SNE vs. UMAP
| Criterio | PCA (05-03) | t-SNE | UMAP |
|---|---|---|---|
| Tipo | Lineal (rotación) | No lineal | No lineal |
| Preserva | Varianza global; distancias grandes aproximadas | Vecindades locales | Vecindades locales + algo de estructura global |
| Determinista | Sí | No (semilla) | No (semilla) |
| Velocidad | Muy rápido | Lento ($O(n\log n)$ con Barnes-Hut) | Rápido; escala a millones |
| Ejes interpretables | Sí (loadings) | No | No |
¿transform() para datos nuevos? |
Sí | No | Sí |
| Uso legítimo | Compresión + visualización + features para modelos | Solo visualización | Visualización (y exploración) |
| Parámetro clave | n_components | perplexity | n_neighbors, min_dist |
| Disponibilidad | scikit-learn | scikit-learn (TSNE) |
Paquete umap-learn |
Flujo de trabajo recomendado y muy común: PCA primero, t-SNE/UMAP después — reducir p. ej. de 100 dimensiones a 20 con PCA (quita ruido y acelera) y aplicar t-SNE/UMAP sobre esas 20 para el mapa final.
Cierre del módulo: el mapa del no supervisado
Recapitulemos el módulo 5, porque forma un todo:
- K-means (05-01): la segmentación como problema sin etiquetas; centroides, codo, silhouette; los cuatro segmentos de MercaFresh con perfil de negocio.
- Jerárquico (05-02): la estructura a todas las escalas en un dendrograma; medidas de enlace; la coincidencia con K-means como validación.
- PCA (05-03): la maldición de la dimensionalidad y su antídoto lineal; varianza explicada, loadings, el primer mapa 2D.
- DBSCAN (05-04): clusters por densidad, de cualquier forma, con ruido nativo; los pedidos anómalos de MercaFresh.
- t-SNE y UMAP (05-05): los mapas no lineales que comunican la estructura — con manual de prudencia.
El hilo común: sin una columna y, los algoritmos han extraído estructura — segmentos accionables, jerarquías, ejes de significado, anomalías — solo de la geometría de los datos. Todo esto converge en el proyecto 09-05, donde la segmentación de MercaFresh se hará de punta a punta.
Errores Comunes y Consejos
- Usar t-SNE/UMAP sin escalar. Son métodos de vecindades, y las vecindades son distancias: sin
StandardScaler, el mapa retrata a la feature de mayor magnitud. La regla ha aplicado a todo el módulo y aquí no hay excepción. - Presentar un mapa de una sola ejecución con un solo parámetro. La estructura creíble es la que sobrevive a 2-3 perplexities/n_neighbors y a 2 semillas. Un mapa único es una anécdota.
- Medir distancias sobre el mapa ("el segmento VIP está el doble de lejos de los dormidos que de los habituales"). Las coordenadas no son métricas; esa frase no significa nada en t-SNE.
- Usar el embedding como entrada de un clustering o clasificador para "mejorar resultados". Es circular y frágil: el mapa exagera separaciones y depende de la semilla. Clustering sobre features reales (o PCs); mapa solo para mirar.
- Consejo: colorea el mapa con variables de negocio además de con los clusters (
c=rfm["gasto_medio_pedido"]): si el gradiente de color se organiza espacialmente, el mapa te está contando qué variable estructura cada zona — un análisis exploratorio potentísimo con una línea de código.
Ejercicios
Ejercicio 1. Sin código: para cada afirmación, di si un mapa t-SNE la respalda, y por qué. (a) "Hay unos 4 grupos de clientes claramente distintos". (b) "El segmento dormido es el más heterogéneo, porque su isla es la más grande". (c) "VIP y habituales son los segmentos más parecidos, porque sus islas están pegadas". (d) "Estos 12 clientes de la isla VIP aparecen coloreados como habituales: son casos frontera que conviene revisar".
Ejercicio 2. Genera un dataset con 4 blobs en 10 dimensiones (make_blobs(n_samples=600, centers=4, n_features=10, cluster_std=3.0, random_state=1)), escálalo, y compáralo en tres mapas: PCA(2), t-SNE (perplexity 30) y UMAP (si lo tienes instalado; si no, compara los dos primeros). Colorea con las etiquetas reales que devuelve make_blobs. ¿Cuál separa mejor? ¿Por qué PCA sufre aquí?
Ejercicio 3. Con el dataset del ejercicio 2, ejecuta t-SNE con perplexity 2, 30 y 100 (misma semilla) y dibuja los tres mapas. Describe cómo cambia la estructura aparente y extrae la regla práctica.
Soluciones
Ejercicio 1
(a) Sí: contar grupos y ver qué puntos comparten isla es exactamente lo que t-SNE preserva (vecindades locales). Con la cautela de confirmar que las 4 islas sobreviven a otras perplexities. (b) No: t-SNE distorsiona tamaños y densidades por diseño; para medir heterogeneidad, usa estadísticos reales del cluster (desviaciones, 02-01) en el espacio original. (c) No: las distancias entre islas no son proporcionales a la similitud entre grupos; verifica con distancias entre centroides en el espacio escalado. (d) Sí, como hipótesis: la mezcla local de colores refleja vecindad real entre esos puntos y los VIP; encaja con los silhouettes bajos y los desacuerdos K-means/jerárquico. "Revisar" es la palabra correcta: el mapa genera la sospecha, la confirmación llega con los datos originales.
Ejercicio 2
from sklearn.datasets import make_blobs
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler
X, y = make_blobs(n_samples=600, centers=4, n_features=10,
cluster_std=3.0, random_state=1)
X_esc = StandardScaler().fit_transform(X)
mapas = {"PCA": PCA(n_components=2).fit_transform(X_esc),
"t-SNE": TSNE(perplexity=30, random_state=0).fit_transform(X_esc)}
fig, axes = plt.subplots(1, len(mapas), figsize=(11, 4))
for ax, (nombre, X2) in zip(axes, mapas.items()):
ax.scatter(X2[:, 0], X2[:, 1], c=y, cmap="tab10", s=10)
ax.set_title(nombre)
plt.show()Resultado esperado: en PCA los 4 colores se ven pero con solapamientos — el plano PC1-PC2 captura solo una parte de la varianza y con cluster_std=3.0 los blobs se rozan en la proyección; la separación real vive repartida en las 10 dimensiones. t-SNE (y UMAP, con un dibujo aún más limpio y en una fracción del tiempo) muestra 4 islas netas, porque no proyecta: recoloca los puntos preservando quién es vecino de quién. Es el caso de libro de "PCA a 2D no separa aunque los grupos existan".
Ejercicio 3
Con perplexity 2, el mapa se fragmenta en decenas de migas: cada punto atiende solo a 2-3 vecinos y hasta el interior de un blob parece varios grupos — estructura espuria. Con 30, aparecen las 4 islas correctas. Con 100, las islas siguen visibles pero más difusas y próximas, porque cada punto atiende a vecindarios que ya desbordan su propio blob. Regla práctica: perplexity pequeña inventa clusters, grande los difumina; prueba varios valores y quédate con la estructura que persiste en un rango — esa es la real.
Conclusión
Has completado el juego de mapas del no supervisado: t-SNE recoloca los puntos para preservar vecindades locales al precio de distorsionar distancias, tamaños y estructura global; UMAP hace lo mismo más rápido, con mejor geometría de conjunto y capacidad de proyectar datos nuevos; y ambos exigen la prudencia que has aprendido — parámetros contrastados, semillas repetidas, nada de medir sobre el mapa ni de reciclar coordenadas como features. Con la tabla PCA/t-SNE/UMAP sabes elegir herramienta según el objetivo: comprimir, explorar o comunicar.
Y con ello se cierra el módulo 5: MercaFresh ya tiene segmentos de clientes con nombre y perfil, una jerarquía que los valida, ejes que los explican, un vigilante de pedidos anómalos y mapas para contarlo todo — extraído íntegramente de datos sin una sola etiqueta. Pero queda una deuda pendiente con el módulo 4: allí entrenamos siete modelos supervisados y los puntuamos alegremente con score() sobre unos datos apartados, sin preguntarnos si esa cifra era de fiar, qué escondía el porcentaje de aciertos cuando las clases están desbalanceadas, o cuánto cambiaría con otra partición de los datos. Responder con rigor a la pregunta "¿es bueno de verdad mi modelo?" es toda una disciplina — división de datos, métricas, validación cruzada, curvas ROC, overfitting — y es exactamente el módulo 6.
Curso de Machine Learning
Módulo 1: Introducción al Machine Learning
- ¿Qué es el Machine Learning?
- Historia y evolución del Machine Learning
- Tipos de Machine Learning
- Aplicaciones del Machine Learning
- El flujo de trabajo de un proyecto de Machine Learning
Módulo 2: Fundamentos de Estadística y Probabilidad
- Conceptos básicos de estadística
- Distribuciones de probabilidad
- Correlación y covarianza
- Inferencia estadística
- Teorema de Bayes
Módulo 3: Preprocesamiento de Datos
- Limpieza de datos
- Manejo de datos faltantes
- Transformación de datos
- Codificación de variables categóricas
- Normalización y estandarización
- Ingeniería de características
Módulo 4: Algoritmos de Machine Learning Supervisado
- Regresión lineal
- Regresión logística
- Árboles de decisión
- Máquinas de soporte vectorial (SVM)
- K-Vecinos más cercanos (K-NN)
- Naive Bayes
- Redes neuronales
Módulo 5: Algoritmos de Machine Learning No Supervisado
- Clustering: K-means
- Clustering jerárquico
- Análisis de componentes principales (PCA)
- Análisis de agrupamiento DBSCAN
- Visualización de datos con t-SNE y UMAP
Módulo 6: Evaluación y Validación de Modelos
- División de datos: entrenamiento, validación y prueba
- Métricas de evaluación
- Validación cruzada
- Curva ROC y AUC
- Overfitting y underfitting
Módulo 7: Técnicas Avanzadas y Optimización
- Regularización: Ridge, Lasso y Elastic Net
- Ensemble Learning
- Gradient Boosting
- Redes neuronales profundas (Deep Learning)
- Optimización de hiperparámetros
Módulo 8: Implementación y Despliegue de Modelos
- Frameworks y bibliotecas populares
- Implementación de modelos en producción
- Mantenimiento y monitoreo de modelos
- Consideraciones éticas y de privacidad
Módulo 9: Proyectos Prácticos
- Proyecto 1: Predicción de precios de viviendas
- Proyecto 2: Clasificación de imágenes
- Proyecto 3: Análisis de sentimientos en redes sociales
- Proyecto 4: Detección de fraudes
- Proyecto 5: Segmentación de clientes
