用户活跃度和物品流行度的关系
我们认为,新用户倾向于浏览热门的物品,老用户会逐渐开始浏览冷门的物品。用户越活跃,越倾向于浏览冷门的物品。
仅仅基于用户数据设计的推荐算法一般称为协同过滤算法,协同过滤算法也分为不同种类,比如基于邻域的方法、隐语义模型、基于图的随机游走算法等。其中应用的最广的是基于邻域的方法,而基于邻域的方法主要包括以下两种:
- 基于用户的协同过滤算法:给用户推荐和他兴趣相似的用户喜欢的物品
- 基于物品的协同过滤算法:给用户推荐和他之前喜欢的物品相似的物品
简便起见,我们通常使用准确率、召回率、覆盖率和新颖度来对算法进行离线实验,覆盖率就用最简单的覆盖率定义,新颖度用推荐物品的平均流行度代替。
基于邻域的算法
基于用户的协同过滤算法
基于用户的协同过滤算法主要包括两个步骤:
- 找到和目标用户兴趣相似的用户集合
- 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户
第一步的关键就是找到和目标用户兴趣相似的用户,我们可以用两个用户兴趣的交集比上兴趣的并集来求得相似度(Jaccard相似度),或者利用余弦相似度计算。
如果用余弦相似度:
分子是两个用户兴趣交集的模,分母是两个用户兴趣的模的乘积的平方根。
要注意的是,有很多用户之间根本就没有兴趣的交集,所以就不需要浪费时间在这种情况的计算上。
得到用户之间的兴趣相似度之后,UserCF算法会推荐给用户和他兴趣最相似的K个用户最喜欢的若干个物品。
判断该用户u
对某一件物品i
的感兴趣程度时的公式如下:
也即用K个和他兴趣最相似用户的平均兴趣代表这个用户的兴趣。w
代表两个用户兴趣之间的相似程度,r
指感兴趣程度的大小,这里统一为1。Σ下面的意思是,K个和u
兴趣最相似的用户,而且同时要对物品i
有过行为。可以这么理解,如果这K个用户都没有对某个物品有过行为,那基本就可以认为他们对该物品都不感兴趣,就不应该加到式子中。
换句话说,这K个用户,与用户u
的相似度决定了他们的话语权,他们表决的方式就是自己是否对该物品有过正面行为。
最后我们只需要取感兴趣程度TopN的物品出来推荐给用户就好了,当然还要去掉该用户已经有过行为的物品。
K是UserCF算法的一个重要参数。K的选取会影响UserCF算法的结果。
一般进行算法评测时,我们会有两个标准算法,分别是MostPopular和Random算法,一个是按最高流行度来,一个是完全随机,都只是简单的去掉用户有过行为的物品。
UserCF算法的平均性能要远好于以上两个算法。