【王喆-推荐系统】评估篇-(task2)推荐模型评估指标

简介: 准确率 (Accuracy) 是指分类正确的样本占总样本个数的比例。

一、低阶评估指标

1.1 准确率

准确率 (Accuracy) 是指分类正确的样本占总样本个数的比例。

image.png

优点:可解释性强

缺点:当不同类别的样本比例非常不均衡的时候,占比大的类别往往成为影响准确率的最主要因素。比如,负样本占 99%,那么分类器把所有样本都预测为负样本也可以获得 99% 的准确率。

在之前的课程中,我们经常把推荐问题看作是一个点击率预估型的分类问题。这个时候,我们就可以用准确率来衡量推荐模型的好坏。但在实际的推荐场景中,我们往往会生成一个推荐列表,而不是用所谓的分类正不正确来衡量最终的效果,那我们该怎么评估一个推荐列表的效果呢?这个时候,我们就会利用到精确率和召回率这两个指标。

1.2 精确率与召回率

精确率(Precision)指的是分类正确的正样本个数占分类器判定为正样本个数的比例;

召回率(Recall)是分类正确的正样本个数占真正的正样本个数的比例。

说明:下面涉及英文缩写,第一个字母T和F代表True和False;第二个字母P和N代表阴性(Positive,即正样本)和阳性(Negative,即负样本),即预测结果。

真阳性TP:预测值和真实值都为正例;

真阴性TN:预测值与真实值都为正例;

假阳性FP:实际值为负,但预测值为正;

假阴性FN:实际值为正,但预测值为负;

可以看表格:

TP:反应预测为真的样本也是正样本的样本数。

image.png

image.png

1.3 对数损失

在一个二分类问题中,对数损失函数的定义:

image.png

y

i

是输入实例x i x_{i}x

i

的真实类别

P i P_{i}P

i

是预测输入实例x i x_{i}x

i

是正样本的概率

N NN是总样本数

面对多分类问题的时候,对数损失函数定义就变成了下面公式 4 的样子:

image.png

二分类和多分类模型的 Logloss 其实就是我们之前讲过的逻辑回归和 Softmax 模型的损失函数,而大量深度学习模型的输出层正是逻辑回归或 Softmax,因此,采用 Logloss 作为评估指标能够非常直观地反映模型损失函数的变化。所以在训练模型的过程中,我们在每一轮训练中都会输出 Logloss,来观察模型的收敛情况。

1.4 均方根误差(回归)

上面准确率、精确率、召回率、LogLoss等分类模型的评估指标,可以用于如点击率预估模型中,而如果是用于回归模型(预测一个连续值),如预测用户对某个电影的评分值是多少。

回归模型,最常用的评估指标就是均方根误差(RMSE,Root Mean Square Error)。它的公式是求预测值跟真实值之间差值的均方根:

image.png

y i y_{i}y

i

 是第 i 个样本点的真实值,y ^l \hat{y}_{l}

y

^

 

l

 是第 i 个样本点的预测值,n 是样本点的个数。那么均方根误差越小,当然就证明这个回归模型预测越精确。

小结:精确率和召回率可以反应模型在 Top n 个排序结果上的表现,但在真正的推荐问题中,n 的值是变化的,因为用户可能会通过不断的翻页、下滑来拉取更多的推荐结果,这就需要有更高阶的评估指标来衡量模型在不同数量推荐结果上的综合性能。

二、高阶评估指标

2.1 P-R 曲线

P-R 曲线,这里的 P 就是精确率 Precision,R 就是召回率 Recall。为了综合评价一个推荐模型的好坏,不仅要看模型在一个 Top n 值下的精确率和召回率,还要看到模型在不同 N 取值下的表现,甚至最好能绘制出一条 n 从 1 到 N,准确率和召回率变化的曲线。这条曲线就是 P-R 曲线。

P-R 曲线的横轴是召回率,纵轴是精确率。

对于一个推荐模型来说,它的 P-R 曲线上的一个点代表“在某一阈值下,模型将大于该阈值的结果判定为正样本,将小于该阈值的结果判定为负样本时,整体结果对应的召回率和精确率”。整条 P-R 曲线是通过从高到低移动正样本阈值生成的。如图 1 所示,它画了两个测试模型,模型 A 和模型 B 的对比曲线。其中,实线代表模型 A 的 P-R 曲线,虚线代表模型 B 的 P-R 曲线。

