对推荐结果的评估一直都是十分重要的环节,一个推荐算法或者说排序的优劣直接体现在这些评估指标上。具体地,有三种方式,分别是产品数据层面、机器学习算法层面、用户体验层面

推荐系统产品上,最能体现系统、算法在业务层面的价值,因为一个再牛逼的产品,无法产生实际的价值,甚至是负收益,那在未来也可能只是昙花一现。而怎么在产品数据层面评价推荐系统呢,无非就是我们最熟悉的那些KPI指标。主要的评估指标有日/月活跃用户(DAU/MAU)、用户互动量/率(包括转赞评等)、用户停留时长、内容消耗量、用户屏蔽/客诉量等。

机器学习算法上,主要是AUC, Precision@K, Recall@K, AveragePrecision, NDCG等指标。

用户体验上,主要是针对用户调研反馈,通过满意度、丰富度等方式收集真实的用户对推荐系统在使用体验上的意见。

一个再牛逼的产品,无法产生实际的价值,甚至是负收益,那在未来也可能只是昙花一现。而怎么在产品数据层面评价推荐系统呢,无非就是我们最熟悉的那些KPI指标。主要的评估指标有日/月活跃用户(DAU/MAU)、用户互动量/率(包括转赞评等)、用户停留时长、内容消耗量、用户屏蔽/客诉量等。

同时,在推荐产品的不同阶段,在不同业务()、不同的场景()、针对的用户群体()都有不同的衡量指标,比如:

  • 人:针对新用户考虑的是留存;针对老用户考虑的是兴趣探索。同时,不同偏好的用户的需求不同,财经理财类用户希望内容更加权威、实时等,小白用户希望内容更加具有科普性、引导性。
  • 货:产品发展初期,更关注用户的粘性和留存,重点会放在用户的点击率、PV、阅读时长上。而产品相对成熟之后,等到追求商业变现的阶段,更多考虑的就是付费率、广告点击量等商业指标。对应的推荐系统在不同的阶段也要做相应调整。
  • 场:内容Feed流考虑的是用户的CTR、阅读时长、内容多样性。商品流考虑的用户转化,对于不同场景,我们可以使用完全不同的推荐模型,将场景隔离开。

实际工作中,每次迭代推荐系统,通常都会进行AB实验,考虑对以上指标的影响,如果实验整体正向并且效果显著,那么我们会考虑把实验策略推全到全部用户上。关于AB实验,可以参考《流量为王:ABTest流量分层分桶机制》一文。

机器学习层面的评估,炼丹笔记之前整理过《是不是你的模型又线下线上不一致啦?》一文。在评估推荐算法的效果时,能不采样就不采样。

机器学习评估

此处我们介绍在推荐系统中常见的几种评估指标。以及它们对应的计算方法。

在实践中,尤其是很多大型的平台,用户和商品都是亿级别的,对这种级别的数据进行排序不仅会耗费大量的计算资源,而且还要等很久的时间,所以大家都会选择采样观察指标。很多时候大家会选择采样个无关的商品然后加上相关的商品再去计算指标,其实只需要保证采样之后计算得到的指标和我们的全量数据计算得到的指标是保证相对大小的,那么一般是没有任何问题的。

排序指标局限性

  • 不同的排序指标的侧重点不同;
  • 排序指标要根据实际问题背景进行选择,某一个排序指标不能评价所有排序问题。

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应用的注意点:

  • group粒度的选择,会直接导致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)以提出开放性问题的方式来收集用户对自己信息流的反馈,比如电话调研等。

大多数产品数据有其局限性,因为他们是显性而被动的。比如说,你给用户推送了一个博眼球的低俗内容,用户在当下可能是会去点开看的,所以数据上是好的。但用户可能心里对这个内容的评价是低的,连带着对作为内容平台的产品也会看轻,长此以往对产品的伤害是巨大的,此处引用宋一松@知乎的理解。灵活调整评价体系,让推荐系统更好的服务业务发展,才能让推荐系统永葆生机。

更多干货,请关注公众号:炼丹笔记

