召回常用评估指标

12,754 阅读5分钟

背景

当前主流的推荐系统主要包括召回(recall,也称match)、排序(ranking)、重排(rerank)等三大模块。召回负责从海量候选集中根据user和item特征筛选出用户感兴趣的item。 当前召回现状如下:

  1. 由于①用户兴趣多元化,用户对热门、个人偏好等均有需求,②图文视频等内容多元化等原因,召回大多为多路的形式。因此各路召回之间有交叉、互补等情况。
  2. 召回的内容为排序和重排的输入,因此召回结果的好坏决定着最终推荐结果的天花板。
  3. 召回位置靠前,最终效果与排序关系甚密。当前的召回大多通过hr等指标来评估,却很难实现线下线上测评数据一致,甚至出现线下测评优秀的召回,上线之后却收益甚微甚至为负的情况。

由于以上原因,召回的评估系统较难建立。为了有助于召回算法的优化,识别模型的偏差方差,发现热门推荐和尾部个性化推荐,对齐召回和排序目标,此文总结当前常用的算法评估方式,供召回调参使用。

概述

召回指标主要分为2部分:

  1. 单路召回效果。

  2. 单路召回对剩余整体的影响。

正文

1.1 Recall、Precision、F1 @N

召回最简单的3路指标,分别为Recall(用户全部点击中有多少item被召回了),Precision(召回的item中有多少被用户点击了),由于两项与N有极大关系,因此有一个调和指标F1。R(u)为给用户u的推荐列表,T(u)为用户在测试集中点击列表,#hits为用户点击的item总数。 Recall=uR(u)T(u)T(u)=u#hitsuTRecall=\frac{\sum_uR(u){\bigcap}T(u)}{T(u)}=\frac{\sum_u\#hits}{\sum_u|T|} Precision=uR(u)T(u)R(u)Precision=\frac{\sum_u R(u){\bigcap}T(u)}{R(u)} F1=2RecallPrecisionRecall+PrecisionF1=\frac{2*Recall*Precision}{Recall+Precision} @N表示该项指标与召回个数相关,如Recall随着N的增大而增大,极端情况下N=item全集数量,此时Recall=1最大为1。而Precision随着N增大而减小,极端情况下当用户只有1个感兴趣,且该路召回第一个就是该item,Precision=1/N,那么再增大N,该值会越来越小。通常N取10,50。在实际推荐系统中可能取到100,200,多个召回队列N如何配比属于超参,且是一个巨大的搜索空间,暂没有好办法调试。

1.2 NS-Recall、NS-Precision @N

NS-Recall和NS-Precision为负采样的召回和准确率,主要针对TOP-N这类召回设计,参考论文[1]。 NS-Recall和NS-precision都需要对测试集负采样。主要用于衡量相对于随机,该算发能否发现用户兴趣。 具体方式如下:

NSrecall=#hitsTNS-recall=\frac{{\#hits}}{{|T|}} NSprecision=#hitsNT=NS_Recall(N)NNS-precision=\frac{{\#hits}}{{N·|T|}}=\frac{NS\_Recall(N)}{N} |T|为测试集item总个数。 这里与普通Recall,Precision有什么相似和不同之处呢?召回的计算相同之处为分子都是RTR\bigcap T,分母都是|T|,不同之处为普通Recall的R=|user| * N,即为每个用户在全部集合里匹配出N条item,但用户习惯不同,点击个数成幂律分布,大部分用户点击很少,但却对每个用户都推出了N条,此处相当于多引入了一个变量(用户的点击分布),使得不同时期的recall不可比较。NS-Recall的R=|T| * N,即为每个用户点过的项匹配出N个item,该值对每一个算法在不同时期都是稳定的。 Precision与NS-Precision的差异比较大。二者分子含义同上文Recall。分母也不同。Precision分母是召回个数即|user| * N,计算结果表示召回的item中有多少是用户感兴趣的。NS-Precision分母是整个点击+负采样集合,计算结果表示在整个候选集中,召回item中有多少是用户感兴趣的。同样避免了引入更多的变量,即用户点击的个数。

1.3 HR, ARHR @N

HR(Hit Rate)和ARHR(Average Reciprocal Hit-Rank 和位置信息相关)参考论文[2]。 #hits为测试集点击item数量,#user为用户数量,pip_iitemiitem_i在推荐列表经排序后的位置。ARHR度量了一个item被推荐的强烈程度,可以衡量ranking对该算法是否友好。 HR=#hits#usersHR=\frac{{\#hits}}{{\#users}} ARHR=1#usersi#hits1piARHR=\frac{1}{{\#users}}*\sum_{i}^{\#hits}\frac{1}{p_i}

1.4 MAP @K

1.5 ECS

ECS参考论文[3]。ECS(effective catalog size)的计算需要将所有item按照曝光或点击频率降序排列,i为排序后的位置,pip_iitemiitem_i出现的概率(即#itemiitem_i/#itemitem),且满足i=1Npi=1\sum_{i=1}^Np_i=1。ECS度量了item的曝光次数期望,取值在[1, N], N=内容数, 值越大,推荐越偏向长尾,值越小,推荐越偏热门。当最流行的只有一个vid时,pi=1p_i=1, ECS=1;当所有vid曝光数一样时, pi=1/Np_i=1/N,ECS=N。

ECS(N)=2(i=1Npii)1ECS(N) = 2(\sum_{i=1}^Np_ii)-1

1.6 熵

pip_i为类别i在召回集中出现的概率,熵衡量了该召回的类别多样性,值越大,推荐item的列表类别越“混乱”。该值可以检验该召回是否集中在几个热门类别。 Entropy=ipilog(pi)Entropy=\sum_ip_i*log(p_i)

1.7 KL散度

与上类似,pip_i为类别i在召回集中出现的概率。qiq_i为类别i在另一集中出现的概率,KL散度可以衡量算法召回的结果与该集合类别分布是否一致。 当qiq_i的集合为训练集时,可以衡量预测集是否和训练集类目分布一致。 当qiq_i的集合为测试集时,可以衡量预测集是否和测试集类目分布一致。 在实际应用中,经常发现某些模型类算法推荐过于泛华,热门推荐突出。KL散度可以说明某个召回算法是否集中在某几个热门类。 KL=pilog(piqi)KL = {\sum}p_i*log(\frac{p_i}{q_i})

1.8 长尾判断

推荐系统中,长尾效应十分明显,上述指标易受到头部数据的干扰, 且大部分召回对尾部的学习不如头部数据好,因此可以增加单独的长尾指标,参考论文[2]。 如图(图来自论文[2]),1%的item占据了20%的流量,可以去掉这1%,仅保留剩下的99%,用Recall,Precision等评估。

可直接判断尾部80%的视频的推荐情况。



引用:

[1]Performance of Recommender Algorithms on Top-N Recommendation Tasks

[2]Sparse Linear Methods for Top-N Recommender Systems

[3]The Netflix Recommender System- Algorithms, Business Value, and Innovation