Spaces:
Runtime error
Runtime error
| title: MuleGuard | |
| emoji: π‘οΈ | |
| colorFrom: blue | |
| colorTo: green | |
| sdk: docker | |
| app_port: 7860 | |
| pinned: true | |
| license: mit | |
| short_description: Real-time AI/ML detection of suspicious mule accounts | |
| # MuleGuard β AI/ML Detection of Suspicious Mule Accounts | |
| > **BOI Hackathon Β· Problem Statement 2** β *AI/ML-Based Classification of Suspicious Mule Accounts* | |
| > | |
| > An end-to-end system that ingests account/transaction features, scores every account for mule-risk in real time, explains every alert, and streams alerts to a fraud-analyst console β directly targeting the circulation of fraudulent proceeds through mule accounts. | |
| --- | |
| ## 1. Problem | |
| Banks face growing cyber-enabled fraud where **mule accounts** receive, transfer, and conceal fraudulent funds across channels. Rule-based monitoring misses evolving patterns. We must **learn behavioral & transactional patterns** from the provided data to **classify suspicious/mule accounts**, with anomaly detection, predictive risk scoring, and intelligent alerts. | |
| **Dataset:** `data/DataSet.csv` β **9,082 accounts Γ 3,924 anonymized features** (`F1`β`F3924`). **Target = `F3924`**. Severe imbalance: **9,001 legit (0) vs 81 mule (1) β 0.89% positive**. 18 features flagged by the bank as high-signal. | |
| ## 2. Our Solution β "MuleGuard" | |
| A supervised **gradient-boosted classifier fused with an unsupervised anomaly score**, wrapped in a real-time scoring service, a live feed simulator, and an analyst dashboard: | |
| ``` | |
| DataSet.csv ββΆ Feature Pipeline ββΆ Model + Calibrator + SHAP ββ | |
| βββΆ artifacts/ | |
| Feed Simulator β(streams accounts/tickets)ββΆ FastAPI /score ββββ | |
| β risk 0-100, tier, reason codes, alert | |
| βΌ | |
| Streamlit Analyst Console | |
| ``` | |
| **Why this wins:** proven imbalanced-tabular method + novelty detection (catches *evolving* fraud) + full explainability (auditable alerts) + a working real-time demo that maps to the regulatory-feed vision. | |
| ## 3. Architecture & Engineering Approach | |
| - **Anti-leakage discipline** β all transforms fit inside CV folds / train only. | |
| - **Honest metrics** β PR-AUC, ROC-AUC, recall@precision, F2 (never accuracy). | |
| - **Repeated stratified CV** β robust estimates despite only 81 positives. | |
| - **Threshold tuning + probability calibration** β meaningful 0β100 risk scores. | |
| - **SHAP reason codes** β every alert is explainable. | |
| Built using a custom `.claude/` toolkit (agents + skills) authored **before** implementation β see Β§6. | |
| ## 4. Repository Layout | |
| ``` | |
| .claude/ custom agents + skills (incl. vendored superpowers & get-shit-done) | |
| data/ DataSet.csv (gitignored) | |
| src/data/ load, profile, clean | |
| src/features/ selection + engineering pipeline | |
| src/models/ train, evaluate, calibrate, explain | |
| src/api/ FastAPI scoring service | |
| src/simulator/ real-time feed simulator | |
| dashboard/ Streamlit analyst console | |
| artifacts/ trained model, calibrator, threshold, feature list, SHAP explainer | |
| reports/ data profile, feature selection, model card, figures | |
| docs/ architecture diagrams + spec | |
| deck/ pitch deck (.pptx) | |
| ``` | |
| ## 5. How to Run | |
| ```bash | |
| python3 -m venv .venv && .venv/bin/pip install -r requirements.txt | |
| .venv/bin/python -m src.data.profile # 1. profile data -> reports/data_profile.md | |
| .venv/bin/python -m src.features.build # 2. build features -> artifacts/ | |
| .venv/bin/python -m src.models.train # 3. train + evaluate -> artifacts/, reports/model_report.md | |
| .venv/bin/python -m src.models.explain # 4. SHAP explainability -> artifacts/, reports/figures/ | |
| .venv/bin/uvicorn src.api.main:app --port 8000 # 5. scoring API | |
| .venv/bin/python -m src.simulator.feed # 6. stream live alerts | |
| .venv/bin/streamlit run dashboard/app.py # 7. analyst console | |
| ``` | |
| ## 6. Custom `.claude/` Toolkit (built first, then used) | |
| **Agents** (`.claude/agents/`): `data-profiler`, `feature-engineer`, `ml-trainer`, `explainability-analyst`, `fraud-domain-expert`, `demo-builder`. | |
| **Skills** (`.claude/skills/`): `imbalanced-fraud-classification`, `fraud-feature-engineering` (authored), plus **`superpowers`** and **`get-shit-done`** vendored from GitHub as-is. | |
| --- | |
| ## 7. Progress Tracker | |
| | # | Phase | Status | | |
| |---|-------|--------| | |
| | 0 | Scaffold: structure, venv, deps, `.claude/` agents & skills | β Done | | |
| | 1 | Data profiling (`reports/data_profile.md`) | β Done | | |
| | 2 | Feature selection + engineering pipeline (103 features) | β Done | | |
| | 3 | Model training, CV, calibration, threshold | β Done | | |
| | 4 | SHAP explainability | β Done | | |
| | 5 | FastAPI scoring service | β Done | | |
| | 6 | Real-time feed simulator | β Done | | |
| | 7 | Streamlit analyst dashboard | β Done | | |
| | 8 | Architecture diagrams (`docs/`) | β Done | | |
| | 9 | Pitch deck (`deck/MuleGuard_Pitch.pptx`) | β Done | | |
| ## 8. Results | |
| **Model:** Calibrated LightGBM fused with an Isolation Forest anomaly score Β· **103 features** selected from 3,924. | |
| ### Leakage defense (the rigor that makes the numbers trustworthy) | |
| Two label-leaking features were detected and **removed** β without this, the model "achieved" a meaningless 100%: | |
| - **`F3912`** β a binary fraud-flag aligned ~perfectly with the label (single-feature AUC **0.987**). | |
| - **`F2230`** β observation month; all legit accounts in Oct-25, all mules in Sep/Nov/Dec-25 (temporal artifact, AUC **1.000**). | |
| ### Headline metrics | |
| | Metric | Value | | |
| |---|---| | |
| | **Cross-validated PR-AUC** (repeated stratified) | **0.882 Β± 0.071** | | |
| | Cross-validated ROC-AUC | 0.986 Β± 0.012 | | |
| | Held-out test PR-AUC | 0.956 | | |
| | Held-out test **recall** | **0.81** (caught 13/16 mules) | | |
| | Held-out test **precision** | **0.87** (only 2 false positives in 1,801 legit) | | |
| | Test F2 | 0.82 | | |
| | Alert rate | **0.8%** of accounts | | |
| | Logistic baseline PR-AUC (sanity) | 0.389 β the large gap proves genuine non-linear signal, **not** leakage | | |
| **Why this is a strong result:** 81% of mules caught at an **0.8% alert rate** is a queue a real fraud team can work. The fused anomaly score was selected in **every** CV fold, addressing the "evolving fraud patterns" requirement. Every alert ships with SHAP reason codes. | |
| See `reports/model_report.md` (model card), `reports/feature_selection.md`, and `reports/data_profile.md` for full detail. | |
| --- | |
| *Generated for the BOI Hackathon. Model decisions are explainable and auditable; capabilities demonstrated on the provided dataset, with a clear productionization roadmap to live regulatory/cross-channel feeds.* | |