VISTA BANKSécurité des systèmes de paiement
Lab 3 · Travaux pratiques

Détection de la fraude

Les deux premiers labs protégeaient la donnée. Celui-ci part du principe
que la protection a échoué — et cherche les traces.

3 heures
🗃 SQLite · ~10 000 transactions
🎯 3 fraudes dissimulées
Où nous en sommes

La troisième ligne de défense

Lab 1 — Constater

Le PAN et le CVV circulaient en clair. TLS chiffre le transit… mais pas l'application.

Lab 2 — Protéger

Chiffrement, signature, tokenisation. La donnée devient illisible et infalsifiable.

Lab 3 — Détecter

Et si tout cela avait été contourné ? Un identifiant volé, un complice interne, une faille inconnue.

La prévention finit toujours par céder quelque part.
Aucune banque ne se contente de verrous. Elle surveille aussi ce qui se passe à l'intérieur — parce qu'une fraude réussie ne déclenche, par définition, aucune alarme de sécurité. Elle ressemble à une opération normale.
Le jeu de données

10 000 transactions, 3 fraudes

 lab3_fraude_vista.db
CREATE TABLE transactions ( id TXN0000000, TXN0000001… compte_id VB00000042 numero_carte 4532015112830366 montant en GNF type_operation ACHAT / RETRAIT / VIREMENT terminal POS-KAL-0012, GAB-CKY-003… marchand Supermarché Kaloum… created_at 2026-03-15 02:17:59 );
Aucun raccourci

Les identifiants se suivent dans l'ordre chronologique. Les titulaires sont des clients ordinaires. Les dates des fraudes se mêlent à celles des 10 000 autres.

Rien ne les distingue

Aucune colonne, aucun indice de forme ne trahit une fraude. Le tri, le filtre, la lecture visuelle ne donnent rien.

Seule l'analyse fonctionne

Il faut formuler une hypothèse sur le comportement, la traduire en SQL, puis trier le vrai du faux.

Ce que vous cherchez

Trois façons de trahir

F1
Carding Une série de micro-achats pour tester une carte volée. Si ça passe, le fraudeur enchaîne sur un gros montant.
F2
Opération nocturne Un virement important au cœur de la nuit. Moins de surveillance, et le titulaire dort — il ne verra rien avant le matin.
F3
Compte dormant réveillé Un compte inactif depuis des mois qui se vide d'un coup. Signature d'un vol d'identifiants ou d'un SIM swap.

Chacune laisse une trace différente. Aucune n'est visible à l'œil nu — mais toutes rompent avec un comportement habituel. C'est cette rupture que le SQL va mettre en évidence.

Mode opératoire

Trois gestes

1
Générer la base python3 generate_db.py — crée ~10 000 transactions et affiche le chemin du fichier.
2
Ouvrir la base sqlitebrowser <chemin> pour l'interface graphique, ou sqlite3 <chemin> en ligne de commande.
3
Compléter les requêtes exercices.sql contient 5 requêtes à trous, avec les indices nécessaires.
Commencez par explorer, pas par chercher.
Avant de traquer la fraude, regardez à quoi ressemble le normal : à quelles heures la banque travaille-t-elle ? Quels montants sont courants ? On ne repère une anomalie que si l'on connaît la norme.
Exploration

À quoi ressemble le normal ?

Première requête à lancer : la répartition de l'activité dans la journée.

 activité par heure
SELECT strftime('%H', created_at) AS heure, COUNT(*) FROM transactions GROUP BY 1; 00h █ 38 12h ████████████████████ 767 01h █ 32 13h ███████████████████████ 889 02h █ 25 14h ███████████████████████ 889 03h ▏ 18 15h ████████████████████████ 912 04h █ 21 16h ██████████████████████ 855 05h ▏ 16 17h █████████████████ 671 06h ██ 60 18h ████████████ 471 07h █████ 186 19h ███████████ 439 08h ███████████████ 559 20h ████████ 302 Les heures 02h-05h totalisent 80 transactions sur 9 978, soit 0,8 % du volume. Une grosse opération dans ce creux est, par nature, exceptionnelle.

Ce graphique est la définition du normal. Tout le reste du lab consiste à chercher ce qui s'en écarte.

Requête 1 · Carding

Trois cartes sortent. Une seule est volée.

Le signal : au moins 5 transactions de moins de 50 000 GNF sur la même carte, le même jour.

CarteNbJourPremièreDernièreVerdict
453201511283036672026-03-1502:17:5902:27:38FRAUDE
416558523986800062026-02-1109:37:0717:25:02légitime
479356465193982862026-03-0409:05:5116:48:46légitime
Ce n'est pas le nombre qui trahit — c'est la concentration.
7 opérations en 10 minutes, à 2 h du matin. Les deux autres cartes s'étalent sur une journée de travail : ce sont des commerçants qui encaissent. Même compte, comportement radicalement différent.
Requête 2 · Nocturne

Quatre virements de nuit. Deux sont normaux.

Le signal : plus de 1 000 000 GNF entre 02h et 05h.

