Detección de fraude: por qué el AUC-ROC engaña y el AUC-PR no (datos reales)
Es fácil presumir de un AUC-ROC de 0,99 en fraude; es más honesto reportar el AUC-PR. Sobre 284.807 transacciones reales (ULB, 0,17% fraude), LightGBM logra AUC-PR 0,67 (~550× sobre el azar) con explicabilidad SHAP.
En detección de fraude hay una trampa estadística que infla currículums: el AUC-ROC. Sobre datos extremadamente desbalanceados es fácil presumir de un 0.99 que no significa casi nada. Este proyecto está construido alrededor de la métrica que sí importa —el AUC-PR— y de no esconder los fallos del modelo.
El problema
El objetivo: marcar transacciones fraudulentas en tiempo real y, sobre todo, de forma honesta y explicable. Un analista necesita saber por qué se marca una operación, no un número opaco.
Los datos: ULB, reales y brutalmente desbalanceados
Entrené sobre el dataset ULB Credit Card Fraud Detection: 284.807 transacciones reales de tarjetas europeas, con features anonimizadas por PCA (V1–V28) más importe y tiempo. El detalle clave es el desbalanceo: solo el 0,17% son fraude (unas 492 de 284.807). Esa rareza es justo lo que hace difícil —y honesto— el problema.
Por qué el AUC-ROC engaña (y el AUC-PR no)
Sobre datos tan desbalanceados, el AUC-ROC sale altísimo casi sin esfuerzo (aquí ~0,91) porque premia clasificar bien la clase mayoritaria, que es trivial. El AUC-PR (precisión-recall) cuenta la verdad: mi modelo logra 0,67 frente a un baseline de 0,0012 — es decir, ~550× mejor que el azar en lo que de verdad cuesta. Por eso la demo muestra el AUC-PR, no el ROC inflado.
El modelo
Un clasificador LightGBM con scale_pos_weight para penalizar más los errores sobre la clase fraude, hiperparámetros buscados con Optuna y umbral de decisión calibrado (0,9) para equilibrar precisión y recall según el coste real de cada error.
Resultados (honestos)
- AUC-PR: 0,67 (baseline 0,0012 → ~550× sobre el azar) — la métrica que importa.
- AUC-ROC: 0,91 — alto, pero engañoso en desbalanceo; lo reporto solo para contraste.
- Precisión 0,88 · Recall 0,71 · F1 0,79 · MCC 0,79 sobre el fraude real.
No hay 0,99 de fantasía: el modelo acierta mucho y falla algo, y la demo lo enseña tal cual.
Explicabilidad con SHAP
Cada predicción se acompaña de un desglose SHAP: cuánto empujó cada feature (V11, importe, etc.) hacia "fraude" o "legítimo". Eso convierte el modelo en una herramienta que un equipo humano puede auditar.
Qué aprendí
Que en problemas desbalanceados elegir bien la métrica es un acto de honestidad. Es fácil publicar un AUC-ROC de 0,99 y parecer un genio; es más útil —y más honrado— reportar el AUC-PR real y explicar por qué. Un modelo que conoce y muestra sus límites vale más que uno que presume de una cifra vacía.
Sobre este proyecto
Fraud Detection Pipeline
Detector de fraude entrenado con 284.807 transacciones REALES de tarjetas europeas (dataset ULB/Worldline). Con fraude al 0,17%, la métrica honesta es AUC-PR: 0.67 frente a un base...
Newsletter
¿Te aviso de nuevos proyectos y artículos?
Sin spam. Solo un email cuando publico algo nuevo de IA. Baja en un clic.