Posts

Showing posts from May 12, 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 Most AML Rule Engines Miss Layering in Mobile Banking

Image
Photo by Md. Mehedi Hasan on Unsplash I still remember the night we discovered a massive structuring ring in our mobile banking system. It was a typical Monday evening when our team detected a pattern of transactions that seemed to be designed to evade our anti-money laundering (AML) checks. The total amount was staggering - over BDT 10 million in a single day, all below the BDT 100,000 threshold for monitoring. The Hidden Problem As we dug deeper, we realized that our AML rule engine had missed a critical technique used by money launderers: layering. It's a simple yet effective method where criminals break up large transactions into smaller, seemingly innocuous ones, making it difficult for our systems to detect. The problem is that standard approaches to AML often focus on individual transactions rather than the overall pattern of behavior. Our team was frustrated - we had implemented all the recommended rules and thresholds, but still, these transactions slipped through. It was...