项亮《推荐系统实践》读书笔记1-推荐系统评价指标

推荐系统评价指标

1.评分预测

预测准确度:

均方根误差(RMSE):

平均绝对误差(MAE):

关于这两个指标的优缺点,Netflix认为RMSE加大了对预测不准的用户物品评分的惩罚(平方项的惩罚),因为对系统的评测更加苛刻。研究表明,如果评分系统是基于整数建立的(即用户给的评分都是整数),那么对预测结果取整会降低MAE的误差。

2.Top N推荐:给用户一个个性化的推荐列表,预测准确率一般通过准确率和召回率度量。

令 R(u)是根据用户在训练集上的行为给用户作出的推荐列表,而T(u)是用户在测试集上的行为列表。

那么,推荐结果的召回率定义为:

推荐结果的准确率定义为:

为了全面评测Top N推荐的准确率和召回率,一般会选取不同的推荐列表长度N,计算出一组准确率/召回率,然后画出准确率/召回率曲线。

3.覆盖率

覆盖率(coverage)描述了一个推荐系统对物品长尾的发掘能力,覆盖率有不同的定义方法,最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。假设系统的用户集合为U,推荐系统给每个用户推荐一个长度为N的物品列表R(u),那么:

覆盖率为100%的推荐系统可以将每个物品都推荐给至少一个用户。热门排行榜的推荐覆盖率是很低的,它只会推荐那些热门的物品,这些物品在总物品中占的比例很小。一个好的推荐系统不仅需要有比较高的用户满意度,也要有较高的覆盖率。

但是上面的定义过于粗略。覆盖率为100%的系统可以有无数的物品流行度分布。为了更细致地描述推荐系统发掘长尾的能力,需要统计推荐列表中不同物品出现次数的分布。如果所有的物品都出现在推荐列表中,且出现的次数差不多,那么推荐系统发掘长尾的能力就很好。可以用物品在推荐列表中出现次数的分布描述推荐系统挖掘长尾的能力。如果这个分布比较平,那么说明推荐系统的覆盖率较高,而如果这个分布比较陡峭,说明推荐系统的覆盖率较低。有两个比较著名的指标可以用来定义覆盖率。

第一个是信息熵: ,其中p(i)是物品i的流行度除以所有物品流行度之和。

第二个指标是基尼系数(Gini Index): , 是按照物品流行度p()从小到大排序的物品列表中第j个物品。

评测推荐系统是否具有马太效应的简单办法就是使用基尼系数,如果G1是从初始用户行为中计算出的物品流行度的基尼系数,G2是从推荐列表中计算出的物品流行度的基尼系数,如果G2>G1,就说明推荐算法具有马太效应。

4.多样性

为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域,即推荐结果需要具有多样性。多样性推荐列表的好处用一句俗语表述就是“不在一棵树上吊死”。尽管用户的兴趣在较长的时间跨度中是不一样的,但具体到用户访问推荐系统的某一个刻,其兴趣往往是单一的,那么如果推荐列表只能覆盖用户的一个兴趣点,而这个兴趣点不是用户这个时刻的兴趣点,推荐列表就不会让用户满意。反之,如果推荐列表比较多样,覆盖了用户绝大多数的兴趣点,那么就会增加用户找到感兴趣物品的概率。因此给用户的推荐列表也需要满足用户广泛的兴趣,即具有多样性。

多样性描述了推荐列表中物品两两之间的不相似性。假设 定义了物品i和j之间的相似度,那么用户u的推荐列表 的多样性定义如下:

而推荐系统的整体多样性可以定义为所有用户推荐列表多样性的平均值:

不同的物品相似度度量函数 可以定义不同的多样性。如果用内容相似度描述物品间的相似度,我们就可以得到内容多样性函数,如果用协同过滤的相似度函数描述物品间的相似度,就可以得到协同过滤的多样性函数。

5.新颖性

新颖的推荐是指给用户推荐那么他们以前没有听说过的物品。在一个网站中实现新颖性的最简单办法是,把那些用户之前在网站在对其有过行为的物品从推荐列表里过滤掉,当然最好是把在其它网站有过行为的物品也过滤掉。

评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就越有可能有比较高的新颖性。但是,用推荐结果的平均度度量新颖性比较粗略,因为不同用户不知道的东西是不同的。因此,要准确地统计新颖性需要做用户调查。

通过牺牲精度来提高多样性和新颖性是很容易的,而困难的是如何在不牺牲精度的情况下提高多样性和新颖性。

