📐 McNemar检验 — 公式与原理
McNemar检验用于比较两个分类器在相同测试集上的性能差异是否具有统计显著性。它基于两个模型分类不一致的样本计数(b和c),检验它们是否对称。
核心检验统计量(连续性校正)
\( \chi^2 = \frac{(|b - c| - 1)^2}{b + c} \)\( c = \#(A\text{错误}, B\text{正确}) \)
\( H_1: p_b \neq p_c \)
📖 公式参数说明
🎛️ 交互模拟实验室
调整不一致样本数 b 和 c,或设置总样本量 N,系统将实时计算McNemar统计量、p值并可视化检验结果。
N = a + b + c + d,且必须满足 b + c ≤ N。
💡 深入理解McNemar检验
从多个维度理解这一经典统计检验方法的价值与局限。
McNemar检验(McNemar's test)由统计学家Quinn McNemar于1947年提出,是一种用于配对名义数据的非参数检验,特别适用于比较两个分类器在相同测试集上的性能。其核心是构建一个2×2列联表,表中记录两个模型均正确(a)、均错误(d)、以及不一致(b和c)的样本数量。检验统计量基于不一致计数b和c的差异,在原假设(两个模型的错误率相同)下,b和c应服从对称的二项分布,检验统计量近似服从自由度为1的卡方分布。当b+c较小时,通常应用连续性校正,即公式中使用(|b-c|-1)²。
想象两位医生给同一批病人看病,我们关心他们诊断的差异。记录下两人都诊断对的、都诊断错的,以及一人对一人错的情况。如果两位医生水平差不多,那么“甲对乙错”和“甲错乙对”的人数应该差不多。McNemar检验就是看这两种“不一致”的人数差异是否大到不太可能是偶然。如果差异很大,就说两位医生的诊断能力有显著区别。在机器学习里,就是把医生换成两个模型,病人换成测试样本。
在比较两个分类器时,单纯比较准确率差异可能具有误导性,因为:
- 样本重叠:两个模型在相同测试集上评估,误差之间存在相关性,独立样本检验不适用;
- 只关注不一致:两个模型都正确或都错误的样本对区分模型优劣没有贡献,McNemar检验聚焦于不一致样本,更高效;
- 小样本稳健性:相比其他检验,McNemar检验在样本量较小时仍能提供合理的推断(配合连续性校正或精确二项检验);
- 配对设计:适用于任何配对比较场景,如两种算法在同一批交叉验证折上的表现。
在机器学习模型评估中,McNemar检验的重要性体现在:
- 简洁高效:只需要两个分类器在相同测试集上的预测结果即可计算,无需重新训练或额外数据;
- 广泛适用:适用于二分类和多分类问题的性能比较(通过一致性/不一致性定义);
- 学术标准:许多论文和竞赛(如Kaggle)使用McNemar检验来验证模型改进是否显著;
- 与交叉验证结合:可应用于每一折的配对结果,或汇总为多个2×2表进行组合检验。
McNemar检验在以下场景中经常使用:
- 模型对比:比较两个分类器在相同测试集上的错误率是否有显著差异;
- 特征选择:检验添加或删除某个特征后,模型预测不一致的样本是否显著增多;
- 医学诊断:比较两种诊断方法对同一组患者的阳性/阴性判断一致性;
- A/B测试:在推荐系统中比较两种策略在相同用户群体上的表现差异;
- 文本分类:评估两种预处理方法对分类结果的影响。
尽管McNemar检验简单实用,但也存在一些局限性:
- 仅关注不一致样本:忽略了两个模型均正确或均错误的样本,可能损失部分信息;
- 不适用于独立样本:要求两个模型在完全相同的样本上进行评估;
- 渐近近似偏差:当b+c较小(通常<25)时,卡方近似不够准确,需要使用精确二项检验;
- 无法评估效应量:只回答“是否有差异”,但不提供差异大小的置信区间;
- 多重比较问题:当同时比较多个模型时,需要进行校正(如Bonferroni);
- 对不平衡数据敏感:如果测试集中某一类占绝对多数,不一致样本可能极少,检验功效降低。