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: CreddyMCP
🗂️ 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
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityFmaintenanceProvides DeFi vault risk analytics for AI agents to search, compare, and perform due diligence on over 700 vaults across major protocols like Morpho and Aave. It enables natural language analysis of risk scores, platform security, and portfolio-level risk assessments.95MIT
- AlicenseNot gradedqualityBmaintenanceA credit-risk analytics MCP server enabling natural language queries over 30,000 real credit records, default risk prediction with an interpretable model, and live Turkish economic indicators.1MIT
- AlicenseAqualityCmaintenanceProvides 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 gradedqualityCmaintenanceA natural-language interface to a credit risk database, with SQL guardrails that enforce read-only, allowlisted access to tables and columns.
Related MCP Connectors
Credit scores for AI agents. Underwrite an unknown counterparty before extending credit.
Deterministic what-if & scenario simulation for AI agents: projections, sensitivity & break-even.
Agent credit issuance and scoring — programmable credit lines on Base L2
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/faanogueira/agent-risk-ai'
If you have feedback or need assistance with the MCP directory API, please join our Discord server