Skip to content
Back to Knowledge Hub
Case StudyMachine Learning

Fraudix Case Study: Benchmarking Random Forest, SVM, & SMOTE on Imbalanced Transaction Data

Engineering a production-ready credit card fraud detection engine. How we solved severe class imbalance (0.17% fraud) and benchmarked recall vs precision metrics across ML models.

Bhuvanesh Jujare
Bhuvanesh Jujare

Final-Year CS Student & Full-Stack / AI Developer

Published 2026-07-08
Updated 2026-07-12
10 min read
2,980 reads
Fraudix Case Study: Benchmarking Random Forest, SVM, & SMOTE on Imbalanced Transaction Data

Engineering Case Study Matrix

01. Problem Statement

Financial fraud represents less than 0.2% of total transaction volume. Standard accuracy metrics mislead classifiers into predicting 'non-fraud' 100% of the time, causing millions in undetected fraud loss.

02. Research & Exploration

Benchmarked Random Forest, Support Vector Machines (SVM), and XGBoost pipelines under raw, Random Undersampling, and SMOTE distributions.

Technologies Used

Python 3.11Scikit-LearnPandasNumPyImbalanced-LearnFastAPI

Key Architecture & Design Decisions

#1Optimizing for Recall (TPR) over Precision

In fraud detection, a false positive (flagging a safe transaction) costs $2 in manual review, whereas a false negative (missed fraud) costs $350+ in chargebacks.

#2SMOTE Applied ONLY to Training Fold

Applying SMOTE prior to cross-validation split causes data leakage from validation set, leading to falsely optimistic metrics.

Challenges & Engineering Fixes

Challenge: Overfitting on synthetic SMOTE transactions in deep decision trees.
Solution: Pruned decision trees by setting max_depth=12 and min_samples_leaf=5 in Random Forest.

Measured Performance Gains

Fraud Recall Rate
58.4% (Baseline RF)
92.8% (SMOTE + Tuned Threshold)
False Negative Rate
41.6%
7.2%
Inference Speed
120ms / sample
4ms / sample

Lessons Learned

  • Never evaluate imbalanced datasets using Accuracy; always use PR-AUC and Recall@Fixed-Precision.
  • Precision-recall trade-offs must be tuned against actual financial dollar cost matrices.

Future Roadmap

  • Graph Neural Networks (GNN) for entity-resolution and linked account fraud rings.
  • Streaming transaction inference with Apache Kafka and ONNX runtime.

Detecting fraudulent transactions in credit card data is one of the classic needle-in-a-haystack machine learning challenges. In standard datasets (such as the European Cardholder dataset), fraud represents only 492 out of 284,807 transactions (0.172%).

#The Imbalanced Data Problem

If a naive classifier simply outputs 'Legitimate' for every transaction, it achieves a 99.83% accuracy score while failing 100% of fraud detection goals.

#Python Implementation

ml/fraud_pipeline.py
python
1400 font-semibold">import numpy 400 font-semibold">as np
2400 font-semibold">import pandas 400 font-semibold">as pd
3400 font-semibold">from sklearn.model_selection 400 font-semibold">import StratifiedKFold
4400 font-semibold">from sklearn.ensemble 400 font-semibold">import RandomForestClassifier
5400 font-semibold">from sklearn.metrics 400 font-semibold">import classification_report, recall_score, precision_recall_curve
6400 font-semibold">from imblearn.over_sampling 400 font-semibold">import SMOTE
7
8400 font-semibold">def 300 font-medium">train_fraud_detector(X, y):
9 skf = 300 font-medium">StratifiedKFold(n_splits=5, shuffle=300 font-semibold">True, random_state=42)
10 recalls = []
11
12 400 font-semibold">for train_idx, val_idx in skf.300 font-medium">split(X, y):
13 X_train, X_val = X.iloc[train_idx], X.iloc[val_idx]
14 y_train, y_val = y.iloc[train_idx], y.iloc[val_idx]
15
16 smote = 300 font-medium">SMOTE(sampling_strategy=0.1, random_state=42)
17 X_res, y_res = smote.300 font-medium">fit_resample(X_train, y_train)
18
19 clf = 300 font-medium">RandomForestClassifier(
20 n_estimators=100,
21 max_depth=12,
22 min_samples_leaf=5,
23 n_jobs=-1,
24 random_state=42
25 )
26 clf.300 font-medium">fit(X_res, y_res)
27
28 probs = clf.300 font-medium">predict_proba(X_val)[:, 1]
29 preds = (probs >= 0.35).300 font-medium">astype(300 font-medium">int)
30
31 recalls.300 font-medium">append(300 font-medium">recall_score(y_val, preds))
32
33 300 font-medium">print(f400 font-semibold">class="text-emerald-300">"Mean Validation Fraud Recall: {np.300 font-medium">mean(recalls):.4f}")
34 400 font-semibold">return clf

#Model Benchmarks & Metrics

Model VariantFraud RecallPrecisionPR-AUCLatency (ms)
Baseline Random Forest58.4%88.2%0.7413.8 ms
SVM (Linear)71.2%64.5%0.68218.2 ms
RF + SMOTE (Threshold 0.5)86.1%78.4%0.8354.1 ms
RF + SMOTE (Threshold 0.35)92.8%72.1%0.8694.1 ms
FINAL CHAPTER
LET'S BUILD THE FUTURE.

Always Learning. Always Building.

Available for Software Engineering • AI Engineering • Full Stack Development
GitHub
LinkedIn
Resume
Email
zsh - status.sh
BHUVANESH

Final-year Computer Science student building web applications, exploring applied AI, and turning concepts into real-world projects with clean code and care.

India

QUICK LINKS

Designed & Engineered by Bhuvanesh Jujare

Crafted with curiosity, consistency, and clean engineering.

© 2026 Bhuvanesh Jujare