image.png

从图中我们可以看到,在召回率接近 0 时,模型 A 的精确率是 0.9,模型 B 的精确率是 1。这说明模型 B 预测的得分前几位的样本全部是真正的正样本,而模型 A 即使是得分最高的几个样本也存在预测错误的情况。

曲线分析:

随着召回率的增加,两个模型的精确率整体上都有所下降。特别是当召回率在 0.6 附近时,模型 A 的精确率反而超过了模型 B。这就充分说明了,只用一个点的精确率和召回率是不能全面衡量模型性能的,只有通过 P-R 曲线的整体表现,才能对模型进行更全面的评估。

AUC (Area Under Curve):AUC用于衡量P-R曲线的优劣。指的是 P-R 曲线下的面积大小,因此计算 AUC 值只需要沿着 P-R 曲线横轴做积分。AUC 越大,就证明推荐模型的性能越好。

2.2 ROC 曲线

第二个高阶指标,ROC 曲线,它也是一个非常常用的衡量模型综合性能的指标。

ROC 曲线的全称是 the Receiver Operating Characteristic 曲线,中文名为“受试者工作特征曲线”。ROC 曲线最早诞生于军事领域,而后在医学领域应用甚广,“受试者工作特征曲线”这一名称也正是来源于医学领域。

ROC 曲线的横坐标是 False Positive Rate(FPR,假阳性率),纵坐标是 True Positive Rate (TPR,真阳性率)。

image.png

和上面介绍精确度的介绍一样,这里的P 指的是真实的正样本数量,N 是真实的负样本数量;TP 指的是 P 个正样本中被分类器预测为正样本的个数,FP 指的是 N 个负样本中被分类器预测为正样本的个数。

和 P-R 曲线一样,ROC 曲线也是通过不断移动模型正样本阈值生成的。假设测试集中一共有 20 个样本,模型的输出如下表所示,表中第一列为样本序号,Class 为样本的真实标签,Score 为模型输出的样本为正的概率,样本按照预测概率从高到低排序。在输出最终的正例、负例之前,我们需要指定一个阈值,并且设定预测概率大于该阈值的样本会被判为正例,小于该阈值的会被判为负例。

【栗子1】

ROC曲线的横轴是FPRate,纵轴是TPRate,当二者相等时,即y=x,如下图,这时候ROC曲线表示:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的。

分类器对于正例和负例毫无区分能力,和抛硬币没什么区别,一个抛硬币的分类器是我们能想象的最差的情况,因此一般来说我们认为AUC的最小值为0.5(当然也存在预测相反这种极端的情况,AUC小于0.5,这种情况相当于分类器总是把对的说成错的,错的认为是对的,那么只要把预测类别取反,便得到了一个AUC大于0.5的分类器)。

image.png

【栗子2】

比如,我们指定 0.9 为阈值(又称为截断点额),那么只有第一个样本会被预测为正例,其他全部都是负例。

image.png

接下来,我们要做的就是动态地调整截断点,从最高的得分开始(实际上是从正无穷开始,对应着 ROC 曲线的零点),逐渐调整到最低得分。每一个截断点都会对应一个 FPR 和 TPR 的值,在 ROC 图上绘制出每个截断点对应的位置,再连接每个点之后,我们就能得到最终的 ROC 曲线了。那么 ROC 曲线上的点具体应该怎么确定呢?

看几个例子:

(1)当截断点选择为正无穷的时候,模型会把全部样本预测为负例,那 FP 和 TP 必然都为 0,FPRate 和 TPRate 也都为 0,因此曲线的第一个点就是 (0,0) 。

(2)当把截断点调整为 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)。

image.png

更直观的绘制 ROC 曲线的方法

(1)首先,根据样本标签统计出正负样本的数量,假设正样本数量为 P,负样本数量为 N。然后,我们把横轴的刻度间隔设置为 1/N,纵轴的刻度间隔设置为 1/P。

(2)接着,再根据模型输出的预测概率对样本进行从高到低的排序。

(3)最后,依次遍历样本。

同时,从零点开始绘制 ROC 曲线,每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,直到遍历完所有样本,曲线最终停在 (1,1) 这个点,整个 ROC 曲线就绘制完成了。

