协同过滤——推荐系统算法原理

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主他们的行为会和我的行为(品味)相似度较高,所以基于用户的推荐会更加有效。

这篇大致介绍了推荐机制的原理。原理搞清楚了,有关推荐系统的设计就会更加有据可依,而不是单纯的一句:做一下商品的推荐机制!然后就没有然后了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容