一、问题诊断
-
负R²问题:
- 单个模型R²为负(XGBoost/LightGBM)表明模型预测结果比简单取目标变量均值更差,可能是:
-
特征与目标变量相关性低
-
模型严重过拟合或欠拟合
-
数据分布异常(如非线性关系、离群值)
-
-
集成模型R²=0.13仍不理想,说明未有效捕捉数据规律。
- 单个模型R²为负(XGBoost/LightGBM)表明模型预测结果比简单取目标变量均值更差,可能是:
-
SHAP特征分析局限性:
- 当前重要特征(HGB/PT等)的SHAP值绝对值较低(最高0.24),可能反映:
-
特征对目标变量的解释力不足
-
非线性关系未被模型充分学习
-
关键特征未被纳入或未被有效组合
-
- 当前重要特征(HGB/PT等)的SHAP值绝对值较低(最高0.24),可能反映:
二、改进方案
1. 数据层面
-
数据量验证:
-
检查样本量(n)与特征数(p)的比例,若n < 10p需优先扩充数据。
- 小样本对策:
-
数据增强:通过SMOTE(分类问题)或添加噪声(回归问题)生成合成样本
-
迁移学习:利用类似任务的预训练模型
-
简化模型:使用岭回归/贝叶斯回归等抗过拟合方法
-
-
-
目标变量优化:
-
检查目标变量分布:若存在偏态,尝试对数变换、Box-Cox变换或分箱处理
-
异常值检测:使用IQR或孤立森林识别离群值,选择截断或Winsorization处理
-
2. 特征工程
-
特征扩展:
-
基于领域知识添加特征:如凝血动态指标(INR变化率)、患者病史组合特征(HGB+PT时序变化)
-
自动生成特征:多项式特征(HGB², PT×TT)、统计特征(滑动窗口均值/方差)
-
-
特征筛选:
-
递归特征消除(RFE)结合交叉验证选择最优子集
-
使用互信息(Mutual Information)或最大信息系数(MIC)评估非线性相关性
-
去除低方差特征(方差阈值<0.01)
-
-
特征解释增强:
-
对SHAP值高的特征(HGB/PT)进行分段处理(如HGB<7g/dL作为二值特征)
-
引入交互项(如HGB×PT)或临床决策规则(如ISTH评分)
-
3. 模型优化
-
单模型调优:
- XGBoost/LightGBM:
param_grid = { 'learning_rate': [0.01, 0.1], 'max_depth': [3, 5], 'subsample': [0.8, 1.0], 'colsample_bytree': [0.7, 0.9], 'reg_alpha': [0, 0.1] # L1正则化 }
- 随机森林:
param_grid = { 'n_estimators': [100, 200], 'max_features': ['sqrt', 0.7], 'min_samples_leaf': [3, 5] }
-
使用贝叶斯优化替代网格搜索提高调参效率
- XGBoost/LightGBM:
-
集成策略升级:
- 异质模型堆叠:
from sklearn.ensemble import StackingRegressor base_models = [('xgb', xgb_model), ('lgbm', lgbm_model), ('svr', SVR(kernel='rbf'))] stack_model = StackingRegressor(estimators=base_models, final_estimator=LinearRegression())
-
动态权重集成:根据验证集表现动态分配模型权重
- 异质模型堆叠:
-
算法扩展:
- 尝试GAMs(广义加性模型)捕捉非线性效应:
from pygam import LinearGAM gam = LinearGAM(s(0) + s(1) + te(2,3)) # 可解释的非线性建模
-
使用AutoML工具(H2O、TPOT)自动探索模型空间
- 尝试GAMs(广义加性模型)捕捉非线性效应:
4. 评估改进
-
验证策略优化:
-
时序数据:使用TimeSeriesSplit避免未来信息泄露
-
分层抽样:确保关键亚组(如不同疾病阶段)在训练/测试集中分布一致
-
-
指标增强:
-
添加临床相关性评估(如预测误差是否在临床允许范围内)
-
使用PICP(预测区间覆盖概率)评估不确定性
-
三、实施优先级
-
紧急项(1-2天):
-
检查数据质量(缺失值/异常值)
-
目标变量变换与特征筛选
-
基础模型超参数调优
-
-
中期项(3-5天):
-
特征工程扩展与交互项生成
-
尝试堆叠集成与GAMs
-
引入AutoML探索新模型
-
-
长期项(1周+):
-
数据采集扩充
-
领域知识驱动的特征设计
-
部署在线学习适应数据分布变化
-
四、验证方案
- AB测试框架:
# 新旧模型对比验证 from scipy import stats old_model_score = [0.12, 0.11, 0.13] # 原模型3次实验R² new_model_score = [0.18, 0.20, 0.19] # 新模型3次实验R² t_stat, p_val = stats.ttest_rel(old_model_score, new_model_score) print(f"P-value: {p_val:.4f}") # 若p<0.05说明改进显著
通过系统性优化数据、特征、模型三要素,预期可将R²提升至0.3+(临床可接受阈值)。建议优先从特征交互项设计和LightGBM深度调参入手,通常能快速获得收益。