Démo Banking Fraud
La démo banking-fraud est le cas d'usage de référence bout-en-bout d'AKKO. Elle exerce chaque couche de la plateforme — ingestion, lakehouse, compute, ML, gouvernance, BI, IA — en moins de 10 minutes sur un cluster k3d de taille laptop, 100 % hors ligne.
Ce qu'elle prouve
- Airflow → Iceberg (Polaris) → fédération Trino → marts dbt
- Suivi MLflow + registre de modèles adossé à MinIO
- Column masking OPA sur PII (
card_pan, customer_name) selon le rôle Keycloak
- Réponse à question en langage naturel via ADEN sur la couche curatée
- Fonctions Trino AI (
akko_ai_anomaly, akko_ai_sentiment) dans une seule requête SQL
- Dashboard Superset auto-provisionné par le job
akko-init
- Tracing Tempo bout-en-bout du span Airflow → Trino → ADEN
Architecture
flowchart LR
GEN[generate_transactions.py<br/>Faker + seed PostgreSQL]
AF[DAG Airflow<br/>banking_fraud_demo]
SPK[Spark Connect<br/>JDBC → MERGE Iceberg]
POL[Polaris<br/>catalogue REST Iceberg]
MINIO[(MinIO<br/>akko-warehouse)]
TRI[Trino 480<br/>+ plugin ai_*]
DBT[dbt Core<br/>marts/fct_transactions]
ML[MLflow<br/>Isolation Forest]
OPA[OPA<br/>mask PII par rôle]
SUP[Dashboard Superset<br/>AKKO Banking Fraud]
ADEN[ADEN<br/>NL → SQL → Streamlit]
GEN --> AF --> SPK --> POL --> MINIO
POL --> TRI --> DBT --> POL
TRI --> ML
TRI --> SUP
TRI --> ADEN
OPA -.policy.-> TRI
Lancer la démo
# 1. Déployer AKKO sur k3d
bash helm/scripts/generate-domain-values.sh akko.local
bash helm/scripts/generate-dev-secrets.sh
bash helm/scripts/deploy.sh
# 2. Déclencher le DAG de démo
kubectl exec -n akko deploy/akko-airflow-scheduler -- \
airflow dags trigger banking_fraud_demo
# 3. Suivre l'exécution
kubectl exec -n akko deploy/akko-airflow-scheduler -- \
airflow dags list-runs -d banking_fraud_demo
# 4. Ouvrir Superset
open https://bi.akko.local/superset/dashboard/akko-banking-fraud/
Étapes du pipeline
- Seed —
generate_transactions.py insère 100 000 transactions dans postgresql.akko.raw_transactions via Faker.
- Réplication Iceberg — Spark Connect lit PostgreSQL et exécute
MERGE INTO iceberg.banking.transactions partitionné par region.
- Modèles dbt —
dbt run --models marts.fct_transactions marts.dim_customers reconstruit les couches curatées.
- Scoring d'anomalies — un Isolation Forest entraîné dans un notebook JupyterHub, journalisé dans MLflow avec artefacts sur MinIO, enregistré
banking-fraud/production.
- Enrichissement IA — une seule requête SQL appelle
akko_ai_anomaly(amount, ...) et akko_ai_sentiment(memo) pour enrichir chaque ligne.
- Rafraîchissement dashboard — le dataset Superset est adossé à la vue Trino ; le cache invalide à la réussite du DAG.
- Question ADEN — « Quelles régions ont dépassé 5 % de taux de fraude la semaine dernière ? »
Matrice RBAC sur iceberg.banking.transactions
| Colonne |
akko-admin |
akko-engineer |
akko-analyst |
akko-user |
akko-viewer |
customer_id |
clair |
clair |
clair |
clair |
clair |
customer_name |
clair |
clair |
clair |
***MASKED*** |
***MASKED*** |
card_pan |
clair |
clair |
***MASKED*** |
***MASKED*** |
***MASKED*** |
amount |
clair |
clair |
clair |
clair |
clair |
region |
clair |
clair |
clair |
clair |
row filter (EU/APAC) |
fraud_score |
clair |
clair |
clair |
clair |
clair |
Row filter : akko-viewer ne voit que les régions EU/APAC avec status = 'active'.
Fichiers dans le repo
| Fichier |
Rôle |
airflow/dags/akko_banking_fraud_demo.py |
DAG Airflow orchestrant le pipeline |
airflow/scripts/generate_transactions.py |
Transactions synthétiques via Faker |
notebooks/akko-banking-demo.ipynb |
Entraînement Isolation Forest, logging MLflow |
dbt/models/marts/fct_transactions.sql |
Table de fait au-dessus de la base Iceberg |
superset/assets/bootstrap_dashboard.py |
Auto-provisioning dataset + charts + dashboard |
keycloak/realm-akko.json |
Rôles + clients Keycloak utilisés par la démo |
Dépannage (top 5)
| Symptôme |
Correctif |
DAG bloqué à generate_transactions |
Vérifier que akko-postgresql-data est Running ; l'utilisateur alice existe |
Job Spark en NoClassDefFoundError: Iceberg |
Image akko-spark:2026.03 non pullée ; bash helm/scripts/build-images.sh |
MERGE INTO renvoie 0 ligne |
raw_transactions vide — rejouer generate_transactions |
| Run MLflow invisible |
Vérifier que le bucket MinIO mlflow-artifacts existe (créé par minio-init) |
| ADEN répond « no tables » |
L'ingest OpenMetadata n'a pas encore tourné — déclencher openmetadata_ingest_dag |
Voir aussi