Zarna0711/Fraudulent_Activity_Detection_in_Healthcare_Insurance_Claims
GitHub: Zarna0711/Fraudulent_Activity_Detection_in_Healthcare_Insurance_Claims
基于 CMS DE-SynPUF 医保住院理赔数据的端到端欺诈检测管线,通过同业标准化特征工程与多模型集成异常检测,为理赔审核生成优先排查清单。
Stars: 0 | Forks: 0
# 医疗保健保险欺诈检测 (v2)
基于 CMS DE-SynPUF 住院理赔数据的理赔级、集成验证欺诈模式检测。
这是对早期规则级 pipeline 的全面重新设计——关于具体更改了什么以及为什么,请参阅下方的“诚实的局限性”部分。完全基于真实的 CMS DE-SynPUF 住院理赔(样本 2)数据进行端到端的构建与运行。
## Pipeline
| 步骤 | 文件 | 描述 |
|---|---|---|
| 0 | `sql/01_preprocessing.sql` | SQL Server 清理:基于 `CLM_ID` 进行过滤(而非 `DESYNPUF_ID`,原 pipeline 中的一个 bug 曾因一行错误数据而静默丢弃了患者整个理赔历史),TRY_CAST 安全的数值处理,更正了支付区间边界 |
| 0b | `data/generate_synthetic_data.py` | 生成一个包含 4 种已知注入欺诈模式的合成理赔数据集,用于在将其应用于真实数据之前验证 pipeline 逻辑 |
| 1 | `scripts/01_feature_engineering.py` | 构建 7 个理赔级、同业标准化特征(DRG 内的支付/LOS z-scores、医疗服务提供者开单速度、医生组合集中度、重复计费) |
| 2 | `scripts/02_association_rules.py` | 在 Python (mlxtend) 中原生挖掘关联规则,基于丰富的 itemset(DRG、诊断、程序、支付/LOS 区间、医生组合)——用于描述性/探索性分析,不输入到异常模型中 |
| 3 | `scripts/03_anomaly_detection.py` | 对理赔级特征运行 Isolation Forest、CBLOF、ECOD、OCSVM;添加 `model_agreement_count` 集成评分 |
| 4 | `scripts/04_validation.py` | 针对注入的欺诈标签(仅限合成数据——真实数据没有 ground truth),计算各个模型及集成阈值的 Precision/recall |
| 5 | `scripts/05_eda_visualizations.py` | 图表:理赔金额分布、医生重叠度、模型一致性 |
## 快速开始(合成演示数据,可立即端到端运行)
依赖项:`pandas`、`numpy`、`matplotlib`、`seaborn`、`scikit-learn`、`pyod`、`mlxtend`
```
pip install pandas numpy matplotlib seaborn scikit-learn pyod mlxtend
cd data && python generate_synthetic_data.py && cd ..
cd scripts
python 01_feature_engineering.py
python 02_association_rules.py
python 03_anomaly_detection.py
python 04_validation.py
python 05_eda_visualizations.py
```
## 使用真实数据
1. 针对真实的 SQL Server DE-SynPUF 表运行 `sql/01_preprocessing.sql`
2. 导出步骤 5 中最终的 `SELECT` 结果(右键点击结果网格 → Save
Results As → CSV)到 `data/claims_export.csv`
3. **如果你的 SQL 客户端导出时没有表头,请手动添加表头行**——
SSMS 的“Save Results As”可能会省略表头;脚本所需的表头为:
`DESYNPUF_ID,CLM_ID,PRVDR_NUM,CLM_FROM_DT,CLM_THRU_DT,CLM_PMT_AMT,NCH_PRMRY_PYR_CLM_PD_AMT,AT_PHYSN_NPI,OP_PHYSN_NPI,OT_PHYSN_NPI,CLM_UTLZTN_DAY_CNT,CLM_DRG_CD,ADMTNG_ICD9_DGNS_CD,ICD9_DGNS_CD_1,ICD9_PRCDR_CD_1`
4. 运行 `scripts/01`–`03`、`05`。跳过 `04_validation.py`(没有真实标签)。
## 真实数据上的结果(65,807 条清洗后的理赔)
- **32 条关联规则**被挖掘出,例如诊断代码 V5789(骨科后续护理)→ 10 天以上的住院,lift 为 4.8——这是一个真实的、临床合理的模式,而不是医生身份造成的假象
- **1,421 条理赔**被所有 4 个模型标记为异常;**2,393 条理赔**在 ≥3/4 一致性阈值下被标记——这是当前用于工作指导的转诊清单
- 单独验证的最强案例:相对于 DRG 同业的极端支付异常值(z-scores 为 7-11),以及单一计费关系占某医生 100% 理赔量的医生组合(`physician_pair_concentration = 1.0`)
## 关键结果(合成数据验证,优先执行以检验该方法)
在 ≥3/4 模型一致性下针对注入的欺诈模式:Precision 为 57%,Recall 为 81%。各模式 Recall:开单速度、重复计费和 upcoding 均为 100%;医生自荐团伙仅为 45%——这是一个已知且有记录的弱点,并未隐瞒。
## 诚实的局限性
- DE-SynPUF 没有真实的欺诈标签——被标记的理赔是一份**优先转诊清单**,而非欺诈判定
- `CLM_DRG_CD = '000'`/未分配的理赔会扭曲同业群体支付 z-scores(因为它们是与大部分金额为 $0 的“同业群体”进行比较,而这并非真实的 DRG)——这是在审查真实数据时发现的,尚未在特征提取脚本中将其排除;请谨慎对待任何被标记的 DRG-000 理赔的 z-score
- 医生团伙检测需要基于图的特征来提高 recall(目前在合成验证中为 45%)
- 合成验证检查的是 pipeline 的*运作机制*,而非真实世界中的泛化能力——真实的欺诈可能比注入的模式更为隐蔽
标签:Apex, SQL预处理, 医疗保健, 医疗保险, 异常检测, 数据科学, 机器学习, 欺诈检测, 资源验证, 逆向工具