Posts

Showing posts from June, 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 Customer Risk Scoring Models Fail in BD Fintechs: A 8-Year Veteran's Guide

Image
Photo by Brett Jordan on Unsplash It's 3 AM, and my phone is blowing up. Our system has flagged a massive structuring ring, with over 500 suspicious transactions in the last hour alone. The total amount? A whopping BDT 50 million. I'm talking bKash, Nagad, DBBL - all the major players are involved. This is not a drill. I've spent the last 8 years building and refining customer risk scoring models for BD fintechs. And let me tell you, it's a daunting task. The standard approaches just don't cut it here. So, what's the hidden problem? The Hidden Problem In Bangladesh, we have a unique set of challenges. For one, the BDT 100,000 MFS threshold monitoring is a major pain point. We need to flag any transaction above this amount, but the false positives are through the roof. And then there's the STR/SAR bottlenecks - our systems are overwhelmed with suspicious activity reports, and it's hard to separate the wheat from the chaff. So, how do we build a custome...

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 ...

8 Years of KYC Data Validation: The Hidden Problem in MFS Onboarding and How Pandas Saved My Sanity

I still remember the day our MFS onboarding system crashed due to a massive influx of false positives - 10,000 new customers in a single day, with over 500 transactions exceeding the BDT 100,000 threshold. It was chaos. So, what went wrong? We were using a standard rules-based approach for KYC data validation, but it clearly wasn't working. That's when I realized the problem wasn't the rules themselves, but how we were applying them. The Hidden Problem In Bangladesh, the BFIU guidelines are clear: we need to monitor all transactions above BDT 100,000 and file STRs/SARs accordingly. But with millions of transactions happening every day, our system was struggling to keep up. The bottleneck was in our data validation process. We were using a simple, straightforward approach: check the customer's name, address, and ID number against our database. But what about variations in spelling, or different formats for the ID number? Our system was flagging too many false positives, ...

8 Years of Fighting Money Laundering in Bangladesh: How I Built a Customer Risk Scoring Model

Image
Photo by Christian Lue on Unsplash I still remember the night we discovered a massive structuring ring at one of the local fintechs. It was a BDT 50 million case, with thousands of transactions flying under the radar. Our team worked tirelessly for weeks to unravel the scheme, but it was a wake-up call - our current risk scoring model just wasn't cutting it. So, I embarked on a journey to create a more effective customer risk scoring model, one that could help us identify high-risk customers and prevent money laundering in real-time. It wasn't easy - we faced numerous challenges, from data quality issues to regulatory hurdles. The Hidden Problem In Bangladesh, the standard approaches to risk scoring often fall short. Why? Because they don't account for our unique fintech landscape, where mobile financial services (MFS) like bKash and Nagad dominate the market. The BFIU guidelines are clear - we need to monitor transactions above the BDT 100,000 threshold - but that's j...

How I Used Pandas to Crack Down on False Positives in MFS Onboarding

I still remember the day our team at a leading Bangladeshi fintech was slammed with a massive false positive issue - over 10,000 transactions flagged in a single day, mostly from bKash and Nagad users. The BDT 100,000 threshold monitoring was being triggered left and right, causing chaos. We were staring at a potential STR/SAR bottleneck if we didn't act fast. The Hidden Problem Standard KYC data validation approaches were failing us. Most of our issues stemmed from inconsistent data formatting and lack of context in transaction data. The BFIU guidelines were clear, but applying them in the real world, especially with the nuances of MFS onboarding, was a different story altogether. Technical Breakdown & Logic Flow We needed a more flexible and adaptive approach to data validation. That's when we decided to use Pandas for its powerful data manipulation capabilities. The logic flow was straightforward: data ingestion , format normalization , contextual analysis , and fi...

How I Caught a Massive Money Laundering Ring Using Isolation Forest in Nagad Transaction Data

Image
Photo by Jason Leung on Unsplash It's 3 AM, and my phone is blowing up. Our Nagad transaction monitoring system has flagged a potential structuring ring involving BDT 50 million. I jump out of bed, grab a cup of coffee, and dive into the data. The numbers are staggering - 10,000 transactions in the past week, all just below the BDT 100,000 MFS threshold. This is the perfect example of why standard approaches to anomaly detection fail in Bangladesh. The Hidden Problem Most AML systems rely on simple threshold-based rules or basic machine learning models. But in Bangladesh, where the majority of transactions are small and frequent, these systems generate a ton of false positives. The BFIU guidelines are clear - we need to monitor all transactions above BDT 100,000, but the sheer volume of smaller transactions makes it difficult to identify real suspicious activity. Technical Breakdown & Logic Flow To tackle this problem, I decided to use an Isolation Forest algorithm. This appro...