悠悠楠杉
使用Bootstrap方法评估模型校准度的完整指南
一、什么是模型校准度?
模型校准度(Calibration)反映预测概率与实际发生概率的一致性。例如,当模型预测某事件概率为70%时,若实际发生频率确实接近70%,则说明模型校准良好。在医疗诊断、金融风控等领域,校准度差的模型可能导致严重决策错误。
二、为什么选择Bootstrap方法?
传统评估方法(如Hosmer-Lemeshow检验)存在分组主观、小样本失效等问题。Bootstrap通过有放回重抽样构建多个数据集,能够:
- 估计校准曲线的置信区间
- 不依赖正态分布假设
- 适用于小样本场景
三、Bootstrap评估校准度全流程
步骤1:准备基础数据
假设已有包含预测概率y_pred
和真实标签y_true
的数据集:
python
import numpy as np
y_true = np.array([0, 1, 0, 1, 1, 0])
y_pred = np.array([0.2, 0.7, 0.3, 0.8, 0.6, 0.1])
步骤2:定义校准度指标
常用指标包括:
- Brier Score:均方预测误差
python
def brier_score(y_true, y_pred):
return np.mean((y_true - y_pred)**2)
- 校准斜率:通过逻辑回归拟合logit(y_pred) ~ y_true
步骤3:执行Bootstrap抽样
python
nbootstraps = 1000
bootstrapscores = []
for _ in range(nbootstraps):
# 有放回抽样
indices = np.random.choice(len(ytrue), len(ytrue), replace=True)
score = brierscore(ytrue[indices], ypred[indices])
bootstrap_scores.append(score)
步骤4:计算置信区间
取2.5%和97.5%分位数作为95%置信区间:
python
ci_lower = np.percentile(bootstrap_scores, 2.5)
ci_upper = np.percentile(bootstrap_scores, 97.5)
步骤5:可视化结果
使用Seaborn绘制Bootstrap分布:
python
import seaborn as sns
sns.histplot(bootstrap_scores, kde=True)
plt.axvline(ci_lower, color='red')
plt.axvline(ci_upper, color='red')
四、实际应用中的注意事项
- 样本量要求:建议至少500次Bootstrap迭代
- 类别不平衡:需采用分层抽样(Stratified Bootstrap)
- 计算效率:对于大数据集,可考虑并行化计算
- 多指标验证:建议同时检查Brier Score和ECE(Expected Calibration Error)
五、对比传统方法的优势
| 方法 | 优点 | 缺点 |
|-----------------|--------------------------|--------------------------|
| Bootstrap | 无分布假设,小样本适用 | 计算成本较高 |
| Hosmer-Lemeshow | 解释性强 | 分组策略影响结果 |
| 可靠性图 | 可视化直观 | 无法量化不确定性 |
六、案例:信用评分模型校准验证
某银行使用随机森林预测违约概率,Bootstrap分析发现:
- 原始Brier Score: 0.12
- 95%置信区间: [0.09, 0.15]
- 校准斜率: 0.85(理想值为1)
结果表明模型存在轻微欠校准,需通过Platt Scaling进行调整。
延伸思考:Bootstrap方法本质是通过数据扰动模拟抽样分布,这种思想也可应用于其他模型评估场景,如特征重要性验证、超参数稳定性测试等。关键在于理解其核心假设——原始样本能够代表总体分布特征。