Posts

Showing posts from September 22, 2026

I Built a BFIU-Compliant AML Detection System in Python (Here's Why the Kaggle Approach Doesn't Work

I Built a BFIU-Compliant AML Detection System in Python (Here's Why the Kaggle Approach Doesn't Work)

Most AML tutorials end with a confusion matrix and a 99% accuracy score. Here's why that doesn't work — and what I built instead. I've been working in fintech compliance data for a while. The one thing I kept noticing: every "fraud detection project" on GitHub or Kaggle uses the same dataset — the UCI credit card fraud dataset from 2013. It has 284,000 rows, 30 features labeled V1-V28, and approximately zero explanatory value for anyone who wants to understand how financial crime actually works. So I built something different. The problem with the standard approach Real transaction monitoring engines don't work like Kaggle competitions. They don't take a CSV, train a model, and output a probability score. They work like this: A rule engine runs first — deterministic, auditable, regulatory-cited rules that generate alerts Those alerts get scored and triaged by risk tier An ML layer reduces false positives among the high-risk alerts ...

Why My First End‑to‑End AML Model Crashed at a Bangladeshi Fintech—and the 7 Fixes That Saved the Day

Image
AI-generated illustration The Moment the Dashboard Went Red It was 09:15 on a humid Tuesday. My phone buzzed, the AML console lit up with 1,245 alerts in under a minute. The spike wasn’t random – the total flagged amount topped BDT 12 million, most of it clustered around a single merchant ID that processed 3,800 micro‑payments in the last 24 hours. My team stared, coffee gone cold, and the compliance manager whispered, “We’re about to get a BFIU audit tomorrow.” The room fell silent. That was the hook that pulled me out of my chair and into a frantic sprint to understand why the model we’d just deployed was blowing up our false‑positive budget. The Hidden Problem Behind the Numbers Most AML models I’ve seen in Bangladesh start with a textbook approach: train a gradient‑boosted tree on historic SARs, add a few rule‑based thresholds (BDT 100,000 MFS limit, high‑risk country flag), and call it a day. The reality is messier. Our fintech’s user base is 65 % unbanked, transaction velocity sp...