2026年4月19日

模型评估指标

评估指标选错了,模型就选错了。不同任务(分类 / 排序 / 回归 / 生成)有不同的指标体系,同一个 Accuracy 在类别不平衡时完全不可信。AUC-ROC 看的是排序能力而不是准确率,LogLoss 衡量的是概率校准质量,MRR 是推...

知识库机器学习machine-learningmetricsevaluation

模型评估指标

先把结论放前面

评估指标选错了,模型就选错了。不同任务(分类 / 排序 / 回归 / 生成)有不同的指标体系,同一个 Accuracy 在类别不平衡时完全不可信。AUC-ROC 看的是排序能力而不是准确率,LogLoss 衡量的是概率校准质量,MRR 是推荐系统里最有工程价值的指标。搞清楚每个指标衡量的是什么,才能判断模型到底好不好。

为什么这个问题值得单独讲

模型评估是机器学习里最容易被低估的环节。大多数面试翻车的点不是"模型太简单",而是"用 Accuracy 评估不平衡数据",或者"在 PR Curve 和 ROC Curve 之间选了错误的那个"。

分类指标

Confusion Matrix 的四个格

                 Predicted
              Positive  Negative
Actual Positive    TP        FN
       Negative    FP        TN

记住:"Predicted" 在列,"Actual" 在行。

Accuracy(准确率)

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

Accuracy 是最容易理解的指标,但在类别不平衡时毫无意义

举例:欺诈检测里 99% 是正常交易,模型把所有交易都预测为正常,Accuracy = 99%。这个模型完全没有用,但 Accuracy 看起来很漂亮。

什么时候用:数据相对平衡(各类别比例接近)的时候。

Precision(查准率)

Precision = TP / (TP + FP)

在预测为 Positive 的样本里,有多少是真的 Positive。

适合场景:宁可漏掉一些正例,也不愿意把不该过滤的东西过滤掉。比如垃圾邮件过滤,宁可漏掉 spam 也不能把重要邮件判为垃圾。

Recall(查全率 / 召回率)

Recall = TP / (TP + FN)

在所有真正的 Positive 里,有多少被找出来了。

适合场景:宁可误报也不漏报。比如癌症筛查,漏掉一个癌症患者的代价远高于给健康人做进一步检查。

F1 Score

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

Precision 和 Recall 的调和平均,在两者之间找平衡。

注意:F1 默认 Precision 和 Recall 权重相同。如果业务上 Recall 比 Precision 重要两倍,应该用 F0.5 或者自定义权重。

Fβ Score

Fβ = (1 + β²) × (Precision × Recall) / (β² × Precision + Recall)
  • β > 1:偏 Recall(宁可误报)
  • β < 1:偏 Precision(宁可漏报)

AUC-ROC vs AUC-PR

这两个是最容易混淆的对比。

ROC Curve

纵轴:TPR(True Positive Rate)= Recall
横轴:FPR(False Positive Rate)= FP / (FP + TN)

ROC Curve 描述的是:在不同的阈值下,TPR 和 FPR 的权衡

AUC(Area Under Curve)= ROC 曲线下的面积,取值 0~1。

  • AUC = 0.5:等价于随机猜测
  • AUC = 1.0:完美分类器
  • AUC > 0.9:非常好
  • AUC < 0.5:比随机还差(说明标签贴反了)

ROC 的核心假设:负样本数量足够多,能稳定估计 FPR。

PR Curve(Precision-Recall Curve)

纵轴:Precision
横轴:Recall

没有用 FPR,直接看 Precision 和 Recall 的权衡。

什么时候用 PR 而不是 ROC:类别严重不平衡时。ROC 在负样本极多时 FPR 总是很低,会高估模型表现。PR Curve 不受负样本数量影响。

判断标准:

  • 曲线右上角(Precision=1, Recall=1)越好
  • 曲线越靠近右上角越好

AUC-ROC 和 AUC-PR 怎么选

场景 推荐
类别相对平衡 ROC
类别严重不平衡(欺诈检测、罕见病) PR
需要在不同阈值下做业务权衡 同时看两者
不知道选哪个 先看 PR,因为更诚实

概率校准:LogLoss 和 Brier Score

Accuracy / Precision / Recall / F1 都是基于硬预测(0 或 1),不关心概率的可靠性。概率校准指标衡量的是:模型输出的概率,和真实概率有多接近

LogLoss(对数损失)

LogLoss = -(1/N) × Σ [y_i × log(p_i) + (1 - y_i) × log(1 - p_i)]
  • y_i:真实标签(0 或 1)
  • p_i:模型预测为 Positive 的概率

含义:对每个样本,把真实标签对应的预测概率取对数,最后求均值(取负号让损失为正)。预测概率越接近真实概率,LogLoss 越低。

