X = set of 顾客
S = set of 商品
Utility function: X
×
\times
× S = R
R = 打分的集合
本文将主要针对以下关键问题进行阐述:
(1) 收集矩阵中已知的打分:怎么收集utility matrix中的数据
(2) 根据已知的打分推断未知的得分:我们主要关心的是未知的高分项,因为我们只想知道客户喜欢什么而不关心客户不喜欢什么
(3) 评估推断方法的优劣:怎样度量推荐方法的成功与否
Utility matrix (U)是稀疏的,因为大部分商品大部分人都没有打分
冷启动问题
1.新的商品没有打分
2.新的用户没有历史数据
1. Content-based Recommender Systems
基于内容推荐的主要思想是给用户x做推荐时,将与用户x之前高度打分的物品相似的物品推荐给x。比如做电影推荐时,可以推荐具有相同演员,编剧,类型的电影。推荐网站博客新闻时,将具有相似内容的网站进行推荐。
Item Profiles
对于每一个物品,创建一个物品profile,一个特征向量的集合。
比如对于电影来说:作者,题目,演员, 导演…
文本:文本中重要词的集合(权重可以是TF-IDF)
User profiles and Prediction:
User profile possibilities:
user的打分项profiles的加权平均,权重为它们与平均排名之间的差异
Prediction heuristic:
给定user profile x 和 item profile i,估计
u
(
x
,
i
)
=
c
o
s
(
x
,
i
)
=
x
⋅
i
∣
∣
x
∣
∣
⋅
∣
∣
i
∣
∣
u(x,i) = cos(x,i)=\frac{x \cdot i}{||x ||\cdot ||i||}
u(x,i)=cos(x,i)=∣∣x∣∣⋅∣∣i∣∣x⋅i
基于内容推荐方法的优点:
- 不需要其他用户的数据,基于商品的属性信息进行推荐,所以没有冷启动问题或者稀疏问题。
- 能够推荐与用户品味相同的商品
- 能够推荐新的或者不著名的商品
- 能够提供解释(通过列出导致该商品被推荐的content-features)
缺点: - 找到恰当的特征是困难的
- 给新用户做推荐时,如何建立一个user profile?
- 过分专业化:
推荐从来不超过用户的content profile
用户可能有多种兴趣
不能利用其他用户的质量判断?
2. Collaborative Filtering
协同过滤方法的主要思想是当为用户x做推荐时,找到N个与x的打分很相似的用户,然后基于这些用户在N上的打分来估计x的打分。
1.找到相似的用户, r x r_x rx表示用户x的打分向量。
- Jaccard相似度度量忽视了打分值的大小。
- cosine相似度度量:
s i m ( x , y ) = c o s ( r x , r y ) = r x ⋅ r y ∣ ∣ r x ∣ ∣ ⋅ ∣ ∣ r y ∣ ∣ sim(x,y) = cos(r_x, r_y) = \frac{r_x \cdot r_y}{ ||r_x|| \cdot ||r_y|| } sim(x,y)=cos(rx,ry)=∣∣rx∣∣⋅∣∣ry∣∣rx⋅ry
问题:将缺失值(没有打分的项)当做了“negative”(默认为不喜欢0分)
(因为交集为0,但是分母仍然除去了该打分项的大小)
r x = { 1 , 0 , 0 , 1 , 3 } r_x= \left\{ 1,0,0,1,3 \right\} rx={1,0,0,1,3}
r y = { 1 , 0 , 2 , 2 , 0 } r_y= \left\{ 1,0,2,2,0 \right\} ry={1,0,2,2,0} - Pearson correlation coefficient:
S x y S_{xy} Sxy 为同时被用户x和y打分的物品
s i m ( x , y ) = ∑ s ∈ S x y ( r x s − r x ′ ) ( r y s − r y ′ ) ∑ s ∈ S x y ( r x s − r x ′ ) 2 ∑ s ∈ S x y ( r y s − r y ′ ) 2 sim(x,y) = \frac{\sum_{s \in S_{xy}(r_{xs} - r'_x)(r_{ys}-r'_y)}} {\sqrt{\sum_{s \in S_{xy}(r_{xs} - r'_x)^2}} \sqrt{\sum_{s \in S_{xy}(r_{ys} - r'_y)^2}}} sim(x,y)=∑s∈Sxy(rxs−rx′)2∑s∈Sxy(rys−ry′)2∑s∈Sxy(rxs−rx′)(rys−ry′)
其中 r x ′ r'_x rx′和 r y ′ r'_y ry′是x,y的平均排名
- 根据相似性度量进行推荐:
根据上一步计算的与x相似的用户,N表示k个用户的集合,他们与x最相似并且都对产品i打过分,根据上一步计算的与x相似的用户,N表示k个用户的集合,他们与x最相似并且都对产品i打过分
预测分数为:
r x i = 1 k ∑ y ∈ N r y i r_{xi} = \frac{1}{k} \sum_{y \in N} r_{yi} rxi=k1∑y∈Nryi平均值
r x i = ∑ y ∈ N s x y r y i ∑ y ∈ N s x y s r_{xi} = \frac{\sum_{y \in N}s_{xy} r_{yi}}{\sum_{y \in N} s_{xys}} rxi=∑y∈Nsxys∑y∈Nsxyryi加权平均值
可能还有其他的技巧。
上述为User-user的协同过滤,当然还有Item-Item之间的协同过滤,即计算物品之间的相似度。
Item-Item:
- 对于item i,找到其他与其相似的items
- 基于相似的items的打分来估计i的打分
- 可以使用与user-user模型相同的相似性度量和预测函数
- 定义items i和j之间的相似度
s
i
j
s_{ij}
sij , 选择k个最近邻
N
(
i
;
x
)
N(i;x)
N(i;x)(与i最相似的且被x所打分的items) ,
r
x
j
r_{xj}
rxj用户x对物品j的打分
r x i = ∑ j ∈ N ( i ; x ) s i j ⋅ r x j ∑ j ∈ N ( i ; x ) s i j r_{xi}= \frac{\sum_{j \in N(i;x)} s_{ij} \cdot r_{xj}}{\sum_{j \in N(i;x)}s_{ij}} rxi=∑j∈N(i;x)sij∑j∈N(i;x)sij⋅rxj
常见做法(改进):
r x i = b x i + ∑ j ∈ N ( i ; x ) s i j ⋅ ( r x j − b x j ) ∑ j ∈ N ( i ; x ) s i j r_{xi}= b_{xi}+\frac{\sum_{j \in N(i;x)} s_{ij} \cdot (r_{xj}-b_{xj})}{\sum_{j \in N(i;x)}s_{ij}} rxi=bxi+∑j∈N(i;x)sij∑j∈N(i;x)sij⋅(rxj−bxj)
其中 b x i = μ + b x + b i b_{xi} = \mu + b_x +b_i bxi=μ+bx+bi,其中 μ \mu μ为电影评分的总体均值, b x b_x bx=用户x的平均打分- μ \mu μ(用户x的打分偏差),同理 b i b_i bi为电影i的打分偏差
实际中,发现item-item通常比user-user要更好,因为items更加简单,而用户有多种品味…
优点:
- 不需要做特征选择
缺点:
- 冷启动问题:需要足够的用户来找到匹配
- user/ratings矩阵很稀疏,很难找到对相同的items进行打分的用户
- First rater:不能推荐之前没有被打分过的item
- popularity bias:
不能向具有独特品味的人推荐商品
倾向于推荐热门的商品
混合模型
将基于内容的方法加入到协同过滤的方法中
对于新商品问题制作item profiles
人口统计学来处理新用户问题??
评估预测
根据已知的打分进行比较预测
-
Root-mean-square error(RMSE)
∑ x i ( r x i − r x i ∗ ) 2 \sqrt{\sum_{xi}(r_{xi}-r^*_{xi})^2} ∑xi(rxi−rxi∗)2,其中 r x i r_{xi} rxi是预测值, r x i ∗ r^*_{xi} rxi∗是x在i中上的真实打分 -
top10的精确率
-
Rank correlation
0/1模型:
- Coverage
- Precision
- ROC
错误度量中的问题:狭隘的关注与准确率有些时候会忽略重点,例如预测多样性,预测背景,预测顺序。在实际中,我们只关心于预测高打分。
RMSE might penalize a method that does well for high ratings and badly for others.
复杂度
1.最昂贵的步骤是找到k个最相似的顾客
O
(
∣
X
∣
)
O(|X|)
O(∣X∣),在运行时计算太费时间,可以预计算。
2.更多的数据比更好的算法更加有效,简单的算法在大量数据下就会做的很好。