炼丹笔记干货
作者:九羽
对推荐结果的评估一直都是十分重要的环节,一个推荐算法或者说排序的优劣直接体现在这些评估指标上。具体地,有三种方式,分别是产品数据层面、机器学习算法层面、用户体验层面。
推荐系统产品上,最能体现系统、算法在业务层面的价值,因为一个再牛逼的产品,无法产生实际的价值,甚至是负收益,那在未来也可能只是昙花一现。而怎么在产品数据层面评价推荐系统呢,无非就是我们最熟悉的那些KPI指标。主要的评估指标有日/月活跃用户(DAU/MAU)、用户互动量/率(包括转赞评等)、用户停留时长、内容消耗量、用户屏蔽/客诉量等。
机器学习算法上,主要是AUC, Precision@K, Recall@K, AveragePrecision, NDCG等指标。
用户体验上,主要是针对用户调研反馈,通过满意度、丰富度等方式收集真实的用户对推荐系统在使用体验上的意见。
一个再牛逼的产品,无法产生实际的价值,甚至是负收益,那在未来也可能只是昙花一现。而怎么在产品数据层面评价推荐系统呢,无非就是我们最熟悉的那些KPI指标。主要的评估指标有日/月活跃用户(DAU/MAU)、用户互动量/率(包括转赞评等)、用户停留时长、内容消耗量、用户屏蔽/客诉量等。
同时,在推荐产品的不同阶段,在不同业务(货)、不同的场景(场)、针对的用户群体(人)都有不同的衡量指标,比如:
实际工作中,每次迭代推荐系统,通常都会进行AB实验,考虑对以上指标的影响,如果实验整体正向并且效果显著,那么我们会考虑把实验策略推全到全部用户上。关于AB实验,可以参考《流量为王:ABTest流量分层分桶机制》一文。
机器学习层面的评估,炼丹笔记之前整理过《是不是你的模型又线下线上不一致啦?》一文。在评估推荐算法的效果时,能不采样就不采样。
Item推荐评估
对于推荐最常用的评估机制如下:假设我们有个商品需要推荐,给定一个(一般是某个用户或者搜索中的query),我们设计了一个推荐算法, 会返回给我们一个个商品的排序列表, , 表示预测的排序。例如表示算法会给推荐两个相关的商品,并且推荐的位置为3和5.然后我们使用某个评估指标对我们的推荐进行评估,一般我们会对一个集合(例如用户集合)求个均值:
机器学习评估
此处我们介绍在推荐系统中常见的几种评估指标。以及它们对应的计算方法。
在实践中,尤其是很多大型的平台,用户和商品都是亿级别的,对这种级别的数据进行排序不仅会耗费大量的计算资源,而且还要等很久的时间,所以大家都会选择采样观察指标。很多时候大家会选择采样个无关的商品然后加上相关的商品再去计算指标,其实只需要保证采样之后计算得到的指标和我们的全量数据计算得到的指标是保证相对大小的,那么一般是没有任何问题的。
指标详解
排序指标局限性:
1)GAUC
以user为group,计算每个user group样本的auc,然后根据所有用户的impression量做加权平均,就得到GAUC。线上真实环境下,关心的是CTR、CPM、CVR等实际收益,所以评估的是 CTR( User — Item ) 是否够准确,也即User1选哪个Item,最后CTR更高。所以线下,算法1比算法2效果好,但是线上却未必。线上和线下的评估目标并不对等。
为了解决这个问题,关键是线下能评估 CTR( User,Item ),也即消去User带来的差异,引入GAUC。计算公式如下:
GAUC应用的注意点:
比如考虑这样的场景:
在一个电商网站上,一个用户访问到一个店铺,店铺需要对这个用户个性化地展示店内的部分商品,如果我们有一个随机展示策略,已经积累了足够置信的数据,包括用户访问店铺对每个展示的商品的pv,click日志。
那么离线评估GAUC如果选择group来评估一个算法好坏呢?
这个场景如果说值取用户作为group的划分依据是不合理的,因为用户可能会在多个店铺都有pv,click日志,算法的目的是用户进到某个店铺之后,如果个性化的展示店铺里用户感兴趣的宝贝,吸引点击促成后续的成交转化。以用户为粒度,流量中就包含了其他店铺的宝贝,店铺之间的点击率本身就存在差异,这个差异会反应在GAUC的结果中,但是这个是算法不应该关心的问题。所以应该选择的是用户、店铺这个粒度作为流量划分的group。
这一点也非常重要,而且有时会忽略这个问题,比如我们线上实验了多个算法策略,得到了每个算法策略的效果对比,我们想离线计算一下GAUC指标是否和线上策略的效果是一致的,这时一个容易犯的错误就是对各个算法策略的流量分别计算GAUC值,然后比较。正确的做法是选择其中某个算法策略的流量,离线用另外几个算法对这个流量进行打分,在同样的流量下得到的GAUC值才是可比的。
2)MRR(Mean Reciprocal Rank):
把标准答案在被评价系统给出结果中的排序取倒数作为它的准确度,再对所有的问题取平均。
例如:
平均MRR 为(0.67+1+0.98)/3 ≈ 0.88
3)NDCG(Normalized Discounted Cumulative Gain)
这个指标通常是用来衡量和评价搜索结果算法、推荐算法。
DCG的两个思想:
1、高关联度的结果比一般关联度的结果更影响最终的指标得分;
2、有高关联度的结果出现在更靠前的位置的时候,指标会越高;
根据推出的Item列表,定义DCG如下:
nDCG 为 normalized DCG,通过如下公式计算每个用户 i 的nDCG:
例如:
对于,
DCG(id1)= 0 + { 1/log(2,2) + 1/log(2,6) } ≈ 1.39
DCG(id2)= 1 + { 0 } ≈ 1
DCG(id3)= 0 + { 1/log(2,2) +1/log(2,3) +1/log(2,7) } ≈ 1.98
DCG(id4)= 0 + { 1/log(2,2) +1/log(2,7) } ≈ 1.35
计算nDCG,标准化的目的在于,用户item量越少,预测命中就越困难。
nDCG(id1)= DCG(id1)/(1+{1/log(2,2)})≈ 0.695
nDCG(id2)= DCG(id2)/(1)≈ 1
nDCG(id3)= DCG(id3)/(1+ 1/log(2,2) +1/log(2,3))≈ 0.753
nDCG(id4)= DCG(id4)/(1+ 1/log(2,2) )≈ 0.675
所以,id1,2,3,4,的nDCG值为(0.695+1+0.753+0.675)/4
4)MAP(Mean Average Precision)
此处对MAP进行的定义如下:
其中,yij表示排序中第 j 个排序结果对于用户User i 是否被命中(点击/下单),是为1,否为0。其中,
例如:
则根据AP计算公式:
ID1的AP值为:
AP = [(0*0 +(1/2)*1+(1/3)*0 +(1/4*0 +(1/5)*0 +(2/6)*1 + (2/7)*0 ) ] / 2 ≈ 0.417
ID2的AP值为:
AP = [ ( 1*1+(1/2)*0+(1/3)*0 +(1/4)*0 +(1/5)*0 +(1/6)*0 +(1/7*0 ) ] / 1 = 1
ID3的AP值为:
AP = [ ( 0*0+(1/2*1 +(2/3*1+(2/4*0+(2/5*0 +(2/6*0 +(3/7*1 ) ]/ 3 ≈ 0.532
ID4的AP值为:
AP = [ ( 0*0 + (1/2)*1 + (1/3)*0 + (1/4)*0 + (1/5)*0 + (1/6)*0 + (2/7)*1 ) ] / 2 ≈ 0.393
MAP =(0.417+ 1+0.532+0.393)/4 ≈ 0.5855
注:AP的最大值为1(也就是当命中的全部排在不命中的前面的时候)
在用户体验上,主观评估满意度、新颖性、惊喜度等。因为很多用户体验并不能用数据衡量,往往需要用户凭主观感受打分来反映。具体做法有很多种,比如:
1)给出两篇内容,让用户进行点对点的对比,线上AB测试。
2)给单篇内容提供打分选项,建议用户从内容与自身偏好的相关性、内容的信息量等角度给予1~5分的评分等,从直观的用户打分来实现。
3)以提出开放性问题的方式来收集用户对自己信息流的反馈,比如电话调研等。
大多数产品数据有其局限性,因为他们是显性而被动的。比如说,你给用户推送了一个博眼球的低俗内容,用户在当下可能是会去点开看的,所以数据上是好的。但用户可能心里对这个内容的评价是低的,连带着对作为内容平台的产品也会看轻,长此以往对产品的伤害是巨大的,此处引用宋一松@知乎的理解。灵活调整评价体系,让推荐系统更好的服务业务发展,才能让推荐系统永葆生机。
参考资料