This project provides a production-style machine learning inference API for detecting fraudulent credit card transactions.
The API serves a trained XGBoost fraud detection model via FastAPI, with strict input validation, feature alignment, and safe inference handling.
The goal of this project is to demonstrate how a trained ML model is exposed, validated, and consumed in a real-world system — not just trained.
Credit card fraud detection is a highly imbalanced classification problem, where missing a fraudulent transaction is often more costly than flagging a legitimate one.
In real production systems, models are rarely used directly. They must be:
- Validated
- Properly preprocessed
- Safely deployed behind an API
This project focuses on the serving and inference layer of a fraud detection system.
- FastAPI-based inference service
- XGBoost fraud detection model
- Strict request validation using Pydantic schemas
- Feature name and order alignment with training schema
- Partial preprocessing during inference (Time & Amount scaling)
- Clear error handling with meaningful HTTP responses
- Model metadata endpoint for observability
- JSON-safe prediction outputs
fraud-detection-api/ ├── app/ │ ├── main.py # API endpoints │ ├── schemas.py # Request validation schemas │ ├── inference.py # Model inference logic │ ├── config.py # Centralized configuration │ └── __init__.py ├── models/ │ └── xgboost.pkl ├── artifacts/ │ └── standard_scaler.pkl └── .gitignore ### Health Check : Returns API health status. ### Model Information : Returns model metadata such as: - Model name - Version - Threshold - Number of features ### Fraud Prediction Accepts a full feature vector (Time, Amount, V1–V28) and returns a fraud probability and decision.{ "Time": 50000, "Amount": 120.75, "V1": 0.12, "V2": -0.45, "V3": 0.33, "V4": -0.08, "V5": 0.21, "V6": -0.15, "V7": 0.04, "V8": -0.02, "V9": 0.11, "V10": -0.19, "V11": 0.07, "V12": -0.13, "V13": 0.00, "V14": -0.22, "V15": 0.09, "V16": -0.17, "V17": 0.05, "V18": -0.06, "V19": 0.18, "V20": -0.03, "V21": 0.14, "V22": -0.20, "V23": 0.02, "V24": -0.09, "V25": 0.00, "V26": -0.11, "V27": 0.08, "V28": -0.04 }- The API expects the **same feature schema used during training** to avoid inference drift. - PCA features (V1–V28) are assumed to be computed upstream. - Only Time and Amount are scaled during inference. - Feature order is explicitly enforced before prediction. - Inference logic is separated from API routing and configuration.- Python
- FastAPI
- Pydantic
- XGBoost
- Scikit-learn
- Pandas
Mohamed Saad