《推荐系统实践》算法纯享(附代码链接)(一)—— 评价指标篇

最近看了项亮大大的《推荐系统实践》一书,想借此入门推荐系统。书中有很多关于推荐系统的基础性介绍,内容由浅入深,相当平易近人。这系列博客将主要针对书中的算法部分进行梳理,并附自己实现的代码链接,以备日后查阅。

这个系列分为如下几个部分:

《推荐系统实践》算法纯享(附代码链接)(一)—— 评价指标篇
《推荐系统实践》算法纯享(附代码链接)(二)—— 协同过滤篇
《推荐系统实践》算法纯享(附代码链接)(三)—— 冷启动篇
《推荐系统实践》算法纯享(附代码链接)(四)—— UGC推荐篇
《推荐系统实践》算法纯享(附代码链接)(五)—— 借助上下文信息推荐篇
《推荐系统实践》算法纯享(附代码链接)(六)—— 借助社交网络推荐篇
《推荐系统实践》算法纯享(附代码链接)(七)—— 评分预测篇

完整代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice

下面将开始本系列的第一部分——评价指标篇

1 评价指标

评测指标可用于评价推荐系统各方面的性能。这些指标有些可以定量计算,有些只能定性描述,有些可以通过离线实验计算,有些需要通过用户调查获得,还有些只能在线评测。

1.1 用户满意度

用户作为推荐系统的重要参与者,其满意度是评测推荐系统的最重要指标。但是,用户满意度没有办法离线计算,只能通过用户调查或者在线实验获得。

在在线系统中,用户满意度主要通过一些对用户行为的统计得到。比如在电子商务网站中,用户如果购买了推荐的商品,就表示他们在一定程度上满意。因此,我们可以利用购买率度量用户的满意度。此外,有些网站会通过设计一些用户反馈界面收集用户满意度。

1.2 预测准确度

预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这个指标是最重要的推荐系统离线评测指标。

在计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录。然后,将该数据集通过时间分成训练集和测试集。最后,通过在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测行为和测试集上实际行为的重合度作为预测准确度。

主要包含两种评测方向:

  1. 评分预测

很多提供推荐服务的网站都有一个让用户给物品打分的功能。那么,如果知道了用户对物品的历史评分,就可以从中习得用户的兴趣模型,并预测该用户在将来看到一个他没有评过分的物品时,会给这个物品评多少分。预测用户对物品评分的行为称为评分预测。

评分预测的预测准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。对于测试集中的一个用户u和物品i,令 r u i r_{ui} rui是用户u对物品i的实际评分,而 r ^ u i \hat r_{ui} r^ui是推荐算法给出的预测评分,那么RMSE的定义为:

R M S E = ∑ u , i ∈ T ( r u i − r ^ u i ) 2 ∣ T ∣ RMSE = \frac{\sqrt{\sum_{u, i \in T} (r_{ui} - \hat r_{ui}) ^2}}{|T|} RMSE=Tu,iT(ruir^ui)2

MAE采用绝对值计算预测误差,它的定义为:

M A E = ∑ u , i ∈ T ∣ r u i − r ^ u i ∣ ∣ T ∣ MAE = \frac{\sum_{u, i \in T} |r_{ui} - \hat r_{ui}|}{|T|} MAE=Tu,iTruir^ui

  1. TopN推荐

网站在提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。

R ( u ) R(u) R(u)是根据用户在训练集上的行为给用户作出的推荐列表,而 T ( u ) T(u) T(u)是用户在测试集上的行为列表。那么,推荐结果的召回率定义为:

R e c a l l = ∑ u ∈ U ∣ R ( u ) ⋂ T ( u ) ∣ ∑ u ∈ U ∣ T ( u ) ∣ Recall = \frac{\sum_{u \in U} |R(u) \bigcap T(u)|}{\sum_{u \in U}|T(u)|} Recall=uUT(u)uUR(u)T(u)

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

P r e c i s i o n = ∑ u ∈ U ∣ R ( u ) ⋂ T ( u ) ∣ ∑ u ∈ U ∣ R ( u ) ∣ Precision = \frac{\sum_{u \in U} |R(u) \bigcap T(u)|}{\sum_{u \in U}|R(u)|} Precision=uUR(u)uUR(u)T(u)

1.3 覆盖率

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

C o v e r a g e = ∣ ⋃ u ∈ U R ( u ) ∣ ∣ I ∣ Coverage = \frac{|\bigcup_{u \in U} R(u)|}{|I|} Coverage=IuUR(u)

这种定义比较粗糙,如果所有的物品都出现在推荐列表中,且出现的次数差不多,那么推荐系统发掘长尾的能力才会很好。在信息论和经济学中有两个著名的指标可以用来定义覆盖率。第一个是信息熵:

H = − ∑ i = 1 N p ( i ) l o g p ( i ) H = - \sum_{i=1}^N p(i) log p(i) H=i=1Np(i)logp(i)

这里的 p ( i ) p(i) p(i)是物品i的流行度除以所有物品流行度之和。

第二个是基尼系数:

G = 1 n − 1 ∑ j = 1 N ( 2 j − n − 1 ) p ( i j ) G = \frac{1}{n-1} \sum_{j=1}^N(2j-n-1)p(i_j) G=n11j=1N(2jn1)p(ij)

