agent-risk-ai
🏦 Агент кредитного риска ИИ (Agent Risk AI) — ML + MCP Server
Агент кредитного риска ИИ: Ваш автономный аналитик кредитного интеллекта и риска через MCP. Модель прогнозирования дефолта по кредитной карте, обученная с методологической строгостью (стратифицированная кросс-валидация, байесовская настройка с Optuna, оптимизированный порог, объяснимость через SHAP) и представленная как MCP-сервер — доступная напрямую через Claude Desktop/Code и ИИ-агентов на естественном языке.
📌 Почему этот проект отличается от «просто обучить модель»
Большинство портфельных проектов останавливаются на обучении модели и показе .ipynb
с метриками. Этот идёт дальше: модель инкапсулирована в MCP-сервер
(Model Context Protocol) с 6 бизнес-инструментами, что означает, что любой
совместимый LLM-хост (Claude Desktop, Claude Code) может обращаться к модели на
естественном языке, без написания кода:
🗣️ «Каков риск дефолта этого клиента: возраст 46, доход 107 934 R$, кредитный скоринг 544, 2 предыдущих просрочки?» 🤖 → вызывает
predict_default→ отвечает с вероятностью, классом и SHAP-объяснением.
Это именно тот паттерн, который сейчас появляется в командах по рискам/данным, желающих включить продакшн-модели «в разговор», а не за статичным дашбордом.
Related MCP server: CreddyMCP
🗂️ Бизнес-задача
Датасет из 45 528 клиентов кредитных карт с демографическими переменными,
доходом и кредитным поведением. Целевая переменная: credit_card_default (бинарная),
с реальным дисбалансом 8,1% дефолтов — типичный сценарий кредитного риска,
где наивная точность — вводящая в заблуждение метрика.
Строк для обучения | 45 528 |
Доля дефолтов | 8,12% (несбалансированно) |
Исходных переменных | 17 (+ |
Переменных после инженерии | 30 |
🏗️ Как работает система (простая архитектура)
Проект превращает сырые кредитные данные в действенные и проверяемые решения, потребляемые ИИ-агентами через 4 интегрированных этапа:
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>"]Поток из 4 шагов:
📁 1. Обработка и финансовая аналитика (
data_processing.py/feature_engineering.py)Удаляет чувствительные данные (PII) и обрабатывает аномалии датасета (например, сентинел для пенсионеров).
Создаёт реальные финансовые показатели: Debt-to-Income (DTI), использование лимита и доход на душу населения.
🤖 2. Конвейер машинного обучения (
pipeline.py/train.py)Выполняет преобразования (импутация, one-hot кодирование и масштабирование) изолированно (без утечки данных).
Обучает и настраивает XGBoost через Optuna (25 испытаний) на 5-фолдовой кросс-валидации, калибруя оптимальный порог решения ($F_1 = 0,875$).
🧠 3. Объяснимость и аудит (
inference.py/evaluate.py)Сохраняет лучшую модель и SHAP TreeExplainer для разложения того, какие именно переменные повышают или снижают риск каждого клиента в реальном времени.
🔌 4. Агентный слой MCP (
mcp_server/server.py)Предоставляет 6 готовых инструментов, чтобы любой ассистент или ИИ-агент (Claude Desktop, Claude Code и т.д.) мог обращаться к модели, моделировать сценарии и оценивать целые портфели на естественном языке.
🔬 Инженерия признаков, ориентированная на предметную область
Вместо того чтобы «свалить всё в XGBoost», каждый производный признак имеет явное обоснование кредитного риска:
Признак | Бизнес-обоснование |
| Какая часть годового дохода уходит на долг — классический столп андеррайтинга |
| Предоставленный леверидж относительно платёжеспособности |
| Взаимодействие: высокое использование лимита весит больше для тех, у кого уже был дефолт |
| Доступный доход на душу населения, а не только номинальный |
| Стабильность занятости относительно возраста |
| Сумма уже наблюдаемых индикаторов риска (предыдущий дефолт, недавний дефолт, использование > 80%) |
| Явный флаг для значения-сентинела (~365 243 дня), найденного в |
🧪 Методология и статистическая строгость
Винзоризация, обученная только на тренировочных данных (процентиль 99,5%) и повторно применённая на тесте/холдауте — без утечки данных.
Единый sklearn-конвейер (
ColumnTransformer+ модель) — импутация и кодирование пересчитываются на каждом фолде кросс-валидации, а не один раз на всём датасете (распространённая ошибка, искусственно завышающая метрики).Метрика выбора: PR-AUC (Average Precision), а не ROC-AUC и не точность — правильный выбор при 8% распространённости положительного класса.
Холдаут 15%, никогда не виденный во время настройки Optuna — финальные метрики ниже отражают реальное обобщение, а не переобучение на процесс поиска.
Порог решения перекалиброван для максимизации F1 на кривой precision-recall холдаута (0,875), вместо слепого использования 0,5 — это важно, когда положительный класс редок.
Объяснимость через SHAP TreeExplainer — каждое предсказание MCP-сервера может быть проверено пофакторно (актуально для регуляторного соответствия в кредитовании).
📊 Результаты и метрики производительности
Все метрики ниже рассчитаны на холдаут-наборе (6 830 клиентов), полностью изолированном во время поиска гиперпараметров Optuna:
1. Сравнение моделей (стратифицированная 5-фолдовая кросс-валидация)
Модель | PR-AUC (CV 5-fold) | Выигрыш относительно базовой |
Логистическая регрессия (сбалансированный линейный базовый уровень) | 0,9454 | — |
Random Forest (400 деревьев, balanced subsample) | 0,9484 | +0,30% |
XGBoost + Optuna (25 байесовских испытаний TPE) | 0,9546 | +0,92% |
2. Метрики производительности на холдауте (модель-победитель)
Статистическая и бизнес-метрика | Значение | Практическая интерпретация |
ROC-AUC | 0,9960 | Почти идеальная глобальная различительная способность между хорошими и плохими плательщиками. |
PR-AUC (Average Precision) | 0,9625 | Приоритетная метрика для дисбаланса (относительно случайного базового уровня 8,12%). |
Индекс Джини (кредитный) | 0,9920 | $2 \times \text{ROC-AUC} - 1$ — отличная сила разделения риска. |
Общая точность | 98,14% | 6 703 правильных предсказания из 6 830 оценённых клиентов. |
Precision (точность / PPV) | 96,52% | Из каждых 100 клиентов, классифицированных как дефолтные, 96,5 действительно дефолтят. |
Recall / чувствительность | 80,00% | Выявляет 8 из 10 реальных дефолтников, предотвращая кредитные потери. |
Специфичность (TNR) | 99,75% | Сохраняет 99,75% хороших клиентов, обеспечивая здоровое кредитование. |
Ложная тревога (FPR) | 0,25% | Только 16 здоровых клиентов ошибочно отклонены из 6 275 проанализированных. |
F1-мера | 0,8749 | Оптимальный гармонический баланс между точностью и полнотой. |
Оптимизированный порог решения | 0,875 | Порог, откалиброванный по PR-кривой (вместо наивного порога 0,5). |
3. Детальная матрица ошибок на холдауте
Факт \ Прогноз | Плательщик (0) | Дефолт (1) | Всего факт | Влияние на кредитный бизнес |
Фактический плательщик (0) | 6 259 (TN) | 16 (FP) | 6 275 | Минимальное трение: только 16 хороших клиентов отклонены неправомерно (FPR = 0,25%). |
Фактический дефолт (1) | 111 (FN) | 444 (TP) | 555 | Предотвращённые потери: 444 дефолта успешно заблокированы (Recall = 80,00%). |
Всего прогноз | 6 370 | 460 | 6 830 | Доля верных при указании риска: 96,52% точности. |
4. Победившие гиперпараметры (Optuna — 25 испытаний)
{
"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. Топ-10 проверяемых факторов риска (средняя важность $|\text{SHAP}|$)
Ранг | Признак | Среднее $|\text{SHAP}|$ | Обоснование риска |
1-й | credit_score | 3,3044 | Доминирующий фактор: исторический балл кредитных бюро. |
2-й | credit_limit_used(%) | 1,8558 | Степень использования предоставленного револьверного лимита. |
3-й | credit_utilization_frac | 0,6122 | Десятичная доля использования кредитного лимита. |
4-й | risk_flags_sum | 0,1516 | Взвешенная сумма предсуществующих индикаторов риска. |
5-й | prev_defaults | 0,1167 | Количество случаев предыдущей просрочки. |
6-й | yearly_debt_payments | 0,0445 | Годовая финансовая нагрузка, связанная с платежами. |
7-й | no_of_days_employed | 0,0382 | Стабильность занятости и время на текущем месте работы. |
8-й | gender_F | 0,0339 | Демографическая категория, отслеживаемая для аудита. |
9-й | utilization_x_prev_defaults | 0,0266 | Взаимодействие: высокая утилизация в сочетании с прошлым дефолтом. |
10-й | occupation_type_Unknown | 0,0240 | Флаг неуказанной профессии / пенсионер. |
📈 Визуальные артефакты в reports/figures/:
roc_curve.png— ROC-кривая со случайным базовым уровнем.precision_recall_curve.png— Кривая Precision-Recall в сравнении с базовой распространённостью.confusion_matrix.png— Матрица ошибок при оптимальном пороге.shap_summary.png— Beeswarm summary plot глобальной объяснимости.
🔒 Все указанные выше метрики воспроизводимы и сохраняются в метаданных аудита в
models/model_metadata.json.
💡 Руководство по интерпретации результатов (для неспециалистов и бизнеса)
Для облегчения коммуникации между специалистами по данным, кредитными аналитиками и нетехническими директорами, каждый выход системы имеет прямое бизнес-значение:
1. 📈 Вероятность дефолта (PD) и диапазоны действий
Что это: Оценённая вероятность (от 0% до 100%) того, что клиент просрочит оплату счёта более чем на 90 дней в последующие месяцы.
Как действовать в зависимости от диапазона:
🟢
MUITO_BAIXO(< 5%) иBAIXO(5%–15%): Выдача кредита и увеличение лимита рекомендуются автоматически с конкурентными ставками.🟡
MODERADO(15%–35%): Пограничный клиент. Рекомендуется консервативный начальный лимит или запрос подтверждения дохода.🔴
ALTO(35%–60%) иMUITO_ALTO(≥ 60%): Высокий риск просрочки. Рекомендуется отказ от предложения или требование поручителей/реального обеспечения.
2. 📊 Как читать график объяснимости SHAP
🔴 Полосы вправо (положительный вклад): Кадастровые или поведенческие факторы, которые повышают риск (например, низкий балл, чрезмерное использование револьверного лимита, предыдущая просрочка).
🟢 Полосы влево (отрицательный вклад): Здоровые факторы, которые защищают клиента и снижают риск (например, многолетняя стабильность на работе, высокий доход, высокий балл).
📏 Длина полосы: Чем длиннее полоса, тем более решающей была эта переменная для окончательного вердикта ИИ.
3. 📉 Что такое симуляция What-If?
Позволяет моделировать влияние изменений в правилах или давать рекомендации отклонённым клиентам. Например: «Если вы снизите использование вашего лимита с 73% до 30%, ваш риск упадёт с 68% до 22%, что позволит одобрить вашу карту».
4. 💰 Общая экспозиция и ожидаемые потери портфеля
Общая экспозиция: Общий финансовый объём, который учреждение поставило на кон (сумма предоставленных кредитных лимитов).
Ожидаемые потери ($PD \times \text{Экспозиция}$): Сумма в реалах, которую учреждение статистически прогнозирует потерять из-за просрочек, если не будут приняты никакие меры.
Ставка потерь (%): Прямая основа для резерва на возможные потери по ссудам (PDD / IFRS 9).
🔌 MCP-сервер — 6 бизнес-инструментов
Инструмент | Использование |
| Вероятность + класс + диапазон риска одного клиента |
| Основные факторы SHAP, стоящие за баллом (аудит/комплаенс) |
| «А что, если использованный лимит упадёт до 30%?» — симуляция политики |
| Пакетный скоринг целого CSV-файла на диске |
| Ожидаемые потери (PD × экспозиция), распределение риска, топ-клиенты |
| Технический паспорт модели (метрики, гиперпараметры, признаки) |
Диапазоны риска, используемые сервером: MUITO_BAIXO (<5%) · BAIXO (5–15%) ·
MODERADO (15–35%) · ALTO (35–60%) · MUITO_ALTO (≥60%).
🌐 Веб-интерфейс чата в браузере (Streamlit)
Проект включает полноценный веб-интерфейс с разговорным чатом, построенный на Streamlit, для демонстраций, быстрых тестов и оперативного использования командами кредитования и андеррайтинга:
make web
# ou: streamlit run app.pyОткройте в браузере: http://localhost:8501
✨ Основные возможности веб-интерфейса:
💬 Чат на естественном языке: Задавайте свободные вопросы о клиентах, симуляциях или портфелях на португальском.
⚡ Быстрые действия (все 5 диапазонов риска): Загружайте репрезентативные профили для каждого диапазона в один клик:
🟢 1. Очень низкий (<5%): Prime-клиент (высокий доход, балл 910, использование лимита 10%).
🟢 2. Низкий (5–15%): Здоровый клиент (балл 810, использование лимита 25%, 0 просрочек).
🟡 3. Умеренный (15–35%): Пограничный клиент (балл 580, использование лимита 50%, без задержек).
🔴 4. Высокий (35–60%): Клиент-сигнал тревоги (балл 580, использование лимита 50%, 1 недавняя просрочка).
⛔ 5. Очень высокий (≥60%): Критический клиент (балл 544, использование лимита 73%, 2 просрочки).
🛠️ Сетка предлагаемых запросов:
📊 Технический паспорт: Отображает метрики валидации, ROC-AUC, PR-AUC и точность.
📁 Портфель CSV: Оценивает целые портфели с векторизованным скорингом 11 000 клиентов за 0,7 с, рассчитывая ожидаемые потери (R$) и общую экспозицию.
📉 Симуляция What-If: Моделируйте снижение лимита (30%), погашение долгов или повышение балла (+150 пунктов).
🔬 Аудит SHAP: Ранжирование и столбчатые диаграммы с основными драйверами кредитного риска.
💡 Раскрывающиеся руководства для неспециалистов: Каждый ответ содержит пояснительную подпись, объясняющую значение графиков SHAP, дельт вероятности и резерва на потери.
🔌 Вариант 2: 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.serverПодключение к Claude Desktop / Claude Code
Скопируйте mcp_server/claude_desktop_config.example.json в файл
конфигурации MCP вашего клиента, отрегулировав абсолютные пути:
{
"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" }
}
}
}Перезапустите клиент и спросите, например: «Используя сервер agent-risk-ai, каков риск этого клиента: ...»
📁 Структура проекта
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⚠️ Известные ограничения и следующие шаги
Прозрачность в отношении ограничений — часть серьёзной науки о данных:
LGD принята за 100% при расчёте ожидаемых потерь (
portfolio_risk_summary) для простоты — в производстве это должно поступать из исторических данных о взыскании.Нет мониторинга дрейфа — следующим естественным шагом было бы инструментирование
predict_defaultжурналированием распределения признаков с течением времени.Калибровка вероятности не была проверена с помощью
CalibratedClassifierCV— вероятности являются дискриминативными (хороши для ранжирования риска), но могут не быть идеально откалиброваны в абсолютной шкале.occupation_type = "Unknown"— самая частая категория (~31% базы) и совпадает с флагом пенсионеров/безработных — будущим уточнением было бы разделение этой категории.
🧠 Технический стек
Python 3.12 · pandas · scikit-learn · XGBoost · Optuna (байесовская настройка
через TPE) · SHAP (объяснимость) · 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