Manejo de desbalanceo en datasets
Muchos datasets reales tienen clases desbalanceadas: una clase aparece mucho más que otra. Esto provoca que los modelos aprendan a predecir siempre la clase mayoritaria. En esta guía aprenderás técnicas para corregir este problema y mejorar el rendimiento del modelo.
Tabla de contenidos
- Qué es el desbalanceo
- Problemas que causa
- Recolección de más datos
- Submuestreo
- Sobremuestreo
- SMOTE
- Class Weights
- Ejercicios
- Mini‑proyecto
1. Qué es el desbalanceo
Un dataset está desbalanceado cuando una clase aparece mucho más que otra.
# Ejemplo
Clase 0: 950 muestras
Clase 1: 50 muestras
2. Problemas que causa
- El modelo predice siempre la clase mayoritaria
- Métricas engañosas (accuracy alto pero inútil)
- Mal rendimiento en la clase minoritaria
3. Recolección de más datos
La solución más simple: obtener más muestras de la clase minoritaria. No siempre es posible, pero es la opción ideal.
4. Submuestreo
Consiste en reducir la clase mayoritaria.
from imblearn.under_sampling import RandomUnderSampler
rus = RandomUnderSampler()
X_res, y_res = rus.fit_resample(X, y)
5. Sobremuestreo
Consiste en aumentar la clase minoritaria duplicando muestras.
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler()
X_res, y_res = ros.fit_resample(X, y)
6. SMOTE
SMOTE genera nuevas muestras sintéticas de la clase minoritaria. Es una de las técnicas más usadas.
from imblearn.over_sampling import SMOTE
smote = SMOTE()
X_res, y_res = smote.fit_resample(X, y)
7. Class Weights
Algunos modelos permiten ajustar pesos para penalizar más los errores en la clase minoritaria.
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(class_weight="balanced")
model.fit(X_train, y_train)
Muy útil cuando no quieres modificar el dataset.
8. Ejercicios
- Aplica submuestreo.
- Aplica sobremuestreo.
- Aplica SMOTE.
- Entrena un modelo con class_weight="balanced".
- Explica por qué accuracy no sirve en datasets desbalanceados.
# pista smote
SMOTE()
# pista class weight
LogisticRegression(class_weight="balanced")
9. Mini‑proyecto: Desbalanceo completo
Toma un dataset real y realiza:
- Submuestreo
- Sobremuestreo
- SMOTE
- Class Weights
- Comparación de métricas
- Gráfica de distribución antes y después