大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

八分钟就看懂 | 推荐系统 (协同过滤) 原来这么简单

上礼拜刚在Amazon买了TOTORO的汽车贴纸,这几天打开Amazon都是这些相关的推荐。

哈哈,不管你是在国内,还是国外,用淘宝还是Amazon,你应该都有这种体验吧;

有时候,哪怕你没有买,只有浏览了几样商品,这些网站也会给你一些相关推荐。

不懂推荐系统背后原理的人,会觉得,
“哇!这原来就是传说中的人工智能推荐啊,好了解我哦”

懂得人:“哦,这个网址,背后用的是哪个算法啊。”

今天,不管你懂不懂,八分钟保证你看懂推荐系统背后的原理。

01 日常生活中的2种简单的推荐方法

  • 第一种就是非定制的推荐系统;
  • 第二种就是定制化的推荐系统。
什么叫做非定制化的推荐系统呢?

简单来说就是,什么最热卖,什么关注的人多,就推荐你什么。

比如,水果店老板发现最近西瓜销量排第一,于是呢,老板逢人就推荐西瓜。

这样就产生一个问题了。
一个有糖尿病的老爷爷去买水果,老板也向他推荐西瓜。如果你是这位老爷爷,你肯定要不高兴了吧。

“糖分这么高,还使劲推荐我这个,还是换一家吧。”

原本好好的生意,就这样泡汤了。

老板,想了想,我是不是应该改变一下推荐方法啊。

比如,年纪大的人,我推荐猕猴桃,维生素丰富还能降血糖。小姑娘呢,可以推荐她们柠檬,美白又减肥。

上面的故事,就是平时我们日常生活中,会用到的推荐系统:

定制化的推荐系统,和非定制化的推荐系统。

02 定制化推荐系统的推荐方法

讲到定制化的推荐系统里面常用的方法,一般常用的有两大类。

第一种:协同过滤(collaborative filtering),什么是协同过滤呢,这个我们过会详细讲,因为这是目前蛮常用的推荐方法。

第二种:基于内容的推荐(content-based recommendation)。

基于内容的推荐大致是,我看了一篇关于足球的报道,之后又向我推荐了足球的相关报告。里面用的技术就是基于内容的推荐。

还有一些其他的推荐方法,比如co-occurrence,或者把几种方法的结果都综合组合一下的方法。

今天这篇文章,主要就是讲的是推荐系统里的明星算法,也就是前面说的第一种:协同过滤 (collaborative filtering)~~

03 协同过滤是什么

协同过滤这个算法,目的就是找相似。
其中:找相似,可以是找相似的人,也可以找相似的东西。
  • 比如,我们找到相似的一群人,我们就能用其中一些人喜欢的东西,推荐给另一个人;

  • 找相似的东西的,如果一个人喜欢一样东西,那么我再推荐她另一样东西,因为这两样东西很相似。

讲了这个两个例子,是不是觉得协同过滤最重要的就是找相似啊,哈哈,那我们就讲讲这个算法的核心部分,怎么找相似。

04 协同过滤相似怎么找

我们都知道,坐标里面的两个点,如果他们的夹角越小,那么这两个点越相近(这里肯定有人要问为什么不是距离,这个问题后面会说)。

下面我们做个小练习,回顾一下初中知识,

  • 第一张图两个从原点出发的点,他们之间的夹角是30度,cos是0.86;
  • 第二张图夹角是90度,cos是0;
  • 第三张图夹角是150度,cos是-0.86。

是不是发现,角度越小,cos就越接近1,角度越大,cos就越接近-1。

那找相似我们就能直接用cos的大小来描述啦。

上面这个问题,用初中知识就能算出cos。

但是现实生活的例子是很复杂的呀,比如突然从xy轴的两维, 变成xyz的三维,或者很多维的话,算cos怎么办?

05 相似度的计算公式

下面引出相似度的计算公式,我们举个例子,具体讲下这个公式含义。
A点坐标是(0,2,3);
B点坐标是(5,2,0)

那这两个点的cos就是
分子: 0* 5+2* 2+3* 0 = 4
分母:sqrt(0^2 + 2^2 + 3^2) * sqrt(5^2 + 2^2 + 0^2) = 19

分子除以分母,得出来cos = 0.21。

根据我们之前说的越相似,cos越接近于1来看。你说,A点和B点,算是接近还是不接近呢?

06 化妆品网站的推荐例子 (找相似的人user-based)

来讲一个电商网站的推荐例子。

小美一直喜欢在网上买化妆品,今天晚上,她又打开了常去的网站,逛逛。

这时候,网站的主页上,正好有一个定制化推荐广告位,需要给小美推荐一个美妆产品。

小美呢,以前在这个网站上买过口红,眼影和香水,还给她们评价給过分。

除了小美的购买的记录,我们还知道,其他人的购买记录和评分,比如小丽,小红,小花。

我们是不是能够利用其他人的信息,来找到小美最可能买的东西,推荐给她呢?

这样问题变得很简单了,只要用我们之前说的,找小美和其他所有人之间的cos,然后挑几个最接近她的人,看她们买过什么,给的评价怎么样,然后推荐给小美,就行了。

首先第一步,我们先产生一个表格,竖着的是人,横着的是化妆品,里面内容是她们给的化妆品评分。

第二步,没有评分的化妆品,我们假设这些人都打0分。
这样4个小女孩,就变成了之前公式里的4个点。
小美(4,0,0,5,1,0,0)
小丽(5,5,4,0,0,0,0)
小红(0,0,0,2,4,5,0)
小花(0,3,0,0,0,0,3)


根据前面的公式,我们算出来

  • 相似度(小美,小丽) = 0.38
  • 相似度(小美,小红) = 0.32
  • 相似度(小美,小花) = 0

