Une plateforme orientée production pour la décision de crédit et de fraude en temps réel, avec auditabilité, explicabilité et supervision humaine (Conçu pour RGPD / AI Act).
Les institutions financières doivent prendre des décisions de crédit et de fraude en temps réel tout en respectant des contraintes réglementaires strictes (RGPD, AI Act). Ce projet propose une plateforme de décision capable d'évaluer le risque de crédit et de fraude, d'expliquer ses décisions (SHAP), et de permettre une supervision humaine (Humain dans la boucle).
docker compose up --build
curl -X POST http://localhost:8000/decision -H "Content-Type: application/json" -d @examples/accept.json
open http://localhost:8000/docs
open http://localhost:5001
open http://localhost:3000Interface de décision pour les analystes (Risque & Fraude combinés)

Suivi temps réel : Latence, Volume de décisions, et Dérive des données (Drift)

Gestion du cycle de vie des modèles, versions et métriques d'entraînement

- Endpoint de décision unifié :
POST /decision→ACCEPT / REVIEW / REJECT / ALERT - Piste d'audit : chaque décision est stockée avec horodatage, règle de politique et version du modèle
- Pseudonymisation : les identifiants clients sont hashés avant stockage
- Supervision humaine : revue manuelle et surcharge via
POST /review/{decision_id} - Endpoint d'explication :
GET /explain/{decision_id}(Le MVP renvoie un aperçu, vrai SHAP en Phase 2)
- API : FastAPI, Pydantic, SQLAlchemy
- Moteur de Décision Hybride : Combine un score de risque (Régression Logistique) et un score de fraude (Isolation Forest - Non supervisé).
- Explicabilité :
- SHAP Global (analyse offline, MLflow)
- SHAP Local (calcul temps réel via LinearExplainer)
- Agent IA Générative : Un agent LLM analyse les résultats techniques pour générer un rapport narratif compréhensible par un humain.
- MLOps Complet : Suivi des expérimentations avec MLflow, versioning des modèles.
- Observabilité : Dashboard Grafana & Prometheus pour suivre la production et le drift des données.
- DevOps & CI/CD : Déploiement via Docker Compose, Pipeline GitHub Actions pour les tests automatiques.
- Base de données : SQLite (MVP) → PostgreSQL (production-ready)
graph TD
Client[App Client] -->|POST /decision| API[Gateway FastAPI]
API -->|Score Risque & Fraude| ML[Service de Scoring (Modèles Risque Crédit + Fraude)]
API -->|Vérification Règles| Policy[Moteur de Règles]
API -->|Log Audit| DB[(SQLite/PostgreSQL)]
API --> Decision[Décision : ACCEPT/REVIEW/REJECT/ALERT]
Decision -->|Si REVIEW| Human[Réviseur Humain]
Human -->|POST /review| API
- Si
fraud_score >= 0.85→ALERT - Sinon si
risk_score >= 0.70→REJECT - Sinon si
risk_scoredans[0.45, 0.70)→REVIEW(human-in-the-loop) - Sinon →
ACCEPT
Ces seuils sont configurables via des variables d'environnement.
cp .env.example .env
docker compose up --buildAPI : http://localhost:8000
OpenAPI (Swagger) : http://localhost:8000/docs
ReDoc : http://localhost:8000/redoc
curl -X POST "http://localhost:8000/decision" \
-H "Content-Type: application/json" \
-d '{
"client": {
"client_id": "C123456",
"age": 34,
"income_annual": 45000,
"employment_status": "CDI",
"debt_to_income": 0.28,
"credit_history_length_months": 72,
"num_open_accounts": 3,
"late_payments_12m": 0
},
"transaction": {
"amount": 120.50,
"merchant_category": "electronics",
"country": "FR",
"hour": 21,
"is_new_device": true,
"distance_from_home_km": 18.4
}
}'Exemple de réponse
{
"decision_id": "dcn_20260212_9f3a2c",
"decision": "ACCEPT",
"risk_score": 0.436,
"fraud_score": 0.432,
"policy_rule": "otherwise => ACCEPT",
"model_versions": {
"credit_risk": "credit_risk:logreg(seed=42, run_id=abc123)",
"fraud": "fraud:isolation_forest(seed=42)"
},
"report_summary": "Décision ACCEPT..."
}curl "http://localhost:8000/explain/dcn_..."curl -X POST "http://localhost:8000/review/dcn_..." \
-H "Content-Type: application/json" \
-d '{
"human_decision": "APPROVE",
"comment": "Identité client vérifiée par téléphone.",
"reviewer_id": "agent_007"
}'- Régression Logistique (référence)
- XGBoost (candidat)
- Suivi MLflow activé
- Sélection automatique du meilleur modèle (AUC + Rappel défaut)
- Artefacts versionnés (
model.joblib,metrics.json)
- Isolation Forest (contamination calibrée)
- Normalisation des scores vers [0,1]
- Évaluation via AUC & Average Precision
- Artefacts versionnés
- AUC Credit Risk ≈ > 0.85
- Recall défaut ≈ > 0.70
- AUC Fraud ≈ > 0.90 (synthetic benchmark)
Toutes les expériences sont visibles dans MLflow : http://localhost:5001
- Global : Importance des features (SHAP) disponible dans les notebooks MLflow.
- Local : Top facteurs influençant chaque décision individuelle (calculé en temps réel via
shap.LinearExplainer). - Chaque réponse API inclut une section
explanations_previewdétaillée.
- Minimisation des données : pas d'identifiants directs stockés (pas de nom, adresse, etc.)
- Pseudonymisation : les IDs clients sont hashés avant stockage
- Auditabilité : décisions logguées avec règle de politique + version du modèle
- Supervision humaine : les cas limites sont dirigés vers
REVIEW+ surcharge manuelle supportée. - Pas uniquement automatisé (Esprit RGPD Art.22) : les cas limites sont dirigés vers
REVIEWpour supervision humaine. - Rétention (démo) : politique de rétention configurable pour les décisions stockées (prévu)
Voir :
docs/AI_COMPLIANCE.mddocs/MODEL_CARD.mddocs/DATA_SHEET.md
Le projet inclut une suite de tests unitaires et un pipeline CI/CD. Pour lancer les tests localement :
pytest api/testsLe pipeline GitHub Actions se lance automatiquement à chaque push sur main.
Infrastructure as Code (IaC) : La stack de monitoring est entièrement provisionnée par code (Docker, YAML, JSON), garantissant la reproductibilité.
Les métriques sont définies dans api/app/services/monitoring.py et exposées sur /metrics.
| Métrique | Type | Description |
|---|---|---|
decision_total_count_total |
Counter | Nombre de décisions par type (ACCEPT, REJECT...) et règle. |
model_inference_seconds |
Histogram | Latence pure du modèle ML (hors réseau/DB). |
risk_score_distribution |
Histogram | Distribution des scores pour détecter le drift de sortie. |
model_drift_warning |
Gauge | Alerte binaire (0/1) si les entrées dévient de la baseline. |
Taux de décisions par seconde sur 1 minute :
sum(rate(decision_total_count_total[1m])) by (decision)
Latence p95 (95ème centile) :
histogram_quantile(0.95, sum(rate(model_inference_seconds_bucket[5m])) by (le))
Accessible sur http://localhost:3000 (admin/admin).
Le dashboard est provisionné automatiquement via monitoring/grafana/provisioning.
- Guide de Démarrage (Walkthrough)
- Fiche Modèle (Model Card)
- Fiche de Données (Data Sheet)
- Conformité IA (EU AI Act)
- Architecture & Choix Techniques
- Guide CI/CD
Ceci est un projet de démonstration utilisant des données publiques ou synthétiques. Il n'est pas destiné à prendre de vraies décisions de crédit sans validation, gouvernance et revue réglementaire appropriées.
- API + moteur de politique
- Logs d'audit + stockage des décisions
- Endpoint de revue humaine
- Modèle Credit Risk supervisé
- Modèle Fraud (Isolation Forest)
- Tracking MLflow + artefacts
- Agent IA pour génération de rapports
- SHAP réel global + local
- Monitoring production (drift + métriques live)
- CI (GitHub Actions) + lint
- Migration PostgreSQL + observabilité avancée