模型评估指标
先把结论放前面
评估指标选错了,模型就选错了。不同任务(分类 / 排序 / 回归 / 生成)有不同的指标体系,同一个 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 衡量排序质量,同时考虑:
- 相关性有多高(相关性分级)
- 排名越靠前权重越高(折扣因子)
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)。
最后记几个点
- Accuracy 在不平衡数据下是陷阱,优先用 Precision/Recall/F1 或 AUC-PR
- AUC-ROC 衡量排序能力(不同阈值下 TPR vs FPR),AUC-PR 适合不平衡场景
- LogLoss 衡量概率校准质量,对概率误差渐进惩罚
- Temperature Scaling 是最简单的概率校准方法
- MRR 只看第一个正确答案位置,NDCG 同时考虑相关性和排名折扣
- 时间序列必须用 TimeSeriesSplit,不能随机 Shuffle
- 类别不平衡时 Grouped/Stratified Split 是防止数据泄漏的关键
跨库关联
传统 ML 评估指标和 LLM 评估指标是互补的,LLM 专项评测在 大模型知识库 中: