CategoryResourceRepost/极客时间专栏/深度学习推荐系统实战/模型评估篇/25 | 评估指标:我们可以用哪些指标来衡量模型的好坏?.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

167 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<audio id="audio" title="25 | 评估指标:我们可以用哪些指标来衡量模型的好坏?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/d5/7f/d57f931540d997717e99c3a6f9f8a17f.mp3"></audio>
你好,我是王喆。今天,我们来学习推荐模型的评估指标。
上节课我们讲了五种评估方法清楚了它们都是怎么把样本分割为训练集和测试集的。但是只分割样本是远远不够的为了比较模型效果的好坏还得用一些指标进行衡量。就像我们工作中经常说我的模型提高了“一个点”的效果那所谓的“一个点”指的是什么呢它其实说的就是我们的模型在一些经典的推荐指标上提升了1%的效果,这节课我就带你来捋一捋这些经典的推荐评估指标。
## 低阶评估指标
我按照指标计算的难易程度,和评估的全面性,把推荐系统的评估指标可以分成低阶评估指标和高阶评估指标两大类。对于低阶评估指标来说,准确率、精确率与召回率、对数损失、均方根误差,这四个指标在推荐模型评估中最常用,计算起来也最容易。所以,我们就先来学习一下这几个低阶评估指标的具体含义。
### 1. 准确率
准确率 (Accuracy)是指分类正确的样本占总样本个数的比例公式1就是$\text {Accuracy}=\frac{n_{\text {correct }}}{n_{\text {total }}}$。
其中, ncorrect是正确分类的样本个数 ntotal是样本的总数。
准确率是分类任务中非常直观的评价指标可解释性也很强但它也存在明显的缺陷就是当不同类别的样本比例非常不均衡的时候占比大的类别往往成为影响准确率的最主要因素。比如负样本占99%那么分类器把所有样本都预测为负样本也可以获得99%的准确率。
在之前的课程中,我们经常把推荐问题看作是一个点击率预估型的分类问题。这个时候,我们就可以用准确率来衡量推荐模型的好坏。但在实际的推荐场景中,我们往往会生成一个推荐列表,而不是用所谓的分类正不正确来衡量最终的效果,那我们该怎么评估一个推荐列表的效果呢?这个时候,我们就会利用到精确率和召回率这两个指标。
### 2. 精确率与召回率
我这里所说的**精确率Precision指的是分类正确的正样本个数占分类器判定为正样本个数的比例召回率Recall是分类正确的正样本个数占真正的正样本个数的比例**。
在推荐列表中通常没有一个确定的阈值来把预测结果直接判定为正样本或负样本而是采用Top N 排序结果的精确率Precision@N和召回率Recall@N来衡量排序模型的性能。具体操作就是认为模型排序的前N个结果就是模型判定的正样本然后分别计算Precision@N和Recall@N。
事实上,精确率和召回率其实是矛盾统一的一对指标。这是什么意思呢?就是,为了提高精确率,模型需要尽量在“更有把握”时把样本预测为正样本,但此时,我们往往会因为过于保守而漏掉很多“没有把握”的正样本,导致召回率降低。
那有没有一个指标能综合地反映精确率和召回率的高低呢其实是有的那就是F1-score。F1-score的定义是精确率和召回率的调和平均值具体的定义你可以看看下面的公式2。F1-score的值越高就证明模型在精确率和召回率的整体表现上越好。
$$<br>
\mathrm{F} 1=\frac{2 \cdot \text { precision } \cdot \text { recall }}{\text { precision }+\text { recall }}<br>
$$
### 3. 对数损失
接着我们来说一说对数损失Logloss这个评估指标。
首先在一个二分类问题中对数损失函数的定义就是下面的公式3。<br>
$$<br>
-\frac{1}{N} \sum_{i=1}^{N}\left(y_{i} \log P_{\mathrm{i}}+\left(1-y_{i}\right) \log \left(1-P_{i}\right)\right)<br>
$$
在这个公式中,$y_{i}$是输入实例 $x_{i}$ 的真实类别, $p_{i}$是预测输入实例 $x_{i}$ 是正样本的概率,$N$是样本总数。
而面对多分类问题的时候对数损失函数定义就变成了下面公式4的样子
$$<br>
\text { Multi-LogLoss }=-\frac{1}{n} \sum_{i=1}^{n} \sum_{j=1}^{m} y_{i, j} \log \left(p_{i, j}\right)<br>
$$
如果你仔细看公式就会发现二分类和多分类模型的Logloss其实就是我们之前讲过的逻辑回归和Softmax模型的损失函数而大量深度学习模型的输出层正是逻辑回归或Softmax因此采用Logloss作为评估指标能够非常直观地反映模型损失函数的变化。所以在训练模型的过程中我们在每一轮训练中都会输出Logloss来观察模型的收敛情况。
### 4. 均方根误差
刚才我们说的准确率、精确率、召回率、LogLoss都是针对分类模型指定的指标。分类模型就是指预测某个样本属于哪个类别的模型最典型的就是点击率预估模型。除了这类分类模型以外还有回归模型它是用来预测一个连续值比如预测某个用户对某个电影会打多少分这就是一个回归模型。
那我们对于回归模型有什么合适的评估指标吗?对于回归模型来说,最常用的评估指标就是**均方根误差**RMSERoot Mean Square Error。它的公式是求预测值跟真实值之间差值的均方根
$$<br>
\mathrm{RMSE}=\sqrt{\frac{\sum_{i=1}^{n}\left(y_{i}-\hat{y}_{l}\right)^{2}}{n}}<br>
$$
这个公式中,$y_{i}$是第i个样本点的真实值$ \hat{y}_{l}$是第i个样本点的预测值n是样本点的个数。那么均方根误差越小当然就证明这个回归模型预测越精确。
总的来说,我们刚才说的这四个评估指标,虽然在推荐系统中最常用,计算起来也最简单,但它们反应的结果还不够精确和全面。
比如说精确率和召回率可以反应模型在Top n个排序结果上的表现但我们要知道在真正的推荐问题中n的值是变化的因为用户可能会通过不断的翻页、下滑来拉取更多的推荐结果这就需要有更高阶的评估指标来衡量模型在不同数量推荐结果上的综合性能。所以我们接下来再讲几个非常流行也非常权威的高阶评估指标。
## 高阶评估指标
那在高阶评估指标部分我会给你讲P-R曲线、ROC曲线、平均精度均值这三个最常用的评估指标。
### 1. P-R曲线
首先我要说的是P-R曲线这里的P就是我们之前学过的精确率PrecisionR就是召回率Recall。刚才我们说了为了综合评价一个推荐模型的好坏不仅要看模型在一个Top n值下的精确率和召回率还要看到模型在不同N取值下的表现甚至最好能绘制出一条n从1到N准确率和召回率变化的曲线。这条曲线就是P-R曲线。
P-R曲线的横轴是召回率纵轴是精确率。对于一个推荐模型来说它的P-R曲线上的一个点代表“在某一阈值下模型将大于该阈值的结果判定为正样本将小于该阈值的结果判定为负样本时整体结果对应的召回率和精确率”。整条P-R曲线是通过从高到低移动正样本阈值生成的。如图1所示它画了两个测试模型模型A和模型B的对比曲线。其中实线代表模型A的P-R曲线虚线代表模型B的P-R曲线。
<img src="https://static001.geekbang.org/resource/image/27/40/27c1669b30da6817fc7275354fc1ff40.jpg" alt="">
从图中我们可以看到在召回率接近0时模型A的精确率是0.9模型B的精确率是1。这说明模型B预测的得分前几位的样本全部是真正的正样本而模型A即使是得分最高的几个样本也存在预测错误的情况。
然而随着召回率的增加两个模型的精确率整体上都有所下降。特别是当召回率在0.6附近时模型A的精确率反而超过了模型B。这就充分说明了只用一个点的精确率和召回率是不能全面衡量模型性能的只有通过P-R曲线的整体表现才能对模型进行更全面的评估。
虽然P-R曲线能全面衡量模型的性能但是它总归是一条曲线不是一个数字我们很难用它直接来判断模型的好坏。那有没有一个指标能用来衡量P-R曲线的优劣呢当然是有的这个指标就是AUC(Area Under Curve)曲线下面积。顾名思义AUC指的是P-R曲线下的面积大小因此计算AUC值只需要沿着P-R曲线横轴做积分。AUC越大就证明推荐模型的性能越好。
### 2. ROC曲线
接着我们再来介绍第二个高阶指标ROC曲线它也是一个非常常用的衡量模型综合性能的指标。ROC曲线的全称是the Receiver Operating Characteristic曲线中文名为“受试者工作特征曲线”。ROC曲线最早诞生于军事领域而后在医学领域应用甚广“受试者工作特征曲线”这一名称也正是来源于医学领域。
ROC曲线的横坐标是False Positive RateFPR假阳性率纵坐标是True Positive Rate TPR真阳性率。这两个名字读上去就有点拗口我们还是通过它们的定义来理解一下
$$<br>
\mathrm{FPR}=\frac{\mathrm{FP}}{N}, T P R=\frac{\mathrm{TP}}{P}<br>
$$
在公式中P指的是真实的正样本数量N是真实的负样本数量TP指的是P个正样本中被分类器预测为正样本的个数FP指的是N个负样本中被分类器预测为正样本的个数。但我估计你看了这个定义可能还是不好理解这个ROC曲线是怎么得到的。没关系我们真正去画一条ROC曲线你就明白了。
和P-R曲线一样ROC曲线也是通过不断移动模型正样本阈值生成的。假设测试集中一共有20个样本模型的输出如下表所示表中第一列为样本序号Class为样本的真实标签Score为模型输出的样本为正的概率样本按照预测概率从高到低排序。在输出最终的正例、负例之前我们需要指定一个阈值并且设定预测概率大于该阈值的样本会被判为正例小于该阈值的会被判为负例。
比如我们指定0.9为阈值,那么只有第一个样本会被预测为正例,其他全部都是负例。这里的阈值也被称为 “截断点”。
<img src="https://static001.geekbang.org/resource/image/4c/66/4c7f89a6717e0d272527a77a5fe64266.jpeg" alt="">
接下来我们要做的就是动态地调整截断点从最高的得分开始实际上是从正无穷开始对应着ROC曲线的零点逐渐调整到最低得分。每一个截断点都会对应一个FPR和TPR的值在ROC图上绘制出每个截断点对应的位置再连接每个点之后我们就能得到最终的ROC曲线了。那么ROC曲线上的点具体应该怎么确定呢
我们来看几个例子当截断点选择为正无穷的时候模型会把全部样本预测为负例那FP和TP必然都为0FPR和TPR也都为0因此曲线的第一个点就是 (0,0) 。当把截断点调整为0.9的时候模型预测1号样本为正样本并且这个样本也确实是正样本。因此在20个样本中当TP=1所有正例数量P=10的时候TPR=TP/P=1/10。
我们还可以看到这个例子里没有预测错的正样本也就是说当FP=0负样本总数N=10的时候FPR=FP/N=0/10=0对应着ROC图上的点(0,0.1)。
<img src="https://static001.geekbang.org/resource/image/a5/e6/a54e03043e1dca53a47d601c7b2e51e6.jpg" alt="">
其实还有一种更直观的绘制ROC曲线的方法。首先我们根据样本标签统计出正负样本的数量假设正样本数量为P负样本数量为N。然后我们把横轴的刻度间隔设置为1/N纵轴的刻度间隔设置为1/P。接着我们再根据模型输出的预测概率对样本进行从高到低的排序。
最后依次遍历样本。同时从零点开始绘制ROC曲线每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线直到遍历完所有样本曲线最终停在 (1,1) 这个点整个ROC曲线就绘制完成了。
在绘制完ROC曲线后我们也可以像P-R曲线一样计算出 ROC曲线的AUCAUC越高推荐模型的效果就越好。
### 3. 平均精度均值
最后我们来说平均精度均值mAPmAPmean average precision这个高阶指标它除了在推荐系统中比较常用在信息检索领域也很常用。mAP其实是对平均精度APaverage precision的再次平均因此在计算mAP前我们需要先学习什么是平均精度AP。
假设推荐系统对某一用户测试集的排序结果是1, 0, 0, 1, 1, 1。其中1代表正样本0代表负样本。接下来我们就按照之前学过的方法计算这个序列中每个位置上的precision@N。你可以自己先试着计算一下也可以直接看我下面计算好的结果。
<img src="https://static001.geekbang.org/resource/image/f9/bb/f91acb00e50aa1f273cc1610148953bb.jpeg" alt="" title="每个位置的precision@N值">
计算平均精度AP的时候我们只取正样本处的precision进行平均根据得到的表格AP =1/1 + 2/4 + 3/5 + 4/6/4 = 0.6917。接下来我们再来看什么是mAP。
如果推荐系统对测试集中的每个用户都进行样本排序那么每个用户都会计算出一个AP值再对所有用户的AP值进行平均就得到了mAP。也就是说mAP是对精确度平均的平均。
这里就需要注意了mAP的计算方法和P-R曲线、ROC曲线的计算方法是完全不同的因为mAP需要对每个用户的样本进行分用户排序而P-R曲线和ROC曲线均是对全量测试样本进行排序。这一点在实际操作中是需要注意的。
## 合理选择评估指标
到这里这节课的7个评估指标我们就讲完了。如果你是第一次接触它们可能现在已经有点茫然了。事实上除了这些评估指标还有很多其他的推荐系统指标比如归一化折扣累计收益Normalized Discounted Cumulative Gain,NDCG、覆盖率Coverage、多样性Diversity等等。那面对这么多评估指标你肯定想问我们应该怎么选择它们呢
很可惜,这次又是一个开放式的问题,评估指标的选择同样没有标准答案。但我还是会把一些经验性的选择总结出来,希望能够帮助到你。
比如在对推荐模型的离线评估中大家默认的权威指标是ROC曲线的AUC。但AUC评估的是整体样本的ROC曲线所以我们往往需要补充分析mAP或者对ROC曲线进行一些改进我们可以先绘制分用户的ROC再进行用户AUC的平均等等。
再比如在评估CTR模型效果的时候我们可以采用准确率来进行初步的衡量但我们很有可能会发现不管什么模型准确率都在95%以上。仔细查看数据我们会发现由于现在电商点击率、视频点击率往往都在1%-10%之间。也就是说90%以上都是负样本因此准确率这个指标就不能够精确地反应模型的效果了。这时我们就需要加入精确率和召回率指标进行更精确的衡量比如我们采用了Precision@20和Recall@20这两个评估指标但它终究只衡量了前20个结果的精确率和召回率。
如果我们要想看到更全面的指标就要多看看Precision@50和Recall@50Precision@100和Recall@100甚至逐渐过渡到P-R曲线。
总的来说,评估指标的选择不是唯一的,而是一个动态深入,跟你评测的“深度”紧密相关的过程。而且,在真正的离线实验中,虽然我们要通过不同角度评估模型,但也没必要陷入“完美主义”和“实验室思维”的误区,选择过多指标评估模型,更没有必要为了专门优化某个指标浪费过多时间。
离线评估的目的在于快速定位问题快速排除不可行的思路为线上评估找到“靠谱”的候选者。因此我们根据业务场景选择2~4个有代表性的离线指标进行高效率的离线实验才是离线评估正确的“打开方式”。
## 小结
这节课,我们重点介绍了模型离线评估中使用的评估指标。我把它们分成了两部分,简单直接的低阶评估指标,还有复杂全面的高阶评估指标。
低阶评估指标主要包括准确率,精确率,召回率和均方根误差。**准确率是指分类正确的样本占总样本个数的比例,精确率指的是分类正确的正样本个数占分类器判定为正样本个数的比例****召回率是分类正确的正样本个数占真正的正样本个数的比例,而均方根误差**的定义是预测值跟真实值之间差值的均方根。
高阶指标包括P-R曲线ROC曲线和平均精度均值。P-R曲线的横坐标是召回率纵坐标是精确率ROC曲线的横坐标是假阳性率纵坐标是真阳性率。P-R曲线和ROC曲线的绘制都不容易我希望你能多看几遍我在课程中讲的例子巩固一下。最后是平均精度均值mAP这个指标是对每个用户的精确率均值的再次平均。
最后,为了方便你记忆和对比,我也把所有指标的概念都总结在了文稿的表格里,你可以去看看。
<img src="https://static001.geekbang.org/resource/image/e1/1a/e1a0566473b367633f0d18346608661a.jpeg" alt="">
## 课后问题
对于我们今天学到的P-R曲线和ROC曲线你觉得它们的优缺点分别是什么呢在正负样本分布极不均衡的情况下你觉得哪个曲线的表现会更稳定、更权威一点
期待在留言区看到你对这节课的思考,我们下节课见!