3.8 KiB
3.8 KiB
title, type, tags, last_updated
| title | type | tags | last_updated | |||
|---|---|---|---|---|---|---|
| Hosmer-Lemeshow Test | concept |
|
2026-04-25 |
Definition
Hosmer-Lemeshow(HL)检验是一种评估二分类模型预测概率校准程度的拟合优度检验,通过比较预测概率分箱后的观测正例数与期望正例数,判断模型预测与实际结果之间是否存在显著差异。p-value < 0.05 时拒绝原假设(模型校准良好),认为模型存在显著的校准偏差。
Algorithm
- 将样本按预测概率从小到大分箱(默认 10 箱,或自定义 g 组)
- 对每箱计算:
- 观测正例数
O_g = \sum_{i \in \text{group } g} y_i - 期望正例数
E_g = \sum_{i \in \text{group } g} \hat{p}_i - 样本数
n_g
- 观测正例数
- 计算 HL 统计量:
H = \sum_{g=1}^{G} \frac{(O_g - E_g)^2}{E_g (1 - E_g / n_g)}
- 自由度 $df = G - 2$(减去截距和斜率估计参数)
- 与
\chi^2(df)分布比较,p = 1 - F_{H}(H)
Interpretation
from scipy.stats import chi2
def hosmer_lemshow_test(y_true: pd.Series, y_pred: pd.Series, groups: int = 10) -> dict:
data = pd.DataFrame({"y": y_true, "p": y_pred})
data["bucket"] = pd.qcut(data["p"], groups, duplicates="drop")
agg = data.groupby("bucket", observed=True).agg(
n=("y", "count"),
observed=("y", "sum"),
expected=("p", "sum"),
)
hl_stat = (
((agg["observed"] - agg["expected"])**2) /
(agg["expected"] * (1 - agg["expected"] / agg["n"]))
).sum()
dof = len(agg) - 2
p_value = 1 - chi2.cdf(hl_stat, dof)
return {
"HL_statistic": round(hl_stat, 4),
"p_value": round(p_value, 6),
"calibrated": p_value >= 0.05, # True = well calibrated
"dof": dof,
"groups_used": len(agg),
}
| p-value | 判读 |
|---|---|
| ≥ 0.05 | 🟢 模型校准良好,无显著证据表明预测概率偏离实际频率 |
| < 0.05 | 🔴 拒绝原假设,模型存在显著校准偏差 |
Limitations
- 分组方式敏感:不同分箱数量/方法导致不同结果,10 等分是惯例但非最优
- 样本量敏感:大样本下即使微小偏差也能导致显著 p-value(实际影响可能很小)
- 掩盖子群体问题:整体通过 HL 检验不等于所有子群体都校准良好
- 序贯分组问题:qcut 在重复值多时可能合并箱子,需检查
groups_used
Alternatives
- Brier Score:无需分组,对样本量稳健,但只能给出误差量级而非定位
- Spiegelhalter's Z-test:基于 Brier Score 的统计检验
- Reliability Curves:可视化诊断,比 HL 检验提供更多信息
- Expected Calibration Error (ECE):量化平均校准误差,解释性更强
Model QA 中的应用
Model QA Specialist 将 HL 检验用于:
- 模型上线前验证:新模型上线必须通过 HL 检验(p ≥ 0.05)
- 定期监控:在 OOT 窗口上重复执行,监控校准随时间恶化趋势
- 子群体分层测试:在关键子群体(高风险/低风险/新客户)上分别执行
- Champion-Challenger:对比 champion model vs challenger model 的 HL 结果
Relationship
- 被依赖 Calibration-Testing:HL 检验是 Calibration Testing 的核心统计工具之一
- 依赖 Discrimination-Metrics:先确认模型有区分能力(AUC/Gini 达标),再讨论校准
- 依赖 Population-Stability-Index:PSI 漂移往往是 HL 检验失败的前兆
- 依赖 SHAP:HL 检验发现校准问题后,用 SHAP waterfall 诊断具体原因
- 支撑 specialized-model-qa(Source):Model QA Specialist 校准测试步骤的核心工具