- SCIKIT-LEARN
- CALIBRATION
- TABULAR
Credit Risk Model

Modelo de riesgo de impago con evaluación rigurosa: pipeline sin fugas, comparación por validación cruzada, probabilidades calibradas, umbral de decisión por coste de negocio y análisis de error por segmento. Código en github.com/delcenjo/credit-risk.
Predicción de impago con el dataset UCI de Taiwán: 30.000 clientes de tarjeta de crédito con un 22% de impago. El objetivo no era ajustar un clasificador, sino convertir el modelo en una decisión de préstamo defendible: validación sin fugas, métricas honestas para un objetivo desbalanceado, probabilidades calibradas y un umbral elegido por el coste de equivocarse.
- ROC-AUC test0.779
- PR-AUC0.562
- Dataset30.000 clientes
Comparar modelos sin trampas
Regresión logística: 0,728 ROC-AUC y 0,505 PR-AUC. Gradient boosting: 0,781 y 0,562. Los candidatos se ordenan por PR-AUC, no por accuracy, porque con un 22% de positivos la accuracy engaña. El ganador se evalúa una sola vez en el test apartado: 0,779 de ROC-AUC.
El umbral vale más que el algoritmo
Un falso negativo (prestar a quien impaga) no cuesta lo mismo que un falso positivo (rechazar a quien habría pagado). El umbral de decisión se elige minimizando el coste esperado con esa asimetría, y mueve el resultado operativo más que cambiar de modelo.
Dónde falla el modelo
El análisis de error por segmento cierra el proyecto: mirar en qué subgrupos se concentran los fallos dice más sobre los datos y las variables que cualquier métrica global. Fue la parte donde más aprendí, porque los errores casi nunca estaban donde esperaba.
Próximos proyectos:

Credit Risk Platform
Plataforma MLOps de scoring de crédito de punta a punta: entrenamiento reproducible con registro de modelos versionado, API de inferencia en FastAPI con validación de entrada, monitorización de drift por PSI y observabilidad con Prometheus y Grafana, todo dockerizado y con CI. Código en github.com/delcenjo/credit-risk-platform.

Transformer from scratch
Modelo de lenguaje tipo GPT implementado desde cero en PyTorch: atención multi-cabeza, máscara causal y bloques residuales escritos a mano, más un tokenizador byte-pair propio y un estudio de ablaciones. Código en github.com/delcenjo/transformer-from-scratch.