Problema
Las entidades financieras reciben miles de quejas en texto libre. Clasificarlas manualmente por categoría de producto es costoso, lento e imposible de escalar. Se requiere automatización con NLP.
Objetivo
Entrenar un modelo capaz de clasificar automáticamente quejas financieras en 5 categorías de producto, con alta precisión y manejo explícito del desbalance de clases.
Decisiones técnicas
- Modelo distilbert-base-uncased (66 M parámetros)
- Fine-tuning sobre tarea de clasificación de secuencias
- MAX_LENGTH = 256 tokens — cubre el 94.6 % de los textos
- Pesos de clase para corregir desbalance (credit_reporting = 56 %)
- División estratificada 80 / 10 / 10 (train / val / test)
- Seed fija (42) para reproducibilidad total
Metodología
- EDA: distribución de clases, valores nulos, longitud de textos
- Preprocesamiento: limpieza de NaN, tokenización HuggingFace
- Entrenamiento: HF Trainer + DataCollatorWithPadding
- Hiperparámetros: lr = 2e-5, batch = 16, epochs = 3
- Evaluación: accuracy, F1, matriz de confusión
- Análisis: curvas de loss (1.15 → 0.20) y accuracy por epoch
Resultados
- Accuracy en test: 89.89 % · F1 macro: 0.87 · F1 weighted: 0.90
- Mejor clase: credit_reporting (F1 = 0.94) · Clase más pequeña: retail_banking con solo 8 % del dataset alcanzó F1 = 0.89
- Sin overfitting: accuracy en validación subió 89.0 % → 89.6 % → 90.0 % en las 3 epochs
- Principales confusiones entre categorías con vocabulario compartido (debt_collection ↔ credit_reporting)
Tecnologías utilizadas
Python
PyTorch
Transformers (HF)
DistilBERT
datasets (HF)
scikit-learn
pandas
numpy
matplotlib
seaborn
Google Colab
Kaggle API
Posibles mejoras
- Probar bert-base-uncased (mayor capacidad representacional)
- Subir MAX_LENGTH a 512 para cubrir el 5.4 % de textos largos
- Early stopping con mayor número de epochs
- Data augmentation en clases minoritarias
🎯
DistilBERT con fine-tuning alcanzó 89.89 % de accuracy clasificando quejas financieras en 5 categorías sobre más de 162,000 registros. El uso de pesos de clase fue clave: retail_banking con solo el 8 % del dataset logró F1 = 0.89, demostrando que los modelos pre-entrenados son una solución robusta y eficiente para NLP en entornos con desbalance real de datos.