Saltar al contenido

# aprendizaje-automatico-no-supervisado-con-python

Aprendizaje Automático No Supervisado con Python

Volver a la portada del curso
Notebook

Implementació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 PCA sobre los datos escalados y leer explained_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:

GrupoPC1PC2
Cazadores de ofertas0.050.36
Visitas rápidas−1.53−0.88
Comparadores3.12−0.20
Compradores decididos−1.212.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.

Recursos