课程导览:模型评估三指标与堆叠图

说实话,做模型评估这件事,很多人一开始会掉进一个坑:只看准确率。我在项目中见过不少团队,模型在测试集上准确率 95%,上线后却频繁误报,用户投诉一堆。后来一查,原来是样本极度不平衡——正例只占 1%。这时候光看准确率,跟看笑话差不多。

所以,我们需要更精细的指标。我个人习惯用三指标组合:精确率、召回率、F1 分数。再加上堆叠图把三者的变化直观展示出来,评估就清晰多了。

精准率(Precision)——你猜对了多少?

精确率衡量的是:模型预测为“正类”的样本中,有多少是真正例。说白了,就是「别瞎报」。公式很简单:

Precision = TP / (TP + FP)

TP 是真阳性,FP 是假阳性。值越高,说明模型越「谨慎」——宁可不报,也不错报。

召回率(Recall)——该找的你都找出来了吗?

召回率关心反面:所有真正的正样本中,模型找出了多少。公式:

Recall = TP / (TP + FN)

FN 是假阴性。召回率高,意味着模型「几乎不漏」——但代价可能是虚警变多。嗯,这里要注意:精确率和召回率往往是跷跷板,你压一头,另一头就翘起来。

F1 分数——调和平均,两边都照顾

精确率和召回率打架时,F1 出来和稀泥。它是两者的调和平均数:

F1 = 2 * (Precision * Recall) / (Precision + Recall)

只有两者都高,F1 才高。我曾经在一个医疗影像项目里只用准确率评估,结果错失了很多阳性病例。后来改用 F1 搭配阈值调优,效果好多了。

指标关注点适用场景
精确率预测为正的样本里有多少是真的正垃圾邮件过滤(误判正常邮件代价高)
召回率真正的正样本里找出了多少疾病筛查(漏诊后果严重)
F1 分数精确率和召回率的平衡类别不平衡、需要综合评估

堆叠图——把三个指标叠在一起看

单个指标有局限,那能不能同时看三个?堆叠图就是干这个的。它把精确率、召回率、F1 分数画在同一张图上,通常横轴是某个参数(比如阈值,或者模型复杂度),纵轴是值,三个指标堆叠或重叠显示。一眼就能看出:

  • 哪里精确率跳水了?
  • 召回率什么时候追上精确率?
  • F1 的峰值出现在哪个阈值附近?

你想想看:光看一个 F1 的数值,你不知道它是不是因为精确率过低、召回率过高而凑出来的。堆叠图能暴露这些「虚假繁荣」。我在做信贷风控模型时,就靠堆叠图找到了最佳阈值——既控制了坏账率(精确率),又没漏掉太多优质客户(召回率)。

适用场景

  • 阈值选择:比如分类模型输出概率,你需要决定 0.5 还是 0.3 作为阈值。堆叠图帮你看到不同阈值下三个指标的变化。
  • 模型对比:两个模型堆叠图放在一起,哪个更稳定、哪个更激进,一目了然。
  • 调参分析:调整超参数时,堆叠图可以显示三个指标的联动效应。
我曾经踩过的坑:一开始我用的是普通折线图,三条线挤在一起看不清。堆叠图用不同颜色区域填充,视觉上区分度高很多。还有一个坑:别忘了保持纵轴范围一致,否则图形失真。
模型评估三指标与堆叠图知识结构 堆叠图 精确率(Precision) 召回率(Recall) F1 分数 适用场景 阈值选择 模型对比 调参分析 样本不平衡分析 多分类评估 混淆矩阵(TP/FP/FN/TN)
我的个人小技巧:在实际项目中,我通常先用堆叠图观察三个指标随阈值变化的曲线,找到 F1 最高点对应的阈值,然后围绕这个阈值 ±0.1 再做精细搜索。这样做既快又不容易漏掉最佳参数。

这一章其实只是开胃菜。后面我们会用真实的 python 代码和数据集,一步步画出漂亮的堆叠图,并分析出模型真正的弱项。记住一句话:模型好不好,不能光看一个数字,把精确率、召回率、F1 叠在一起看,才是真正的「开卷考试」。