agent-risk-ai
🏦 Agente de Riesgo IA (Agent Risk AI) — ML + MCP Server
Agente de Riesgo IA: Su analista autónomo de inteligencia y riesgo de crédito vía MCP. Un modelo de predicción de impago de tarjeta de crédito, entrenado con rigor metodológico (CV estratificada, tuning bayesiano con Optuna, umbral optimizado, explicabilidad vía SHAP) y expuesto como servidor MCP — consultable directamente por Claude Desktop/Code y agentes de IA en lenguaje natural.
📌 Por qué este proyecto es diferente de "solo entrenar un modelo"
La mayoría de los proyectos de portafolio se quedan en entrenar el modelo y mostrar un .ipynb
con métricas. Este va un paso más allá: el modelo está encapsulado en un servidor MCP
(Model Context Protocol) con 6 herramientas de negocio, lo que significa que cualquier
host LLM compatible (Claude Desktop, Claude Code) puede consultar el modelo en
lenguaje natural, sin escribir código:
🗣️ "¿Cuál es el riesgo de impago de este cliente: edad 46, ingresos R$107.934, score de crédito 544, 2 impagos anteriores?" 🤖 → llama a
predict_default→ responde con probabilidad, clase y explicación SHAP.
Esto es exactamente el patrón que está emergiendo en equipos de riesgo/datos que quieren poner modelos de producción "en la conversación", no detrás de un dashboard estático.
Related MCP server: Credit Risk Copilot
🗂️ El problema de negocio
Dataset de 45.528 clientes de tarjeta de crédito con variables demográficas,
de ingresos y de comportamiento crediticio. Objetivo: credit_card_default (binario),
con desequilibrio real de 8,1% de impagos — escenario típico de riesgo
de crédito, donde la precisión ingenua es una métrica engañosa.
Filas de entrenamiento | 45.528 |
Tasa de impago | 8,12% (desequilibrado) |
Variables originales | 17 (+ |
Variables tras ingeniería | 30 |
🏗️ Cómo Funciona el Sistema (Arquitectura Simple)
El proyecto transforma datos brutos de crédito en decisiones accionables y auditables consumidas por agentes de IA a través de 4 etapas integradas:
flowchart LR
A["📁 1. Dados Brutos<br/><b>train.csv / test.csv</b>"] --> B["🧹 2. Limpeza & Features<br/><b>DTI, Limite, Flags</b>"]
B --> C["🤖 3. Cérebro Preditivo<br/><b>XGBoost + Optuna + SHAP</b>"]
C --> D["🔌 4. Servidor MCP<br/><b>6 Ferramentas de Negócio</b>"]
D --> E["💬 5. Agente de IA<br/><b>Claude / Cursor / LLMs</b>"]El Flujo en 4 Pasos:
📁 1. Tratamiento e Inteligencia Financiera (
data_processing.py/feature_engineering.py)Elimina datos sensibles (PII) y trata anomalías del dataset (como el centinela de jubilados).
Crea indicadores financieros reales: Debt-to-Income (DTI), utilización de límite e ingresos per cápita.
🤖 2. Pipeline de Machine Learning (
pipeline.py/train.py)Ejecuta transformaciones (imputación, one-hot encoding y escala) de forma estanca (sin fuga de datos).
Entrena y ajusta el XGBoost vía Optuna (25 trials) en validación cruzada 5-fold, calibrando el umbral de decisión óptimo ($F_1 = 0,875$).
🧠 3. Explicabilidad y Auditoría (
inference.py/evaluate.py)Persiste el modelo ganador y el SHAP TreeExplainer para descomponer exactamente qué variables aumentan o reducen el riesgo de cada cliente en tiempo real.
🔌 4. Capa Agéntica MCP (
mcp_server/server.py)Expone 6 herramientas listas para que cualquier asistente o agente de IA (Claude Desktop, Claude Code, etc.) pueda consultar el modelo, simular escenarios y evaluar carteras enteras en lenguaje natural.
🔬 Ingeniería de features orientada a dominio
En lugar de "echarlo todo al XGBoost", cada feature derivada tiene una justificación de riesgo de crédito explícita:
Feature | Racional de negocio |
| Cuánto de los ingresos anuales está comprometido con deuda — pilar clásico de underwriting |
| Apalancamiento concedido relativo a la capacidad de pago |
| Interacción: el uso alto del límite pesa más para quien ya ha tenido impago |
| Ingresos disponibles per cápita, no solo nominales |
| Estabilidad laboral relativa a la edad |
| Suma de indicadores de riesgo ya observados (impago previo, impago reciente, utilización > 80%) |
| Flag explícito para el valor centinela (~365.243 días) encontrado en |
🧪 Metodología y rigor estadístico
Winsorización aprendida solo en el entrenamiento (percentil 99,5%) y reaplicada en el test/holdout — sin fuga de datos.
Pipeline sklearn único (
ColumnTransformer+ modelo) — imputación y encoding se recalculan en cada fold de la validación cruzada, no una sola vez en el dataset completo (error común que infla métricas artificialmente).Métrica de selección: PR-AUC (Average Precision), no ROC-AUC ni exactitud — la elección correcta para 8% de prevalencia de la clase positiva.
Holdout de 15% nunca visto durante el tuning del Optuna — las métricas finales siguientes son de generalización real, no de overfitting al proceso de búsqueda.
Umbral de decisión recalibrado maximizando F1 en la curva precisión-recall del holdout (0,875), en lugar de usar 0,5 a ciegas — esencial cuando la clase positiva es rara.
Explicabilidad vía SHAP TreeExplainer — cada predicción del servidor MCP puede auditarse factor a factor (relevante para el cumplimiento normativo de crédito).
📊 Resultados y Métricas de Rendimiento
Todas las métricas siguientes se calcularon en el conjunto de holdout (6.830 clientes), completamente aislado durante la búsqueda de hiperparámetros con Optuna:
1. Comparativa de Modelos (Validación Cruzada Estratificada 5-Fold)
Modelo | PR-AUC (CV 5-fold) | Ganancia vs Baseline |
Regresión Logística (baseline lineal balanceado) | 0,9454 | — |
Random Forest (400 estimadores, balanced subsample) | 0,9484 | +0,30% |
XGBoost + Optuna (25 trials bayesianos TPE) | 0,9546 | +0,92% |
2. Métricas de Rendimiento en el Holdout (Modelo Campeón)
Métrica Estadística y de Negocio | Valor | Interpretación Práctica |
ROC-AUC | 0,9960 | Capacidad discriminativa global casi perfecta entre buenos y malos pagadores. |
PR-AUC (Average Precision) | 0,9625 | Métrica prioritaria para desequilibrio (vs baseline aleatorio de 8,12%). |
Índice de Gini (Crédito) | 0,9920 | $2 \times \text{ROC-AUC} - 1$ — excelente poder de separación de riesgo. |
Exactitud Global | 98,14% | 6.703 predicciones correctas de 6.830 clientes evaluados. |
Precisión (Precision / VPP) | 96,52% | De cada 100 clientes clasificados como morosos, 96,5 realmente incurren en impago. |
Recall / Sensibilidad | 80,00% | Captura 8 de cada 10 morosos reales, evitando pérdidas de crédito. |
Especificidad (TNR) | 99,75% | Preserva el 99,75% de los buenos clientes, garantizando una concesión saludable. |
Falsa Alarma (FPR) | 0,25% | Solo 16 clientes sanos rechazados por error de 6.275 analizados. |
F1-Score | 0,8749 | Equilibrio armónico óptimo entre precisión y recall. |
Umbral de Decisión Optimizado | 0,875 | Threshold calibrado vía curva PR (vs corte ingenuo de 0,5). |
3. Matriz de Confusión Detallada en el Holdout
Real \ Previsto | Pagador (0) | Moroso (1) | Total Real | Impacto en el Negocio de Crédito |
Pagador Real (0) | 6.259 (TN) | 16 (FP) | 6.275 | Fricción mínima: solo 16 buenos clientes rechazados indebidamente (FPR = 0,25%). |
Moroso Real (1) | 111 (FN) | 444 (TP) | 555 | Pérdida evitada: 444 impagos bloqueados con éxito (Recall = 80,00%). |
Total Previsto | 6.370 | 460 | 6.830 | Tasa de acierto al señalar riesgo: 96,52% de precisión. |
4. Hiperparámetros Ganadores (Optuna — 25 Trials)
{
"n_estimators": 500,
"max_depth": 4,
"learning_rate": 0.0121,
"subsample": 0.7244,
"colsample_bytree": 0.7301,
"min_child_weight": 8,
"gamma": 3.1878,
"reg_lambda": 3.5388,
"reg_alpha": 0.0774,
"scale_pos_weight": 11.3164
}5. Top 10 Factores de Riesgo Auditables (Importancia Media $|\text{SHAP}|$)
Ranking | Feature | Media $|\text{SHAP}|$ | Racional de Riesgo |
1º | credit_score | 3,3044 | Factor dominante: puntuación histórica de burós de crédito. |
2º | credit_limit_used(%) | 1,8558 | Compromiso del límite rotativo concedido. |
3º | credit_utilization_frac | 0,6122 | Fracción decimal de utilización del límite de crédito. |
4º | risk_flags_sum | 0,1516 | Suma ponderada de indicadores de riesgo preexistentes. |
5º | prev_defaults | 0,1167 | Cantidad de ocurrencias de impago previo. |
6º | yearly_debt_payments | 0,0445 | Carga financiera anual comprometida con pagos. |
7º | no_of_days_employed | 0,0382 | Estabilidad laboral y tiempo en el empleo actual. |
8º | gender_F | 0,0339 | Categoría demográfica monitoreada para auditoría. |
9º | utilization_x_prev_defaults | 0,0266 | Interacción: alta utilización combinada con impago pasado. |
10º | occupation_type_Unknown | 0,0240 | Indicador de ocupación no informada / jubilado. |
📈 Artefactos Visuales en reports/figures/:
roc_curve.png— Curva ROC con línea base aleatoria.precision_recall_curve.png— Curva Precisión-Recall comparada con la prevalencia base.confusion_matrix.png— Matriz de confusión en el umbral óptimo.shap_summary.png— Gráfico de resumen beeswarm de explicabilidad global.
🔒 Todas las métricas anteriores son reproducibles y se guardan en el metadato de auditoría en
models/model_metadata.json.
💡 Guía de Interpretación de los Resultados (Para Legos y Negocios)
Para facilitar la comunicación entre científicos de datos, analistas de crédito y directores no técnicos, cada salida del sistema tiene un significado de negocio directo:
1. 📈 Probabilidad de Default (PD) y Rangos de Acción
¿Qué es? La probabilidad estimada (de 0% a 100%) de que el cliente retrase el pago de la factura más de 90 días en los meses siguientes.
¿Cómo actuar según el rango?
🟢
MUY_BAJO(< 5%) yBAJO(5% a 15%): Concesión de crédito y aumento de límite recomendados de forma automática con tasas competitivas.🟡
MODERADO(15% a 35%): Cliente límite. Se recomienda un límite inicial conservador o solicitar comprobación de ingresos.🔴
ALTO(35% a 60%) yMUY_ALTO(≥ 60%): Riesgo elevado de impago. Se recomienda rechazo de la propuesta o exigencia de avalistas/garantías reales.
2. 📊 Cómo Leer el Gráfico de Explicabilidad SHAP
🔴 Barras hacia la DERECHA (Contribución Positiva): Factores registrales o de comportamiento que empujan el riesgo hacia ARRIBA (ej: puntuación baja, uso excesivo del límite rotativo, impago previo).
🟢 Barras hacia la IZQUIERDA (Contribución Negativa): Factores saludables que protegen al cliente y empujan el riesgo hacia ABAJO (ej: estabilidad de años en el empleo, ingresos altos, puntuación alta).
📏 Longitud de la Barra: Cuanto más larga sea la barra, más decisiva fue esa variable para el veredicto final de la IA.
3. 📉 ¿Qué es la Simulación What-If?
Permite simular el impacto de cambios en reglas o guiar a clientes rechazados. Por ejemplo: "Si reduces la utilización de tu límite del 73% al 30%, tu riesgo bajará del 68% al 22%, permitiendo la aprobación de tu tarjeta."
4. 💰 Exposición Total y Pérdida Esperada de la Cartera
Exposición Total: El volumen financiero total que la institución puso en juego (suma de los límites de crédito concedidos).
Pérdida Esperada ($PD \times \text{Exposición}$): El valor en Reales que la institución proyecta perder estadísticamente por impago si no se toma ninguna acción.
Tasa de Pérdida (%): Base directa para la Provisión para Deudores Dudosos (PDD / IFRS 9).
🔌 El servidor MCP — 6 herramientas de negocio
Herramienta | Uso |
| Probabilidad + clase + rango de riesgo de un cliente |
| Principales factores SHAP detrás del puntaje (auditoría/cumplimiento) |
| "¿Y si el límite usado bajara al 30%?" — simulación de política |
| Puntaje en lote de un CSV completo en el disco |
| Pérdida esperada (PD × exposición), distribución de riesgo, principales clientes |
| Ficha técnica del modelo (métricas, hiperparámetros, características) |
Rangos de riesgo usados por el servidor: MUY_BAJO (<5%) · BAJO (5–15%) ·
MODERADO (15–35%) · ALTO (35–60%) · MUY_ALTO (≥60%).
🌐 Interfaz Web Chat en el Navegador (Streamlit)
El proyecto incluye una interfaz web conversacional completa construida en Streamlit para demostraciones, pruebas rápidas y uso operativo por equipos de crédito y suscripción:
make web
# ou: streamlit run app.pyAccede en tu navegador: http://localhost:8501
✨ Principales Características de la Interfaz Web:
💬 Chat en Lenguaje Natural: Haz preguntas libres sobre clientes, simulaciones o carteras en español.
⚡ Acciones Rápidas (Todos los 5 Rangos de Riesgo): Carga instantáneamente perfiles representativos de cada rango con 1 clic:
🟢 1. Muy Bajo (<5%): Cliente Prime (ingresos altos, puntuación 910, uso de límite 10%).
🟢 2. Bajo (5–15%): Cliente Saludable (puntuación 810, uso de límite 25%, 0 impagos).
🟡 3. Moderado (15–35%): Cliente Límite (puntuación 580, uso de límite 50%, sin retrasos).
🔴 4. Alto (35–60%): Cliente Alerta (puntuación 580, uso de límite 50%, 1 impago reciente).
⛔ 5. Muy Alto (≥60%): Cliente Crítico (puntuación 544, uso de límite 73%, 2 impagos).
🛠️ Cuadrícula de Consultas Sugeridas:
📊 Ficha Técnica: Muestra métricas de validación, ROC-AUC, PR-AUC y precisión.
📁 Cartera CSV: Evalúa carteras completas con puntuación vectorizada de 11.000 clientes en 0,7s, calculando la Pérdida Esperada (R$) y la exposición total.
📉 Simulación What-If: Simula reducciones de límite (30%), liquidación de deudas o aumento de puntuación (+150 puntos).
🔬 Auditoría SHAP: Ranking y gráficos de barras con los mayores impulsores de riesgo de crédito.
💡 Guías Expandibles para Legos: Cada respuesta contiene una leyenda didáctica que explica el significado de los gráficos SHAP, deltas de probabilidad y provisión de pérdidas.
🔌 Opción 2: Servidor MCP (Claude Desktop / Claude Code)
# 1. Instalar dependências
pip install -r requirements.txt --break-system-packages # ou use um venv
# 2. Treinar o modelo (gera models/*.joblib e model_metadata.json)
python -m src.train
# 3. (Opcional) Gerar os gráficos de avaliação em reports/figures/
python -m src.evaluate
# 4. Rodar os testes
pytest -v
# 5. Subir o servidor MCP (stdio)
python -m mcp_server.serverConectar a Claude Desktop / Claude Code
Copia mcp_server/claude_desktop_config.example.json al archivo de
configuración MCP de tu cliente, ajustando las rutas absolutas:
{
"mcpServers": {
"agent-risk-ai": {
"command": "python",
"args": ["-m", "mcp_server.server"],
"cwd": "/caminho/absoluto/para/agent-risk-ai",
"env": { "PYTHONPATH": "/caminho/absoluto/para/agent-risk-ai" }
}
}
}Reinicia el cliente y pregunta, por ejemplo: "Usando el servidor agent-risk-ai, ¿cuál es el riesgo de este cliente: ..."
📁 Estructura del proyecto
agent-risk-ai/
├── app.py # Interface Web Chat conversacional no navegador (Streamlit)
├── data/raw/ # train.csv, test.csv, sample_submission.csv
├── src/
│ ├── config.py # caminhos, sementes, regras de negócio centralizadas
│ ├── data_processing.py # limpeza (sentinelas, winsorização, PII)
│ ├── feature_engineering.py # features de domínio (DTI, utilização, tenure...)
│ ├── pipeline.py # ColumnTransformer sklearn (sem vazamento)
│ ├── train.py # baselines + Optuna + XGBoost + SHAP + persistência
│ ├── evaluate.py # gera gráficos (ROC, PR, confusão, SHAP)
│ └── inference.py # camada de predição reutilizada pelo MCP e Web Chat
├── mcp_server/
│ ├── server.py # servidor MCP com as 6 ferramentas
│ └── claude_desktop_config.example.json
├── models/ # modelo treinado + metadados (gerado por train.py)
├── reports/figures/ # gráficos de avaliação (gerado por evaluate.py)
├── tests/test_pipeline.py # 7 testes unitários (pytest)
├── requirements.txt
├── Makefile
└── README.md⚠️ Limitaciones conocidas y próximos pasos
La transparencia sobre las limitaciones es parte de hacer ciencia de datos seria:
LGD asumida al 100% en el cálculo de pérdida esperada (
portfolio_risk_summary) por simplicidad — en producción, esto vendría de datos históricos de recuperación.Sin monitoreo de deriva — el siguiente paso natural sería instrumentar
predict_defaultcon registro de distribución de características a lo largo del tiempo.Calibración de probabilidad no fue validada con
CalibratedClassifierCV— las probabilidades son discriminativas (buenas para clasificar riesgo), pero pueden no estar perfectamente calibradas en escala absoluta.occupation_type = "Unknown"es la categoría más frecuente (~31% de la base) y coincide con el indicador de jubilados/no empleados — un refinamiento futuro sería desglosar esa categoría.
🧠 Stack técnica
Python 3.12 · pandas · scikit-learn · XGBoost · Optuna (ajuste bayesiano
vía TPE) · SHAP (explicabilidad) · matplotlib · pytest · MCP Python SDK
Related MCP Connectors
Connect AI agents to financial institution origination, analytics, and compliance workflows.
Credit scores for AI agents. Underwrite an unknown counterparty before extending credit.
Stock & options risk analytics for AI agents: pre-trade risk scan, IV, gamma walls, Monte Carlo.
Compliance-gated stablecoin settlement + x402 macro/ESG/climate intelligence for agents. 115 tools.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides AI agents with quantitative risk tools such as VaR, expected shortfall, GARCH volatility, backtesting, stress testing, tail risk analysis, and credit scoring using synthetic or user-supplied data.71MIT
- FlicenseNot gradedqualityDmaintenanceA natural-language interface to a credit risk database, with SQL guardrails that enforce read-only, allowlisted access to tables and columns.-
- FlicenseNot gradedqualityCmaintenanceEnables users to query financial data and compute credit-risk metrics like Altman Z-Score and loan default probability through natural language.-
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to run probabilistic portfolio analysis workflows, including input validation, instrument verification, simulation preparation, and approved interactive reporting.-