✦ Case study · production ML

Payment Anomaly Detection

How unsupervised ML.NET models watch a national payment portal's transaction and wallet streams — without ever touching the live payment path.

Context

A national payment portal processes transactions and wallet activity at government scale. Fraudulent or abnormal behavior — compromised accounts, unusual transfer patterns, wallet abuse — has to be caught early, but the platform team had no labeled fraud dataset to train on and no appetite for anything that could add latency or risk to the payment flow itself.

Constraints

Architecture

Oracle DB transactions · wallets Batch Scorer ML.NET · unsupervised Tiered Actions flag · account flag · hold Redis Pub/Sub live alerts across pods Analysts review · confirm · dismiss Nightly Retraining distributed locks Model Store versioned · in-database scheduled batch anomalies publish dashboards feedback new model load latest

light = data. amber: live detection flow · blue: the human-in-the-loop learning cycle

How it flows

Why it's built this way

The interesting constraint wasn't the ML — it was trust. A model that occasionally holds a legitimate government payment is worse than no model. Tiered responses mean the system earns autonomy gradually: it starts by suggesting, and only acts alone at confidence levels analysts have validated. The feedback loop means every analyst decision makes tomorrow's model slightly better — human-in-the-loop as an architecture, not a slogan.

Stack

.NET 8 · ML.NET · EF Core · Oracle DB · Redis Pub/Sub · Docker / OCI · Azure DevOps

← All projects Discuss a similar problem