6.惊喜度

如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过和这个推荐结果。(具体参考Guy Shani的论文。)

7.信任度

同样的推荐结果,以让用户信任的方式推荐给用户就更能让用户产生购买欲,而类似广告形式的方法推荐给用户就可能很难让用户产生购买的意愿。

提高推荐系统的信任度主要有两种方法。首先需要增加推荐系统的透明度(transparency),而增加推荐系统透明度的主要办法是提供推荐解释。只有让用户了解推荐系统的运行机制,让用户认同推荐系统的运行机制,才会提高用户对推荐系统的信任度。其次是考虑用户的社交网络信息,利用用户的好友信息给用户做推荐,并且用好友进行推荐解释。这是因为用户一般对他们的好友一般都比较信任,因此如果推荐的商品是好友购买过的,那么他们对推荐结果就和比较信任。

8.实时性

在一些网站中,因为物品(新闻、微博等)具有很强的时效性,所以需要在物品还具有时效性时就将他们推荐给用户。

推荐系统的实时性包括两个方面。首先,推荐系统需要实时地更新推荐列表来满足用户新的行为变化。很多推荐系统都会在离线状态每天计算一次用户推荐列表,然后于在线期间将推荐列表展示给用户。这种设计显然是无法满足实时性的。与用户行为相应的实时性,可以通过推荐列表的变化速率来预测。如果推荐列表在用户有行为后变化不大,或者没有变化,说明推荐系统的实时性不高。

实时性的第二个方面是推荐系统需要能够将新加入系统的物品推荐给用户,这主要考验了推荐系统处理物品冷启动的能力。对于新物品推荐能力,我们可以利用用户推荐列表中有多大比例的物品是当天新加的来预测。

9.健壮性(Robust,鲁棒性)

衡量一个推荐系统抗击作弊的能力。

在实际系统中,提高系统的健壮性,除了选择健壮性高的算法,还有以下方法:

(1) 设计推荐系统时尽量使用代价比较高的用户行为。比如攻击购买行为的代价远远大于攻击浏览行为。

(2) 在使用数据前,进行攻击检测,从而对数据进行清理。

10.商业目标

设计推荐系统时需要考虑最终的商业目标,而网站使用推荐系统的目的除了满足用户发现内容的需求,也需要利用推荐系统加快实现商业上的指标。

11.推荐系统评价指标简表

–《推荐系统评价指标综述》朱郁筱,吕琳媛


[1]: 项亮《推荐系统实践》

时间: 2024-10-08 23:41:53

项亮《推荐系统实践》读书笔记1-推荐系统评价指标的相关文章

jQuery内核详解与实践读书笔记1:原型技术分解2

上一篇已经搭建了一个非常简陋的jQuery框架雏形,如没有阅读搭建过程,请先阅读<jQuery内核详解与实践读书笔记1:原型技术分解1>初始搭建过程.接下来,完成书中介绍的剩下三个步骤: 7. 延续--功能扩展 jQuery框架是通过extend()函数来扩展功能的,extend()函数的功能实现起来也很简单,它只是吧指定对象的方法复制给jQuery对象或jQuery.prototype对象,如下示例代码就为jQuery类和原型定义了一个扩展功能的函数extend(). 1 var $ = j

程序设计导引及在线实践 读书笔记2.1 —— 鸡兔同笼

http://blog.csdn.net/pipisorry/article/details/36433305 问题描述 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外).已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物. 输入 第1行是测试数据的组数n,后面跟着n行输入.每组测试数据占1行,每行一个正整数a (a < 32768) 输出 输出包含n行,每行对应一个输入,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开

JavaScript 设计模式与开发实践读书笔记 http://www.open-open.com/lib/view/open1469154727495.html

JavaScript 设计模式与开发实践读书笔记 最近利用碎片时间在 Kindle 上面阅读<JavaScript 设计模式与开发实践读书>这本书,刚开始阅读前两章内容,和大家分享下我觉得可以在项目中用的上的一些笔记. 我的 github 项目会不定时更新,有需要的同学可以移步到我的 github 中去查看源码: https://github.com/lichenbuliren/design-mode-notes 1.currying 函数柯里化 currying 又称 部分求值 .一个 cu

推荐系统读书笔记(三)推荐系统冷启动问题

