Aller au contenu

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

  1. Seedgenerate_transactions.py insère 100 000 transactions dans postgresql.akko.raw_transactions via Faker.
  2. Réplication Iceberg — Spark Connect lit PostgreSQL et exécute MERGE INTO iceberg.banking.transactions partitionné par region.
  3. Modèles dbtdbt run --models marts.fct_transactions marts.dim_customers reconstruit les couches curatées.
  4. Scoring d'anomalies — un Isolation Forest entraîné dans un notebook JupyterHub, journalisé dans MLflow avec artefacts sur MinIO, enregistré banking-fraud/production.
  5. Enrichissement IA — une seule requête SQL appelle akko_ai_anomaly(amount, ...) et akko_ai_sentiment(memo) pour enrichir chaque ligne.
  6. Rafraîchissement dashboard — le dataset Superset est adossé à la vue Trino ; le cache invalide à la réussite du DAG.
  7. 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