En algunos problemas, el dataset contiene muchas columnas. Eso puede traer varias dificultades:
A veces varias variables aportan información parecida entre sí. En esos casos puede resultar útil resumirlas en menos dimensiones conservando la mayor cantidad posible de información relevante.
La reducción de dimensionalidad busca representar los datos con menos variables que las originales.
La idea no es eliminar información “porque sí”, sino encontrar una representación más compacta que conserve lo esencial del patrón de los datos.
PCA, sigla de Principal Component Analysis, es una técnica muy conocida para reducir dimensionalidad.
Su objetivo es construir nuevas variables, llamadas componentes principales, que combinan las variables originales y capturan la mayor variabilidad posible.
Imaginemos que medimos varias características de un mismo fenómeno y muchas de ellas están muy relacionadas. En lugar de trabajar con todas por separado, PCA puede resumir gran parte de esa información en una o dos componentes nuevas.
Es como mirar un objeto complejo desde el ángulo que mejor resume su forma general.
Los componentes principales no son columnas originales del dataset. Son combinaciones nuevas construidas a partir de ellas.
El primer componente busca capturar la mayor variación posible. El segundo captura la mayor parte restante, y así sucesivamente.
Por eso, muchas veces, unas pocas componentes alcanzan para resumir bastante bien el conjunto original.
No siempre mejora un modelo, pero es una herramienta muy importante para entender y resumir datasets.
Vamos a trabajar con varias variables relacionadas con el desempeño de estudiantes:
Aplicaremos PCA para reducir esas cuatro variables a dos componentes y veremos cuánta información conservan.
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
estudiantes = pd.DataFrame({
"horas_estudio": [2, 3, 4, 5, 6, 7, 8, 9],
"practicas": [1, 2, 2, 3, 4, 5, 5, 6],
"asistencia": [60, 65, 70, 75, 80, 85, 90, 95],
"parciales": [4, 4, 5, 6, 7, 8, 8, 9]
})
modelo = Pipeline([
("escalador", StandardScaler()),
("pca", PCA(n_components=2))
])
componentes = modelo.fit_transform(estudiantes)
resultado = pd.DataFrame(
componentes,
columns=["componente_1", "componente_2"]
)
print("Datos transformados:")
print(resultado)
pca = modelo.named_steps["pca"]
print("Varianza explicada por cada componente:", pca.explained_variance_ratio_)
print("Varianza explicada acumulada:", pca.explained_variance_ratio_.sum())
nuevo_estudiante = pd.DataFrame({
"horas_estudio": [6],
"practicas": [4],
"asistencia": [82],
"parciales": [7]
})
nuevo_transformado = modelo.transform(nuevo_estudiante)
print("Nuevo estudiante transformado:", nuevo_transformado)
Salida resumida esperada:
Datos transformados:
...
Varianza explicada por cada componente: [...]
Varianza explicada acumulada: ...
Nuevo estudiante transformado: ...
El modelo toma cuatro variables originales y las resume en dos componentes nuevas. Eso no significa que “desaparezcan” las columnas originales, sino que se construye una representación más compacta.
Si la varianza explicada acumulada es alta, entonces esas dos componentes conservan buena parte de la información presente en las cuatro variables originales.
PCA depende de la escala de las variables. Si una columna tiene números mucho más grandes que otra, dominará la construcción de los componentes.
Por eso, en la práctica, es muy común escalar antes de aplicar PCA.
La varianza explicada indica cuánto de la información total queda representada en cada componente.
Por ejemplo, si las dos primeras componentes explican el 95% de la varianza, significa que resumimos bastante bien el dataset original en solo dos dimensiones.
PCA(n_components=2): pide reducir el dataset a dos componentes principales.fit_transform(...): ajusta PCA a los datos y devuelve la transformación resultante.explained_variance_ratio_: muestra cuánta varianza explica cada componente.transform(...): permite llevar nuevos casos al nuevo espacio reducido.