--- title: Fraud Detection MLOps API emoji: 🚨 colorFrom: blue colorTo: green sdk: docker app_port: 8000 --- # Fraud Detection MLOps Pipeline Production-style end-to-end fraud detection system with training, experiment tracking, API serving, containerization, CI/CD, and runtime monitoring. ## Highlights - End-to-end ML lifecycle: data validation -> preprocessing -> training -> threshold tuning -> API inference. - Imbalanced classification handling with recall-first model ranking. - MLflow experiment tracking and artifact logging. - FastAPI inference service with single/batch prediction endpoints. - Dockerized deployment with health checks and non-root runtime. - CI/CD with automated tests, coverage gates, image build, and HF deployment sync. - Runtime observability via request IDs, structured logs, and `/metrics`. ## Live Deployment - Hugging Face Space: `https://thasvithu-fraud-detection-mlops-api.hf.space` - API Docs: `https://thasvithu-fraud-detection-mlops-api.hf.space/docs` ## Architecture ```mermaid flowchart LR A[Raw Data
data/raw/creditcard.csv] --> B[Data Validation
src/data_ingestion.py] B --> C[Preprocessing
src/preprocessing.py] C --> D[Model Training
src/train.py] D --> E[Evaluation + Threshold Tuning
src/evaluate.py] E --> F[Artifacts
models/*.pkl
artifacts/*.json] F --> G[Inference Service
api/service.py] G --> H[FastAPI App
api/app.py] H --> I["/predict"] H --> J["/predict/batch"] H --> K["/health"] H --> L["/metrics"] ``` ## ML Training Workflow ```mermaid flowchart TD T1[Load Config
configs/train.yaml] --> T2[Validate Dataset] T2 --> T3[Split + Scale + Imbalance Handling] T3 --> T4[Train Candidate Models] T4 --> T5[Compute Metrics] T5 --> T6[Log Runs to MLflow] T6 --> T7[Rank by recall -> precision -> roc_auc] T7 --> T8[Select Best Model] T8 --> T9[Threshold Sweep + Selection] T9 --> T10[Save model + preprocessor + reports] ``` ## Inference Request Flow ```mermaid sequenceDiagram autonumber participant Client participant API as FastAPI participant Svc as InferenceService participant Art as Artifacts Client->>API: POST /predict (transaction payload) API->>Svc: load_inference_service() [cached] Svc->>Art: model.pkl + preprocessor.pkl + threshold reports Svc-->>API: prediction + probability + risk level API-->>Client: JSON response (+ request headers) ``` ## CI/CD and Deployment Workflows ```mermaid flowchart LR P[Push / PR] --> C1[ci.yml] C1 --> C2[Test + Coverage Gate] C2 --> C3[Build Docker Image] C3 --> C4[Optional Deploy Webhook] M[Push main] --> H1[deploy-hf-space.yml] H1 --> H2[Snapshot Sync to HF Space] S[Schedule Mon/Wed/Fri] --> K1[keepalive-hf-space.yml] K1 --> K2[Ping /health and /metrics] ``` ## Project Structure ```text fraud-detection-mlops-pipeline/ ├── api/ │ ├── app.py │ ├── schemas.py │ └── service.py ├── src/ │ ├── data_ingestion.py │ ├── preprocessing.py │ ├── train.py │ ├── evaluate.py │ ├── predict.py │ └── register_model.py ├── configs/ │ ├── train.yaml │ └── logging.yaml ├── data/ │ ├── raw/ │ └── processed/ ├── models/ ├── artifacts/ ├── tests/ ├── .github/workflows/ │ ├── ci.yml │ ├── deploy-hf-space.yml │ └── keepalive-hf-space.yml ├── Dockerfile ├── docker-compose.yml ├── requirements.txt └── pytest.ini ``` ## Tech Stack - Python 3.11 - Pandas, NumPy, scikit-learn, imbalanced-learn, XGBoost - MLflow - FastAPI + Pydantic - Docker + Docker Compose - GitHub Actions - Hugging Face Spaces (Docker SDK) ## API Endpoints - `GET /health`: Service and model readiness - `GET /metrics`: Runtime operational counters - `POST /predict`: Single transaction prediction - `POST /predict/batch`: Batch transaction predictions - `GET /docs`: Swagger UI ### Example: Single Prediction ```bash BASE="https://thasvithu-fraud-detection-mlops-api.hf.space" curl -X POST "$BASE/predict" \ -H "Content-Type: application/json" \ -d '{ "Time": 0, "Amount": 149.62, "V1": -1.359807, "V2": -0.072781, "V3": 2.536347, "V4": 1.378155, "V5": -0.338321, "V6": 0.462388, "V7": 0.239599, "V8": 0.098698, "V9": 0.363787, "V10": 0.090794, "V11": -0.551600, "V12": -0.617801, "V13": -0.991390, "V14": -0.311169, "V15": 1.468177, "V16": -0.470401, "V17": 0.207971, "V18": 0.025791, "V19": 0.403993, "V20": 0.251412, "V21": -0.018307, "V22": 0.277838, "V23": -0.110474, "V24": 0.066928, "V25": 0.128539, "V26": -0.189115, "V27": 0.133558, "V28": -0.021053 }' ``` ## Local Setup ### Prerequisites - Python 3.11+ - `uv` - Docker (optional, for container run) ### Install ```bash uv pip install -r requirements.txt ``` ### Train ```bash uv run python -m src.train ``` ### Test ```bash uv run pytest ``` ### Run API ```bash uv run uvicorn api.app:app --reload --host 0.0.0.0 --port 8000 ``` ## Docker Usage ### Build ```bash docker build -t fraud-detection-api:latest . ``` ### Run ```bash docker run --rm -p 8000:8000 fraud-detection-api:latest ``` ### Compose ```bash docker compose up --build ``` ## Quality Gates - Test coverage enforced via `pytest.ini` - Minimum coverage: `>= 80%` across `src` + `api` - Current status: passing (see GitHub Actions) ## Monitoring and Operations Runtime metrics exposed by `/metrics`: - `total_requests` - `error_count` - `error_rate` - `total_predictions` - `fraud_predictions` - `fraud_prediction_rate` - `avg_latency_ms` Request-level observability: - `X-Request-ID` - `X-Process-Time-Ms` - Structured JSON logs for request and prediction events ## GitHub Actions Workflows - `ci.yml`: test + coverage + image build (+ optional webhook deploy) - `deploy-hf-space.yml`: sync `main` to Hugging Face Space - `keepalive-hf-space.yml`: scheduled pings to reduce Space inactivity sleep ## Required GitHub Secrets For Hugging Face deploy: - `HF_TOKEN` - `HF_SPACE_REPO` (format: `username/space-name`) For HF keepalive: - `HF_SPACE_URL` Optional webhook deploy: - `DEPLOY_WEBHOOK_URL` ## Milestone Status All planned phases (0-9) are complete: - Foundation - Data validation - Preprocessing - Training + MLflow tracking - Evaluation + threshold tuning - FastAPI inference service - Testing + quality gates - Containerization - CI/CD automation - Monitoring and operations ## License MIT (see `LICENSE`)