dataco-fraud-detection-eval
Semi-Supervised Supply Chain Fraud Detection with Unsupervised Pre-Filtering — Moradi et al. (2025) (arXiv:2508.06574, 2025)
What this evaluates
Evaluates semi-supervised anomaly detection models for supply chain fraud under severe class imbalance and limited label availability. Probes the ability to leverage unsupervised pre-filtering and self-training to improve precision, recall, and F1-score while maintaining low false positive rates.
Datasets
- DataCo Smart Supply Chain Dataset — total 180519; splits: 10-fold cross-validation (-1)
Metrics
F1-Score (primary) — range: [0, 1]
- Harmonic mean of Precision and Recall: 2 * (Precision * Recall) / (Precision + Recall). Optimized for highly imbalanced fraud detection.
AUC-ROC — range: [0, 1]
- Area under the Receiver Operating Characteristic curve, measuring the trade-off between true positive rate and false positive rate across classification thresholds.
AUC-PR — range: [0, 1]
- Area under the Precision-Recall curve, preferred for evaluating performance on highly imbalanced datasets where the positive class is rare.
FPR — range: [0, 1]
- False Positive Rate: FP / (FP + TN). The protocol targets keeping this below 3.0%.
Input / output format
Input: 52 raw features per transaction (numerical, categorical, temporal) representing supply chain operations across multiple countries.
Output: Binary fraud label (fraud vs. legitimate) or anomaly score/confidence for each transaction.
Scoring recipe
def compute_metrics(y_true, y_pred):
tp = sum(1 for t, p in zip(y_true, y_pred) if t == 1 and p == 1)
fp = sum(1 for t, p in zip(y_true, y_pred) if t == 0 and p == 1)
fn = sum(1 for t, p in zip(y_true, y_pred) if t == 1 and p == 0)
tn = sum(1 for t, p in zip(y_true, y_pred) if t == 0 and p == 0)
precision = tp / (tp + fp) if (tp + fp) > 0 else 0
recall = tp / (tp + fn) if (tp + fn) > 0 else 0
f1 = 2 * precision * recall / (precision + recall) if (precision + recall) > 0 else 0
fpr = fp / (fp + tn) if (fp + tn) > 0 else 0
return {'F1-Score': f1, 'Precision': precision, 'Recall': recall, 'FPR': fpr}
Common pitfalls
- The Isolation Forest contamination factor was set to 0.05 (5%), not the dataset's actual 1.5% fraud rate, to capture borderline anomalies.
- Only 10% of the training portion is labeled per fold, with the remaining 90% treated as unlabeled for self-training, simulating realistic label scarcity.
- Feature selection strictly removed 3 features with >80% missing values and 2 highly correlated features (Pearson r>0.95), resulting in exactly 47 final features.
Evidence (verbatim from paper)
Given the class imbalance inherent in fraud detection, we employed multiple evaluation metrics (Precision, Recall, F1-Score, AUC-ROC, AUC-PR, FPR) with statistical significance testing via Wilcoxon signed-rank test. We compared our approach against six baselines... Within each fold of the 10-fold cross-validation, the training portion (approximately 162,467 transactions per fold) was split such that 10% served as labeled data ($\mathcal{D}{L}$ with 16,247 samples per fold), while the remaining 90% ( 146,220 transactions per fold) formed the unlabeled set $\mathcal{D}{U}$.
Citation
@misc{moradi2025semisupervised,
title={Semi-Supervised Supply Chain Fraud Detection with Unsupervised Pre-Filtering},
author={Moradi et al. (2025)},
year={2025},
note={arXiv:2508.06574}
}
1---2name: dataco-fraud-detection-eval3description: Evaluates semi-supervised anomaly detection models for supply chain fraud under severe class imbalance and limited label availability. Probes the ability to leverage unsupervised pre-filtering and self-training to improve precision, recall, and F1-score while maintaining low false positive rates. Use when the user wants to benchmark on DataCo Smart Supply Chain Dataset, or asks about evaluating this task. Reports F1-Score.4---56# dataco-fraud-detection-eval78> Semi-Supervised Supply Chain Fraud Detection with Unsupervised Pre-Filtering — Moradi et al. (2025) (arXiv:2508.06574, 2025)910## What this evaluates1112Evaluates semi-supervised anomaly detection models for supply chain fraud under severe class imbalance and limited label availability. Probes the ability to leverage unsupervised pre-filtering and self-training to improve precision, recall, and F1-score while maintaining low false positive rates.1314## Datasets1516- **DataCo Smart Supply Chain Dataset** — total 180519; splits: 10-fold cross-validation (-1)1718## Metrics1920- `F1-Score` **(primary)** — range: [0, 1]21 - Harmonic mean of Precision and Recall: 2 * (Precision * Recall) / (Precision + Recall). Optimized for highly imbalanced fraud detection.22- `AUC-ROC` — range: [0, 1]23 - Area under the Receiver Operating Characteristic curve, measuring the trade-off between true positive rate and false positive rate across classification thresholds.24- `AUC-PR` — range: [0, 1]25 - Area under the Precision-Recall curve, preferred for evaluating performance on highly imbalanced datasets where the positive class is rare.26- `FPR` — range: [0, 1]27 - False Positive Rate: FP / (FP + TN). The protocol targets keeping this below 3.0%.2829## Input / output format3031**Input**: 52 raw features per transaction (numerical, categorical, temporal) representing supply chain operations across multiple countries.3233**Output**: Binary fraud label (fraud vs. legitimate) or anomaly score/confidence for each transaction.3435## Scoring recipe3637```python38def compute_metrics(y_true, y_pred):39 tp = sum(1 for t, p in zip(y_true, y_pred) if t == 1 and p == 1)40 fp = sum(1 for t, p in zip(y_true, y_pred) if t == 0 and p == 1)41 fn = sum(1 for t, p in zip(y_true, y_pred) if t == 1 and p == 0)42 tn = sum(1 for t, p in zip(y_true, y_pred) if t == 0 and p == 0)43 precision = tp / (tp + fp) if (tp + fp) > 0 else 044 recall = tp / (tp + fn) if (tp + fn) > 0 else 045 f1 = 2 * precision * recall / (precision + recall) if (precision + recall) > 0 else 046 fpr = fp / (fp + tn) if (fp + tn) > 0 else 047 return {'F1-Score': f1, 'Precision': precision, 'Recall': recall, 'FPR': fpr}48```4950## Common pitfalls5152- The Isolation Forest contamination factor was set to 0.05 (5%), not the dataset's actual 1.5% fraud rate, to capture borderline anomalies.53- Only 10% of the training portion is labeled per fold, with the remaining 90% treated as unlabeled for self-training, simulating realistic label scarcity.54- Feature selection strictly removed 3 features with >80% missing values and 2 highly correlated features (Pearson r>0.95), resulting in exactly 47 final features.5556## Evidence (verbatim from paper)5758> Given the class imbalance inherent in fraud detection, we employed multiple evaluation metrics (Precision, Recall, F1-Score, AUC-ROC, AUC-PR, FPR) with statistical significance testing via Wilcoxon signed-rank test. We compared our approach against six baselines... Within each fold of the 10-fold cross-validation, the training portion (approximately 162,467 transactions per fold) was split such that 10% served as labeled data ($\mathcal{D}_{L}$ with 16,247 samples per fold), while the remaining 90% ( 146,220 transactions per fold) formed the unlabeled set $\mathcal{D}_{U}$.5960## Citation6162```bibtex63@misc{moradi2025semisupervised,64 title={Semi-Supervised Supply Chain Fraud Detection with Unsupervised Pre-Filtering},65 author={Moradi et al. (2025)},66 year={2025},67 note={arXiv:2508.06574}68}69```7071- arXiv: 2508.06574