0.前言
沃尔玛超市的员工发现,到超市买纸尿裤的男人会顺手买啤酒。这就是经典的【纸尿裤和啤酒】的故事,也是推荐系统比较简洁明了的解释。
在探讨推荐算法原理之前,先说一个概念:协同过滤(Collaborative Filtering)。
协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。
为了方便了解,举个简单的例子。最近新上映了10部电影,你不知道看哪一部,问你周围的人,身边的人中你觉得有少数几个人跟你的观影品味一致,然后你会倾向于选择观看和你观影品味一致的人所推荐的电影,这个和你观影品味一致的人,就成了你的“邻居”。这就是协同过滤的核心思想。协同过滤要考虑到以下两点:
其一,如何确定一个用户是不是和你有相似的品位?
其二,如何将“邻居们”的喜好组织成一个排序的目录?
1.收集用户偏好
在经济学研究中,会涉及到“经济个体偏好和效用”,经济个体的偏好差异会影响个人资源的分配,以求达到最优效用,但对经济个体的偏好如何收集却没有给出明确的答案。同理,在一个系统中,需要收集用户的偏好,然后根据用户的偏好计算相似度。一般可通用户行为来判断用户偏好,下面是几种常见的用户行为:
评分:通过用户对物品的评分,可以精确的得到用户的偏好,如传统的星级评分制。
投票:通过用户对物品的投票,可以精确的得到用户的偏好。
转发:通过用户对内容的转发,可以精确的得到用户的偏好。
评论:通过分析用户的评论,可以得到用户的情感:喜欢还是讨厌。
点击:用户的点击一定程度上反映了用户的注意力,所以它也可以从一定程度上反映用户的喜好。
购买:用户的购买是很明确的说明这个项目它感兴趣。
以上都是比较通用的用户行为,我们可以给每个行为赋值,经过数据处理后,得出用户对物品的偏好。由于对用户行为的数据分析过程较为复杂,这里不展开讨论。
2.计算相似度
当我们已经知道用户的偏好后,可以根据用户的喜好计算相似用户和物品,然后基于相似用户或物品进行推荐,计算相似度的公式很多,这里选取其中一种介绍,Cosine 相似度(Cosine Similarity):
使用五分制,小琴和小华对abcd这四种物品进行打分,小琴对abcd物品的评分为1、2、2、3,可以用向量表示:x(1,2,2,3);小华对abcd物品的评分为1、0、2、0,用向量表示:y(1,0,2,0)。把这两个数据代入到公式中去,可得到小华和小琴的相似度为:
T(x,y)=(1*1+2*0+2*2+3*0)/9=0.56,即两者的相似度为0.56。值越大,两者的相似度越高。
3.推荐机制
以上知道了相似度的计算方式,就可以基于相似度为用户进行推荐了,目前的推荐机制有两种方式:基于用户的CF(User CF)和基于物品的CF(Item CF):
基于用户的CF
基于用户的协同过滤,通过用户对不同内容(物品)的行为,来评测用户之间的相似性,找到“邻居”,基于这种相似性做出推荐。这种推荐的本质是,给相似的用户推荐其他用户喜欢的内容,这就是我们经常看到的:和你类似的人还喜欢如下内容。下面这个列子可以说明:
需要给用户A推荐游戏,根据用户B和用户C对游戏的偏好行为,给A推荐游戏,从下表可以知道,基于对游戏的偏好来讲,用户A跟用户C的相似度比用户跟用户B的相似度要大,所以,系统会给用户A推荐炉石传说。
当然,举的这个例子十分简单,实际上,还需要考虑的是每个用户物品的偏好程度,虽然用户A和用户C都玩过英雄联盟,但是用户A和用户C对英雄联盟的偏好程度可能不一样,在真正的计算过程中,需要对这种偏好的程度设定一个参数,参数的大小表明用户对物品的偏好程度的大小。根据设置或调整参数的大小,得出最后的值给用户推荐商品,这样的推荐计算结果会更加严谨。
基于物品的CF
基于物品的CF的原理和基于用户的CF类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给用户。从计算的角度来看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。就是我们常见的:购买该商品的用户还购买了如下商品,等等
就是文章开头前的啤酒和纸尿裤的故事,因为超市的人员发现很多男人买纸尿裤的时候会买啤酒,根据这一用户行为,纸尿裤和啤酒的相似度较高,那么在用户购买纸尿裤的时候推荐啤酒,增加啤酒的销量。也用相同的例子来说明:
可以从下表看出,用户B和用户C有一个共同的特征,即选择了英雄联盟也会选炉石传说,说明这两个游戏之间相似度会比较高,那么会当用户A选择了英雄联盟,系统会把炉石传说也推荐给他。但是同时要注意的一点,这种情况也是属于比较理想化的一种,物品和物品之间的相似度可能不一样,也需要调整参数,这里不进行深入的探讨了。
4.User CF vs. Item CF
目前这两种不同的推荐机制适用于不同的场景。不同的业务形态选择的推荐机制肯定不一样。对于大型电商网站来说,用户的数量级远远大于spu的数量,物品相对稳定,计算物品之间的相似度并不复杂,使用Item CF会比较合适。同时从逻辑上来讲,比如我在购物网站上买了一本书,不能因为我跟其他用户相似而跟我推荐他买过或看过的,这说不过去,推荐与这本书相似度高的会比较好。
当然,在带有社交属性的系统中,User CF 的推荐机制会更加有效,我关注的PO主他们的行为会和我的行为(品味)相似度较高,所以基于用户的推荐会更加有效。
这篇大致介绍了推荐机制的原理。原理搞清楚了,有关推荐系统的设计就会更加有据可依,而不是单纯的一句:做一下商品的推荐机制!然后就没有然后了。