个性化推荐系统该如何评估,四种不同策略的角度相关推荐

  1. 第十七节: EF的CodeFirst模式的四种初始化策略和通过Migration进行数据的迁移

    一. 四种初始化策略 EF的CodeFirst模式下数据库的初始化有四种策略: 1. CreateDatabaseIfNotExists:EF的默认策略,数据库不存在,生成数据库:一旦model发生变 ...

  2. 线程池的四种拒绝策略

    一.前言 线程池,相信很多人都有用过,没用过相信的也有学习过.但是,线程池的拒绝策略,相信知道的人会少许多. 二.四种线程池拒绝策略 当线程池的任务缓存队列已满并且线程池中的线程数目达到maximum ...

  3. 创新工具|准确识别用户需求的四种关键策略

    创新在满足用户尚未得到满足的需求中诞生,随着创新不断产生商业也随之进化,企业的持续创新增长就是这样实现的,所有如何准确识别用户需求尤为重要.本文提供四种准确识别用户需求的策略,介绍成功的创新者如何运用 ...

  4. Kubernetes_部署_k8s的四种部署策略(滚动更新、重新创建、金丝雀部署、蓝绿部署)

    文章目录 一.前言 二.滚动更新 2.1 滚动更新 2.2 实践 2.2.1 新建两个springboot项目,生成两个镜像 2.2.2 kubectl apply启动 2.2.3 将版本修改为v2. ...

  5. 线程池三大方法,七大参数,四种拒绝策略

    线程和进程: 进程: 一个程序,是执行程序的一次执行过程. 一个进程往往包含若干个线程,线程是cpu调度和执行的单位. Java默认有2个线程:main.GC 池化技术: 01:程序的运行,本质 :占 ...

  6. 关于线程池的五种实现方式,七大参数,四种拒绝策略

    一.池化技术之线程池 实现线程池视频讲解,附源码:「链接」 什么是池化技术?简单来说就是优化资源的使用,我准备好了一些资源,有人要用就到我这里拿,用完了就还给我.而一个比较重要的的实现就是线程池.那么 ...

  7. Nginx负载均衡四种分配策略

    Nginx提供了几种分配方式(策略) 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除掉. 2.weight weight代表权重,默认为1,权重越高被分 ...

  8. ThreadPoolExecutor的四种抛弃策略

    常规情况下: ThreadPoolExecutor tpe = new ThreadPoolExecutor(2, 3, 1, TimeUnit.SECONDS,new LinkedBlockingQ ...

  9. 数据可视化策略_从无见识到有见识的四种设计有影响力的数据可视化的策略

    数据可视化策略 As Alberto Cairo, a well-known information designer, professor, and the Knight Chair in Visu ...

最新文章

  1. Android TextView 去除顶部和底部留白(上下的间距有空白问题处理)
  2. 《Python从小白到大牛》第6章 数据类型
  3. 计算机网络---非归零码、曼彻斯特编码和差分曼彻斯特编码
  4. Javascript Array和String的互转换。
  5. Java内存泄漏、性能优化、宕机死锁的N种姿势
  6. elementui表格-改变某一列的样式
  7. 网络的性能指标与分组交换网络
  8. python学习list_python学习之list
  9. linux里临时设置hbase参数,在centos下配置hbase环境并简单使用hbase shell
  10. not in与NOT EXISTS亲历的差别体验
  11. PixelShuffler原理
  12. Linux 网络配置 修改DNS配置文件/etc/resolv.conf后,重启网络,DNS配置丢失
  13. XAMPP端口更改后 httpd-vhosts.conf 文件配置
  14. 计算机基础ppt_「考前秘笈」2020年3月份计算机二级MS-office考试重点
  15. Delphi7--Delphi7软件的介绍
  16. 洛谷 P5708 【深基2.习2】三角形面积
  17. Ubuntu快速下载电驴ed2k文件
  18. Class 'app\index\controller\News' not found 解决方案
  19. 什么错误是计算机检查不出来的,如何在Windows 10中修复计算机检查异常BSOD | MOS86...
  20. 计算机科学与工程系排行,校友会2017中国大学计算机科学与技术专业排行榜

热门文章

  1. UVa 12167 HDU 2767 强连通分量 Proving Equivalences
  2. [转]linux(centos)搭建SVN服务器
  3. Linux Oracle服务启动停止脚本与开机自启动[转]
  4. 人工智能技术的新突破:MIT科学家发明Church AI语言
  5. Why Most Popular JavaScript libraries doesn’t support XML with namespaces?
  6. 如何将IDEA文件提交至Gitee仓库
  7. 计算机视觉与深度学习 | 城市拒止环境下的视觉SLAM
  8. 开发实践 | Android IP查询实例(代码类)
  9. linux关闭防火墙命令firewall
  10. java 主题爬虫_主题爬虫 - 长颈鹿Giraffe - 博客园