--- title: "Calibration Testing" type: concept tags: [model-evaluation, probability-calibration, model-quality] last_updated: 2026-04-25 --- ## Definition 概率校准(Calibration Testing)验证模型输出的预测概率与实际发生的频率是否一致。一个校准良好的分类器:若它预测某事件概率为 80%,则该事件实际发生的频率应接近 80%。 ## Core Methods ### Hosmer-Lemeshow Test - 将预测概率分组(默认10组),比较每组观测正例数与期望正例数 - 统计量:$\chi^2 = \sum \frac{(observed - expected)^2}{expected(1 - expected/n)}$ - 自由度:组数 - 2;p-value < 0.05 → 拒绝原假设(校准差) - **局限性**:对样本量敏感,分组方式不同结果不同 ### Brier Score - $BS = \frac{1}{N}\sum(p_i - y_i)^2$,取值 [0, 0.25](二分类) - 同时衡量校准(calibration)和区分度(refinement) - 值越低越好,可分解为:$BS = Calibration^2 + Refinement$ - **优势**:无需分组,对样本量稳健,可跨模型比较 ### Reliability Diagram(可靠性图) - 将预测概率分箱(bin),绘制实际正例率 vs 预测概率 - 理想情况为 45° 对角线;S 形曲线表示欠/过度预测 - 视觉诊断工具,适合识别系统性校准偏差 ### Expected Calibration Error (ECE) - 加权平均每箱预测概率与实际频率的绝对差 - $ECE = \sum_b \frac{|b|}{n} |acc(b) - conf(b)|$ - 量化校准误差,便于跨模型对比 ## Usage ```python # Hosmer-Lemeshow from scipy.stats import chi2 def hosmer_lemshow_test(y_true, y_pred, groups=10): 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} # Brier Score from sklearn.metrics import brier_score_loss bs = brier_score_loss(y_true, y_pred) ``` ## Model QA 中的应用 Model QA Specialist 执行以下校准审计: 1. **跨子群体校准**:在年龄/地区/收入等子群体上分别测试,发现整体指标掩盖的局部校准问题 2. **时间窗口稳定性**:跨 OOT(Out-of-Time)窗口测试校准稳定性,识别时间漂移 3. **分布偏移下的校准**:在压力场景(population shift)下测试,评估模型鲁棒性 4. **决策阈值校准**:根据业务决策阈值(如 p > 0.6 触发行动),评估该阈值处的校准质量 ## Relationship - **依赖** [[Discrimination-Metrics]]:先验证模型有区分能力(AUC/Gini),再讨论校准才有意义 - **依赖** [[SHAP]]:SHAP 解释"哪个特征导致校准偏差",支撑诊断方向 - **依赖** [[Population-Stability-Index]]:PSI 捕捉特征分布漂移,漂移是校准失效的根本原因之一 - **支撑** [[specialized-model-qa]](Source):Model QA Specialist 的核心审计步骤之一 ## Key Insights - **High AUC ≠ Well Calibrated**:模型可以高区分度但低校准(如逻辑回归自然校准,神经网络往往过度自信) - **业务影响**:校准误差 180bps(0.18)在 decile 10 可能影响 12% 的资产组合 - **监管要求**:巴塞尔协议/IFRS 9/CCAR 等监管框架明确要求信用风险模型的概率校准