评分函数基础:准确率、精确率、召回率、F1-score

做分类模型,避不开这四个指标。说实话,我刚开始做模型评估时,也犯过只看准确率的错误。今天咱们把这四个指标掰开揉碎讲清楚。你想想看,一个模型好不好,不能光凭感觉,得用数字说话。

准确率——最直观,也最容易骗人

准确率是什么?就是预测对的样本数,除以总样本数。

Accuracy = (TP + TN) / (TP + TN + FP + FN)

但这里有个大坑。我个人的经验,在类别极度不平衡时,准确率就是个数字游戏。举个例子,欺诈检测里,99% 都是正常交易。模型全部预测为「正常」,准确率也是 99%。你说这模型有用吗?半点用没有。

注意:类别严重不平衡时,千万别只看准确率。我曾经在一个信贷评估项目里,就被准确率骗过,还好上线前做了二次验证。

精确率 vs 召回率——一对跷跷板

这两个指标,说白了就是个权衡问题。精确率关注的是「找得准不准」,召回率关注的是「找得全不全」。

Precision = TP / (TP + FP)   # 你预测为正例的那些里,有多少是真的正例
Recall    = TP / (TP + FN)   # 真正的正例里,你找出来了多少

我之前在信贷风控项目里就吃过这个亏。精确率做得太高,结果把很多能通过的人给拒了;召回率拉上去,又放进来一堆坏账。两者的取舍,完全取决于业务场景。我给你列个对照表,你一看就明白。

业务场景 优先指标 为什么
医疗诊断(癌症筛查) 召回率 漏掉一个病人,代价太大了
垃圾邮件过滤 精确率 把正常邮件误判成垃圾,用户体验极差
欺诈检测 召回率 放过一笔欺诈,损失可能很大
商品推荐 精确率 推一堆用户不感兴趣的,反而影响留存
我的习惯:如果业务方说不清楚优先哪个,我会建议先按 F1-score 调优,再根据线上反馈微调。

F1-score——调和平均,兼顾两个指标

F1-score 是精确率和召回率的调和平均数。为什么要调和而不是直接平均?因为直接平均会让一个高一个低的情况看起来很美好,但调和平均不会。只有两者都高,F1-score 才会高。

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

记得我在做文本分类项目时,发现模型精确率 0.95,召回率只有 0.45。直接平均(0.70)看着还行,但 F1-score 只有 0.61。这就是真实水平。嗯,这个小坑,希望能帮你拔掉。

怎么选?看场景

  • 做报告、做基线:用 F1-score,它不偏不倚
  • 业务有明确代价:定义自己的加权指标,比如加权重召回率
  • 多分类任务:用宏平均(Macro F1)或微平均(Micro F1),取决于类别是否均衡
  • 极度不平衡:考虑用 AUC、PR 曲线,或者干脆用 Precision@K / Recall@K

动手算一下——Python 代码示例

光说不练假把式,我给你准备了一段代码。在我自己的项目中,这段代码几乎是每个模型的标配函数。

from sklearn.metrics import accuracy_score, precision_score
from sklearn.metrics import recall_score, f1_score

y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 0, 1, 0, 1, 1, 0, 1, 0]

acc = accuracy_score(y_true, y_pred)
prec = precision_score(y_true, y_pred)
rec = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

print(f"准确率: {acc:.3f}")
print(f"精确率: {prec:.3f}")
print(f"召回率: {rec:.3f}")
print(f"F1-score: {f1:.3f}")
# 输出结果
准确率: 0.800
精确率: 0.833
召回率: 0.833
F1-score: 0.833

看到没?数字不会骗人,但会误导人。只有你理解了每个指标的含义,才能做出正确的判断。

补充一张结构图,帮你理清关系

下面这张图展示了四个指标和混淆矩阵之间的关联。箭头方向代表计算路径。

评分函数知识体系与关系图 混淆矩阵 TP、FP、FN、TN 模型预测与真实 对照表 准确率 所有预测对的比例 精确率 预测为正的准确性 召回率 找到所有正例的能力 F1-score 精确率与召回率的 调和平均 适用场景总结 不平衡数据 → 别用准确率 明确代价 → 精/召择其一 一般情况 → 看 F1-score
核心总结:准确率只适合完美平衡的数据;精确率和召回率是一对冤家,选哪个看业务有多「怕犯错」;F1-score 是万能钥匙,但也不是银弹。理解这些,你就能对模型的表现,心里有个谱了。