评估指标(Evaluation Metrics)是衡量机器学习模型性能的定量标准。不同的任务类型(分类、回归、聚类、排序等)需要使用不同的评估指标,而同一任务的不同业务场景也往往需要关注不同的指标。正确选择和理解评估指标,是模型开发、对比和部署的关键环节。
分类任务是机器学习中最常见的任务类型。以下指标适用于二分类和多分类场景。
混淆矩阵(Confusion Matrix)是所有分类指标的基础。对于一个二分类问题,模型预测结果可以归纳为一个 的矩阵:
| 预测为正类 (Positive) | 预测为负类 (Negative) | |
|---|---|---|
| 实际为正类 | TP (True Positive) | FN (False Negative) |
| 实际为负类 | FP (False Positive) | TN (True Negative) |
其中:
数值示例:假设一个疾病检测模型中,测试集有 1000 个样本(100 个患病,900 个健康)。模型预测结果如下:
可得:TP=70, FN=30, FP=10, TN=890。
准确率(Accuracy)是所有分类指标中最直观的一个:
表示所有预测中正确预测的比例。
适用场景:各类别样本数量大致均衡时。
局限性:当数据存在类别不平衡时,准确率会产生误导。例如上述疾病检测例子,准确率 = (70 + 890) / 1000 = 96%。看起来很高,但实际上模型只发现了 70/100 = 70% 的患者。更极端地,如果一个模型"预测所有人都是健康的",准确率 = 900/1000 = 90%,看似不错,但对患者完全无用。
| 场景 | 患病:健康 | 全部预测健康 | 随机预测 | 好模型 |
|---|---|---|---|---|
| 疾病筛查 | 1:9 | 90% | ~80% | 95%+ |
| 欺诈检测 | 1:999 | 99.9% | ~50% | 99.9% |
| 垃圾邮件 | 1:4 | 80% | ~50% | 98% |
精确率(Precision) 衡量模型预测为正类的样本中有多少是真正的正类:
召回率(Recall) 衡量所有真正的正类样本中有多少被模型正确识别:
在上面的疾病检测例子中:
精确率-召回率权衡:精确率和召回率通常是矛盾的。提高精确率(减少误报)往往会降低召回率(增加漏报),反之亦然。
业务场景选择:
| 场景 | 优先指标 | 原因 |
|---|---|---|
| 癌症筛查 | 高召回率 | 宁可误报也不能漏掉患者 |
| 邮件分类(垃圾->收件箱) | 高精确率 | 误将重要邮件标记为垃圾的代价高 |
| 内容审核 | 高精确率 | 误封正常内容影响用户体验 |
| 安全监控 | 高召回率 | 不能放过任何安全威胁 |
F1 分数是精确率和召回率的调和平均数,提供了一个综合的单一指标:
为什么用调和平均数而非算术平均数? 调和平均数对较小值更敏感。如果精确率=100%但召回率=0%,算术平均=50%,而调和平均=0。这更符合实际需求——一个只预测一次且猜对的模型不应被视为"中等"表现。
通用形式:
数值对比:
| 模型 | 精确率 | 召回率 | 算术平均 | |
|---|---|---|---|---|
| A | 90% | 90% | 90% | 90% |
| B | 100% | 50% | 75% | 66.7% |
| C | 80% | 80% | 80% | 80% |
| D | 95% | 5% | 50% | 9.5% |
可以看到, 比算术平均更严格地惩罚了 B 的不均衡和 D 的极端情况。
多分类场景:对于多分类问题,需要聚合每个类别的指标。
| 聚合方式 | 计算方式 | 适用场景 |
|---|---|---|
| Micro(微平均) | 所有类别的 TP/FP/FN 汇总后计算 | 各类别样本量不均衡,关注整体性能 |
| Macro(宏平均) | 每个类别独立计算后取算术平均 | 各类别同等重要,不受样本量影响 |
| Weighted(加权平均) | 按各类别样本量加权平均 | 介于 micro 和 macro 之间 |
示例:三分类问题(A类 100个,B类 50个,C类 10个)
Micro F1 = 所有类别的总F1(受大类别主导)
Macro F1 = (F1_A + F1_B + F1_C) / 3(小类别C同等权重)
Weighted F1 = (100*F1_A + 50*F1_B + 10*F1_C) / 160
ROC 曲线(Receiver Operating Characteristic Curve)以 假正率(FPR) 为横轴、真正率(TPR,即召回率) 为纵轴,展示分类器在不同阈值下的性能:
AUC(Area Under the ROC Curve)是 ROC 曲线下的面积,取值范围 [0, 1]。
AUC 的统计意义:AUC 等于随机抽取一个正样本和一个负样本,分类器将正样本排在负样本前面的概率。
不同 AUC 值对应模型质量:
| AUC 范围 | 模型质量 | 典型应用 |
|---|---|---|
| 0.9 - 1.0 | 优秀 | 临床应用级诊断 |
| 0.8 - 0.9 | 良好 | 推荐系统、风控 |
| 0.7 - 0.8 | 一般 | 信用评分 |
| 0.6 - 0.7 | 较差 | 接近随机 |
| 0.5 - 0.6 | 无效 | 等同于随机猜测 |
| < 0.5 | 反相关 | 倒置使用可获有效模型 |
ROC 曲线 vs PR 曲线:
| 特性 | ROC 曲线 | PR 曲线 |
|---|---|---|
| 对类别不平衡敏感度 | 不敏感 | 敏感 |
| 负样本多时 | AUC 仍保持较高 | 精确率偏低 |
| 推荐场景 | 类别相对均衡 | 极度不平衡(罕见病检测) |
| 解释性 | 全面反映排序能力 | 关注正类的预测质量 |
数值示例:假设在疾病检测场景中,类别比 = 1:1000。随机预测的 ROC AUC ≈ 0.5,但随机预测的 PR AUC ≈ 0.001。因此 PR 曲线能更清晰地区分模型质量。
对数损失(Log Loss / Cross-Entropy Loss)衡量概率预测的质量,而不仅仅是最终类别判断:
其中 是模型预测样本 为正类的概率。
为什么 Log Loss 有用?两个模型可能都有 95% 的准确率,但一个模型在正确样本上预测概率为 99%,另一个只有 51%。逻辑损失会惩罚后者的不确定性。
数值示例:
| 样本 | 真实标签 | 模型A预测概率 | 模型B预测概率 | A的Log Loss | B的Log Loss |
|---|---|---|---|---|---|
| 1 | 1 | 0.95 | 0.51 | -log(0.95) = 0.051 | -log(0.51) = 0.673 |
| 2 | 0 | 0.05 | 0.49 | -log(0.95) = 0.051 | -log(0.51) = 0.673 |
| 平均 | - | - | - | 0.051 | 0.673 |
模型B虽然分类正确(阈值 0.5),但概率估计极差,Log Loss 清楚地反映了这一点。
Log Loss 与准确率的关系:
| 场景 | 准确率 | Log Loss | 说明 |
|---|---|---|---|
| 完美模型 | 100% | 0 | 概率完全准确 |
| 概率准确 | 95% | ~0.15 | 95%把握预测正确 |
| 不确定但正确 | 95% | ~0.70 | 概率接近 0.5 |
| 过分自信且错误 | 95% | ∞ | 99%把握预测错误 |
Cohen's Kappa 衡量分类器预测与随机分类的一致性差异:
其中 是观测一致率(即准确率), 是随机一致率(即各类别边缘概率的乘积之和)。
数值示例:在上述疾病检测场景中,,,因此 ,说明模型比随机猜测好 75.6%。
回归任务预测连续数值,其评估指标关注预测值与真实值之间的偏差。
均方误差(MSE):
均方根误差(RMSE):
数值示例:预测房价,3 个样本的真实价格和预测价格如下:
| 样本 | 真实价格(万) | 预测A | 预测B | 预测C |
|---|---|---|---|---|
| 1 | 200 | 210 | 205 | 180 |
| 2 | 300 | 305 | 310 | 350 |
| 3 | 500 | 490 | 200 | 480 |
| MSE | - | 116.7 | 12,816.7 | 1,866.7 |
| RMSE | - | 10.8万 | 113.2万 | 43.2万 |
模型B在样本3上出现严重偏差(预测200万 vs 真实500万),平方后该误差主导了整体指标,RMSE 达到 113.2 万,远高于模型A的 10.8 万。
MSE vs MAE 区别:
| 特性 | MSE/RMSE | MAE |
|---|---|---|
| 误差加权 | 大误差被平方放大 | 等权处理 |
| 导数连续性 | 处处可导 | 在 0 处不可导 |
| 对异常值敏感度 | 高 | 低 |
| 优化器兼容性 | 常用(梯度优化) | 需特殊处理 |
| 单位解释性 | RMSE与y同单位 | 与y同单位 |
MAE 直观易解释:"平均预测偏差 X 个单位"。对于上述房价例子,模型A的 MAE = (10 + 5 + 10) / 3 = 8.3 万,意味着平均偏差约 8.3 万。
MAPE 将误差表示为百分比,便于跨不同量级的数据集比较模型性能。
局限性:当真实值 接近 0 时,MAPE 趋近无穷大,因此不适合稀疏数据或包含近零值的场景。
R² 衡量模型相对于简单均值预测的改进程度:
其中 是真实值的均值。
解释:
数值示例:假设房价均值为 333.3 万,模型A的预测:
R² = 0.995 说明模型解释了 99.5% 的目标变量方差,非常优秀。
与 R² 类似,但不假定模型是无偏的。解释方差衡量模型捕捉到目标变量方差的比例。
| 指标 | 公式 | 特点 |
|---|---|---|
| MSE | 最常用,对大误差敏感 | |
| RMSE | 与目标变量同单位 | |
| MAE | 鲁棒,对异常值不敏感 | |
| MAPE | 百分比单位,跨数据集可比 | |
| R² | 可解释性强 | |
| 解释方差 | 允许有偏预测 |
在多分类任务中,Top-K 准确率衡量真实标签是否出现在模型预测概率最高的 K 个类别中:
实际应用:
多标签分类中,汉明损失(Hamming Loss)衡量错误标记的比例:
其中 为标签总数。取值 [0, 1],越低越好。
数值示例:电影类型分类(类别:动作、喜剧、爱情、科幻),以下为 3 部电影:
| 电影 | 真实标签 | 预测标签 | 错误数 |
|---|---|---|---|
| 电影A | 动作, 科幻 | 动作, 科幻 | 0 |
| 电影B | 喜剧 | 喜剧, 爱情 | 1(多余标签) |
| 电影C | 爱情, 喜剧 | 爱情 | 1(缺失标签) |
Hamming Loss = (0 + 1 + 1) / (3 × 4) = 2/12 = 0.167
聚类是无监督学习,评估指标分为外部指标(有真实标签时)和内部指标(无标签时)。
轮廓系数(Silhouette Score)结合了凝聚度和分离度,是内部评估的常用指标:
其中:
取值范围 [-1, 1]:
数值示例:K=3 聚类结果:
| 簇 | 簇内平均距离 a(i) | 最近簇距离 b(i) | 轮廓系数 | 含义 |
|---|---|---|---|---|
| A | 0.5 | 3.0 | (3-0.5)/3 = 0.83 | 良好分离 |
| B | 0.8 | 1.2 | (1.2-0.8)/1.2 = 0.33 | 边界附近 |
| C | 2.0 | 2.0 | (2-2)/2 = 0 | 几乎不可分 |
衡量任意两个簇之间的相似度(簇内距离之和 / 簇间距离):
其中 是簇 中所有点到质心的平均距离, 是两个簇质心的距离。值越小越好。
当有真实标签可参考时,以下外部指标评估聚类结果与真实标签的一致性:
| 指标 | 范围 | 描述 |
|---|---|---|
| ARI(调整兰德指数) | [-1, 1] | 校正了随机一致性的聚类相似度,1为完美匹配 |
| NMI(归一化互信息) | [0, 1] | 衡量聚类与标签共享的信息量 |
| AMI(调整互信息) | [-1, 1] | NMI的随机校正版本 |
| V-Measure | [0, 1] | 同质性(homogeneity)与完整性(completeness)的调和平均 |
同质性 vs 完整性:
示例:真实类别 A、B 各 50 个样本
聚类结果 1(同质性高):簇1={A×50}, 簇2={B×50}
同质性=1.0, 完整性=1.0 ✓ 完美
聚类结果 2(完整性高):簇1={A×50, B×30}, 簇2={B×20}
同质性=0.61, 完整性=1.0 ✓ 所有样本被聚类
聚类结果 3(都不好):簇1={A×40, B×25}, 簇2={A×10, B×25}
同质性=0.26, 完整性=0.71
在信息检索和推荐系统中,排序质量至关重要。
归一化折损累计增益(Normalized Discounted Cumulative Gain)是信息检索中最常用的排序指标:
其中 是第 位结果的相关性分数,IDCG@k 是理想排序下的 DCG@k。
数值示例:搜索"机器学习入门",10个结果的理想相关度 [3, 2, 2, 1, 1, 0, 0, 0, 0, 0],算法A的实际排序:
| 排序位 | 算法A结果 | 相关度 | DCG贡献值 | 理想相关度 | 理想DCG |
|---|---|---|---|---|---|
| 1 | A | 3 | (2³-1)/0 = 7.0 | 3 | 7.0 |
| 2 | B | 2 | (4-1)/1.585 = 1.89 | 2 | 1.89 |
| 3 | C | 0 | (1-1)/2.0 = 0 | 2 | 1.89 |
| 4 | D | 1 | (2-1)/2.322 = 0.43 | 1 | 0.43 |
| 5 | E | 1 | (2-1)/2.585 = 0.39 | 1 | 0.39 |
DCG@5 = 7 + 1.89 + 0 + 0.43 + 0.39 = 9.71,IDCG@5 = 7 + 1.89 + 1.89 + 0.43 + 0.39 = 11.6,NDCG@5 = 9.71/11.6 = 0.837。
平均精确率均值(Mean Average Precision)对所有查询的平均精确率取均值:
| 指标 | 是否考虑排序位置 | 是否考虑相关性程度 | 是否归一化 |
|---|---|---|---|
| Precision@k | 是 | 否(二值相关) | 否 |
| Recall@k | 是 | 否(二值相关) | 否 |
| MAP | 是 | 否(二值相关) | 部分 |
| NDCG | 是 | 是(分级相关) | 是 |
| MRR | 是(仅首位) | 否(二值相关) | 是 |
模型的概率输出需要反映真实概率分布,校准(Calibration)评估至关重要。
衡量概率预测的均方误差:
取值 [0, 1],越低越好。Brier 分数的独特之处在于它同时评估了区分度(discrimination)和校准度(calibration)。
分解公式(Murphy 分解):
将预测概率分桶(通常 10 个桶),对每个桶计算平均预测概率和实际正样本比例:
| 概率桶 | 样本数 | 平均预测概率 | 实际正类比例 | 偏差 |
|---|---|---|---|---|
| 0.0-0.1 | 200 | 0.05 | 0.04 | -0.01 |
| 0.1-0.2 | 150 | 0.15 | 0.12 | -0.03 |
| 0.2-0.3 | 100 | 0.25 | 0.28 | +0.03 |
| 0.3-0.4 | 80 | 0.35 | 0.33 | -0.02 |
| 0.4-0.5 | 60 | 0.45 | 0.50 | +0.05 |
| 0.5-0.6 | 50 | 0.55 | 0.58 | +0.03 |
| 0.6-0.7 | 40 | 0.65 | 0.63 | -0.02 |
| 0.7-0.8 | 30 | 0.75 | 0.77 | +0.02 |
| 0.8-0.9 | 20 | 0.85 | 0.90 | +0.05 |
| 0.9-1.0 | 10 | 0.95 | 0.92 | -0.03 |
如果各桶偏差绝对值均小于 0.05,模型校准良好。若出现系统性偏差(如低概率桶普遍偏高),则需进行概率校准(如 Platt Scaling、Isotonic Regression)。
其中 是桶数, 是第 个桶, 是桶内平均准确率, 是桶内平均置信度。ECE 越低表示模型校准越好。
| 场景 | 推荐指标 | 不建议指标 |
|---|---|---|
| 正类占 50% | 准确率、F1、AUC | - |
| 正类占 10% | AUC、PR AUC、F1 | 准确率 |
| 正类占 1% | PR AUC、召回率@K、F2 | 准确率、AUC |
| 正类占 0.1% | 召回率、Precision@K | 准确率、F1 |
| 业务目标 | 核心指标 | 辅助指标 |
|---|---|---|
| 最小化误报成本 | 精确率、FPR | AUC、Log Loss |
| 最小化漏报成本 | 召回率、FNR | PR AUC |
| 平衡优化 | F1、AUC | 混淆矩阵全维度 |
| 排序质量 | NDCG、MAP | MRR、Recall@K |
| 概率校准 | Brier Score、ECE | Log Loss |
在实际项目中,不要依赖单一指标。推荐至少选择以下组合:
示例:信用评分模型
- 核心:AUC(衡量排序能力)
- 对比:KS 统计量(区分好坏客户的能力)
- 辅助:Log Loss(确保概率校准良好)
比较两个模型时,仅凭指标数值大小不足以得出结论。建议使用:
评估指标只有在测试集与训练集完全独立时才有意义。常见数据泄露源:
| 泄露类型 | 示例 | 影响 |
|---|---|---|
| 时间泄露 | 用未来数据预测过去 | AUC 虚高 0.1-0.3 |
| 特征泄露 | 使用客户ID、未来信息等 | 实践部署时性能暴跌 |
| 数据预处理泄露 | 按全数据集做归一化 | 指标偏差约 5-15% |
| 重复样本泄露 | 训练集中包含测试集 | 准确率可能接近 100% |
交叉验证中获得 K 个评估值后:
✅ 正确做法:
准确率: 87.3% ± 2.1% (K=5)
❌ 错误做法:
将所有K折的预测结果拼接后计算指标
| 评估指标 | 对应的代理损失函数 | 原因 |
|---|---|---|
| Accuracy | Cross-entropy | CE 是可微的代理 |
| AUC | Ranking loss / Pairwise hinge | AUC 不可微 |
| NDCG | LambdaRank / ListNet | NDCG 不可微 |
| F1 | Soft F1 / Dice loss | 直接优化 F1 不可微 |
重要原则:训练时的损失函数不必与评估指标相同,但应保持方向一致。例如:
选择评估指标的核心原则是:指标应该反映你关心的业务目标。准确率最高 ≠ 模型最好——在欺诈检测中你关心召回率,在推荐系统中你关心 NDCG,在风险定价中你关心校准度。理解每个指标的数学定义、统计属性和业务含义,才能做出真正有效的模型评估。