特点:LogLoss 对概率误差的惩罚是渐进式的——预测概率 0.01 vs 0.3 的惩罚差异,远大于 0.49 vs 0.51 的差异。

应用:LogLoss 是 Kaggle 竞赛里分类任务最常用的指标,因为它对概率质量敏感。

Brier Score

Brier Score = (1/N) × Σ (p_i - y_i)²

预测概率与真实标签的均方误差,取值 0~0.25(二分类时)。

特点:比 LogLoss 对极端错误的惩罚更重(平方项)。适合在保险场景里用,因为极端误判的代价是非对称的。

Calibration(校准曲线)

LogLoss 和 Brier Score 是数值,Calibration Curve 是图形。

画法:把样本按预测概率分段(00.1、0.10.2...),每段计算真实 Positive 比例(实际 Precision),然后画散点图(预测概率 vs 实际 Precision)。

理想情况:所有点落在 y=x 对角线上(完美校准)。

Temperature Scaling:在校准不完美时,最简单的修复方法是用一个温度参数 T 缩放 logits,在保持 ranking 能力的同时改善概率质量。

softmax(logits / T)

T > 1:更保守(概率分布更平滑),T < 1:更激进。

推荐系统指标

MRR(Mean Reciprocal Rank)

MRR = (1/N) × Σ (1 / rank_i)
  • rank_i:第 i 个 query 的正确答案排在第几位

特点:只看第一个正确答案的位置,适合"给一个答案"的场景(如问答系统)。MRR = 1 表示每个答案都排在第 1 位。

HitRate @ k(命中率)

HitRate@k = (1/N) × Σ [正确答案出现在 top-k 内的 query 数 / N]

适合"给多个候选"的场景,如推荐列表、搜索结果。

NDCG(Normalized Discounted Cumulative Gain)

NDCG 衡量排序质量,同时考虑:

  1. 相关性有多高(相关性分级)
  2. 排名越靠前权重越高(折扣因子)
DCG@k = Σ (rel_i / log2(i+1)),i = 1 到 k
NDCG@k = DCG@k / IDCG@k(ideal DCG)

IDCG 是完美排序时的 DCG 值。

特点:NDCG 是排序类问题的最佳指标,因为它同时考虑了相关性和位置惩罚。YouTube 推荐、Google 搜索、Airbnb 房源排序都靠 NDCG。

回归指标

MAE(Mean Absolute Error)

MAE = (1/N) × Σ |y_i - ŷ_i|

对异常值鲁棒,但不可导(优化时用梯度下降不方便)。

MSE / RMSE

MSE = (1/N) × Σ (y_i - ŷ_i)²
RMSE = √MSE

对大误差惩罚更重(平方项),所以会被异常值主导。

MAPE(Mean Absolute Percentage Error)

MAPE = (1/N) × Σ |y_i - ŷ_i| / |y_i| × 100%

无量纲,相对误差,适合业务指标(如预测销量)。

交叉验证的注意事项

分层抽样(Stratified Split)

类别不平衡时,用 Stratified K-Fold 保持每折的类别比例和整体一致。

Grouped Split(分组抽样)

同一用户的多条记录不能同时出现在训练集和测试集里,否则会数据泄漏。Grouped Split 保证同一 group 的数据只在同一折里。

时间序列的坑

时间序列数据不能随机 Shuffle-split,否则"用未来数据预测过去"。必须用 TimeSeriesSplit(前 N 天训练,预测第 N+1 天)。

如果放到面试里怎么讲

面试里最常见的评估指标题有两类:

第一类是指标选型:"这个不平衡数据集选什么指标?"

先确认不平衡程度。如果严重不平衡,Accuracy 没有意义,先看 Precision/Recall/F1 的业务权衡;如果要看排序能力,优先 AUC-PR 而不是 AUC-ROC。

第二类是指标计算:"给定 Confusion Matrix 算 F1。"

记住 TP/TN/FP/FN 的位置,然后按公式算。F1 = 2P*R/(P+R)。

最后记几个点

  1. Accuracy 在不平衡数据下是陷阱,优先用 Precision/Recall/F1 或 AUC-PR
  2. AUC-ROC 衡量排序能力(不同阈值下 TPR vs FPR),AUC-PR 适合不平衡场景
  3. LogLoss 衡量概率校准质量,对概率误差渐进惩罚
  4. Temperature Scaling 是最简单的概率校准方法
  5. MRR 只看第一个正确答案位置,NDCG 同时考虑相关性和排名折扣
  6. 时间序列必须用 TimeSeriesSplit,不能随机 Shuffle
  7. 类别不平衡时 Grouped/Stratified Split 是防止数据泄漏的关键

跨库关联

传统 ML 评估指标和 LLM 评估指标是互补的,LLM 专项评测在 大模型知识库 中: