Skip to main content
Glama
faanogueira

agent-risk-ai

by faanogueira

🏦 KI-Risikoagent (Agent Risk AI) — ML + MCP-Server

Python XGBoost scikit--learn Optuna SHAP MCP Tests License

KI-Risikoagent: Ihr autonomer Analyst für Kreditintelligenz und -risiko über MCP. Ein Modell zur Vorhersage von Kreditkartenzahlungsausfällen, trainiert mit methodischer Strenge (stratifizierte Kreuzvalidierung, Bayes'sches Tuning mit Optuna, optimierter Schwellenwert, Erklärbarkeit über SHAP) und als MCP-Server bereitgestellt — direkt abfragbar über Claude Desktop/Code und KI-Agenten in natürlicher Sprache.


📌 Warum sich dieses Projekt von „nur ein Modell trainieren" unterscheidet

Die meisten Portfolio-Projekte hören beim Trainieren des Modells und dem Zeigen eines .ipynb mit Metriken auf. Dieses geht einen Schritt weiter: Das Modell ist in einen MCP-Server (Model Context Protocol) mit 6 Geschäftswerkzeugen gekapselt, was bedeutet, dass jeder kompatible LLM-Host (Claude Desktop, Claude Code) das Modell in natürlicher Sprache abfragen kann, ohne Code zu schreiben:

🗣️ „Wie hoch ist das Ausfallrisiko dieses Kunden: Alter 46, Einkommen 107.934 R$, Kredit-Score 544, 2 frühere Zahlungsverzüge?" 🤖 → ruft predict_default auf → antwortet mit Wahrscheinlichkeit, Klasse und SHAP-Erklärung.

Genau das ist das Muster, das sich in Risiko-/Datenteams herausbildet, die Produktionsmodelle „ins Gespräch" bringen wollen, nicht hinter ein statisches Dashboard.


Related MCP server: CreddyMCP

🗂️ Das Geschäftsproblem

Datensatz von 45.528 Kreditkartenkunden mit demografischen Variablen, Einkommens- und Kreditverhaltensvariablen. Zielvariable: credit_card_default (binär), mit realem Ungleichgewicht von 8,1 % Zahlungsausfällen — ein typisches Szenario im Kreditrisiko, bei dem naive Genauigkeit eine irreführende Metrik ist.

Trainingszeilen

45.528

Ausfallrate

8,12 % (unbalanciert)

Ursprüngliche Variablen

17 (+ customer_id, name)

Variablen nach Feature-Engineering

30


🏗️ Wie das System funktioniert (Einfache Architektur)

Das Projekt wandelt rohe Kreditdaten in umsetzbare und prüfbare Entscheidungen um, die von KI-Agenten über 4 integrierte Schritte konsumiert werden:

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>"]

Der Ablauf in 4 Schritten:

  1. 📁 1. Aufbereitung & Finanzintelligenz (data_processing.py / feature_engineering.py)

    • Entfernt sensible Daten (PII) und behandelt Anomalien im Datensatz (wie den Sentinel-Wert für Rentner).

    • Erstellt echte Finanzkennzahlen: Debt-to-Income (DTI), Kreditlinienauslastung und Pro-Kopf-Einkommen.

  2. 🤖 2. Machine-Learning-Pipeline (pipeline.py / train.py)

    • Führt Transformationen (Imputation, One-Hot-Encoding und Skalierung) dicht aus (ohne Datenleck).

    • Trainiert und optimiert den XGBoost über Optuna (25 Trials) in 5-facher Kreuzvalidierung und kalibriert den optimalen Entscheidungsschwellenwert ($F_1 = 0,875$).

  3. 🧠 3. Erklärbarkeit & Auditierung (inference.py / evaluate.py)

    • Persistiert das Siegermodell und den SHAP TreeExplainer, um in Echtzeit genau zu zerlegen, welche Variablen das Risiko jedes Kunden erhöhen oder senken.

  4. 🔌 4. Agentische MCP-Schicht (mcp_server/server.py)

    • Stellt 6 einsatzbereite Werkzeuge bereit, damit jeder Assistent oder KI-Agent (Claude Desktop, Claude Code usw.) das Modell abfragen, Szenarien simulieren und ganze Portfolios in natürlicher Sprache bewerten kann.


🔬 Domänenorientiertes Feature-Engineering

Statt „alles in XGBoost zu werfen", hat jedes abgeleitete Feature eine explizite Begründung im Kreditrisiko:

Feature

Geschäftsrationale

debt_to_income_ratio (DTI)

Wie viel des Jahreseinkommens durch Schulden gebunden ist — klassische Säule des Underwritings

credit_limit_to_income_ratio

Gewährte Hebelwirkung relativ zur Zahlungsfähigkeit

credit_utilization_frac × prev_defaults

Interaktion: Hohe Kreditlinienauslastung wiegt stärker für diejenigen, die bereits einen Ausfall hatten

income_per_family_member

Verfügbares Pro-Kopf-Einkommen, nicht nur nominal

employment_tenure_ratio

Beschäftigungsstabilität relativ zum Alter

risk_flags_sum

Summe bereits beobachteter Risikokennzeichen (früherer Ausfall, kürzlicher Ausfall, Auslastung > 80 %)

is_retired_or_unemployed

Explizites Flag für den Sentinel-Wert (~365.243 Tage) in no_of_days_employed, der tatsächlich Rentner/Nicht-Erwerbstätige markiert — ihn als wörtliche Zahl zu behandeln würde das Modell verzerren


🧪 Methodik und statistische Strenge

  • Winsorisierung nur auf dem Training gelernt (99,5. Perzentil) und auf dem Test-/Holdout-Set erneut angewendet — ohne Datenleck.

  • Einheitliche sklearn-Pipeline (ColumnTransformer + Modell) — Imputation und Encoding werden bei jedem Fold der Kreuzvalidierung neu berechnet, nicht nur einmal auf dem gesamten Datensatz (ein häufiger Fehler, der Metriken künstlich aufbläht).

  • Auswahlmetrik: PR-AUC (Average Precision), nicht ROC-AUC oder Genauigkeit — die richtige Wahl bei 8 % Prävalenz der positiven Klasse.

  • Holdout von 15 %, das während des Optuna-Tunings nie gesehen wurde — die endgültigen Metriken unten sind echte Generalisierung, kein Overfitting an den Suchprozess.

  • Neu kalibrierter Entscheidungsschwellenwert, der F1 auf der Precision-Recall-Kurve des Holdouts maximiert (0,875), statt blind 0,5 zu verwenden — entscheidend, wenn die positive Klasse selten ist.

  • Erklärbarkeit über SHAP TreeExplainer — jede Vorhersage des MCP-Servers kann Faktor für Faktor geprüft werden (relevant für die regulatorische Compliance im Kreditwesen).


📊 Ergebnisse und Leistungsmetriken

Alle untenstehenden Metriken wurden auf dem Holdout-Set (6.830 Kunden) berechnet, das während der Hyperparametersuche durch Optuna vollständig isoliert war:

1. Modellvergleich (Stratifizierte 5-Fold-Kreuzvalidierung)

Modell

PR-AUC (CV 5-fold)

Gewinn vs. Baseline

Logistische Regression (balancierte lineare Baseline)

0,9454

Random Forest (400 Schätzer, balancierte Teilstichprobe)

0,9484

+0,30 %

XGBoost + Optuna (25 bayes'sche TPE-Trials)

0,9546

+0,92 %


2. Leistungsmetriken auf dem Holdout (Siegermodell)

Statistische & geschäftliche Metrik

Wert

Praktische Interpretation

ROC-AUC

0,9960

Nahezu perfekte globale Unterscheidungsfähigkeit zwischen guten und schlechten Zahlern.

PR-AUC (Average Precision)

0,9625

Prioritäre Metrik für Ungleichgewicht (vs. zufällige Baseline von 8,12 %).

Gini-Koeffizient (Kredit)

0,9920

$2 \times \text{ROC-AUC} - 1$ — ausgezeichnete Risikotrennschärfe.

Globale Genauigkeit

98,14 %

6.703 korrekte Vorhersagen von 6.830 bewerteten Kunden.

Präzision (Precision / PPV)

96,52 %

Von je 100 als zahlungsunfähig eingestuften Kunden geraten tatsächlich 96,5 in Zahlungsverzug.

Recall / Sensitivität

80,00 %

Erfasst 8 von 10 tatsächlichen Zahlungsausfällen und vermeidet so Kreditverluste.

Spezifität (TNR)

99,75 %

Erhält 99,75 % der guten Kunden und gewährleistet eine gesunde Kreditvergabe.

Falschalarm (FPR)

0,25 %

Nur 16 gesunde Kunden wurden von 6.275 analysierten fälschlich abgelehnt.

F1-Score

0,8749

Optimales harmonisches Gleichgewicht zwischen Präzision und Recall.

Optimierter Entscheidungsschwellenwert

0,875

Über die PR-Kurve kalibrierter Schwellenwert (vs. naiver Schnitt von 0,5).


3. Detaillierte Konfusionsmatrix auf dem Holdout

Real \ Vorhergesagt

Zahlungsfähig (0)

Zahlungsunfähig (1)

Real gesamt

Auswirkung auf das Kreditgeschäft

Real zahlungsfähig (0)

6.259 (TN)

16 (FP)

6.275

Minimale Reibung: nur 16 gute Kunden zu Unrecht abgelehnt (FPR = 0,25 %).

Real zahlungsunfähig (1)

111 (FN)

444 (TP)

555

Vermeidener Verlust: 444 Zahlungsausfälle erfolgreich blockiert (Recall = 80,00 %).

Vorhergesagt gesamt

6.370

460

6.830

Trefferquote bei Risikowarnung: 96,52 % Präzision.


4. Sieger-Hyperparameter (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 prüfbare Risikofaktoren (Durchschnittliche Bedeutung $|\text{SHAP}|$)

Ranking

Feature

Média $\text{SHAP}$

Racional de Risco

credit_score

3,3044

Dominanter Faktor: historischer Score von Kreditauskunfteien.

credit_limit_used(%)

1,8558

Auslastung des gewährten revolvierenden Limits.

credit_utilization_frac

0,6122

Dezimalbruchteil der Kreditlimit-Auslastung.

risk_flags_sum

0,1516

Gewichtete Summe vorbestehender Risikokennzeichen.

prev_defaults

0,1167

Anzahl früherer Zahlungsausfälle.

yearly_debt_payments

0,0445

Jährliche finanzielle Belastung durch Zahlungen.

no_of_days_employed

0,0382

Beschäftigungsstabilität und Dauer im aktuellen Job.

gender_F

0,0339

Demografische Kategorie, für Prüfzwecke überwacht.

utilization_x_prev_defaults

0,0266

Interaktion: hohe Auslastung kombiniert mit früherem Ausfall.

10º

occupation_type_Unknown

0,0240

Kennzeichen für nicht angegebenen Beruf / Rentner.

📈 Visuelle Artefakte in reports/figures/:

  • roc_curve.png — ROC-Kurve mit zufälliger Basislinie.

  • precision_recall_curve.png — Präzisions-Recall-Kurve im Vergleich zur Basisprävalenz.

  • confusion_matrix.png — Konfusionsmatrix beim optimalen Schwellenwert.

  • shap_summary.png — Beeswarm-Zusammenfassungsdiagramm der globalen Erklärbarkeit.

🔒 Alle oben genannten Metriken sind reproduzierbar und werden in den Audit-Metadaten unter models/model_metadata.json gespeichert.


💡 Leitfaden zur Interpretation der Ergebnisse (Für Laien und Geschäftsanwender)

Um die Kommunikation zwischen Data Scientists, Kreditanalysten und nicht-technischen Führungskräften zu erleichtern, hat jede Systemausgabe eine direkte geschäftliche Bedeutung:

1. 📈 Ausfallwahrscheinlichkeit (PD) & Handlungsbereiche

  • Was ist das: Die geschätzte Wahrscheinlichkeit (0% bis 100%), dass der Kunde die Rechnungszahlung in den folgenden Monaten um mehr als 90 Tage verzögert.

  • Wie Sie basierend auf der Stufe handeln:

    • 🟢 MUITO_BAIXO (< 5%) e BAIXO (5% a 15%): Kreditvergabe und Limit-Erhöhung automatisch mit wettbewerbsfähigen Konditionen empfohlen.

    • 🟡 MODERADO (15% a 35%): Grenzfall-Kunde. Konservatives Anfanglimit oder Einkommensnachweis empfohlen.

    • 🔴 ALTO (35% a 60%) e MUITO_ALTO (≥ 60%): Hohes Ausfallrisiko. Ablehnung des Antrags oder Forderung von Bürgen/Sachgarantien empfohlen.

2. 📊 So lesen Sie das SHAP-Erklärbarkeitsdiagramm

  • 🔴 Balken nach RECHTS (positiver Beitrag): Registrierungs- oder Verhaltensfaktoren, die das Risiko nach OBEN ziehen (z. B. niedriger Score, übermäßige Nutzung des revolvierenden Limits, frühere Zahlungsausfälle).

  • 🟢 Balken nach LINKS (negativer Beitrag): Gesunde Faktoren, die den Kunden schützen und das Risiko nach UNTEN ziehen (z. B. jahrelange Beschäftigungsstabilität, hohes Einkommen, hoher Score).

  • 📏 Balkenlänge: Je länger der Balken, desto entscheidender war diese Variable für das endgültige KI-Urteil.

3. 📉 Was ist die What-If-Simulation?

Ermöglicht die Simulation der Auswirkungen von Regeländerungen oder die Beratung abgelehnter Kunden. Zum Beispiel: „Wenn Sie Ihre Limit-Auslastung von 73% auf 30% reduzieren, sinkt Ihr Risiko von 68% auf 22%, sodass Ihre Karte genehmigt werden kann."

4. 💰 Gesamtengagement und erwarteter Verlust des Portfolios

  • Gesamtengagement: Das gesamte finanzielle Volumen, das das Institut aufs Spiel gesetzt hat (Summe der gewährten Kreditlimits).

  • Erwarteter Verlust ($PD \times \text{Exposição}$): Der Betrag in Reais, den das Institut statistisch durch Zahlungsausfälle verlieren würde, wenn keine Maßnahmen ergriffen werden.

  • Verlustquote (%): Direkte Grundlage für die Rückstellung für zweifelhafte Forderungen (PDD / IFRS 9).


🔌 Der MCP-Server — 6 Geschäftswerkzeuge

Werkzeug

Verwendung

predict_default

Wahrscheinlichkeit + Klasse + Risikostufe eines Kunden

explain_prediction

Top-SHAP-Faktoren hinter dem Score (Audit/Compliance)

what_if_analysis

„Was wäre, wenn das genutzte Limit auf 30% fiele?" — Politiksimulation

score_portfolio_csv

Batch-Scoring einer gesamten CSV-Datei auf der Festplatte

portfolio_risk_summary

Erwarteter Verlust (PD × Engagement), Risikoverteilung, Top-Kunden

get_model_performance

Technisches Datenblatt des Modells (Metriken, Hyperparameter, Features)

Vom Server verwendete Risikostufen: MUITO_BAIXO (<5%) · BAIXO (5–15%) · MODERADO (15–35%) · ALTO (35–60%) · MUITO_ALTO (≥60%).


🌐 Web-Chat-Oberfläche im Browser (Streamlit)

Das Projekt enthält eine vollständige konversationelle Weboberfläche, die mit Streamlit erstellt wurde, für Demonstrationen, schnelle Tests und den operativen Einsatz durch Kredit- und Underwriting-Teams:

make web
# ou: streamlit run app.py

Zugriff in Ihrem Browser: http://localhost:8501

✨ Hauptfunktionen der Weboberfläche:

  • 💬 Chat in natürlicher Sprache: Stellen Sie freie Fragen zu Kunden, Simulationen oder Portfolios auf Portugiesisch.

  • Schnellaktionen (alle 5 Risikostufen): Laden Sie mit einem Klick sofort repräsentative Profile jeder Stufe:

    • 🟢 1. Sehr niedrig (<5%): Prime-Kunde (hohes Einkommen, Score 910, Limit-Auslastung 10%).

    • 🟢 2. Niedrig (5–15%): Gesunder Kunde (Score 810, Limit-Auslastung 25%, 0 Ausfälle).

    • 🟡 3. Moderat (15–35%): Grenzfall-Kunde (Score 580, Limit-Auslastung 50%, keine Verzögerungen).

    • 🔴 4. Hoch (35–60%): Warn-Kunde (Score 580, Limit-Auslastung 50%, 1 kürzlicher Ausfall).

    • 5. Sehr hoch (≥60%): Kritischer Kunde (Score 544, Limit-Auslastung 73%, 2 Zahlungsausfälle).

  • 🛠️ Raster vorgeschlagener Abfragen:

    • 📊 Technisches Datenblatt: Zeigt Validierungsmetriken, ROC-AUC, PR-AUC und Genauigkeit.

    • 📁 CSV-Portfolio: Bewertet ganze Portfolios mit vektorisiertem Scoring von 11.000 Kunden in 0,7s und berechnet den erwarteten Verlust (R$) und das Gesamtengagement.

    • 📉 What-If-Simulation: Simulieren Sie Limit-Reduzierungen (30%), Schuldentilgung oder Score-Erhöhung (+150 Punkte).

    • 🔬 SHAP-Audit: Ranking und Balkendiagramme mit den größten Treibern des Kreditrisikos.

  • 💡 Erweiterbare Leitfäden für Laien: Jede Antwort enthält eine didaktische Legende, die die Bedeutung der SHAP-Diagramme, Wahrscheinlichkeitsdeltas und Verlustrückstellungen erklärt.


🔌 Option 2: MCP-Server (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

Verbinden mit Claude Desktop / Claude Code

Kopieren Sie mcp_server/claude_desktop_config.example.json in die MCP-Konfigurationsdatei Ihres Clients und passen Sie die absoluten Pfade an:

{
  "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" }
    }
  }
}

Starten Sie den Client neu und fragen Sie zum Beispiel: „Mit dem Server agent-risk-ai, wie hoch ist das Risiko dieses Kunden: ..."


📁 Projektstruktur

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

⚠️ Bekannte Einschränkungen und nächste Schritte

Transparenz über Einschränkungen ist Teil seriöser Datenwissenschaft:

  • LGD mit 100% angenommen bei der Berechnung des erwarteten Verlusts (portfolio_risk_summary) aus Einfachheit — in Produktion würde dies aus historischen Wiederherstellungsdaten stammen.

  • Kein Drift-Monitoring — der natürliche nächste Schritt wäre, predict_default mit Protokollierung der Feature-Verteilung im Laufe der Zeit zu instrumentieren.

  • Wahrscheinlichkeitskalibrierung wurde nicht mit CalibratedClassifierCV validiert — die Wahrscheinlichkeiten sind diskriminativ (gut zum Risiko-Ranking), aber möglicherweise nicht perfekt auf absoluter Skala kalibriert.

  • occupation_type = "Unknown" ist die häufigste Kategorie (~31% der Basis) und fällt mit dem Kennzeichen für Rentner/Nicht-Beschäftigte zusammen — eine zukünftige Verfeinerung wäre, diese Kategorie aufzuteilen.


🧠 Technischer Stack

Python 3.12 · pandas · scikit-learn · XGBoost · Optuna (Bayes'sches Tuning via TPE) · SHAP (Erklärbarkeit) · matplotlib · pytest · MCP Python SDK

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    F
    maintenance
    Provides 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.
    9
    5
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A 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.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides 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.
    7
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    A natural-language interface to a credit risk database, with SQL guardrails that enforce read-only, allowlisted access to tables and columns.

View all related MCP servers

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

View all MCP Connectors

Latest Blog Posts

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