TransactionCompteMontantHorodatageVerdict
TXN0002712VB000000731 450 0002026-01-22 04:50légitime
TXN0005999VB000000731 120 0002026-02-17 05:23légitime
TXN0009617VB004233002 500 0002026-03-18 03:15FRAUDE
TXN0009619VB004233001 800 0002026-03-18 04:33FRAUDE
L'heure ne suffit pas. Il faut l'historique.
VB00000073 est une entreprise qui règle ses fournisseurs en fin de nuit : elle l'a toujours fait. VB00423300 n'avait jamais opéré la nuit avant le 18 mars. Le critère décisif n'est pas l'heure — c'est la rupture avec l'habitude.
Requête 3 · Compte dormant

Huit comptes dormants. Un seul se réveille.

 3a — comptes inactifs > 90 jours
VB00000044 dernière activité 2025-09-26 VB00789100 dernière activité 2025-11-01 VB00000014 dernière activité 2025-11-17 VB00000059 dernière activité 2025-11-17 VB00000023 dernière activité 2025-11-22 VB00000079 dernière activité 2025-11-23 VB00000125 dernière activité 2025-11-28 VB00000009 dernière activité 2025-11-29 8 comptes. Lequel est frauduleux ? Aucun — être dormant n'est pas un délit.
 3b — + opération postérieure, montant rond
AND t.created_at > c.derniere_activite AND t.montant % 500000 = 0 TXN0008868 VB00789100 3 000 000 GNF 2026-03-12 14:22:05 après 132 jours de silence Un seul résultat. Les fraudeurs saisissent rarement 2 847 316 GNF — ils tapent des montants ronds.
Un critère seul ne prouve rien. Deux critères croisés, si.
La dormance donne 8 candidats, le montant rond du bruit. C'est leur intersection qui isole la fraude. C'est exactement le principe d'un moteur de scoring.
⚠️ Le moment clé du lab

Le faux positif coûte plus cher qu'on ne croit

Les trois requêtes ont renvoyé 15 candidats — 3 cartes, 4 transactions, 8 comptes. Derrière, 3 fraudes seulement : 11 candidats sur 15 sont des clients parfaitement honnêtes.

Bloquer à tort

Un commerçant voit sa carte suspendue un jour de marché. Un client appelle, s'énerve, et parle de changer de banque.

L'effet d'usure

Un analyste qui reçoit 100 alertes par jour dont 95 fausses finit par toutes les traiter à la légère. Y compris la vraie.

Le bon réflexe

Un signal déclenche une vérification, pas un blocage. On appelle le client avant de couper.

Savoir écarter un faux positif vaut autant que savoir trouver une fraude.
C'est pourquoi le livrable demande de justifier chaque candidat écarté, pas seulement les fraudes trouvées.
La limite du scoring par règles

Un moteur ne détecte que ce qu'on y a mis

 score de risque — 1re version
Signaux pondérés : gros montant nocturne +5 montant rond +3 compte dormant +4 Résultat du classement : VB00423300 détecté ✓ VB00789100 détecté ✓ VB00000042 INVISIBLE Le carding passe au travers : aucun de ses signaux ne portait sur les micro-transactions en rafale.
Le pire n'est pas l'oubli

C'est le silence. Aucune alerte ne signale : « attention, je ne sais pas détecter ce type de fraude ». Le tableau de bord reste vert.

Le correctif immédiat

Ajouter un signal micro-transactions nocturnes +2. Les trois comptes remontent alors en tête.

La vraie réponse

Détecter l'écart au comportement habituel de chaque client, plutôt que d'énumérer à l'avance toutes les formes de fraude.

Passage à l'échelle

Ce que change la production

Dans le lab
10 000 lignes
requête lancée à la main
seuils fixes pour tous
analyse après coup
base figée
En production
des millions par jour
scoring en continu
seuils adaptés au profil client
décision avant l'autorisation
index, fenêtres glissantes

Le changement d'échelle n'est pas qu'une question de performance. Il impose de décider pendant que la transaction attend — en quelques dizaines de millisecondes, sans historique complet sous la main.

Synthèse

Quatre idées à emporter

1
On ne détecte une anomalie que si l'on connaît la norme La première requête utile n'est pas celle qui cherche la fraude, c'est celle qui décrit le comportement habituel.
2
Un critère isolé produit du bruit ; deux critères croisés produisent un signal Dormant, c'est banal. Nocturne, c'est banal. Dormant qui se réveille la nuit pour un montant rond, non.
3
Écarter un faux positif est un acte professionnel La valeur d'un analyste ne tient pas au nombre d'alertes qu'il lève, mais à la justesse de celles qu'il transmet.
4
Toute règle a un angle mort, et il est silencieux Un moteur de détection ne vous dit jamais ce qu'il ne sait pas voir. C'est au concepteur d'y penser.
Échangeons

Questions de débriefing

01Chez nous, qui regarde les transactions inhabituelles ? À quelle fréquence — en temps réel, chaque jour, chaque mois ?
02Si un compte dormant depuis six mois se vidait demain, combien de temps nous faudrait-il pour le remarquer ?
03Nos règles d'alerte actuelles : qui les a écrites, quand, et sur quelles fraudes ? Quels types ne couvrent-elles pas ?
04Combien de nos alertes se révèlent fausses ? Si personne ne le sait, c'est déjà une réponse.

Ces questions préparent le Lab 4 — Conformité PCI-DSS : ce que la norme exige en matière de journalisation et de surveillance, précisément pour rendre cette détection possible.

← → naviguer · V vue d'ensemble · F plein écran
VISTA BANK · Lab 3 — Détection de la fraude
1 / 14
Vue d'ensemble — cliquez pour aller à une diapositive