初探推荐系统-01
Posted 疯狂哈丘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初探推荐系统-01相关的知识,希望对你有一定的参考价值。
文章目录
一、什么是推荐系统
是什么
推荐系统,顾名思义,就是向用户推荐物品或信息的系统。
推荐系统在我们的生活中随处可见:
- 在内容推送平台,比如抖音、头条、快手,推荐系统会根据你的兴趣向你推荐合适的内容
- 在电商平台,比如淘宝、京东,推荐系统会根据你的喜欢将一些物品优先放在首页
- 在社交平台,比如微博、facebook,推荐系统会向推荐你可能感兴趣的人
- 广告服务可以根据用户的兴趣针对性的投放广告
- …
为什么
我们为什么需要推荐系统?
对于用户而言(信息消费者),面对网上海量的信息,要从中找出我们感兴趣的信息,是一件非常难的事情。比如某一天我们闲来无事,想看一部电影解解闷,可是市面上的电影实在太多了,一时也不知道该看哪部电影。这时,推荐系统就可以为你选择一部你最可能感兴趣的电影。治好了你的选择困难症。
对平台而已(信息生成者),如何让自己生产的信息被广大用户关注到也是一个非常困难的事。而推荐系统就可以将这些信息针对性的推送给需要的人。拿电商平台举例,如果将用户感兴趣的物品放在用户浏览的首页,那么该物品被对应用户消费的概率将极大的提升,从而提高电商平台的销量。对于内容平台来说,好的推荐系统可以更好的留住用户,提高平台的用户留存率。
另外,推荐系统可以更好的发掘物品的长尾。
长尾理论
在了解长尾理论,先来看一个非常著名的定律:82定律。82定律相信在座的大家应该都有所耳闻。
82原则也叫二八定律,正规叫法是巴莱多定律。巴莱多定律是1897年意大利经济学家巴莱多提出的。他认为,在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%的尽管是多数,却是次要的,因此又称二八法则。
82定律在我们的生活中普遍适用:80%的销售额都来自于20%的热门商品,20%的人占据了社会财富的80%,80%的业务收入是由20%的客户创造的,20%的强势品牌,占有80%的市场份额。
然而,这个定律在互联网时代受到了挑战。美国《连线》杂志主编克里斯·安德森在2004年发表了"The Long Tail"一文并于2006年出版了《长尾理论》一书。该书指出,传统的82原则在互联网的加入下会受到挑战。
在互联网的条件下,由于货架成本低端低廉,电子商务网站往往能出售比传统零食店更多的商品。虽然这些商品绝大数都不热门,但是数量却极其庞大,总体销售额并不会输给那些热门商品。
这里我们将那些不热门的商品统称为长尾商品,热门的成为头部商品。
在传统的82定律中,头部商品的销售额可能是80%,长尾商品的销售额可能仅20%
在长尾理论中,得利于互联网低廉的货架成本,长尾商品的销售额能得到50%甚至更多。
一般而言,头部商品代表了绝大数用户的需求,而长尾商品往往代表了一小部分用户的个性化需求。因此,如果想通过发掘长尾提高销售额,就必须充分研究用户的兴趣,这正是个性化推荐系统主要解决的问题。
举个例子,某个用户喜欢玩游戏,尤其偏好动作类游戏,但是如今市面上的游戏实在太多了,用户不可能全部都了解。但有了推荐系统后,游戏平台就可以根据该用户的爱好,给他推送一些他没玩过的冷门但口碑不错的动作游戏。这类冷门的动作游戏就属于长尾商品,如果没有推荐系统主动推荐,大部分用户都不会找到并购买这些游戏。
因此,推荐系统可以很好的发掘那些长尾物品的销量。
怎么做
抛开推荐系统,我们先想象一下在生活中面对很多选择时做决定的过程。我们以看电影为例,假设我们一时不知道要看什么电影,那么我们可能采用如下方式来决定最终要看什么电影:
- 想朋友咨询。我们可能会打开聊天工具,找几个经常看电影的朋友,问他们有没有什么好看的电影可以推荐。或者打开微博,发一句"我想看电影,求推荐",然后等待热心人推荐电影。
- 我们一般都有喜欢的演员和导演。这时我们可以打开搜索引擎,输入自己喜欢的演员名,然后看看结果中还有什么电影是自己没看过的。这种方式是寻找和自己之前看过的电影在内容上相似的电影。推荐系统可以将上诉过程自动化,通过分析用户曾经看过的电影找到用户喜欢的演员和导演,然后给用户推荐这些演员或导演的其他电影。这种推荐方式在推进系统中称为基于内容的推荐。
- 我们可以查看排行榜,比如豆瓣电影排行榜,看看别人都在看什么电影,别人都喜欢什么电影,然后找一部广受好评的电影观看。这种方式可以进一步扩展:如果能找到和自己历史兴趣相似的一群用户,看看他们最近都在看什么电影,那么就能结果会比宽泛的排行榜更能符合自己的兴趣。这种方式称为基于协同过滤的推荐。
从上面的方法可以看出,推荐算法的本质是通过一定的方式将用户和物品联系起来,不同的推荐系统使用了不同的方式。上面的例子让我们了解了两种实现推荐系统的方式:
- 基于内容的推荐:找到用户感兴趣的类型,推荐给他和该类型相似的物品
- 基于协同过滤的推荐:找到和用户兴趣相似的用户,从这些相似用户中找出用户之前没接触过的物品推荐给用户
如果仔细琢磨,会发现这两个方式有个共同点,那就是寻找相似。是的,基于内容的推荐需要寻找相似的物品,基于协同过滤的推荐需要寻找兴趣相似的用户。那么,如果定义物品之间的相似度以及用户之间的相似度,是一个很重要的命题。
二、相似度算法
要判断物品、用户之间的相似度,需要一定的算法。目前常见的相似度算法有:
- 杰卡德相似系数
- 余弦相似度
- 通过距离计算相似度(比如欧式距离、曼哈顿距离)
- 皮尔逊相关系数
下面我们分别使用杰卡德相似系数和余弦相似度为大家介绍一下如何计算物品或用户之间的相似度。
杰卡德相似系数
假设现在有4个用户,他们的购买行为如下:
用户标识 | 购买物品列表 |
---|---|
u1 | a、b、d、e |
u2 | a、c |
u3 | b、c、d |
u4 | a、c、d、e |
我们来看一下如何利用杰卡德相似系数来计算这些用户之间的相似度。首先杰卡德系数的计算公式如下:
J
(
A
,
B
)
=
∣
A
∩
B
∣
∣
A
∪
B
∣
=
∣
A
∩
B
∣
∣
A
∣
+
∣
B
∣
−
∣
A
∩
B
∣
=
A
和
B
的交集
A
u
n
i
o
n
B
J(A, B)=\\frac|A \\cap B||A \\cup B|=\\frac|A \\cap B||A|+|B|-|A \\cap B|=\\fracA和B的交集A union B
J(A,B)=∣A∪B∣∣A∩B∣=∣A∣+∣B∣−∣A∩B∣∣A∩B∣=AunionBA和B的交集
J(A,B) 表示用户A和用户B之间的相似度。
公式很简单,我们先来看一下分子,A ∩ B表示用户A的购买记录和用户B的购买记录的交集。拿上面的数据举例,u1用户和u2用户的交集为:a、b、d、e ∩ a、c = a
之后来看一下分母,它的意思是A和B做union的结果(注意不是union all)。因此,拿u1用户和u2用户距离,此时union出来的结果为 a、b、d、e union a、c = a、b、c、d、e
因此我们可以得出
J
(
u
1
,
u
2
)
=
a
a
、
b
、
c
、
d
、
e
=
1
5
=
0.2
J(u_1, u_2)=\\frac\\a\\\\a、b、c、d、e\\=\\frac15=0.2
J(u1,u2)=a、b、c、d、ea=51=0.2
之后继续计算u1和u3、u4之间的相似度:
J
(
u
1
,
u
3
)
=
a
、
b
、
d
、
e
∩
b
、
c
、
d
a
、
b
、
d
、
e
u
n
i
o
n
b
、
c
、
d
=
b
、
d
a
、
b
、
c
、
d
、
e
=
2
5
=
0.4
J(u_1, u_3)=\\frac\\a、b、d、e\\\\cap\\b、c、d\\\\a、b、d、e\\union\\b、c、d\\=\\frac\\b、d\\\\a、b、c、d、e\\=\\frac25=0.4
J(u1,u3)=a、b、d、eunionb、c、da、b、d、e∩b、c、d=a、b、c、d、eb、d=52=0.4
J ( u 1 , u 4 ) = a 、 b 、 d 、 e ∩ a 、 c 、 d 、 e a 、 b 、 d 、 e u n i o n a 、 c 、 d 、 e = a 、 d 、 e a 、 b 、 c 、 d 、 e = 3 5 = 0.6 J(u_1, u_4)=\\frac\\a、b、d、e\\\\cap\\a、c、d、e\\\\a、b、d、e\\union\\a、c、d、e\\=\\frac\\a、d、e\\\\a、b、c、d、e\\=\\frac35=0.6 J(u1,u4)=a、b、d、euniona、c、d、ea、b、d、e∩a、c、d、e=a、b、c、d、ea、d、e=53=0.6
因此从杰卡德相似系数可以看出,u1用户和u4用户是相似的。
余弦相似度
余弦相似度是通过测量两个向量之间的夹角余弦值来衡量他们之间的相似程度。
如上图,A(1,2)和B(2,1)分别是两个向量,θ 是两个向量的夹角,cosθ 是夹角的余弦值。θ的取值范围是是[0,180度],对应的cosθ范围为[-1,1]
- 当cosθ等于1时,也就是θ=0,a和b的方向一致,此时可以认为它们的相似度最大
- 当cosθ等于-1时,也就是θ=180度时,a和b的方向完全相反,此时可以认为它们的相似度最小
因此,cosθ的值越大,两个向量的相似度就越大
需要注意的是,余弦相似度关注的是向量的方向,因此向量的大小并不重要。比如下图:
向量(1,2)和向量(2,1)的相似度是cosθ,和向量(4,2)的相似度也是cosθ。
知道了余弦值如何表达相似度后,我们该计算两个向量之间的余弦值呢。
首先从余弦定理出发,高中时大家应该都有学过余弦定理:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FM0SqtwS-1677574284171)(推荐系统-1.assets/image-20220928160004213.png)]
c
2
=
a
2
+
b
2
−
2
a
b
cos
θ
a
2
=
b
2
+
c
2
−
2
b
c
cos
β
b
2
=
c
2
+
a
2
−
2
c
a
cos
α
\\beginarrayl c^2=a^2+b^2-2 a b \\cos \\theta \\\\ a^2=b^2+c^2-2 b c \\cos \\beta \\\\ b^2=c^2+a^2-2 c a \\cos \\alpha \\endarray
c2=a2+b2−2abcosθa2=b2+c2−2bccosβb2=c2+a2−2cacosα
勾股定理是余弦定理的特殊情况,即α为90度时,cosα=0,此时
b 2 = a 2 + c 2 b^2=a^2+c^2 b2=a2+c2
根据余弦定理,我们可以推出
cos
θ
=
a
2
+
b
2
−
c
2
2
a
b
\\cos \\theta=\\fraca^2+b^2-c^22ab
cosθ=2aba2+b2−c2
其中a、b、c三条边的大小我们通过两个向量A、B可以求出(A、B加上坐标轴原点构成了一个三角形)。
假设有向量A(x1,x2)和B(y1,y2),那么 以上是关于初探推荐系统-01的主要内容,如果未能解决你的问题,请参考以下文章
a
2
=
(
x
1
−
0
)
2
+
(
x
2
−
0
)
2
=
x
1
2
+
x
2
2
b
2
=
(
y
1
−
0