← Back to Projects
01

Credit Card Fraud Detection

Personal ProjectOpen Source

An end-to-end machine learning system that detects fraudulent credit card transactions on a highly imbalanced, real-world dataset — covering data validation, exploratory analysis, baseline and final modeling, probability calibration, threshold optimization, and a production REST API.

PythonXGBoostLogistic RegressionScikit-learnPandasFastAPIjoblibJupyter
Role
ML Engineer · End-to-End
Dataset
Kaggle · ULB Credit Card Fraud
Final Model
XGBoost + Platt Calibration
Deployment
FastAPI REST API
283,726
Transactions
Real-world dataset
492
Fraud Cases (~0.17%)
Extreme class imbalance
30
Features
PCA + Time & Amount
1,081
Duplicates Removed
0 missing values

Problem Statement

Fraudulent transactions are rare (~0.17%) and easily missed, causing significant financial loss. The hard parts aren't just accuracy — they're imbalance, calibration, and choosing a reliable decision threshold.

Highly Imbalanced Data

Only 492 of 283,726 transactions are fraud (~0.17%).

Overconfident Probabilities

Raw model scores need calibration to be trustworthy.

Reliable Threshold

Optimize the decision threshold for real-world use.

Key Highlights

  • XGBoost as the final model, benchmarked against a Logistic Regression baseline
  • PR-AUC used as the primary metric (the right choice for severe imbalance)
  • Probability calibration with Platt scaling for trustworthy scores
  • Decision-threshold optimization with confusion-matrix evaluation
  • Saved, reusable model artifacts for reproducible inference
  • Production REST API with a /predict-csv batch endpoint

End-to-End Pipeline

Data Cleaning
& Validation
Exploratory
Data Analysis
Model Training
(LogReg → XGBoost)
Platt-Scaling
Calibration
Threshold
Optimization
FastAPI
Deployment
1

Data Cleaning & Validation

Removed 1,081 duplicate transactions, verified zero missing values, and confirmed the severe class imbalance and feature consistency.

2

Exploratory Data Analysis

Fraud-vs-non-fraud distribution, transaction-amount comparison, time-based fraud patterns, correlation inspection, and outlier analysis.

3

Model Training

Logistic Regression baseline and an XGBoost final model, evaluated on ROC-AUC, PR-AUC (primary), Precision, Recall, F1, and a confusion matrix at the optimized threshold.

4

Probability Calibration

Applied Platt scaling because raw probabilities were overconfident — improving reliability for real-world decision-making.

5

FastAPI Deployment

Served the calibrated model as a REST API with a /predict-csv endpoint for batch scoring.

Evaluation Approach

For an imbalanced problem, accuracy is misleading — so the model is evaluated on metrics that reflect real fraud-catching performance:

PR-AUC (primary)ROC-AUCPrecisionRecallF1 ScoreConfusion Matrix

Threshold tuning balances catching fraud (recall) against false alarms (precision) at the chosen operating point.

Saved Model Artifacts

  • xgb_fraud_model_raw.joblib — trained XGBoost model
  • platt_calibrator.joblib — Platt-scaling calibrator
  • threshold.json — optimized decision threshold
  • feature_columns.json — feature schema for inference
API · batch scoring
# predict on a CSV of transactions POST /predict-csv # multipart/form-data: file=@creditcard_clean.csv

Built for accuracy, calibration, and real-world reliability.

Explore the full notebook, model, and API on GitHub.