# aprendizaje-automatico-no-supervisado-con-python
Aprendizaje Automático No Supervisado con Python
Volver a la portada del cursoImplementación de PCA en Python
Sección 3 · Reducción de Dimensionalidad
Implementación de PCA en Python
Las sesiones de PyShop tienen 8 columnas, y nadie puede mirar una nube de puntos en 8 dimensiones. En este notebook aplicas PCA para resumir esas columnas en dos ejes con significado, dibujas el mapa de las 1500 sesiones coloreado por los grupos de K-means y mides cuánta información se pierde. Esta guía acompaña al notebook implementacion-de-pca: dice qué hace cada sección y qué números debes obtener.
Objetivos
- Ajustar
PCAsobre los datos escalados y leerexplained_variance_ratio_. - Decidir cuántos componentes conservar con la varianza acumulada.
- Interpretar las cargas (
components_) y ponerle nombre a cada eje. - Ver por qué PCA sin escalar falla.
- Usar el plano de PCA para mostrar los grupos, y saber por qué no para formarlos.
1. Preparación
La primera celda define generar_sesiones() y COLUMNAS, genera las 1500 sesiones y las escala con StandardScaler, igual que en el notebook de clustering. PCA centra los datos, pero no los escala: ese paso es tuyo.
2. ¿Cuánta varianza explica cada componente?
from sklearn.decomposition import PCA
pca = PCA().fit(Xs)
print(pca.explained_variance_ratio_.round(3))
print(pca.explained_variance_ratio_.cumsum().round(3))
# [0.485 0.229 0.134 0.055 0.042 0.026 0.015 0.014]
# [0.485 0.715 0.848 0.904 0.945 0.971 0.986 1. ]
El primer componente explica el 48.5 % de la varianza total y el segundo el 22.9 %. Con dos se conserva el 71.5 %; con tres, el 84.8 %; con cuatro, el 90.4 %. El notebook grafica la curva acumulada para que veas dónde se aplana. Para pedir directamente un porcentaje, pasa un número entre 0 y 1: PCA(0.90) elige 4 componentes y PCA(0.95), 6.
3. Ponerle nombre a los ejes
Cada componente es una combinación de las columnas originales. Sus pesos están en components_; el notebook los pone en una tabla:
import pandas as pd
p2 = PCA(n_components=2)
Z = p2.fit_transform(Xs)
cargas = pd.DataFrame(p2.components_.T, index=COLUMNAS,
columns=["PC1", "PC2"])
print(cargas.round(2))
Resultado esperado:
- PC1, «cuánto explora»: páginas 0.48, productos vistos 0.47, reseñas 0.45, minutos 0.42, búsquedas 0.41. Las columnas de carrito casi no pesan (−0.04 y −0.07).
- PC2, «cuánto compra»: agregados al carrito 0.71 y monto 0.69; el resto, cerca de 0.
Un nombre así se deduce de las cargas, no lo entrega PCA. El signo de un componente es arbitrario: si en tu equipo sale invertido, la interpretación no cambia.
4. El mapa de las sesiones
Z tiene forma (1500, 2): cada sesión ya es un punto en el plano. Las tres primeras quedan en (−1.11, 0.81), (2.81, −0.74) y (0.13, 0.38). El notebook dibuja el diagrama de dispersión coloreado con las etiquetas de KMeans(4, n_init=10, random_state=42) ajustado sobre las 8 columnas. Los centros de cada grupo en el plano son:
| Grupo | PC1 | PC2 |
|---|---|---|
| Cazadores de ofertas | 0.05 | 0.36 |
| Visitas rápidas | −1.53 | −0.88 |
| Comparadores | 3.12 | −0.20 |
| Compradores decididos | −1.21 | 2.57 |
Se lee de inmediato: los comparadores exploran mucho (derecha), los decididos compran mucho (arriba), las visitas rápidas quedan abajo a la izquierda. Los cazadores de ofertas quedan en medio: lo que los distingue, pct_ofertas, casi no pesa en PC1 ni en PC2 (0.02 y 0.08).
5. PCA sin escalar
El notebook repite el ajuste sobre X crudo. El primer componente explica el 99.99 % de la varianza y su carga es 1.0 en monto_carrito_mxn y prácticamente 0 en todo lo demás. No descubrió nada: solo encontró la columna con la escala más grande.
6. Cuánto se pierde
p2.inverse_transform(Z) regresa del plano a las 8 columnas escaladas. El error cuadrático medio de esa reconstrucción es 0.285, en unidades de varianza: lo que queda fuera es el 28.5 % que no explican los dos primeros componentes. Y si agrupas con K-means sobre Z en lugar de sobre Xs, la coincidencia con los grupos originales baja a ARI 0.783. Por eso, en este curso PCA se usa para ver y comunicar; los grupos se forman con todas las columnas.
Qué debes obtener
Varianza explicada 0.485 y 0.229, acumulada 0.715 con dos componentes, cargas que justifiquen los nombres «cuánto explora» y «cuánto compra», un mapa con cuatro nubes reconocibles, y error de reconstrucción 0.285. Como práctica, ajusta PCA(3), revisa las cargas del tercer componente y busca qué columna aparece ahí que no aparecía en los dos primeros.