LIVE · LightGBM + Neo4j

Money-laundering rings,
detected through the graph.

A graph-native AML platform that ingests a transaction network, engineers 14 topology + flow features, trains a gradient-boosted classifier with ROC-AUC 0.87, and surfaces explainable node-level alerts with path-level reason codes. Every score is case-openable in a live React investigator UI.

A1415 0.999 A2642 0.994 M48 0.742 A594 0.651 TARGET A1886
Graph Nodes
Unique accounts
Graph Edges
Directed transfers
ROC-AUC
On hold-out set
Features
14
Topology + flow
Critical Scores
Score ≥ 0.85
01 / Model Quality

Trained LightGBM with honest metrics

hold-out split · reported as-is
ROC-AUC binary ROC area
PR-AUC imbalanced-safe
Brier Score calibration
Precision @ 100 top-K triage
02 / Live Scoring

Top suspects ranked in real time

POST /api/v1/score
TOP K Scoring feed
— entries
Rank Node Score Band
Fetching live scores…
GAINS Feature importance
LightGBM split gain
Loading from /metrics/last…
03 / Pipeline

From raw edges to explainable case

deterministic · reproducible
STEP 01

Ingest

Load CSV/JSONL edges into a NetworkX MultiDiGraph. Optional push to Neo4j for Cypher-native exploration.

NetworkXNeo4j 5
STEP 02

Featurize

Compute per-node topology and flow features: degree, PageRank, betweenness, triads, ego density, txn flow.

14 featuresparquet
STEP 03

Train

Stratified train/val split, LightGBM binary classifier, metrics persisted to SQLite. One command.

LightGBMSQLite
STEP 04

Score

Apply model to all nodes; return Top-K suspects with calibrated probability and band-level classification.

Batchaligned
STEP 05

Explain

Local surrogate + path explanations. What-if operators let analysts simulate edge addition/removal live.

pathswhat-if

Open the investigator console.

Full React dashboard with score table, case explorer, graph mini-view, and what-if simulator. Click a suspect, see their 1-hop neighborhood, read the reason codes, run a local surrogate explanation.

Launch Investigator
03 / Investigate

Inspect any node in the live graph

enter a node ID from the population · calls the real API
Try: A1415 · A2642 · A594 · A182 · M22
click Investigate to inspect a node's score, ego metrics, and neighborhood