Dataset: 1.2 million synthetic + real-pattern transactions spanning Jan 2022 – Dec 2023. Fraud prevalence: 3.1% (class-imbalanced; SMOTE oversampling applied during training). Train/test split: 80/20 stratified. All metrics reported on the held-out 20% test set.
| Model | AUC-ROC | Precision | Recall | F1 | Inference (ms) | Recommended |
|---|---|---|---|---|---|---|
| Random Forest | 0.974 | 96.1% | 94.8% | 95.4% | 4 | Standby |
| XGBoost | 0.981 | 96.7% | 95.3% | 96.0% | 3 | Standby |
| LightGBM | 0.978 | 96.3% | 95.0% | 95.6% | 2 | Standby |
| Neural Network (LSTM) | 0.969 | 94.4% | 93.7% | 94.0% | 18 | Standby |
| Ensemble (Stacking) | 0.987 | 97.3% | 96.1% | 96.7% | 8 | ✅ Active |
| Baseline (Logistic Reg.) | 0.921 | 88.4% | 85.2% | 86.8% | <1 | Baseline |
The Stacking Ensemble (XGBoost + LightGBM + Random Forest meta-learner) is deployed in production and delivers the best AUC-ROC with an acceptable 8 ms inference latency.
Predicted Fraud Predicted Legit
Actual Fraud 7,248 (TP) 289 (FN)
Actual Legit 204 (FP) 232,259 (TN)
| Metric | Value | Formula |
|---|---|---|
| Precision | 97.3% | TP / (TP + FP) |
| Recall / Sensitivity | 96.1% | TP / (TP + FN) |
| Specificity | 99.9% | TN / (TN + FP) |
| F1 Score | 96.7% | 2·P·R / (P + R) |
| False Positive Rate | 0.09% | FP / (FP + TN) |
| False Negative Rate | 3.83% | FN / (FN + TP) |
| Matthews Corr. Coeff. | 0.966 | — |
| FPR (False Positive Rate) | TPR (True Positive Rate) |
|---|---|
| 0.001 | 0.812 |
| 0.005 | 0.923 |
| 0.009 | 0.961 ← Production threshold |
| 0.020 | 0.981 |
| 0.050 | 0.993 |
AUC-ROC = 0.987 — Operating at FPR = 0.09% captures 96.1% of all fraud.
| Threshold | Precision | Recall | F1 |
|---|---|---|---|
| 0.30 | 88.1% | 98.9% | 93.2% |
| 0.50 | 93.7% | 97.8% | 95.7% |
| 0.62 | 97.3% | 96.1% | 96.7% ← Production |
| 0.75 | 98.8% | 91.2% | 94.8% |
| 0.90 | 99.4% | 79.3% | 88.2% |
Average Precision (AP) = 0.979
- AUC-ROC: 0.981
- Training time: 4.2 minutes (CPU, 960k rows)
- Key hyperparameters:
n_estimators=500,max_depth=7,learning_rate=0.05,scale_pos_weight=31(fraud:legit ratio)
Top 10 Feature Importances (SHAP values)
| Rank | Feature | Mean | SHAP | |
|---|---|---|---|---|
| 1 | velocity_24h |
0.182 | ||
| 2 | amount_zscore |
0.171 | ||
| 3 | amount |
0.148 | ||
| 4 | new_device |
0.112 | ||
| 5 | high_risk_merchant |
0.094 | ||
| 6 | unusual_time |
0.079 | ||
| 7 | new_location |
0.071 | ||
| 8 | user_age_days |
0.063 | ||
| 9 | velocity_1h |
0.051 | ||
| 10 | transaction_count_30d |
0.029 |
- AUC-ROC: 0.978
- Training time: 1.8 minutes (CPU)
- Notable: Fastest inference (2 ms) — suitable for ultra-low-latency fallback.
- AUC-ROC: 0.974
- Training time: 8.1 minutes (CPU)
n_estimators=300,max_depth=15,class_weight="balanced"
Architecture: Input(18) → LSTM(128) → Dropout(0.3) → Dense(64, ReLU) → Dense(1, Sigmoid)
- AUC-ROC: 0.969
- Training time: 23 minutes (GPU T4, 50 epochs)
- Highest recall on sequential fraud patterns (card-not-present chains), but 18 ms latency makes it secondary in the ensemble.
The ensemble was retrained monthly on a 12-month rolling window and evaluated on the following month's unseen data:
| Period | AUC | Precision | Recall |
|---|---|---|---|
| Jan–Dec 2022 → Jan 2023 | 0.984 | 97.1% | 95.8% |
| Feb–Jan 2023 → Feb 2023 | 0.986 | 97.4% | 96.0% |
| Mar–Feb 2023 → Mar 2023 | 0.981 | 96.8% | 95.5% |
| Apr–Mar 2023 → Apr 2023 | 0.988 | 97.6% | 96.4% |
| May–Apr 2023 → May 2023 | 0.985 | 97.2% | 95.9% |
| Average | 0.985 | 97.2% | 95.9% |
Minimal performance degradation across periods confirms stability and absence of overfitting.
| Technique | AUC | F1 |
|---|---|---|
| No balancing | 0.964 | 93.1% |
| Class weights | 0.978 | 95.4% |
| SMOTE | 0.981 | 96.0% |
| SMOTE + class weights | 0.987 | 96.7% ← Used in production |
| Cost per FP ($) | Cost per FN ($) | Expected cost per 100k txns |
|---|---|---|
| 2 | 50 | $1,852 |
| 2 | 200 | $6,378 |
| 5 | 50 | $1,918 |
| 5 | 200 | $6,444 ← Production cost estimate |
At the production threshold (0.62), the model minimises expected financial cost under
the $5 FP / $200 FN loss matrix.
To ensure the model does not discriminate by demographic proxies:
| Subgroup | FPR | FNR |
|---|---|---|
| Transaction amount < $100 | 0.08% | 3.91% |
| Transaction amount ≥ $100 | 0.10% | 3.74% |
| Domestic transactions | 0.09% | 3.88% |
| International transactions | 0.11% | 3.61% |
| New accounts (< 30 days) | 0.14% | 4.02% |
| Established accounts (> 1 year) | 0.07% | 3.64% |
FPR and FNR are consistent across all analysed subgroups (max delta: 0.07 pp FPR, 0.41 pp FNR), indicating no systematic bias.
| Metric | Value |
|---|---|
| Avg inference latency (p50) | 8 ms |
| Inference latency (p99) | 22 ms |
| Throughput | 12,000 txns/sec (single node) |
| Memory footprint | 310 MB |
| Model file size | 48 MB |
| Retraining frequency | Weekly (auto-triggered if AUC drops below 0.97) |
| Feature pipeline (Redis cache) | p50 = 1.2 ms |
- Concept drift: Financial fraud patterns evolve. The weekly retraining pipeline monitors AUC via a reference window; if AUC drops below 0.970 on live traffic, an alert is triggered.
- Novel attack vectors: The model may underperform on attack types not represented in the training distribution. The rule engine (247 hand-crafted rules) acts as a safety net.
- Synthetic data component: ~40% of training fraud labels were synthetically generated using a GAN. Real-world fraud rates and patterns may differ in unseen markets.
- Not a substitute for human review: All transactions scored 0.50–0.70 are routed to the human review queue; the model is decision-support, not fully autonomous.