WTWilly Tai
Case studyAI Governance & Assurance · FSI

Catching the pattern, not the transaction.

Money laundering doesn't hide in one payment. It hides in the shape of many. This monitor re-derives the laundering typologies straight from the raw flow, with parameters you can interrogate, cites the exact transactions, and routes every alert to a human. It never files a report on its own, and it's honest about what it can't yet catch.

01 / The pain

No analyst can watch the whole flow, and the rules engine cries wolf.

Origin Pay moves thousands of payments a day. A launderer never trips a single-transaction limit. They structure (break a sum into many top-ups each just under the reporting threshold) or layer (push value in and straight back out to break the trail). Legacy rules engines "solve" this by alerting on everything that looks vaguely off, which is why real AML teams drown in 90%+ false positives and still miss the structured case buried in the noise. The job is not more alerts. It is the right alerts, with the evidence attached.

02 / Why the naive approach fails

The obvious rules are the ones launderers are built to beat.

So this monitor aggregates near-threshold top-ups per account over a window (structuring), and matches large inflows to outflows (layering). I am explicit below about where that is solid and where it needs the graph to go further.

NAIVE amount ≥ S$2,500 ? ✗ ten S$2,400 deposits slip under✗ split outflow defeats 1:1 layering match✗ legit merchants flagged REFINED · aggregate per account over a window ≥3 top-ups in [2000,2500) / acct large in vs Σ outflows, window MLRO decides SAR
fig.1 · the rules launderers beat, and the windowed aggregation that replaces them
03 / How it works

Typologies derived in code. The model writes the case note.

The detection is deterministic. It clusters top-ups in the band [S$2,000, S$2,500) with a count ≥ 3 per account (structuring), and matches an inflow ≥ S$5,000 to an outflow within 10% over ≤ 3 days (layering). The model is read-only. It drafts the case narrative for the MLRO, citing the transaction IDs. The agent never files the suspicious-transaction report. It escalates with the evidence and a person decides.

DETERMINISTIC · typology rules, parameterised MODEL · case note only, cited Paymentsfull flow Detect typologystructuring · layering Risk + gate→ escalate Case noteLLM · cited MLRO files SARhuman Append-only, hash-chained ledger · every alert & escalation logged
fig.2 · where the line sits. Code detects and gates; the model only writes the note.
04 / One worked example

One structuring cluster caught, and one account correctly left alone.

Account W00008 made eight top-ups between S$2,400 and S$2,490 over a few days. None was individually reportable, but together they are a textbook smurf. The monitor aggregates them, prices the total, and escalates with the eight transaction IDs.

AccountTypologyWhyTotalEvidenceResult
W00008Structuring8 top-ups of S$2,000–2,500, one account, days apartS$19,641T-…-S01 … S08escalate → MLRO
W00020LayeringS$9,800 in, S$9,750 out within 1 dayS$9,800T-…-948 · 949escalate → MLRO
W00137·2 near-threshold top-ups (below the ≥3 count); a card merchant··correctly not flagged
Telling the two apart is the whole job. Two near-threshold top-ups don't make a cluster, so W00137 isn't flagged. The count threshold is what keeps a card merchant out of the queue. Across the full population, the monitor escalates only the accounts where the pattern holds, each with its transactions attached, so the MLRO reviews evidence rather than a hunch.

05 / Numbers & honest trade-offs

What it screened, and where it stops.

4,993
transactions screened
Across 300 accounts, the full flow.
2
alerts raised
1 structuring · 1 layering.
2 / 0
true / false positives
On this seeded synthetic flow.
100%
escalated to MLRO
The agent never files.

Read those numbers honestly. The 2/0 precision is on a synthetic flow where I seeded the typologies. It proves the detection logic fires on the right shapes and ignores near-misses. It does not prove it would hold a real bank's false-positive rate down, because real AML runs at 90–95% false positives. The dial is the count and band. Raise the count from 3 to 5 and you trade recall for a quieter queue; add account history and type to cut the merchant false positives. And the honest limit: the layering test here matches an inflow to a single near-equal outflow, and a sophisticated launderer beats that by splitting the outflow across accounts. Catching that needs the windowed inflow-vs-Σ-outflow match and following hops through the entity graph, which is exactly what the Knowledge Graph demo is built to do. I would rather name that gap than pretend the 1:1 match is sufficient.

06 / Governance, shown

Every alert is an escalation, logged, never an auto-filing.

AI Control Ledger · entryintegrity verified
seq        : 47
agent      : AML Monitor
action     : escalate_aml
subject    : W00008          amount : S$19,641
tier       : high          decision : escalate → MLRO   policy : POL-GOV-HITL
evidence   : [T-…-S01, …, T-…-S07]   typology : structuring
prev_hash  : 2c4d…91fa    hash : a6b8…7e02
A regulated activity, so it is tier-high and always routed to a person. The SAR decision, and the legal accountability that comes with it, stays with the MLRO.
07 / Old vs new

From an alert firehose to cited, triaged cases.

LEGACY RULES ENGINE per-txn thresholds 90%+ false positives structured cases missed PATTERN-LEVEL, GOVERNED typologies derived over a window → cited → escalated to the MLRO
fig.4 · from an alert firehose to cited, pattern-level cases

What this says about how I work.

I move detection from per-transaction alarms to pattern-level evidence, with the parameters in the open so a regulator can interrogate them. And I am deliberate about where the AI stops. It is strong at finding the shape in the noise. It has no business deciding to file a regulatory report, so it triages and escalates and the MLRO decides. Most of all, I will name the limitation, the 1:1 layering gap and the false-positive reality both, because pretending a synthetic precision is a production one is exactly how AI loses a regulated client's trust.

See it run.

The alerts above are real output from the monitor over Origin Pay's flow. The full console, with the derived alerts, the cited transactions, and the governed ledger, runs as a working application.

See the live governance demo →The full console runs on my machine. Ask me for a 90-second walkthrough.