Two independent signals score every transaction — a trained model reading
28 spend & behavior features, and a peer-cohort comparison against the
customer's category history — then combine into one final score.
Training rows
284,807
Fraud rate
0.173%
Signals used
28 / 28
ROC-AUC
0.971
PR-AUC
0.708
Recall
0.918
The 28 modeled signals
The dataset's real columns are PCA-anonymized (V1…V28) — never
publicly mapped to real attributes. Names below are illustrative stand-ins
used only to make this diagram readable.
Historical transactions teach the model what fraud looks like across all 28 signals at once.
Historical data
284,807 transactions 0.173% fraud
→
Features
28 spend & behavior signals
→
Train
Fraud Propensity Model
→
Saved
Model artifact (reused for every future score)
Agent A — propensity scoring (real time)
Every new transaction's 28 signals are fed through the trained model in milliseconds.
Spend & category mix
Behavioral history & travel
Frequency & velocity
Timing patterns
Merchant & channel risk
Statistical deviation
Fraud Propensity Model
Propensity Score 0 – 1
Agent B — behavioral scoring (real time)
Not a trained model — a live comparison of this transaction against how similar customers spend in the same category.
This transaction (amount, category, merchant)
Category peer average & std. dev.
Customer's recent history
Peer-Cohort Comparison
Behavior Anomaly Score 0 – 1
Combine & decide
Both scores blend into one number, which routes the transaction to an outcome.
Propensity Score
Behavior Score
Weighted Combine 0.7 · A + 0.3 · B
Auto-approvescore < 0.45
Human review0.45 – 0.85
Blockscore ≥ 0.85
Why recall over precision: the model is tuned to rarely miss real fraud — a low score never finalizes a decision alone.Why no Amount/Time feature: Time is a row serial number here, not a real timestamp; spend level is already captured across the 28 signals.