在绘制完 ROC 曲线后,我们也可以像 P-R 曲线一样,计算出 ROC 曲线的 AUC,AUC 越高,推荐模型的效果就越好。

2.3 平均精度均值mAP

平均精度均值 mAP(mAP,mean average precision)这个高阶指标,它除了在推荐系统中比较常用,在信息检索领域也很常用。mAP 其实是对平均精度(AP,average precision)的再次平均,因此在计算 mAP 前,需要了解平均精度 AP。

假设,推荐系统对某一用户测试集的排序结果是 1, 0, 0, 1, 1, 1。其中,1 代表正样本,0 代表负样本。现在计算这个序列中每个位置上的 precision@N(基于Top N 排序结果的精确率)。结果如下表。

image.png

每个位置的precision@N值

计算平均精度 AP 的时候,我们只取正样本处的 precision 进行平均,根据得到的表格 AP =(1/1 + 2/4 + 3/5 + 4/6)/4 = 0.6917。

如果推荐系统对测试集中的每个用户都进行样本排序,那么每个用户都会计算出一个 AP 值,再对所有用户的 AP 值进行平均,就得到了 mAP。也就是说,mAP 是对精确度平均的平均。

注意:mAP 的计算方法和 P-R 曲线、ROC 曲线的计算方法是完全不同的,因为mAP 需要对每个用户的样本进行分用户排序,而 P-R 曲线和 ROC 曲线均是对全量测试样本进行排序。

三、合理选择评估指标

