研究生期间做了两年的推荐系统、数据挖掘方面的学术研究,因为工作的原因,近期正在整理当初的学习资料和代码,本篇主要参考资料为项亮的《推荐系统实践》。
在现实的情况中,往往物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,可以离线完成工作量最大的相似性计算步骤,从而大大降低了在线计算量,基于用户的实时性更好一些。但是具体使用的场景,还需要根据具体的业务类型来区分,User–CF偏重于反应用户小群体热点,更具社会化,而Item–CF在于维持用户的历史兴趣,比如:对于新闻、阅读类的推荐,新闻阅读类的信息是实时更新的,所以ItemCF在这种情况下需要不断更新,而用户对新闻的个性化推荐不是特别的强烈情况,用户有新行为不会导致相似用户的剧烈运动。
对于电子商务类别的,由于用户消费代价比较高,所以对个性化的精确程度要求也比较高,而一段用户有新的行为,也会导致推荐内容的实时变化协同过滤的算法缺点也很明显,除了上面的冷启动之外,往往商家的用户数量和产品数量都很多,所以矩阵的计算量会非常的大,但某个具体的用户往往买的东西又有限,所以数据同时也是高度稀疏的。
UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品,而ItemCF给用户推荐那些和他之前喜欢的物品类似的物品。从这个原理可以看到,UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。同时,从技术上来说,UserCF需要维护一个用户相似度的矩阵,而ItemCF需要维护一个物品相似度矩阵。从存储的角度来说,如果用户很多,那么维护用户兴趣相似度矩阵需要很大的空间,同理,如果物品很多,维护物品相似度矩阵代价较大。
计算复杂度
user–based方法中相似度矩阵为user–user相似度矩阵,行列数均为系统中的用户数,计算近邻用户的时候需要比较当前用户与系统中其它所有用户的相似度。系统中用户越多,相似度矩阵就越大,计算近邻用户消耗的时间也就越多;item–based方法中相似度矩阵为item–item相似度矩阵,行列数均为系统中的物品数,计算近邻物品的时候需要比较当前物品与系统中其它所有物品的相似度。系统中物品越多,相似度矩阵就越大,计算近邻物品消耗的时间也就越多。因此,当系统中用户量很大,而物品数量相对固定的时候,适合用item–based方法,例如电影、视频推荐等;当系统中物品数量很大,而用户数量相对固定的时候,适合用user–based方法,例如新闻推荐等。
适用场景
简单来讲,user–based方法更适合社交网络站点的产品推荐,而item–based方法更适合非社交网络站点的产品推荐。在社交网络站点中(例如微信、人人网等),用户之间具有很强的社交关系,相互比较信任。向用户推荐自己周围人喜欢的物品,更具说服力,也更让用户接受;相反,在非社交网络站点中(例如豆瓣、电影网站等),用户与用户之间的关系比较弱,也不存在很强烈的信任度。向用户推荐其它用户喜欢的物品,说服力不强,用户很难接受。这时候,向用户推荐与他自己曾经喜欢过的物品类似的物品,具有较强的说服力,推荐的结果也更能让用户理解。
推荐结果多样性
在实际运用中,推荐结果的多样性对用户体验有很大的影响。试想,一个用户就因为是周杰伦的粉丝,于是系统就给他推荐满屏有关周杰伦的新闻,这样的推荐系统无疑是失败的(即使它精确地捕捉到该用户是周杰伦的粉丝这一点)。因此,在设计推荐系统时必须考虑推荐结果的多样性。简单分析不难发现,item–based方法推荐结果的多样性不如user–based。item–based方法推荐的是自己历史喜欢的物品的近邻物品,也就是说,被推荐的物品永远都围绕自己的历史兴趣产生,不可能推荐与自己历史兴趣不太相关的物品。而user–based方法推荐的是自己近邻用户喜欢的物品,其它用户是自己的近邻用户,只能说明我们之间曾经共同喜欢过很多物品,对方仍然喜欢很多物品与我的历史兴趣无关,它们是隐藏在我内心深处而未表现出来的的兴趣,这些物品将会被user–based协同过滤算法推荐给我。
系统覆盖率
推荐系统的覆盖率是指系统中有多少物品可能被推荐。对于推荐系统的运营方而言,当然希望系统中的所有物品都有可能被推荐系统推荐给用户。分析发现,user–based推荐的产品多集中在热门产品里面,而item–based方法更善于推荐长尾的产品。因此,item–based推荐方法的整体覆盖率要高于user–based。
推荐精度
user–based和item–based两种协同过滤方法的精度类似。统计发现,二者推荐的内容之间存在50%的相似度,另外50%的内容各自有各自的特点。因此,通常将两个方法混用,使其互补。
用户对推荐算法的适应度
假设用户有明确的兴趣(它的历史记录聚焦在某个兴趣点上),那么,他更适应item–based推荐算法;相反,假设用户没有明确的兴趣,或者兴趣比较分散,但是该用户有很多好友,或者他的近邻用户分散比较密切,则更适应user–based推荐算法。