Downloads · 30 days
0
kumarharsh2396/trelegy-copay-fraud-detection
trelegy-copay-fraud-detection is a machine learning model from kumarharsh2396. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
Product: Trelegy Ellipta (GSK) — Fluticasone furoate / Umeclidinium / Vilanterol Method: Hybrid Rules + Isolation Forest + SHAP Explainability Use Case: Detecting copay card fraud in pharmaceutical patient assistance…
Downloads · 30 days
0
Access
Public
Updated Apr 29, 2026
Repo size
3.4 MB
Likes
0
Public
Click a slice to open those files.
.csv9.9 MB · 73%
From the Hugging Face model README
Product: Trelegy Ellipta (GSK) — Fluticasone furoate / Umeclidinium / Vilanterol
Method: Hybrid Rules + Isolation Forest + SHAP Explainability
Use Case: Detecting copay card fraud in pharmaceutical patient assistance programs
This project implements an end-to-end copay fraud detection system for Trelegy Ellipta, GSK's blockbuster triple-combination inhaler (~$8B+ annual revenue). The system uses a hybrid approach combining hard business rules with unsupervised anomaly detection (Isolation Forest) and SHAP-based explainability.
| # | Fraud Type | Description | Detection Method |
|---|---|---|---|
| 1 | Early Refill Abuse | Refilling before 30-day supply runs out (< 23 days) | Rules + IF |
| 2 | Pharmacy Hopping | Filling at multiple pharmacies to stack copay cards | IF (behavioral) |
| 3 | Ghost Fills | Pharmacy bills but doesn't dispense the inhaler | IF (pharmacy patterns) |
| 4 | Prescriber Collusion | Single prescriber generating abnormal volume; wrong specialty | Rules + IF |
| 5 | Strength-Switch | Alternating between NDCs (100/62.5/25 ↔ 200/62.5/25) without clinical reason | Rules + IF |
| 6 | Government Insurance Abuse | Medicare/Medicaid patient using copay card (violates program terms) | Rules |
Raw Copay Claims
│
▼
┌─────────────────┐
│ Phase 1: Rules │ ← 10 Trelegy-specific hard rules
│ (Hard Flags) │ (early refill, impossible qty, govt insurance, etc.)
└────────┬────────┘
▼
┌─────────────────┐
│ Phase 2: IF │ ← Isolation Forest trained on rule-clean data
│ (Anomaly Detect)│ (catches unknown/novel fraud patterns)
└────────┬────────┘
▼
┌─────────────────┐
│ Phase 3: Score │ ← Combined priority = 50% IF + 30% rule severity + 20% rule flag
│ (Priority Rank) │ Risk tiers: Low / Medium / High / Critical
└────────┬────────┘
▼
┌─────────────────┐
│ Phase 4: SHAP │ ← TreeExplainer → "Why was this claim flagged?"
│ (Explainability)│ Top features driving each anomaly score
└────────┬────────┘
▼
┌─────────────────┐
│ Phase 5: Eval │ ← AUPRC, AUROC, F1, Precision@K, detection by fraud type
│ (Reporting) │ + 5 publication-quality visualizations
└─────────────────┘
trelegy_copay_fraud/
├── README.md # This file
├── run_all.py # 🚀 Master script — run this
├── generate_synthetic_data.py # Synthetic Trelegy copay claims generator
├── feature_engineering.py # Feature engineering pipeline (48 features)
├── fraud_detection_pipeline.py # Full detection pipeline (rules + IF + SHAP + eval)
├── requirements.txt # Python dependencies
├── data/ # Generated synthetic data
│ ├── trelegy_copay_claims.csv # Main claims dataset
│ ├── patient_master.csv # Patient demographics
│ ├── pharmacy_master.csv # Pharmacy reference
│ └── prescriber_master.csv # Prescriber reference
└── results/ # Pipeline outputs
├── investigation_queue_top500.csv # Top 500 flagged claims for review
├── scored_claims_full.csv # All claims with scores & risk tiers
├── feature_importance_shap.csv # SHAP feature importance ranking
├── metrics.json # Evaluation metrics
├── 01_evaluation_metrics.png # ROC, PR curve, confusion matrix
├── 02_shap_summary.png # SHAP beeswarm plot
├── 03_shap_bar_importance.png # SHAP bar chart
├── 04_detection_by_fraud_type.png # Detection rates by fraud type
├── 05_risk_tier_distribution.png # Risk tier analysis
└── model/
├── isolation_forest_model.pkl # Trained IF model
├── scaler.pkl # StandardScaler
├── encoder.pkl # OrdinalEncoder
└── feature_names.pkl # Feature name list
# 1. Install dependencies
pip install -r requirements.txt
# 2. Run the full pipeline
python run_all.py
This will:
days_between_fills — Days since last fill (normal: 28-33 for Trelegy)early_refill_flag — Binary: fill before day 23days_since_first_fill — Patient tenure in programclaim_month, claim_dow — Seasonalitypatient_fill_count_{7,30,90}d — Fill velocity per patientpatient_copay_spend_{7,30,90}d — Copay card spend per patientpatient_total_claim_{7,30,90}d — Total claim amount per patientpharmacy_claim_count_{30,90}d — Volume per pharmacyprescriber_claim_count_{30,90}d — Volume per prescriberunique_pharmacies_overall — Number of distinct pharmacies usedunique_programs_per_patient — Card stacking indicatortotal_fills_per_patient — Lifetime fill countavg_days_between_fills — Average refill gapstd_days_between_fills — Refill pattern consistencymax_fills_any_30d — Peak fill velocitypharmacy_claims_per_patient_ratio — Ghost fill indicatorprescriber_specialty_valid — Specialty match flagprescriber_total_claims — Volume anomalyndc_switch_flag — Strength switching (0173-0893 ↔ 0173-0887)govt_insurance_flag — Medicare/Medicaid with copay cardcross_state_fill — Patient state ≠ pharmacy statenew_patient_burst — >1 fill in first 7 days of enrollmentPer literature best practices (arXiv:2312.13896, arXiv:2208.11904):
| Attribute | Value |
|---|---|
| Brand | Trelegy Ellipta |
| Manufacturer | GSK (GlaxoSmithKline) |
| Active Ingredients | Fluticasone furoate / Umeclidinium / Vilanterol |
| Indications | COPD (maintenance), Asthma (adults ≥18) |
| NDC (COPD/Asthma) | 0173-0893-14 (100/62.5/25 mcg) |
| NDC (Asthma) | 0173-0887-14 (200/62.5/25 mcg) |
| Days Supply | 30 days (30 blisters, 1 inhalation/day) |
| Retail Price | ~$600-700/month |
This project uses synthetic data only. No real patient, pharmacy, or prescriber data is included. The synthetic data is designed to be realistic for development and testing purposes but does not represent actual GSK copay program transactions.
MIT License