🧠 ¿Qué es PCA?
PCA es un método de reducción de dimensionalidad que transforma tus datos en un nuevo sistema de coordenadas, donde:
- Cada eje (llamado componente principal) explica la máxima variación posible en los datos.
- Los primeros componentes contienen la mayor parte de la información, y los demás pueden descartarse sin perder mucho.
Es como hacer zoom-out para ver mejor: reduces el número de variables pero conservas lo más importante.
🎯 ¿Para qué sirve?
- Visualizar datos complejos en 2D o 3D.
- Reducir el número de columnas (features) para acelerar modelos.
- Eliminar ruido o redundancia en los datos.
- Preparar datos para clustering o machine learning.
📈 ¿Cómo funciona?
- Centra los datos (resta la media).
- Calcula la covarianza entre todas las variables.
- Encuentra los ejes (componentes principales) donde la variación es máxima.
- Reproyecta todos los datos sobre esos ejes nuevos.
- Puedes descartar los componentes menos útiles.
📦 Ejemplo visual (idea simplificada)
Imagina que tienes una nube de puntos en 3D. PCA te permite «aplanar» esos puntos en un plano 2D sin perder la forma general.
🔧 Ventajas
✅ Reduce columnas (ideal con cientos de variables)
✅ Mejora visualización y comprensión
✅ Elimina variables redundantes
✅ Útil antes de aplicar clustering o modelos
❌ Desventajas
❌ Pierde interpretación directa (los nuevos ejes no tienen nombres claros)
❌ Puede perder información si se eliminan componentes importantes
❌ No sirve para clasificación ni predicción directa
🧑💻 Código en Python
pythonCopyEditimport pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# Datos de ejemplo
data = pd.DataFrame({
'edad': [25, 45, 35, 33, 52, 23, 41, 38],
'ingresos': [50000, 80000, 60000, 58000, 120000, 45000, 70000, 64000],
'gastos': [2000, 4000, 3000, 2900, 5000, 1800, 3500, 3200]
})
# Escalar datos
scaler = StandardScaler()
X_scaled = scaler.fit_transform(data)
# Aplicar PCA para reducir a 2 dimensiones
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# Convertir a DataFrame
pca_df = pd.DataFrame(X_pca, columns=['PC1', 'PC2'])
# Visualizar
plt.scatter(pca_df['PC1'], pca_df['PC2'])
plt.title("Datos reducidos con PCA")
plt.xlabel("Componente Principal 1")
plt.ylabel("Componente Principal 2")
plt.show()
📌 ¿Cómo saber cuántos componentes conservar?
Puedes usar el atributo explained_variance_ratio_
de PCA:
pythonCopyEditprint(pca.explained_variance_ratio_)
Esto te dice qué porcentaje de la información guarda cada componente. Si los primeros 2 te dan, por ejemplo, el 95% → genial, puedes descartar los demás.
🧩 En resumen
Aspecto | Detalle |
---|---|
Tipo de modelo | No supervisado (reducción de dimensionalidad) |
¿Predice? | No |
¿Visualiza? | Sí |
¿Pierde información? | Puede, si no se eligen bien los componentes |
Ideal para | Datos con muchas variables, clustering |