这里, i j i_j ij是按照物品流行度 p p p从小到大排序的物品列表中第j个物品。

用图来说明基尼系数的计算原理为:

1.4 多样性

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

多样性描述了推荐列表中物品两两之间的不相似性。因此,多样性和相似性是对应的。假设 s i , j ∈ [ 0 , 1 ] s_{i, j} \in [0, 1] si,j[0,1]定义了物品i和j之间的相似度,那么用户u的推荐列表 R ( u ) R(u) R(u)的多样性定义如下:

D i v e r s i t y = 1 − ∑ i , j ∈ R ( u ) , i ≠ j s ( i , j ) 1 2 ∣ R ( u ) ∣ ( ∣ R ( u ) − 1 ∣ ) Diversity = 1 - \frac{\sum_{i, j \in R(u), i \neq j} s(i, j)}{\frac{1}{2}|R(u)|(|R(u) - 1|)} Diversity=121R(u)(R(u)1)i,jR(u),i=js(i,j)

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

D i v e r s i t y = 1 ∣ U ∣ ∑ u ∈ U D i v e r s i t y ( R ( u ) ) Diversity = \frac{1}{|U|} \sum_{u \in U} Diversity(R(u)) Diversity=U1uUDiversity(R(u))

1.5 新颖性

新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。

一个简单办法就是把那些用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。

对于它的评测可以用推荐结果的平均流行度,因为越不热门的物品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。

1.6 惊喜度

注意与新颖度的区别。

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

1.7 信任度

对于基于机器学习的自动推荐系统,存在信任度(trust)的问题,如果用户信任推荐系统,那就会增加用户和推荐系统的交互。

度量推荐系统的信任度只能通过问卷调查的方式,询问用户是否信任推荐系统的推荐结果。

提高推荐系统的信任度主要有两种方法。首先需要增加推荐系统的透明度(transparency),如提供推荐解释等;其次是考虑用户的社交网络信息,利用用户的好友信息给用户做推荐,并且用好友进行推荐解释。

1.8 实时性

在很多网站中,因为物品(新闻、微博等)具有很强的时效性,所以需要在物品还具有时效性时就将它们推荐给用户。实时性包括两个方面。首先,推荐系统需要实时地更新推荐列表来满足用户新的行为变化;其次是推荐系统需要能够将新加入系统的物品推荐给用户。

1.9 健壮性

任何一个能带来利益的算法系统都会被人攻击,而健壮性(即robust,鲁棒性)指标衡量了一个推荐系统抗击作弊的能力。

算法健壮性的评测主要利用模拟攻击。首先,给定一个数据集和一个算法,可以用这个算法给这个数据集中的用户生成推荐列表。然后,用常用的攻击方法向数据集中注入噪声数据,然后利用算法在注入噪声后的数据集上再次给用户生成推荐列表。最后,通过比较攻击前后推荐列表的相似度评测算法的健壮性。如果攻击后的推荐列表相对于攻击前没有发生大的变化,就说明算法比较健壮。

提升健壮性的方法有:

  1. 设计推荐系统时尽量使用代价比较高的用户行为。
  2. 在使用数据前,进行攻击检测,从而对数据进行清理。

1.10 商业目标

很多时候,网站评测推荐系统更加注重网站的商业目标是否达成,而商业目标和网站的盈利模式是息息相关的。一般来说,最本质的商业目标就是平均一个用户给公司带来的盈利。不过这种指标不是很难计算,只是计算一次需要比较大的代价。因此,很多公司会根据自己的盈利模式设计不同的商业目标。

不同的网站具有不同的商业目标。比如电子商务网站的目标可能是销售额,基于展示广告盈利的网站其商业目标可能是广告展示总数,基于点击广告盈利的网站其商业目标可能是广告点击总数。因此,设计推荐系统时需要考虑最终的商业目标,而网站使用推荐系统的目的除了满足用户发现内容的需求,也需要利用推荐系统加快实现商业上的指标。

1.11 总结

前面提到了很多指标,其中有些指标可以离线计算,有些只能在线获得。但是,离线指标很多,在线指标也很多,那么如何优化离线指标来提高在线指标是推荐系统研究的重要问题。下面是对于这些指标的总结:

对于可以离线优化的指标,书中作者的看法是应该在给定覆盖率、多样性、新颖性等限制条件下,尽量优化预测准确度。用一个数学公式表达,离线实验的优化目标是:

最大化预测目标 使得:覆盖率>A,多样性>B,新颖性>C

1.12 评测维度

在评测系统中还需要考虑评测维度,比如一个推荐算法,虽然整体性能不好,但可能在某种情况下性能比较好,而增加评测维度的目的就是知道一个算法在什么情况下性能最好。这样可以为融合不同推荐算法取得最好的整体性能带来参考。

一般来说,评测维度分为如下3种。

  1. 用户维度 主要包括用户的人口统计学信息、活跃度以及是不是新用户等。
  2. 物品维度 包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。
  3. 时间维度 包括季节,是工作日还是周末,是白天还是晚上等。

如果能够在推荐系统评测报告中包含不同维度下的系统评测指标,就能全面地了解推荐系统性能,找到一个看上去比较弱的算法的优势,发现一个看上去比较强的算法的缺点。

评价指标篇到这里就分享完了,后面将继续分享第二部分——协同过滤篇

  • 12
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值