推荐系统实战
好的推荐系统
个性化推荐系统需要依赖用户的行为数据。几乎所有的推荐系统应用都是由**前台的展示页面、后台的日志系统以及推荐算法系统**3部分构成的。
个性化推荐的两个条件:
- 第一是存在信息过载,因为如果用户可以很容易地从所有物品中找到喜欢的物品,就不需要个性化推荐了。
- 第二是用户大部分时候没有特别明确的需求,因为用户如果有明确的需求,可以直接通过搜索引擎找到感兴趣的物品。
预测准确度是推荐系统领域的重要指标。但是好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西。
利用用户行为数据
基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法
称为==协同过滤算法==。
用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜好的行为。隐性反馈行为指的是那些不能明确反应用户喜好的行为,隐性反馈虽然不明确,但数据量更大。
学术界对协同过滤算法进行了深入研究,提出了很多方法,比如基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph)等。
业界得到最广泛应用的算法是基于邻域的方法,分为:
- 基于用户的协同过滤算法 这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。
- 基于物品的协同过滤算法 这种算法给用户推荐和他之前喜欢的物品相似的物品。
评测指标
对用户u推荐N个物品(记为R(u)),令用户u在测试集上喜欢的物品集合为T(u)
精确率
精确率(precision)是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),也就是
由此,得到
召回率
而召回率(recall)是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。
由此得到:
==召回率描述有多少比例的用户—物品评分记录包含在最终的推荐列表中,而准确率描述最终的推荐列表中有多少比例是发生过的用户—物品评分记录==
==其实就是分母不同,一个分母是预测为正的样本数,另一个是原来样本中所有的正样本数。==
在信息检索领域,精确率和召回率又被称为查准率和查全率,
查准率=检索出的相关信息量 / 检索出的信息总量
查全率=检索出的相关信息量 / 系统中的相关信息总量
覆盖率
覆盖率反映了推荐算法发掘长尾的能力,覆盖率越高,说明推荐算法越能够将长尾中的物品推荐给用户。用简单定义如下:
该覆盖率表示最终的推荐列表中包含多大比例的物品。如果所有的物品都被推荐给至少一个
用户,那么覆盖率就是100%。
新颖度
新颖度,这里用推荐列表中物品的平均流行度度量推荐结果的新颖度。如果推荐出的物品都很热门,说明推荐的新颖度较低,否则说明推荐结果比较新颖。
基于邻域的算法
基于用户的协同过滤(UserCF)
两个步骤:
- 找到和目标用户兴趣相似的用户集合。
- 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
给定用户u和用户v,令 N(u) 表示用户u曾经有过正反馈的物品集合,令 N(v) 为用户v曾经有过正反馈的物品集合,那么可以用如下==Jaccard公式==简单计算u和v的兴趣相似度。
或者使用==余弦系数==公式:
如下的公式度量了UserCF算法中用户u对物品i的感兴趣程度:
其中, S(u,K) 包含和用户u兴趣最接近的K个用户, N(i) 是对物品i有过行为的用户集合, Wuv
是用户u和用户v的兴趣相似度, rvi 代表用户v对物品i的兴趣,因为使用的是单一行为的隐反馈数
据,所以所有的 rvi=1 。
两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。因此,John S. Breese在论文中提出了如下公式,根据用户行为计算用户的兴趣相似度: