3.3 评估指标 (Metrics) 本节摘要:评估指标是判断"模型好不好"的那把尺子,通过 metric 参数指定,既用于训练时监控曲线、驱动早停,也用于最终验收。不同任务对应不同指标:回归看 RMSE 或 MAE,二分类看对数损失、AUC、精确率与召回率,多分类看 multilogloss 与 aucmu,排序看 NDCG。本节逐一讲清这些指标各量什么、谁对类别不平衡更鲁棒、谁越大越好谁越小越好,并演示如何把一个自定义指标喂给早停机制。 读前必看 阅读完本节,你应当能够: 说清评估指标与目标函数的分工,以及指标如何驱动早停。 对比 RMSE 与 MAE 对异常值的敏感差异,判断何时该用哪一个。 解释 AUC 的含义,以及它为什么比准确率更能抗类别不平衡。
本节摘要:评估指标是判断"模型好不好"的那把尺子,通过 metric 参数指定,既用于训练时监控曲线、驱动早停,也用于最终验收。不同任务对应不同指标:回归看 RMSE 或 MAE,二分类看对数损失、AUC、精确率与召回率,多分类看 multi_logloss 与 auc_mu,排序看 NDCG。本节逐一讲清这些指标各量什么、谁对类别不平衡更鲁棒、谁越大越好谁越小越好,并演示如何把一个自定义指标喂给早停机制。
阅读完本节,你应当能够:
训练过程里,我们每隔若干轮都会在验证集上算一个数,用它来判断"这一轮比上一轮是好是坏"。这个数就是评估指标。它有两个身份:训练时它是早停的裁判——连续若干轮不涨,就喊停;训练完它又是验收的标尺——到底交付哪个模型,由它说了算。
所以评估指标的选择,必须和你的业务目标对齐。同样是二分类,做垃圾邮件过滤,你可能更在意"别把正常邮件误杀",于是盯精确率;做疾病初筛,你可能更在意"别漏掉任何一个疑似患者",于是盯召回率。一个指标不可能同时照顾所有关切,选错尺子,模型再准也不是你要的那个准。
好在 LightGBM 的 metric 参数支持一次传多个指标,比如同时观察 binary_logloss 和 auc,甚至可以用列表形式把回归、分类指标一起挂上。早停默认盯的是第一个指标,这一点要留意——你把谁排在列表第一位,谁就掌握了喊停的权力。
回归最常用的两个指标是 RMSE 和 MAE。RMSE 是均方误差的平方根,MAE 是平均绝对误差。它们的关系,正好对应上一节 L2 与 L1 的关系:RMSE 因为先平方再开方,对大误差格外敏感,一个离谱的预测点就能把整个 RMSE 顶高;MAE 对每个误差一视同仁,更稳健,也更接近"平均差多少"的直觉。
选哪个,取决于你有多在意那些"大错"。预测股价、预测销量这类场景,一个大偏差可能就是一次事故,用 RMSE 更合适,因为它会狠狠惩罚大错;而如果你只是想知道"平均意义上大概差多少",或者数据里本身就有不少极端值,MAE 更好解释也更抗干扰。至于 MAPE,它把误差除以真实值转成百分比,直观是直观,但有两个软肋:真实值接近零时会爆炸,且它对低估的惩罚比高估更重。业务上确实需要"百分比误差"这个口径时再用它,别当默认。
除 RMSE、MAE、MAPE 之外,LightGBM 也把 huber、fair、poisson、quantile 等直接当作 metric 提供——它们本质上和同名目标函数是同一套损失,只是换到了"观察"的位置上。当你的 objective 与 metric 保持一致时,训练日志里那个数字就是你真正在优化的量,观察起来最直接,也不容易出现"指标在涨但目标在跌"的错位感。
准确率是最直觉的二分类指标,但它有一个著名的陷阱——类别不平衡。正样本只占 1% 的数据集里,一个"全预测为负"的傻瓜模型,准确率高达 99%,却一个正类都没抓到。所以不平衡场景下,准确率基本没有参考价值。
更靠谱的是从"概率"和"排序"两个角度去看。binary_logloss(对数损失)看的是概率质量:预测概率离真实标签越近,损失越小。它适合你需要校准良好的概率输出的场景。auc 看的则是排序能力:随机抽一个正样本和一个负样本,模型给正样本打出更高分的概率有多大。auc 为 0.5 等于瞎猜,0.8 以上算不错,1.0 是完美。它的妙处在于完全不受类别比例影响,也不依赖你选定某个阈值,因此在风控、广告这类不平衡场景里几乎成了标配。
精确率与召回率则回答两个更具体的问题。精确率问"我预测为正的里面,有多少真是正",召回率问"真实的正里面,我抓到了多少"。两者往往此消彼长:阈值调高,精确率上去、召回率下来;阈值调低则相反。F1 是它们的调和平均,把两者折成一个数。当你在"宁缺毋滥"和"宁可错杀不可放过"之间摇摆时,F1 给了一个可操作的平衡点。average_precision 则是精确率随阈值变化的平均值,衡量的是概率排序的整体质量,介于 AUC 与精确率之间的一种视角。
还有一个常被忽略的点:AUC 看的是整体排序,但它不告诉你"该选哪个阈值"。真要上线,你还得在精确率与召回率之间挑一个工作点,这时候 PR 曲线往往比 ROC 曲线更有信息量,尤其是正样本稀少的时候。因为 ROC 曲线里假正例率的分母是海量负样本,正类一稀疏,曲线容易被"稀释"得过于乐观;PR 曲线直接盯着正类,对少数类更敏感。所以别只报一个 AUC 就交差,关键场景下把 PR 曲线也画出来看看。
多分类默认的指标是 multi_logloss,也就是多类交叉熵,它衡量模型对每个样本、每个类别预测概率的整体质量,越小越好。它的兄弟 multi_error 则是多分类错误率,看的是"预测类别与真实类别不一致的样本占比",直观但同样受类别不平衡影响。
如果类别不平衡,或者你更关心模型在所有类别上的综合排序能力,auc_mu 是更好的选择。它把多分类问题拆成若干个"某一类 vs 其余类"的二分类子问题,再把所有样本、所有类别的预测结果合并起来算一个微观平均的 AUC。这样既利用了 AUC 不受比例影响的优点,又覆盖了多类别的全貌。需要提醒的是,auc_mu 的计算口径与个别第三方库的"宏平均 AUC"并不完全一致,跨库对比时别直接对数字。
排序任务的指标不看单个预测准不准,而看"排出来的列表好不好"。最常用的是 NDCG,全称归一化折损累积增益。它有三层含义:增益衡量排在前面的是否真是高相关项;折损意味着排在越靠后的位置,对指标的贡献被打的折扣越大,因为用户根本看不到;归一化则是拿理想排序做分母,把分数压到 0 到 1 之间,便于跨查询比较。NDCG 越高,说明"高相关的项越靠前"这件事做得越好。实际使用里,常常只看前几位,比如 ndcg@10 就表示只评估列表前 10 个位置的质量。
MAP 是另一个经典排序指标,它把每个查询下"相关项出现位置对应的精确率"求平均。它对"相关项是否整体靠前"更敏感,但对相关程度的区分不如 NDCG 细腻。在推荐、搜索这类任务里,NDCG 通常更受青睐,因为它既考虑位置折扣,又能容纳多档相关度。
下面这张图把四类任务到指标的选择路径串了起来:
内置指标之外的诉求,比如想用 F1、MAPE 或者某个业务公式来驱动早停,LightGBM 都支持通过自定义评估函数实现。一个自定义评估函数接收预测值和数据集对象,返回三个东西:指标名称、指标值、以及"这个指标是不是越大越好"的标志。早停机制会根据这个标志自动判断曲线该涨还是该跌。
写自定义评估函数时有两个细节容易踩坑。一是返回的标志位必须正确:auc、f1 这类越大越好要返回 True,logloss、mae 这类越小越好要返回 False,标反了早停会朝错误方向"优化"。二是内部做类别转换或分位数计算时,要确保你用的阈值、分位点与最终业务口径一致,否则训练时看到的指标和上线后的真实表现会对不上。
下面是一个用 F1 驱动早停的最小实现,签名只有三行:
# 自定义 F1 评估函数,用于驱动早停 def f1_eval(preds, train_data): labels = train_data.get_label() pred_class = [1 if p >= 0.5 else 0 for p in preds] from sklearn.metrics import f1_score return 'f1', f1_score(labels, pred_class), True # True 表示越大越好
把它接到训练流程里,早停就会盯着这个自定义的 F1 走,而不是默认的对数损失。这一招在"指标没有内置、但业务上有明确口径"的场景里特别管用,相当于给训练过程换上了一把你自己的尺子。
⚠️ 常见坑:早停默认盯 metric 列表的第一个元素。你把 logloss 放在前面、auc 放在后面,早停就只听 logloss 的指挥。想让谁掌舵,就把它放到列表第一位。
💡 关键直觉:指标没有"最好",只有"最贴合业务"。先问清楚上线后要优化什么——是概率的校准、排序的靠前、还是漏检率的最低——再反推该看哪个指标,比背下一整张指标清单有用得多。
| 任务 | 指标 | 方向 | 一句话说明 |
|---|---|---|---|
| 回归 | rmse | 越小越好 | 对异常值敏感,惩罚大误差 |
| 回归 | mae | 越小越好 | 稳健,接近平均绝对差 |
| 回归 | mape | 越小越好 | 百分比口径,真实值近零时不稳 |
| 二分类 | binary_logloss | 越小越好 | 概率质量,默认指标 |
| 二分类 | auc | 越大越好 | 排序能力,抗类别不平衡 |
| 二分类 | f1 | 越大越好 | 精确率与召回率的调和平均 |
| 多分类 | multi_logloss | 越小越好 | 多类概率质量,默认指标 |
| 多分类 | auc_mu | 越大越好 | 微观平均 AUC,抗不平衡 |
| 排序 | ndcg | 越大越好 | 位置折扣后的排序质量 |
到这里,参数的"三件套"——核心参数、目标函数、评估指标——已经齐了。从下一章开始,我们把这些知识落进真实的工程流程里,先解决安装配置与数据准备,再进入完整的训练与调优实战。