Financial fraud detection involves managing extreme class imbalance, where fraudulent transactions typically account for less than $2\%$ of high-volume payment streams. Standard oversampling techniques like SMOTE distort complex multi-modal distributions across mixed continuous and categorical transaction features.

This project delivers an end-to-end Deep Active Learning framework benchmarked on the large-scale IEEE-CIS Fraud Detection dataset.


Architectural Pipeline

flowchart LR Raw[Imbalanced Tabular Data] --> GAN[Conditional WGAN-GP] GAN --> Synthetic[Candidate Synthetic Fraud Pool] Synthetic --> RL[PPO Reinforcement Learning Agent] RL -->|Reward: Delta AUC-PR| Decision{Selective Accept/Reject} Decision --> Balanced[Optimized Augmented Training Set] Balanced --> XGB[XGBoost Classifier Engine]

1. Conditional WGAN-GP (Synthesizer)

  • Employs a Wasserstein GAN with Gradient Penalty (WGAN-GP) to guarantee 1-Lipschitz continuity and prevent mode collapse on tabular data.
  • Processes categorical attributes via temperature-annealed Gumbel-Softmax, enabling gradient flow through the discriminator while preserving discrete field boundaries.

2. Reinforcement Learning Sample Selection (PPO Filter)

  • Instead of naïvely appending all synthetic samples, a Proximal Policy Optimization (PPO) agent evaluates each synthetic batch sequentially.
  • Custom Gymnasium environment with sparse marginal performance rewards:
$$ R_t = \text{AUC-PR}(\mathcal{D}_{\text{base}} \cup \mathcal{S}_{\text{selected}}) - \text{AUC-PR}(\mathcal{D}_{\text{base}}) $$
  • The policy network learns to reject out-of-distribution hallucinations and borderline boundary noise.

3. Gradient Boosted Classifier (XGBoost)

  • Serves as the primary classification engine due to proven robustness against non-stationary temporal concept drift in transaction streams.

Benchmark Results (Temporal Holdout Test)

Evaluated under strict chronological split (Train: Months 1–5, Test: Month 6):

Pipeline Strategyn_trainn_fraud (train)AUC-PRAUC-ROCF1-ScoreRecall @ FPR=0.1%
XGBoost Only (Baseline)500,07114,6150.58340.89120.53170.6234
SMOTE Oversampling971,541486,0850.61120.89580.55890.6501
WGAN-GP Only614,615128,9590.63890.90210.58720.6743
WGAN-GP + RL Selection534,26148,6050.67210.90870.61430.7089

View Source Code & Experiments on GitHub