← Back to projects

Credit Card Fraud Detection

Zusammenfassung

Ziel
Detect fraudulent credit card transactions in highly imbalanced real-world data
Daten
Real-world credit card transaction dataset with <1% fraud rate. Time-based train/test split (80/20) to prevent temporal leakage. Features include transaction amount, time, merchant category, and derived temporal patterns.
Modell(e)
XGBoost, Random Forest, Neural Networks
Kernmetriken
Precision: 0.95, Recall: 0.87
Werkzeuge
Python, scikit-learn, XGBoost, SMOTE, pandas

Problem

Detecting fraudulent credit card transactions in highly imbalanced real-world data where fraud represents less than 1% of transactions.

Kontext

Credit card fraud detection requires balancing precision and recall under severe class imbalance. False positives create customer friction, while false negatives result in financial loss. The challenge is not just achieving high accuracy, but making the model useful in production where decision thresholds matter.

Modellierungsansatz

I experimented with multiple approaches including Random Forest, XGBoost, and neural networks. The key insight was that traditional accuracy metrics were misleading—with 99%+ accuracy, a naive classifier predicting 'no fraud' would appear successful. I focused on precision-recall curves and F1 scores, using SMOTE for class balancing and feature engineering to capture temporal patterns in transaction sequences.

Technisches Highlight

The most important technical decision was choosing the evaluation framework. Instead of optimizing for accuracy, I designed a cost-sensitive evaluation that weighted false negatives (missed fraud) more heavily than false positives. This led to a different model selection than standard cross-validation would suggest, but one that better matched the business objective.

Ergebnis

The final model achieved a precision of 0.95 and recall of 0.87 on the test set, with a focus on minimizing false negatives. More importantly, the evaluation framework made it clear how to set decision thresholds in production based on the relative costs of different error types.

Zuverlässigkeit

Daten

Real-world credit card transaction dataset with <1% fraud rate. Time-based train/test split (80/20) to prevent temporal leakage. Features include transaction amount, time, merchant category, and derived temporal patterns.

Baselines

Naive classifier (always predict 'no fraud') achieves 99%+ accuracy but 0% recall. Baseline logistic regression achieves precision 0.45, recall 0.62. Random baseline (1% fraud rate) achieves precision 0.01, recall 0.50.

Fehlermodi

Model struggles with novel fraud patterns not seen in training. High false positive rate during holiday seasons when spending patterns change. Performance degrades when transaction volume spikes (e.g., Black Friday). Assumes fraud patterns are relatively stable over time.

Reproduzierbarkeit

Python 3.9+, scikit-learn, XGBoost. Full code and preprocessing pipeline available on GitHub. Data preprocessing steps documented. Random seeds fixed for reproducibility.