Posts

Showing posts from May 26, 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 ...

How I Caught Layering in Mobile Banking: A Deep Dive into AML Rule Engines

Image
Photo by Areza Pahlevi on Unsplash Imagine being on audit, staring at a sea of transactions, and realizing your AML rule engine missed a massive layering scheme. This happened to me. The numbers were staggering: BDT 10 million laundered through bKash, all under the BDT 100,000 threshold. I had to act fast. The Hidden Problem Standard AML approaches focus on flagging individual transactions, not the bigger picture. Layering, a technique used to disguise the origin of illicit funds, slips through the cracks. In Bangladesh, this is particularly problematic due to the prevalence of mobile financial services (MFS) like bKash and Nagad. The BFIU guidelines emphasize monitoring transactions above the BDT 100,000 threshold, but layering often involves smaller, frequent transactions. Technical Breakdown & Logic Flow To catch layering, you need to analyze transaction patterns over time. This involves identifying velocity (the frequency of transactions) and aggregation (the total value...