Aplicación de redes neuronales a datos tabulares
Autores:
- Alejandro Gómez Franco
- Santiago Acevedo Cacua
- Jesus Miguel Porto Lopez
- Juan Felipe Cadavid Ruiz
Universidad: Universidad Nacional de Colombia
Planteamiento del problema
El riesgo de crédito consiste en la probabilidad de que un cliente incumpla sus obligaciones financieras. Una correcta estimación de este riesgo permite a las entidades financieras tomar decisiones informadas sobre la aprobación de créditos, tasas de interés y límites de endeudamiento.
En este proyecto se busca desarrollar un modelo predictivo capaz de estimar la probabilidad de incumplimiento de un cliente, utilizando información histórica de préstamos. Adicionalmente, se construye una scorecard que traduce dichas probabilidades en un puntaje interpretable para usuarios finales.
Variable objetivo
La variable objetivo se definió como una variable binaria que representa el estado final del crédito. Esta se construyó a partir de la variable original loan_status, la cual describe el estado de cumplimiento de las obligaciones financieras dentro del Credit Risk Dataset disponible en Kaggle (Ranadeep, 2018).
La codificación se realizó de la siguiente manera:
- 0 (Buen pagador): Créditos completamente pagados
- 1 (Mal pagador): Créditos en estado de incumplimiento o con atrasos significativos
Preparación de datos
Eliminación de leakage
Se eliminaron variables que contienen información posterior al otorgamiento del crédito (por ejemplo, pagos realizados o estado actual del saldo), ya que introducirán fuga de información (data leakage), generando modelos artificialmente precisos. De igual forma se eliminaron variables irrelevantes para el modelo (id, descripciones, títulos, etc.)
- total_pymnt
- total_pymnt_inv
- total_rec_prncp
- total_rec_int
- total_rec_late_fee
- recoveries
- collection_recovery_fee
- last_pymnt_amnt
- out_prncp
- out_prncp_inv
- id
- member_id
- url
- desc
- title
- issue_d
Limpieza y transformación
Se realizaron las siguientes transformaciones:
- Conversión de variables categóricas como term y emp_length a formato numérico
- Imputación de valores faltantes:
- Variables numéricas: mediana
- Variables categóricas: categoría "Unknown"
Preprocesamiento
Se utilizó un pipeline de transformación compuesto por:
- Estandarización (StandardScaler) para variables numéricas
- Codificación One-Hot para variables categóricas
- Implementación mediante ColumnTransformer
División de datos
El conjunto de datos se dividió en:
- 70% entrenamiento: 187,971 observaciones
- 15% validación: 40,279 observaciones
- 15% prueba: 40,280 observaciones
Metodología de modelado
Arquitectura de la red
Se implementó una red neuronal completamente conectada (feedforward) con la siguiente estructura:
- Capa de entrada
- Tres capas ocultas de:
- 256 neuronas
- 128 neuronas
- 64 neuronas
- Función de activación: ReLU
- Capa de salida con una neurona (logit)
- Batch Normalization, que estabiliza el entrenamiento
- Dropout, con probabilidades de 0.3 y 0.2, para reducir overfitting
El conjunto de datos presenta un desbalance significativo entre buenos y malos pagadores. Para abordar este problema, se utilizó la función de pérdida BCEWithLogitsLoss con un peso positivo (pos_weight = 3.57), penalizando más los errores en la clase minoritaria (malos pagadores).
Entrenamiento del modelo
El modelo se entrenó utilizando:
- Optimizador: Adam
- Tasa de aprendizaje inicial: 0.001
- Regularización L2 (weight decay)
- Reducción adaptativa de la tasa de aprendizaje (ReduceLROnPlateau)
Evaluación del modelo
Desempeño de la red neuronal
El modelo fue evaluado sobre el conjunto de prueba, obteniendo:
- Accuracy: 0.6491
- AUC-ROC: 0.7155
Comparación con modelo base
Se utilizó una regresión logística como modelo baseline, obteniendo:
- AUC-ROC: 0.7059
Sin embargo, la mejora es moderada, lo cual sugiere que gran parte de la señal predictiva ya es capturada por modelos lineales.
Interpretación de resultados
Construcción del Scorecard
Una vez entrenado el modelo, la probabilidad de incumplimiento estimada para cada solicitante se transforma en un score crediticio mediante la ecuación:
con parámetros B0 = 600 y B1 = 50. Esta calibración sigue la convención de que un solicitante de riesgo promedio obtenga un puntaje alrededor de 600, y que la escala sea monótonamente decreciente con el riesgo: a mayor score, menor probabilidad de incumplimiento. El resultado se acota al rango [300, 850] para alinearse con los rangos convencionales de scoring crediticio estadounidense.
Aplicando esta transformación al conjunto de prueba (40.280 observaciones), la distribución del score presenta los siguientes estadísticos:
La distribución es aproximadamente simétrica, concentrada en el rango 560–660, lo que refleja que la mayoría de los solicitantes en el dataset histórico de Lending Club presentan un perfil de riesgo moderado a bajo.
Bandas de riesgo
Los scores se agrupan en cinco bandas de riesgo con rangos fijos. La Tabla 3 muestra la distribución real del conjunto de prueba en cada banda, junto con la tasa de default observada.
Las tasas de default por banda son coherentes y monotónicas: cada banda más riesgosa presenta una tasa mayor, lo que confirma el poder discriminante del modelo. Sin embargo, la distribución de la población revela una limitación operacional importante: el 96.3% de los solicitantes se concentra en solo dos bandas (Bajo Riesgo y Riesgo Moderado), y las bandas extremas están prácticamente vacías. Ningún solicitante del conjunto de prueba alcanza la banda de Muy Alto Riesgo.
Esta concentración se origina en la distribución del score: con media 612.8 y desviación estándar 44.1, la gran mayoría de los scores cae entre 525 y 700, dejando las colas del scorecard casi sin población. Los límites de banda actuales (fijos en múltiplos de 100) no fueron calibrados con base en percentiles de la distribución real, lo que limita la utilidad operacional del scorecard para estratificar decisiones de crédito. Esta es una limitación reconocida del modelo en su versión actual.
Importancia de variables
Metodología: Permutation Importance
La importancia de variables se estimó mediante el método de Permutation Importance (Breiman, 2001), implementado manualmente sobre una muestra aleatoria de 5.000 observaciones del conjunto de pruebas. Para cada variable, el procedimiento consiste en permutar aleatoriamente sus valores rompiendo cualquier asociación con la variable objetivo y medir la caída resultante en AUC-ROC respecto al modelo original. Este proceso se repitió tres veces por variable, promediando los resultados para reducir varianza. A diferencia de métodos basados en gradientes o pesos de la red, la permutation importance es agnóstica a la arquitectura y mide el efecto real de cada variable sobre la capacidad discriminante del modelo.
Resultados
Las variables más importantes permiten construir un perfil típico del solicitante de alto riesgo: persona con ingreso anual bajo (percentil inferior de annual_inc), DTI elevado (>30%), crédito a 60 meses, alta utilización de tarjetas (revol_util cercana al límite) e historial crediticio corto (bajo total_acc). Este perfil coincide con el segmento thin file —solicitantes con poca historia crediticia y alta dependencia del crédito disponible— identificado como de alto riesgo en la literatura de credit scoring (Thomas et al., 2002). La concentración de la importancia en las primeras cuatro variables —que acumulan el 60% del ΔAUC total del top 10— sugiere que el modelo captura principalmente la capacidad de repago (annual_inc, dti) y el comportamiento crediticio reciente (revol_util, term), dimensiones directamente correspondientes a las "5 C del crédito" más relevantes para préstamos al consumo.
Aprendizajes del proceso de modelamiento
El desarrollo de este proyecto generó los siguientes aprendizajes técnicos concretos:
- La arquitectura de la red no fue el factor limitante. Con un AUC-ROC de 0.7155 frente a 0.7059 de la Regresión Logística, la mejora es de apenas +0.96 puntos. Esto indica que la señal predictiva del dataset ya es capturada en gran medida por relaciones lineales. En credit scoring con datos transaccionales históricos, la calidad y granularidad de las variables suelen importar más que la complejidad del modelo.
- El desbalance de clases requiere atención explícita. La distribución 78.1% / 21.9% entre buenos y malos pagadores produjo un recall de 67% sobre la clase positiva gracias al uso de pos_weight = 3.57 en la función de pérdida. Sin esta corrección, el modelo habría tendido a predecir mayoritariamente la clase dominante, con recall cercano a cero en malos pagadores.
- El early stopping fue efectivo pero reveló convergencia rápida. El modelo alcanzó su mejor punto de generalización en la época 10 de 150 planificadas, y fue detenido en la época 25. La reducción de la tasa de aprendizaje alrededor de la época 17 (por ReduceLROnPlateau) generó una caída visible en la pérdida de entrenamiento sin recuperar capacidad de generalización, confirmando sobreajuste leve controlado por la regularización (Dropout + BatchNorm + L2).
- La scorecard expone los límites de la distribución subyacente. El 96.3% de la población de prueba se concentró en dos bandas intermedias. Esto no es un error del modelo, sino una consecuencia de que los scores se distribuyen con desviación estándar de 44 puntos alrededor de una media de 612.8: con límites fijos en múltiplos de 100, las colas quedan inevitablemente vacías. La calibración de bandas debería hacerse por percentiles de la distribución real, no por intervalos arbitrarios.
- Las variables de más impacto son interpretables por un analista de negocio. Las tres variables más importantes —annual_inc, dti y term— son exactamente las que un analista de crédito consideraría primero en una evaluación manual. Esto otorga al modelo credibilidad operacional más allá de su desempeño estadístico.
- Ausencia de análisis exploratorio formal. El notebook no incluye análisis descriptivo de las distribuciones de variables ni de sus relaciones con el target antes del preprocesamiento, lo que dificulta la detección de anomalías o la formulación de hipótesis sobre transformaciones adicionales.
- Variables hardcodeadas en la aplicación. Once de las 35 variables del modelo se asignan con valores fijos en la app web, lo que significa que el score mostrado al usuario refleja parcialmente supuestos del equipo y no solo la información del solicitante.
- Dataset estático y temporal. Los datos de Lending Club corresponden a un período histórico específico. El comportamiento de crédito varía con los ciclos económicos; un modelo entrenado sobre este dataset puede no generalizar bien a condiciones macroeconómicas distintas.
- Métricas limitadas. Solo se reporta AUC-ROC. Métricas estándar como el KS Statistic, el Coeficiente de Gini y el AUC-PR no fueron calculadas, lo que impide una evaluación completa del poder discriminante del modelo.
Trabajo futuro
Si el equipo continuara este proyecto, las mejoras prioritarias serían:
- Corregir la imputación para que opere exclusivamente sobre datos de entrenamiento mediante un pipeline de scikit-learn.
- Recalibrar las bandas del scorecard usando percentiles de la distribución real para asegurar cobertura uniforme.
- Incorporar WOE/IV (Weight of Evidence / Information Value) como análisis de variables previo al modelamiento, práctica estándar en credit scoring.
- Evaluar con KS Statistic y Gini para disponer de métricas comparables con la literatura de la industria.
Conclusión general
Este proyecto demuestra que es posible construir un modelo funcional de probabilidad de incumplimiento con redes neuronales sobre datos reales de crédito al consumo, alcanzando un AUC-ROC de 0.7155 y traduciendo las predicciones a una scorecard interpretable desplegada como aplicación web. La mejora sobre el baseline lineal es modesta pero consistente, y los resultados son honestos respecto a las limitaciones metodológicas identificadas. El mayor aprendizaje no es el número final de AUC, sino la comprensión de que en credit risk, como en la mayoría de los problemas de ML aplicado, las decisiones de preprocesamiento, la construcción de la variable objetivo y la calibración operacional del output importan tanto —o más— que la elección de la arquitectura del modelo.
Aplicación web
La aplicación traduce el modelo entrenado en una herramienta interactiva que permite a cualquier usuario calcular su score crediticio en tiempo real, sin necesidad de conocimientos técnicos. Está construida con Gradio y expone la red neuronal a través de una interfaz web accesible desde el navegador.
Arquitectura y componentes
La app carga tres artefactos generados durante el entrenamiento:
- preprocessor.pkl: pipeline de preprocesamiento (escalado numérico + codificación de variables categóricas)
- best_model.pt: pesos de la red neuronal entrenada (256→128→64→1)
- meta.pkl: metadatos del modelo (dimensión de entrada, AUC, media y desviación del score poblacional)
Entradas del formulario
El usuario ingresa información agrupada en tres bloques:
Proceso de inferencia
- Se construye un reDgistro tabulado con los valores ingresados por el usuario
- Se aplica el preprocesador entrenado para obtener el vector de features
- La red neuronal produce un logit, que se convierte en probabilidad de incumplimiento mediante la función sigmoide:
Esta función es ampliamente utilizada en modelos de clasificación binaria para mapear valores reales al rango [0,1] (Baugh, 2025).
- La probabilidad se transforma en un score crediticio en escala 300–850 mediante la fórmula:
Esta transformación está inspirada en los sistemas tradicionales de scoring crediticio basados en regresión logística, donde el puntaje es proporcional al logaritmo de las odds de incumplimiento (Siddiqi, 2006).
Salida y scoreboard
El resultado de la aplicación web traduce la probabilidad de incumplimiento estimada por la red neuronal a un score crediticio, junto con métricas de decisión clave.
El Scorecard asigna el score calculado a una banda de riesgo interpretable y asocia una tasa de default aproximada, facilitando la toma de decisiones:
- Score Numérico: El puntaje de crédito en la escala 300–850.
- Banda de Riesgo: La categoría de riesgo asignada según el scorecard.
- Probabilidad de Incumplimiento: La probabilidad p estimada por la red neuronal.
- Cuota Mensual Calculada: Estimación del pago mensual si se aprueba el crédito (cálculo externo al modelo de riesgo).
- Percentil: Posición relativa del score del solicitante respecto a una población de referencia de 60,000 simulaciones basada en la distribución empírica del conjunto de prueba.
Anexos
Anexo 1: Repositorio GitHub
Anexo 2: Video publicitario
Referencias
Baugh, L. Sue. "logistic function". Encyclopedia Britannica, 29 Oct. 2025, https://www.britannica.com/science/logistic-function. Accessed 21 April 2026.
Gómez Franco, A., Cadavid Ruiz, J. F., Porto López, J. M., & Acevedo Cacua, S. (2026). Modelo de Riesgo de Crédito con Redes Neuronales. GitHub. https://github.com/itsFr4nc0/red-neuronal-creditos
Ranadeep. (2018). Credit Risk Dataset [Conjunto de datos]. Kaggle. https://www.kaggle.com/datasets/ranadeep/credit-risk-dataset/data
Siddiqi, N. (2006). Credit Risk Scorecards: Developing and Implementing Intelligent Credit Scoring. John Wiley & Sons.
Comentarios
Publicar un comentario