Exp019 · 巨大儿分类模型 Plan_1 — NN + CatBoost Blending 完整探究
实验目标
在原始 Plan_1 代码的基础上,系统修复数据泄露等缺陷,探究串联(Cascade)与并联(Blending)两种架构的性能差异,并在确定最优架构后,通过概率校准和操作点选择进一步降低误诊率(FP),最终完成内部测试与外部验证的完整评估。
数据设置
- 训练集:
dataset_is_Macrosomia.csv,约 1570 例,巨大儿占比 14.2% - 外部验证集:
Val_data_clear.csv,157 例,巨大儿 7 例(4.5%)⚠ 存在分布偏移 - 特征:自动提取全部 19 个(排除 BW / is_Macrosomia),原版手动写死 13 个
- 数据分割:Train 60% / Val 20% / Test 20%(三分割,Val 专用于阈值寻优,Test 全程封存)
原始代码缺陷修复
| 缺陷 | 位置 | 修复方案 |
|---|---|---|
| Optuna 用 y_test 寻优阈值(数据泄露) | Cell 5/8/12 | 改为 Val 集寻优,Test 仅最终报告 |
| Cell 9 增强特征死代码 | Cell 9 | L1 概率作为附加特征拼入 L2 输入 |
| tpr/fpr 与 thresholds 长度不匹配 | Cell 13 | 动态对齐 tpr[:n] / fpr[:n] |
| NN 无 DataLoader / 无早停 | Cell 4 | 加入 DataLoader(batch=64) + 早停(patience=25) |
| 树模型未处理类别不平衡 | 全部树模型 | 加入 scale_pos_weight / class_weights |
架构对比实验
PATH A — 串联 Cascade(已淘汰)
L1 NN(Focal Loss)→ L2 三树(XGB + LGB + CatBoost)
- L1 阈值 t=0.467,L2 阈值 t=0.068,均在 Val 集寻优
- Recall=91.1% | Spec=77.7% | FP=60 | FN=4 | AUC=0.690
- AUC 仅 0.690 根本原因:L1 阴性样本概率被截断在 0.467 以下,L2 输出概率量纲不同,两段拼接后全局排序能力严重受损
PATH B — 并联 Blending(选定)
NN + CatBoost 软概率融合,Optuna 在 Val 集搜索权重和阈值
- NN=0.883 | CatBoost=0.117 | t=0.495
- Recall=93.3% | Spec=78.1% | FP=59 | FN=3 | AUC=0.915
- 单一连续概率尺度,AUC 正常,确定为基准架构
扩展实验:三模型 Blending(加入 RandomForest)
- NN=0.338 | CatBoost=0.493 | RF=0.169 | t=0.396
- AUC 提升至 0.924,Brier Score 0.189→0.142(RF 主要贡献在校准)
- 但 FP 从 59 增至 76,淘汰
RF 的本质贡献是概率校准(Brier 改善),而非分类边界改善;且权重分布发生根本反转(NN 从 88% 降至 34%),说明在当前数据规模下三模型融合概率空间被 RF 稀释。
FP 优化:Isotonic 校准 + 操作点重选
改进 1:Isotonic Regression 概率校准
在 Val 集上拟合保序回归,消除 NN / CatBoost 的过度自信:
- Brier Score:0.189 → 0.081(↓57%)
- 校准后概率更接近真实频率,为操作点重选提供更可靠的概率基础
改进 2:操作点选择
扫描全阈值,绘制 Recall–FP 权衡曲线,关键发现:
校准后概率在 0.202~0.223 区间存在分布空白(无样本),导致 Recall≥90%/85%/Youden 三个准则均落在同一操作点(t=0.202,FP=59)。越过 0.223 才跳至 FP=35(FN=8)。
最终选定:Recall≥80% 最小FP 操作点(t=0.223)
接受漏诊从 3 增至 8(+5),换取误诊从 59 降至 35(↓40.7%)。
最终测试集结果(Plan_1_最终版)
| 指标 | 数值 |
|---|---|
| Sensitivity (Recall) | 82.22% |
| Specificity | 86.99% |
| PPV (Precision) | 50.72% |
| NPV | 96.72% |
| F1 Score | 0.6325 |
| Youden Index | 0.6921 |
| AUC-ROC | 0.902 |
| Brier Score | 0.081 |
| TP / FP / FN / TN | 37 / 35 / 8 / 234 |
外部验证(Bayes 先验调整)
外部验证集阳性率(4.5%)与训练集(14.2%)存在显著分布偏移,需进行 Bayes 先验调整:
p_adj = (LR × π_ext / (1 - π_ext)) / (1 + LR × π_ext / (1 - π_ext))
LR = p / (1 - p) × (1 - π_train) / π_train
| 策略 | FP | FN | Recall | Spec |
|---|---|---|---|---|
| 原始融合直接应用 | 149 | 0 | 100% | 0.7% |
| Isotonic 校准后 | 47 | 0 | 100% | 68.7% |
| Bayes 先验调整(推荐) | 10 | 1 | 85.7% | 93.3% |
Bayes 调整将 FP 从 149 降至 10(↓93%),代价是 FN 从 0 增至 1。调整仅依赖先验概率,不接触外部标签,方法论合规。
特征重要性(CatBoost + RF 综合排名)
| 排名 | 特征 | 说明 |
|---|---|---|
| 1 | FH(宫高) | CatBoost 重要性 36%,远超第二名,两模型一致 |
| 2 | FL(股骨长) | — |
| 3 | AC_baby(胎儿腹围) | — |
| 4 | AC_mom(母亲腹围) | — |
| 5 | GWG(孕期增重) | — |
| 末位 | GDM、CP | 信息已被连续超声指标充分代理 |
部署说明
- App 单条输入场景:使用本地历史巨大儿发生率作为固定先验,内置 Bayes 调整,无需每次输入人群参数
- 模型文件:运行
Plan_1_最终版.ipynb重新生成(不纳入版本管理) - 代码仓库:Hospital-Project
结论
NN + CatBoost Blending + Isotonic 概率校准 + Recall≥80% 操作点为当前最优分类方案。后续与科室商议确认 Recall 目标后,修改 RECALL_FLOOR 一个参数重跑即可。