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

8 Years of Chasing Shadows: How I Uncovered the Hidden Patterns of Agent Banking Fraud in Bangladesh

agent-fraud

Photo by Anas on Unsplash

I still remember the night we detected a massive structuring ring that had been flying under the radar for months. It was a $1 million transaction, split into tiny chunks of BDT 100,000, all going through different agents across the country. My team and I were ecstatic, but also terrified - how did this happen under our noses?

The Hidden Problem

As I dug deeper, I realized that standard AML approaches just weren't cutting it in Bangladesh's unique DFS ecosystem. The BFIU guidelines are clear: monitor transactions above the BDT 100,000 MFS threshold, but the reality is that most fraud happens in smaller, more frequent transactions. It's like looking for a needle in a haystack, but the haystack is on fire.

Why Standard Approaches Fail

First, most systems rely on simple rule-based models that can't keep up with the sophistication of modern fraudsters. Second, the sheer volume of transactions in Bangladesh's MFS space makes it impossible to manually review every suspicious activity. And third, the lack of contextual data - like agent information, customer behavior, and transaction history - makes it tough to identify genuine patterns.

Technical Breakdown & Logic Flow

To tackle this, we needed a more nuanced approach. We started by collecting and analyzing data on agent behavior, customer demographics, and transaction patterns. We used machine learning to identify clusters of suspicious activity, and network analysis to map out the relationships between agents, customers, and transactions. But here's the thing: it's not just about throwing fancy tech at the problem - it's about understanding the why behind the patterns.

Step-by-Step Logic Flow

  1. Collect and preprocess transaction data, including agent information and customer demographics.
  2. Apply machine learning algorithms to identify clusters of suspicious activity.
  3. Use network analysis to map out relationships between agents, customers, and transactions.
  4. Visualize the results to identify patterns and anomalies.

Python Implementation

import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Load transaction data
transactions = pd.read_csv('transactions.csv')

# Preprocess data and apply machine learning algorithm
kmeans = KMeans(n_clusters=5)
kmeans.fit(transactions[['agent_id', 'customer_id', 'transaction_amount']])

# Create network graph and visualize results
G = nx.Graph()
G.add_nodes_from(transactions['agent_id'])
G.add_edges_from(transactions[['agent_id', 'customer_id']])
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_size=500, node_color='lightblue')
nx.draw_networkx_labels(G, pos, font_size=10)
plt.show()

This code block shows how we used K-means clustering to identify suspicious activity, and network analysis to visualize the relationships between agents, customers, and transactions. But what's key is that we didn't just stop at the tech - we used the results to inform our human investigation, to dig deeper into the why behind the patterns.

Local Application

So how does this fit into the BFIU rules and MFS realities in Bangladesh?

The BFIU guidelines clearly state that MFS providers must monitor transactions above the BDT 100,000 threshold. But our approach goes beyond that - we're not just looking at individual transactions, we're looking at patterns of behavior.
By using machine learning and network analysis, we can identify suspicious activity that might not trigger traditional thresholds. And by visualizing the results, we can see the relationships between agents, customers, and transactions - and make more informed decisions about which activities to investigate further.

BFIU Guidelines

  • Monitor transactions above the BDT 100,000 MFS threshold.
  • Report suspicious transactions to the BFIU.
  • Implement effective AML/CFT controls.

Common Pitfalls & Edge Cases

But here's the thing: this approach isn't without its challenges. are a major issue - if we're not careful, we can end up flagging genuine transactions as suspicious. And data quality is a major concern - if our data is incomplete or inaccurate, our results will be too. So we need to be careful, to test and validate our approach, to make sure we're not missing anything.

Edge Cases

  1. Agent collusion: what if multiple agents are working together to commit fraud?
  2. Customer manipulation: what if customers are being coerced into making suspicious transactions?
  3. System errors: what if our system is flagging genuine transactions as suspicious due to technical errors?

Counterintuitive Insight

But here's the surprising thing: our approach has actually helped us identify new business opportunities. By analyzing patterns of behavior, we've been able to identify areas where our MFS services can be improved - and where we can offer new products and services to our customers. It's not just about preventing fraud - it's about building a better business.

Conclusion & CTA

So what's the takeaway? Agent banking fraud is a complex problem that requires a nuanced approach. By using machine learning, network analysis, and human investigation, we can identify suspicious patterns of behavior and prevent fraud. But it's not just about the tech - it's about understanding the why behind the patterns. So I want to ask you: what's the weirdest transaction pattern you've seen? Drop a comment below and let's discuss. And if you're interested in learning more about our approach, check out our other resources on aitipseveryday.com.

Comments