- 更新时间:2018-11-24
前言
这一系列文章会来介绍推荐系统,也是我边学习边分享的过程,之前有接触过,但这次会较为系统的学习研究,所以打算把自己学到的东西整理成文章,如果有疏漏之处还请指出。
个人认为推荐算法是机器学习领域中应用最广、也是最具有商业价值的,电商领域可以发现潜在用户、增加购买率、提高商品曝广度、增加销售额,娱乐行业可以用它来寻找用户兴趣点、发现用户喜好,从而推荐相应的新闻、广告、电影等增加点击率,可以说,现在的生活每时每刻都存在推荐,可见推荐系统的应用之广。
推荐系统的数学定义
设 $ C$ 为全体用户集合,$S $ 为全部商品集合,
u
u
u 为把商品 $ S_i$ 推荐给用户
C
j
C_j
Cj 的好坏的判别函数,推荐算法则是对于
c
∈
C
c \in C
c∈C,找到
s
∈
S
s \in S
s∈S,使得
u
u
u 最大,即:
(1)
∀
c
∈
C
,
s
c
′
=
a
r
g
m
a
x
(
u
(
c
,
s
)
)
s
∈
S
\forall c \in C, s_{c}^{'}=argmax(u(c,s)) \ \ s \in S \tag{1}
∀c∈C,sc′=argmax(u(c,s)) s∈S(1)
推荐系统的评价指标
准确度
设
r
u
i
r_{ui}
rui 为用户u对物品i的实际评分, $ \hat{r}_{ui}$ 为预测评分,则有如下的评分标准:
(2)
R
M
S
E
=
∑
u
i
∈
T
(
r
u
i
−
r
^
u
i
)
2
∣
T
∣
RMSE=\sqrt{\frac{\sum_{ui \in T}(r_{ui}-\hat{r}_{ui})^2}{| T|}} \tag{2}
RMSE=∣T∣∑ui∈T(rui−r^ui)2(2)
(3)
M
A
E
=
∑
u
i
∈
T
∣
r
u
i
−
r
^
u
i
∣
∣
T
∣
MAE=\frac{\sum_{ui \in T}|r_{ui}-\hat{r}_{ui}|}{| T|} \tag{3}
MAE=∣T∣∑ui∈T∣rui−r^ui∣(3)
而对于Top N的推荐:
设
R
(
u
)
R(u)
R(u) 为根据训练建立的模型在测试集上的推荐,
T
(
u
)
T(u)
T(u) 为测试集上用户的选择,则有如下:
(1)准确率
(4)
P
r
e
c
i
s
i
o
n
=
∑
u
∈
U
∣
R
(
u
)
⋂
T
(
u
)
∣
∑
u
∈
U
∣
R
(
u
)
∣
Precision=\frac{\sum_{u \in U}|R(u)\bigcap{T(u)}|}{\sum_{u \in U}|R(u)|} \tag{4}
Precision=∑u∈U∣R(u)∣∑u∈U∣R(u)⋂T(u)∣(4)
(2)召回率
(5)
R
e
c
a
l
l
=
∑
u
∈
U
∣
R
(
u
)
⋃
T
(
u
)
∣
∑
u
∈
U
∣
T
(
u
)
∣
Recall=\frac{\sum_{u \in U}|R(u)\bigcup{T(u)}|}{\sum_{u \in U}|T(u)|} \tag{5}
Recall=∑u∈U∣T(u)∣∑u∈U∣R(u)⋃T(u)∣(5)
覆盖度
(1)覆盖率
一般来讲,覆盖率是对平台而言,表示算法对长尾物品的发觉能力:
(6)
C
o
v
e
r
a
g
e
=
∑
u
∈
U
∣
R
(
u
)
⋃
T
(
u
)
∣
∣
I
∣
Coverage=\frac{\sum_{u \in U}|R(u)\bigcup{T(u)}|}{|I|} \tag{6}
Coverage=∣I∣∑u∈U∣R(u)⋃T(u)∣(6)
在上式中,
∣
I
∣
|I|
∣I∣ 表示全集。
(2)信息熵
信息熵也常常用于衡量覆盖度,其公式如下:
(7)
H
=
−
∑
i
=
1
n
p
(
i
)
log
p
(
i
)
H= -\sum_{i=1}^{n}p(i)\log p(i) \tag{7}
H=−i=1∑np(i)logp(i)(7)
(3)基尼系数
基尼系数是在经济学中用于衡量财产分配均匀程度的指标,公式如下:
(8)
G
=
1
n
−
1
∑
j
=
1
n
(
2
j
−
n
−
1
)
p
(
i
j
)
G=\frac{1}{n-1}\sum_{j=1}^n(2j-n-1)p(i_j) \tag{8}
G=n−11j=1∑n(2j−n−1)p(ij)(8)
(4)分层流量占比
给商品按照销量分层,通过分层的销量占比来衡量覆盖率。
多样性、新颖性、惊喜性
多样性
一般来讲,多样性是对用户而言,用来衡量算法能否为用户提供多样的推荐。
设
s
(
i
,
j
)
s(i,j)
s(i,j) 表示物品i和j之间的相似度,则有:
(9)
D
i
v
e
r
s
i
t
y
(
R
(
u
)
)
=
1
−
∑
i
,
j
∈
R
(
u
)
,
i
≠
j
s
(
i
,
j
)
1
2
∣
R
(
u
)
∣
(
∣
R
(
u
)
−
1
∣
)
Diversity(R(u))=1-\frac{\sum_{i,j \in R(u), i \neq j}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)-1|)} \tag{9}
Diversity(R(u))=1−21∣R(u)∣(∣R(u)−1∣)∑i,j∈R(u),i̸=js(i,j)(9)
(10)
D
i
v
e
r
s
i
t
y
=
1
∣
U
∣
∑
u
∈
U
D
i
v
e
r
s
i
t
y
(
R
(
u
)
)
Diversity=\frac{1}{|U|} \sum_{u \in U}Diversity(R(u)) \tag{10}
Diversity=∣U∣1u∈U∑Diversity(R(u))(10)
新颖性
未曾关注的类别、作者;推荐结果的平均流行度。
惊喜性
历史上行为不相似,但另用户满意。
多样性、新颖性、惊喜性这三个指标通常需要以牺牲准确性为代价。
用户留存
在实际的工业界,用户留存能够更直接于商业价值联系在一起,提高用户留存能够给企业带来更高的商业价值,因此,在工业界会更加注重价值转化、用户留存。
推荐系统的评估
显示反馈
用户直接的主观反馈,如电影评分,是否喜欢某个推荐。其准确性高,数据量较少,获取成本高
隐式反馈
也能表现用户的需求,但是存在一些客观噪声,比如视频的点击、点赞、评论等行为;购物行为等,大多数情况下可以体现用户对商品的感受,但数据中会存在噪声,如不小心点击了视频;评论了视频,但是是diss视频或作者;购买了商品,但后来退货了等等。
评估方法
(1)问卷调查
(2)离线评估
(3)线上评估(ABTesting)
基于内容的推荐
基于内容的推荐算法更多关注的是商品本身的属性,比如在电商领域中,用户浏览了一本书,那么通过对这本书各个属性的分析,可以包括作者、书籍的研究方向、定价、大致内容,从而找到与这本书相似度较大的进行推荐,比如一用户浏览了周志华教授的《机器学习》,通过对这个行为进行分析,可能最终给这个用户推荐李航博士的《统计学习方法》他会很喜欢,甚至发生购买行为,这种基于对商品本身属性进行匹配度比对的推荐就是基于内容的推荐。基于内容的推荐常用于文本的推荐,算法的核心思想在于比对内容。
假设有一个文本数据集,包含很多个文件,设词
k
i
k_i
ki 在文件
d
j
d_j
dj 中的权重为
w
i
j
w_{ij}
wij ,定义权重向量
(
w
c
1
,
⋯
 
,
w
c
k
)
(w_{c1},\cdots,w_{ck})
(wc1,⋯,wck) ,其中,
w
c
i
w_ci
wci 表示第
k
i
k_i
ki 个词对用户
C
C
C 的重要程度,那么,如何来衡量这个重要程度呢?这就需要引入相似度这个概念。
上面已经将文本用向量表示了,现在计算文本的相似度实际上就是计算两个高维向量的相似度,两个向量的相似度可以用向量夹角的余弦值来表示,如下:
(11)
u
(
c
,
s
)
=
cos
(
w
c
⃗
,
w
s
⃗
)
=
w
c
⃗
⋅
w
s
⃗
∣
∣
w
c
⃗
∣
∣
⋅
∣
∣
w
s
⃗
∣
∣
=
∑
i
=
1
K
w
i
,
c
w
i
,
s
∑
i
=
1
K
w
i
,
c
∑
i
=
1
K
w
i
,
s
u(c,s)=\cos(\vec {w_c}, \vec{w_s})=\frac{\vec {w_c} \cdot \vec{w_s}}{||\vec {w_c}|| \cdot ||\vec{w_s}||}=\frac{\sum_{i=1}^{K}w_{i,c}w_{i,s}}{\sqrt{\sum_{i=1}^{K}w_{i,c}} \sqrt{\sum_{i=1}^{K}w_{i,s}}} \tag{11}
u(c,s)=cos(wc,ws)=∣∣wc∣∣⋅∣∣ws∣∣wc⋅ws=∑i=1Kwi,c∑i=1Kwi,s∑i=1Kwi,cwi,s(11)
基于协同过滤的推荐
协同过滤的思想则是考虑“近邻",这个在生活中很常见,比如物以类聚,人以群分,因为一群人他们的爱好相同,活着价值观相近,总之就是能找到一些共同点,所以他们才会聚在一起,那么,如果我们可以在已知偏好的用户集合中,找到与未知用户A相似的用户,将以往这些相似用户的购买记或者浏览记录推荐给未知用户A,可能对于A来讲就是有用的推荐,这就是协同过滤的主要思想,核心在于找到未知样本的相似样本,刚说的是对于人购买商品,其实反过来对于商品也同样适用的。
从上面的介绍中,我们又需要对样本进行距离测度了,即对样本进行相似度度量,那么这里我们如何选取距离测度呢?接着分析,还是买书的例子,假设用户A经常在某电商网站上面购买书籍,曾经买过或浏览过《纳兰词评注》、《纳兰词点评》、《李煜词评注》、《人生若只如初见》,用户B曾经买过或浏览过《纳兰词点评》、《李煜词评注》、《人生若只如初见》,那么我们有理由相信用户B大概率也会喜欢《纳兰词评注》这本书,因为通过上面的叙述我们认为A和B很像,相似度很高,这里面用到的距离度量就可以认为:把每本书是否浏览或购买当作一个向量,发生浏览或购买行为则记为1,否则记为0,这就形成了一个很大的打分矩阵,考虑每个用户的相似度时,具有相同购买行为的次数越多,也就越相近,这类距离测度选择多样,常用的距离测度是欧几里得距离,公式如下:
(12)
d
i
s
t
(
X
,
Y
)
=
∑
i
=
1
n
∣
X
i
−
Y
i
∣
2
dist(X,Y)=\sqrt{\sum_{i=1}^{n}|X_i-Y_i|^2} \tag{12}
dist(X,Y)=i=1∑n∣Xi−Yi∣2(12)
除此之外,还有以下几种距离测度:
(1)Jaccard相似度
(13)
J
(
A
,
B
)
=
∣
A
⋂
B
∣
∣
A
⋃
B
∣
J(A,B)=\frac{|A\bigcap B|}{|A \bigcup B|} \tag{13}
J(A,B)=∣A⋃B∣∣A⋂B∣(13)
(2)余弦相似度
(14)
cos
(
θ
)
=
a
⃗
T
⋅
b
⃗
∣
a
⃗
∣
⋅
∣
b
⃗
∣
\cos(\theta)=\frac{{\vec a}^T \cdot \vec b}{|\vec a| \cdot |\vec b|} \tag{14}
cos(θ)=∣a∣⋅∣b∣aT⋅b(14)
(3)Pearson相似度
(15)
P
e
a
r
s
o
n
(
X
,
Y
)
=
∑
i
=
1
n
(
X
i
−
μ
X
)
(
Y
i
−
μ
Y
)
∑
i
=
1
n
(
X
i
−
μ
X
)
2
∑
i
=
1
n
(
Y
i
−
μ
Y
)
2
Pearson(X,Y)=\frac{\sum_{i=1}^{n}(X_i-\mu_X)(Y_i-\mu_Y)}{\sqrt{\sum_{i=1}^{n}(X_i-\mu_X)^2} \sqrt{\sum_{i=1}^{n}(Y_i-\mu_Y)^2}} \tag{15}
Pearson(X,Y)=∑i=1n(Xi−μX)2∑i=1n(Yi−μY)2∑i=1n(Xi−μX)(Yi−μY)(15)