Conjuntos de datos desequilibrados: estrategias completas para gestionarlos eficazmente

Comprender los datasets desequilibrados, evitar las trampas de la accuracy y aplicar las buenas técnicas de remuestreo, ponderación y validación.

Conjuntos de datos desequilibrados: estrategias completas para gestionarlos eficazmente

En muchos proyectos de IA, los datos no se distribuyen de manera equitativa entre las clases. Un modelo puede entonces parecer efectivo mientras que resulta inútil en la práctica. Este fenómeno, conocido como desequilibrio de clases, afecta a dominios críticos como la detección de fraudes o el diagnóstico médico. Descubramos juntos cómo identificar este problema y resolverlo paso a paso.

¿Qué es un dataset desequilibrado y por qué plantea un problema?

Un conjunto de datos está desequilibrado cuando una clase (mayoritaria) representa la gran mayoría de los ejemplos, mientras que la otra (minoritaria) es rara. Por ejemplo, en la detección de fraude bancario, menos del 0,5 % de las transacciones son fraudulentas. Del mismo modo, la detección de enfermedades raras, la predicción del churn de clientes, el filtrado de spam o la identificación de defectos industriales suelen presentar ratios de 1:100 o más.

El modelo «hace trampa» entonces fácilmente: al predecir siempre la clase mayoritaria, obtiene una accuracy elevada mientras pasa sistemáticamente por alto los casos raros que realmente nos interesan.

La trampa de la accuracy y las métricas a priorizar

La accuracy mide el porcentaje de predicciones correctas globales. En un dataset con un 99 % de clase mayoritaria, un modelo que siempre predice esta clase alcanza un 99 % de accuracy sin detectar nada. Por lo tanto, hay que consultar la matriz de confusión, la precisión (proporción de verdaderos positivos entre los positivos predichos), el recall (proporción de verdaderos positivos detectados) y el score F1 que los combina.

La PR-AUC suele ser más informativa que la ROC-AUC cuando las clases están muy desequilibradas. El balanced accuracy y el coeficiente kappa de Cohen también corrigen el azar. Se prioriza el recall cuando los falsos negativos son costosos (enfermedad no detectada) y la precisión cuando lo son los falsos positivos (alarma innecesaria).

Técnicas de remuestreo: oversampling y undersampling

El oversampling consiste en aumentar la clase minoritaria. La duplicación simple corre el riesgo de sobreajuste; SMOTE crea ejemplos sintéticos por interpolación, ADASYN adapta la densidad según la dificultad, y Borderline-SMOTE se centra en las fronteras.

El undersampling reduce la clase mayoritaria. Los métodos random, Tomek links (elimina los pares cercanos), NearMiss y ENN (Edited Nearest Neighbours) permiten limpiar los ejemplos redundantes o ruidosos.

Las combinaciones como SMOTETomek o SMOTEENN ofrecen a menudo el mejor compromiso, pero hay que tener cuidado con el riesgo de sobreajuste en el oversampling y con la pérdida de información en el undersampling.

Enfoques a nivel de algoritmos

Muchos algoritmos aceptan un parámetro class_weight que penaliza más fuertemente los errores en la clase minoritaria. También se puede desplazar el umbral de decisión (threshold moving) después del entrenamiento para optimizar el recall o la precisión según el negocio.

La focal loss, utilizada especialmente en detección de objetos, reduce el impacto de los ejemplos fáciles y concentra el aprendizaje en los casos difíciles de la clase rara.

Métodos ensamblados adaptados a datos desbalanceados

Los enfoques ensamblados combinan varios modelos entrenados sobre subconjuntos equilibrados. BalancedRandomForest reequilibra cada árbol mediante undersampling. EasyEnsemble y RUSBoost aplican random undersampling antes de realizar boosting. Balanced Bagging crea varios subconjuntos equilibrados mediante bootstrap. Estos métodos reducen la varianza al mismo tiempo que mejoran la detección de la clase minoritaria.

Cuándo adoptar el marco de detección de anomalías

Cuando la clase rara representa menos del 1 % de los datos, el problema se acerca a la detección de anomalías. Los algoritmos Isolation Forest, One-Class SVM o autoencoders aprenden únicamente la distribución de la clase mayoritaria y señalan los puntos que se alejan fuertemente de ella, sin necesidad de ejemplos positivos durante el entrenamiento.

Buenas prácticas de validación y pipelines sin fuga de datos

El resampling nunca debe aplicarse sobre el conjunto de test o de validación, bajo pena de fuga de datos. Utilice siempre un stratified k-fold para preservar la proporción de las clases en cada fold. La biblioteca imbalanced-learn propone Pipeline compatibles con scikit-learn que aplican SMOTE únicamente sobre los folds de entrenamiento.

Ejemplo concreto de código Python con imbalanced-learn

from imblearn.pipeline import Pipeline
from imblearn.over_sampling import SMOTE
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import StratifiedKFold, cross_val_predict
from sklearn.metrics import classification_report
from sklearn.datasets import make_classification

X, y = make_classification(n_classes=2, weights=[0.95, 0.05],
                           n_informative=4, flip_y=0, n_samples=5000,
                           random_state=42)

pipe = Pipeline([
    ('smote', SMOTE(random_state=42)),
    ('clf', RandomForestClassifier(class_weight='balanced', random_state=42))
])

cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
y_pred = cross_val_predict(pipe, X, y, cv=cv)
print(classification_report(y, y_pred))

Este ejemplo muestra cómo combinar SMOTE, ponderación de clases y validación cruzada estratificada en un pipeline seguro.

  • Verificar siempre la distribución de las clases antes de la modelización
  • Elegir las métricas en función del costo empresarial de los errores
  • Aplicar el resampling únicamente en el train
  • Comparar varias técnicas (SMOTE, class_weight, umbrales)
  • Utilizar pipelines imblearn para evitar fugas
  • Validar con stratified k-fold y PR-AUC

Al aplicar estas buenas prácticas, transformarás un modelo que «hace trampa» en un sistema realmente útil para detectar los casos raros. Prueba progresivamente los diferentes enfoques en tus datos y mide el impacto concreto en tu métrica empresarial principal.

💬 ¿Una pregunta o ganas de ir más lejos? Únete a la comunidad en Discord : https://discord.gg/GwhUKccQcM