3.1 冷启动问题简介 主要分三类: 1.用户冷启动:如何给新用户做个性化推荐. 2.物品冷启动:如何将新的物品推荐给可能对它感兴趣的用户这一问题. 3.系统冷启动:如何在一个新开发的网站上设计个性化推荐系统. 解决方案: 1.提供非个性化的推荐:热门排行榜,当用户数据收集到一定的时候,再切换为个性化推荐 2.利用用户注册时提供的年龄.性别等数据做粗粒度的个性化 3.利用用户的社交网络帐号登录,导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的物品 4.要求用户在登录时对一些物品进行反馈

JavaScript设计模式与开发实践——读书笔记1.高阶函数(下)

上部分主要介绍高阶函数的常见形式,本部分将着重介绍高阶函数的高级应用. 1.currying currying指的是函数柯里化,又称部分求值.一个currying的函数会先接受一些参数,但不立即求值,而是继续返回给另一个函数,通过闭包存储起来.等到函数被真正需求要求值的时候,将之前传入的参数统一起来求值.例如,我们要计算一个月的开销,我们并不需要计算每天具体花了多少,而是需要计算月底总共花掉多少,也就是说,实际上我们只需要在月底计算一次.所以每个月的前29天,我们都只需要保存好当天的开销,到30

jQuery内核详解与实践读书笔记1:原型技术分解1

一直以来都有研究一下jQuery源代码的想法,但是每次看到jQuery几千行的代码,头就大了,没有一点头绪,也不知道从哪里开始.昨天去图书馆无意间发现了这本<jQuery内核详解和实践>,翻看了一下里面的内容,这正是我寻觅多时剖析jQuery源码的好书. 废话不多说,直入正题吧.第一章介绍了一下jQuery的起步和一些历史故事,没什么重要内容.这里直接进入第二章,jQuery技术解密,从这一章开始就全部是干货了.这一章主要分四部分:jQuery原型技术分解,破解jQuery选择器接口,解析jQ

&lt;分布式服务框架原理与实践&gt;读书笔记1

花了一段时间通读了<分布式服务框架原理与实践>.个人感触,所讲内容虽然不是实战级别,但可以从侧面领略"分布式服务"的魅力和要点. 1.<第一章 应用架构演进> 主要介绍了4个应用架构,这也基本上算是一个企业场景的严谨模式. 重要的是要理解SOA的设计原则.其中服务治理内容,可以作为研究DUBBO的理论储备. 2.第二章 分布式服务框架入门 实现思路上,课采用责任链,实现功能的动态扩展.该思想和Tomcat pipline,spring aop,intercept

软件构架实践读书笔记四

实现质量属性.这一章主要是针对第4章所说明的质量属性,来提供相应的实践战术. 首先我们要了解一下什么是战术.他可以使一个设计具有可移植性,一个设计具有高性能,而另一个设计具有集成性.实现这些质量属性依赖于基本的设计决策.战术就是影响质量属性响应控制的设计决策. 第一个是可用性的战术,可用性的战术主要是用于阻止错误发展成为故障,至少能把错误的影响限制在一定范围内,从而使修复变为可能.它的战术主要包括 1错误检测,主要有三个战术:命令/响应 ,心跳,异常. 2 错误恢复 ,它主要是准备恢复和修复系统

&lt;分布式服务框架原理与实践&gt;读书笔记2

继续阅读<分布式服务框架原理与实践> 第六章 服务路由 6.1 透明化路由 路由,可以联想下路由器,比如通过浏览器要访问某个网站,中间会经过很多路由器,但这些信息对用户来说,没有实际意义,我们只关注"是否可以上网"即可. 透明化路由的实现一般采用[注册中心] 6.2 负载均衡 消费者调用服务者提供的服务,规则包括: 随机:2.轮询:3.服务调用时延(权重):4.一致性哈希:5.粘滞连接. 熟悉nginx的,基本也是包括这些规则,原理都是相通的. 6.3 本地路由优先,可以降

你的灯亮着吗读书笔记3

<你的灯亮着吗>在大概3周时间的研读下终于读到了尾声,说实话这本书给我的启发或者说是帮助是非常大的,这本书主要讲的就是通过分析问题提供思路想法去解决问题.书中的想法能给我们提供更多的思路在我们遇到问题的时候,同时这本书也在讲着好多道理,在作者的的后记或正文引用中好多实际的道理让我们在遇到问题中能全面考虑. 书中每个主题都有若干生动有趣而又有警戒意义的故事作为主线,通过对故事中实际问题的解决,引申出作者对于问题解决领域的重要观点,在书中的最后两篇中也是讲了几个实际的问题来实际分析,书中的提到的“