这样看下来,小美和小丽是相对比较相似的,然后是小红。

通常情况下,我们一般会挑和小美1~3(N)个的相似的人,看他们的评价,综合算出最后推荐给目标人群的产品。

这个例子里面,我们挑2个人,小丽和小红,来综合算出推荐给小美的东西。

由于7样产品里面,小美买过3样,有4样还没有买过和评价过,所以,我们只要知道,另外4样小美可能会评价的分数,那么我们就可以挑最高的推荐给她。

利用小丽,和小红的评价分数和她们与小美相似度,我们就能推算出小美的评价分数.

这里,我们用到的是平均加权方法。
  • 小美会给粉饼的打分是 = (5 *0.38 + 0 * 0.32)/(0.38+0) = 5
  • 小美会给粉饼的打分是 = (4 * 0.38 + 0 * 0.32)/(0.38+0) = 4.8
  • 小美会给乳液的打分是 = (0 * 0.38+5 * 0.32)/(0+0.32) = 5
这样粉饼和润肤露都是5,但由于小丽和小红的相似度最高,她给粉饼是5分,所以我们推荐粉饼给小红。

等等!让我们倒退到第二步开头,


第二步,没有评分的化妆品,我们假设这些人都打0分。

打0分合理吗?
谁说,她们一定都会给那些没有买过、评价过的化妆品,打0分呀。
如果一个人以前给2个产品分别打过4分,2分。
然后,我们取一个平均值:3分。把这个3分,作为没买过东西的可能打分,是不是更合理呢?

对的,完全正确。

这个方法在统计里面我们叫做标准化。标准化,不仅解决之前说的不合理性,还能解决每个人的评价标准差异。

比如,有人自认为5分就是她的最高分,而有些人比较严格觉得3分就是她认为的最高分。但是,其实3分,5分,都是这些人心目中的最高分。

标准化,就解决了这个问题。

我们回到之前的表格,在没有评分的地方,我们算出平均值填进去。比如小美的平均值就是(4+5+1)/3 = 10/3; 小丽是(5+5+4)/3 =14/3。。。


为了达到标准化每个人的评价要求差异,我们将每个人的平均值就变成以0为中心,打分低于平均分的是负的数,高于平均分为正数。

公式是(分数-平均分)。

这样我们有了标准化的打分表,重新算一遍小美和其他人的相似度,取和她最相似的人,综合平均她们平均打过的分数,选出小美可能会打分最高的推荐给她。

07 化妆品网站的推荐例子 (找相似的物item-based)

记得我之前说,
"
找相似,可以是找相似的人,也可以找相似的东西。
比如,我们找到相似的一群人,我们就能用其中一些人喜欢的东西,推荐给另一个人;
找相似的东西的,如果一个人喜欢一样东西,那么我再推荐她另一样东西,因为这两样东西很相似呀。

"
上面那个例子就是找相似的人,现在我们说下找相似的东西。

有一天,小美又上网闲逛了,她买过也评分过润肤露,眼影,香水,睫毛膏,这次只剩下口红和粉饼没有买,那下一个该推荐给她口红呢,还是粉饼呢?

和人人相似一样,物物相似的表格变成了,竖过来的是化妆品,横过来的是人。

根据之前的顺序,我们算出化妆品之间的相似性,步骤也是先填平均值->标准化->算cos相似度值->挑出几个和目标物体相似的物体-> 结合物品打分和物品相似值,综合打分->挑出分数高的推荐给小美。

这样,我们算出,

  • 和口红最接近的是润肤露和睫毛膏;
  • 和粉饼最接近的是眼影和香水。

根据小美打过其他产品的分数,以及这些产品和口红、粉饼相似度,我们算出:

  • 小美给口红打分: (0.41 * 2 + 0.59 * 3)/(0.41+0.59) = 2.6
  • 小美给粉饼打分: (0.47 * 5 + 0.40 * 4)/(0.47+0.40) = 4.5


粉饼大于口红,我们推荐粉饼给小美。

08 人人相似和物物相似的推荐哪个更好

现实生活中,其实两个都有在用。但是物物相似更常用一点。因为每个人都有自己的喜好,用的不当心,容易产生反感。

比如一个男孩子买了啤酒,薯片。一个女孩子买了口红,啤酒,薯片。根据计算,男孩和女孩很相似,然后推荐口红给男孩。看起来,是不是很奇怪呀?但是如果你规则定的好,人人相似,也会有很好的效果。

推荐系统里的协同过滤就是这么简单,最后你们能猜出亚马逊给我推荐东西的背后,用的是人人相似,还是物物相似吗?

如果我的文章能带给你一点点启发,还请动动你的手指,点赞、收藏、关注吧!
你的点赞和关注,是我一直写下去的动力!
如果你还想看我的其他文章,请戳

结合日常生活的例子,了解什么是卡方检验
你被广告盯住了吗?广告的渠道和频度
先别急着分析竞争格局,谁是你的竞争对手还没弄明白呢
从做蛋糕到多重共线性(Multicollinearity)
消费者、用户和产品的关系思考
一步一步教你分析消费者大数据
从优惠券的投放人群,教你看分类模型的评判标准
数据分析师,少一点套路,多一点思路
关于数据建模变量标准化,你想知道的都在这里了
运营经理,你真的知道模型里的R平方吗?
从可视化角度浅谈如何做一份优秀的咨询PPT(一)
用可视化思维解读统计自由度
孰好孰坏?第一方数据与第三方数据
读完这篇,连小学生都看的懂什么是机器学习里的boosting
教你炼就火眼金睛,识别会说谎的数据分析
从2家Shopping Mall,看客源人群的2种分析方法