ArturMelnyk-analyst/Healthcare-Data-Cleaning
GitHub: ArturMelnyk-analyst/Healthcare-Data-Cleaning
端到端的医疗保险索赔数据清洗项目,专为欺诈检测建模构建干净、结构化且经过完整性验证的数据基础。
Stars: 0 | Forks: 1
🩺 医疗保险欺诈检测 – 数据清洗项目
作者:Artur Melnyk
数据集:Kaggle - Medicare Provider Fraud Detection
📌 项目概述
本项目致力于为检测 Medicare 医疗索赔中的欺诈行为构建一个干净且结构合理的数据基础。主要工作包括:
• 清洗和标准化八个相互关联的原始数据集
• 确保索赔和受益人记录之间的引用完整性
• 实施能够保持训练数据规模的异常值处理
• 执行类型转换、缺失值填充和特征工程
• 为下游的建模或探索性分析准备数据
📁 使用的数据集
处理了以下原始 CSV 数据集:
• Train 和 Test 主表
• Train_Beneficiary 和 Test_Beneficiary
• Train_Inpatient 和 Test_Inpatient
• Train_Outpatient 和 Test_Outpatient
🔧 核心清洗操作
✅ 缺失值处理
• 日期解析为 datetime 类型,并强制转换错误值
• 数值字段使用中位数进行填充
• 分类字段使用众数进行填充
• 保留稀疏但相关的列以维持模式对齐
✅ 异常值处理
最初的 IQR 过滤导致了大量的行丢失。该问题已通过缩尾处理得到修正,该方法在限制极端值的同时,保持了完整的数据集规模。
python
CopyEdit
def winsorize_column(series):
Q1 = series.quantile(0.25)
Q3 = series.quantile(0.75)
IQR = Q3 - Q1
return series.clip(Q1 - 1.5 * IQR, Q3 + 1.5 * IQR)
✅ 数据类型转换
• 日期:pd.to_datetime(..., errors='coerce')
• 分类:使用 .astype('category') 以提高内存效率
✅ 特征工程
• AgeAtDeathOrLastClaim:根据 DOB 和 DOD 字段派生
🔍 数据完整性与结构检查
• 确认了 BeneID 在所有索赔和受益人文件中的一致性
• 验证了训练集/测试集的模式一致性(PotentialFraud 目标变量除外)
• 执行了 .info() 和 .isnull().sum() 以进行结构验证
📈 关系图展示了数据集之间是如何通过 BeneID 连接的。
⚠️ 面临的挑战
• 在最初的异常值过滤期间,进行了过度激进的行删除
• 为了模式的稳定性,保留了极度稀疏的字段(例如 ClmProcedureCode_6)
• 在清洗的同时保留了行数,以用于真实的模型训练
✅ 最终输出
• 经过清洗、验证和对齐的数据集,具有 0 个不匹配的 BeneID
• 可直接用于建模、可视化和统计分析
📌 下一步建议
• 对分类变量应用标签编码或独热编码
• 分析并可能删除非常稀疏的列
• 构造提供者级别的聚合特征(例如索赔数量)
• 探索针对 PotentialFraud 的类别不平衡处理方法
⚠️ 下游 AI Agent 导出
在 `notebooks/clean_data.ipynb` 中生成的清洗后数据集可以作为 Parquet 文件在本地导出,供关联的 Healthcare AI Agent 项目下游使用。
本代码库仍是上游的医疗数据清洗流水线。下游的 AI Agent 项目将使用清洗并验证后的 Parquet 输出,而不是重复原始 CSV 的清洗过程。
原始和处理后的数据集已有意从 GitHub 中排除。要在本地重新生成 Parquet 文件:
1. 将原始的 Kaggle CSV 数据集放入 `data/raw/` 目录中
2. 运行 `load_data.ipynb`
3. 运行 `clean_data.ipynb`
📊 **演示文稿:**
在[此处(PDF)](docs/Healthcare_Data_Cleaning_Presentation.pdf)查看摘要演示文稿
标签:Apex, Kaggle, Medicare, NoSQL, Python, 健康医疗, 医疗保险, 医疗保险索赔, 医疗欺诈检测, 异常值处理, 探索性数据分析, 数据完整性验证, 数据清洗, 数据科学, 数据预处理, 无后门, 机器学习, 特征工程, 监督学习, 缩尾处理, 缺失值插补, 资源验证, 逆向工具