除了这些评估指标,还有很多其他的推荐系统指标,比如归一化折扣累计收益(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@50,Precision@100 和 Recall@100,甚至逐渐过渡到 P-R 曲线。

小结:

(1)评估指标的选择不是唯一的,而是一个动态深入,跟你评测的“深度”紧密相关的过程。而且,在真正的离线实验中,虽然我们要通过不同角度评估模型,但也没必要陷入“完美主义”和“实验室思维”的误区,选择过多指标评估模型,更没有必要为了专门优化某个指标浪费过多时间。

(2)离线评估的目的在于快速定位问题,快速排除不可行的思路,为线上评估找到“靠谱”的候选者。因此,我们根据业务场景选择 2~4 个有代表性的离线指标,进行高效率的离线实验才是离线评估正确的“打开方式”。

四、作业

P-R 曲线和 ROC 曲线,它们的优缺点分别是什么呢?在正负样本分布极不均衡的情况下,你觉得哪个曲线的表现会更稳定、更权威一点?

【答】ROC曲线。

FPR=FP/N,TPR=TP/P,当我们将负样本复制10倍时,TPR显然不会变,FPR是负样本中被预测为正样本的比例,这其实也是不变的,那整个ROC曲线也就没有变。PR曲线,精确率P=TP/(TP+FP),TP不变,FP增大,而召回率R没有变,显然ROC曲线更稳定一些。

五、课后答疑

(1)工业界在用指标评估排序列表结果时,最最常用的指标是啥?cmu的搜索引擎这门课,我们教授说MAP和NDCG是最常用的,其中NDCG应该是效果最好的,因为NDCG考虑到了每个数的实际相关性和模型预测出的排序顺序。

【答】离线主要用AUC和gAUC。但工业界离线指标主要是参考作用,最重要的还是在线指标。

(2)Diversity在推荐系统中重要吗?如果重要的话,是不是除了以上这些指标,还需要用到诸如Precision-Intent aware@K和alpha-NDCG这些指标进一步分析模型效果呢?

【答】diversity比较重要,但一般是secondary metric,一般不作为主要优化的指标

(3)在实际工作中,一般是如何定义正样本和负样本的呢?首先,这个正样本和负样本应该是应用户而异吧?其次,以电影推荐为例,对于某个用户A,我们是把用户A之前看过的电影都定义成正样本,然后没有看过的电影都标记为负样本嘛?还是有其他什么方法?

【答】正样本比较好说,就是你定义的一些正向的行为,比如点击、播放、购买等等。负样本其实看你的选择了,有纯random的,也有曝光未点击等等。

(4)个性化推荐,不是每个人的推荐结果都不一样吗。为啥说ROC、P-R是全量数据,我认为是针对每个人的全量物品推荐,文中的全量是指全量物品吗。mAP严格意义上说是用到了全量的用户和物品。

【答】ROC曲线,P-R曲线是对全量样本在一起排序,不区分用户,所以这里说是全量数据。

(5)通过confusion matrix(混淆矩阵)理解precision,recall以及TPR,FPR会更加形象些。

Reference

(1)https://github.com/wzhe06/Reco-papers

(2)《深度学习推荐系统实战》,王喆

相关文章
|
1月前
|
机器学习/深度学习 数据采集 搜索推荐
使用Python实现智能食品推荐系统的深度学习模型
使用Python实现智能食品推荐系统的深度学习模型
107 2
|
2月前
|
机器学习/深度学习 搜索推荐 大数据
深度解析:如何通过精妙的特征工程与创新模型结构大幅提升推荐系统中的召回率,带你一步步攻克大数据检索难题
【10月更文挑战第2天】在处理大规模数据集的推荐系统项目时,提高检索模型的召回率成为关键挑战。本文分享了通过改进特征工程(如加入用户活跃时段和物品相似度)和优化模型结构(引入注意力机制)来提升召回率的具体策略与实现代码。严格的A/B测试验证了新模型的有效性,为改善用户体验奠定了基础。这次实践加深了对特征工程与模型优化的理解,并为未来的技术探索提供了方向。
135 2
深度解析:如何通过精妙的特征工程与创新模型结构大幅提升推荐系统中的召回率,带你一步步攻克大数据检索难题
|
2月前
|
机器学习/深度学习 算法 搜索推荐
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
46 4
|
2月前
|
机器学习/深度学习 搜索推荐 TensorFlow
使用Python实现智能电子商务推荐系统:深度学习模型详解
使用Python实现智能电子商务推荐系统:深度学习模型详解
233 4
|
3月前
|
搜索推荐 算法
模型小,还高效!港大最新推荐系统EasyRec:零样本文本推荐能力超越OpenAI、Bert
【9月更文挑战第21天】香港大学研究者开发了一种名为EasyRec的新推荐系统,利用语言模型的强大文本理解和生成能力,解决了传统推荐算法在零样本学习场景中的局限。EasyRec通过文本-行为对齐框架,结合对比学习和协同语言模型调优,提升了推荐准确性。实验表明,EasyRec在多个真实世界数据集上的表现优于现有模型,但其性能依赖高质量文本数据且计算复杂度较高。论文详见:http://arxiv.org/abs/2408.08821
96 7
|
2月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统的矩阵分解和FM模型
推荐系统的矩阵分解和FM模型
24 0
|
6月前
|
机器学习/深度学习 搜索推荐 算法
基于深度学习神经网络协同过滤模型(NCF)的图书推荐系统
登录注册 热门图书 图书分类 图书推荐 借阅图书 购物图书 个人中心 可视化大屏 后台管理
13146 2
基于深度学习神经网络协同过滤模型(NCF)的图书推荐系统
|
5月前
|
机器学习/深度学习 数据采集 搜索推荐
打开黑盒神经网络!港大推出全新会说话的推荐系统大模型XRec,从黑盒预测到可解释
【7月更文挑战第2天】港大研发XRec模型,将可解释性引入推荐系统。XRec结合大型语言模型的语义理解与协同过滤,生成推荐的文本解释,提升透明度。该模型无关设计允许与各类推荐系统配合,增强用户体验。然而,计算资源需求高、数据质量和用户理解能力可能影响其效果。[查看论文](https://arxiv.org/pdf/2406.02377)**
78 11
|
6月前
|
搜索推荐 算法 UED
基于Python的推荐系统算法实现与评估
本文介绍了推荐系统的基本概念和主流算法,包括基于内容的推荐、协同过滤以及混合推荐。通过Python代码示例展示了如何实现基于内容的推荐和简化版用户-用户协同过滤,并讨论了推荐系统性能评估指标,如预测精度和覆盖率。文章强调推荐系统设计的迭代优化过程,指出实际应用中需考虑数据稀疏性、冷启动等问题。【6月更文挑战第11天】
1103 3
|
7月前
|
数据采集 机器学习/深度学习 搜索推荐
使用Python实现推荐系统模型
使用Python实现推荐系统模型
156 1