Posts

Showing posts from May 23, 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 Cleaned Dirty Transaction Data to Survive an AML Audit in Bangladesh

Image
Photo by Toon Lambrechts on Unsplash I still remember the day our team detected a massive structuring ring involving over 10,000 suspicious transactions, totaling BDT 500 million. We had to clean the dirty transaction data before AML analysis in Python, and fast. The clock was ticking, with only 48 hours to submit our report to the Bangladesh Financial Intelligence Unit (BFIU). It was then I realized that standard approaches to data cleaning wouldn't cut it. Our data was a mess - incomplete, inconsistent, and filled with noise . We needed a custom solution to handle the nuances of our local financial systems, like the BDT 100,000 MFS threshold monitoring for bKash, Nagad, and Rocket transactions. The Hidden Problem Most AML analysts in Bangladesh face a similar problem - dirty transaction data that makes it difficult to identify true suspicious activity. The BFIU guidelines are clear: we need to monitor all transactions above BDT 100,000 and report any suspicious activity...