Which came first?: The chicken or the egg?

Hey there friends. Hope all of you are doing well and had a blast of a winter break and holidays. I realize I might be a bit late in greeting you all but some things came up that kept me from blogging. Well, the good news is I am back now and the bad news is I would be a bit less active than usual as I am struggling to manage time efficiently.

But anyways, without further ado, let’s jump into today’s topic – Money Laundering. Money Laundering for all the non-finance folks out there is a method that helps criminals clear large sums of funds whose source is illegitimate by routing it through a legitimate business’s transactions. If y’all have watched Breaking Bad or Ozark, you’ll get a much better idea of what I mean to say, as it is explained in a very cool manner on the shows. Here’s a video that explains the general methodology of how money laundering works.

So, the next natural question comes, how does one detect this type of tax fraud? Well, these transactions are generally routed through shell companies and usually stay in their account for a very low time(sometimes not even a day). This means that if I take up the bank statement of the earnings account of a company, I would be able to find these transactions. However, the greater challenge seems to be discerning these suspicious transactions from the clean transactions / legitimate business transactions.

How to detect money laundering

As a forensic analyst, a way of identifying such transactions is using fund tracing. This means that we try to identify the head and tail (source and destination) of a transaction trail up until the end of either the head or the tail. This identification has a manual component of assessing the narration of the transaction in the bank statement. Oftentimes, this took up a lot of effort and I always wondered if there are transactions that we can remove from a mix of thousands of transactions that we analyze using some sort of algorithms on the narration and the account numbers.

To answer this question, I took up a minor project of finding an algorithm that can help squeeze the problem of identifying these suspicious transactional trails. Using a simple “subset sum” algorithm with “fuzzy matching”, the script was able to highlight potential transactions that can be directly considered as cases of Money Laundering.

How the fraud detection algorithm works

The algorithm consists of three components.

Fuzzy matching narration details of incoming and outgoing transactions: Fuzzy matching is a method that provides an improved ability to process word-based matching queries to find matching phrases or sentences from a database. Each match is assigned along with a fuzzy score between 0 to 1 indicating the extent of the match.

Selecting outgoing transactions that sum up to corresponding fuzzy matched incoming transactions: The algorithm returns all matched transactions above a user-set fuzzy score threshold.

Viewing the matched incoming and outgoing transactions of the same day: Currently, the algorithm works checks for all incoming and outgoing transactions that occur on the same day. However, it can be modified to check outgoing transactions between a range of dates after an incoming transaction.

The raw algorithm can be found here.

Closing Comments

In summation, we were able to refine the larger objective of identifying potential money laundering/inflated revenues transactions by filtering out transactions that have a fuzzy match of less than 0.3. Basis the analyst working on the case and the case scenario the fuzzy match threshold can be adjusted. This algorithm works as a pseudo-tool that in essence does minimize the “haystack” and identifies the suspicious needles.

That brings us to the end of this post. Thank you for reading and have a great day ahead! Until next time. 🙂

Leave a comment