recommend system

推荐系统

utility matrix效用矩阵,横轴是用户,纵轴是商品,矩阵元素是打分

推荐系统的三个核心步骤:

  • 收集效用矩阵中的打分
  • 从已知的打分中预测未知的打分
  • 评估预测性能

Gathering Ratings

我们可以显式让用户打分或付钱让它们打分,也可以从它们的行为推测分数,比如它们经常观看,或购买

但是utility matrix是稀疏的,大多数人对大多数item都是没有打分的,并且新用户和新item都是没有值的

我们主要介绍三种方法:

  • 基于内容的
  • 协同的
  • 基于潜在因子的

基于内容的推荐

主要思想: 仅考虑用户自己,我们向用户推荐这样的商品,这些商品和用户之前的高打分商品类似

比如电影,我们已知用户的一些高打分电影,于是向用户推荐同一个导演,演员等等的电影

Item profile

因此,我们需要为每个item建立一个profile,profile是一些特征的集合,比如电影就是导演,演员,剧本作者等等,网页就是一些关键字集合

对于文本网页来说,如何选择重要的关键字特征呢?

我们使用 TF-IDF score,当一个关键字在该网页出现的越多,在其他网页出现的越少,我们就认为该关键字的TF-IDF指标高,更能代表该doc

TF-IDF score: $$ w_{ij} = TF_{ij} * IDF_i $$ 其中: $$ TF_{ij} = \frac{f_{ij}}{max_kf_{kj}} , IDF_i = log\frac{N}{n_i} $$ f_ij 表示term/feature i 在 doc/item j中的频率,n_i表示有多少个doc提到了term i,N是总的doc数

User profile

它已打分的一些item的加权平均数据

推荐

给定user profile x和item profile i,我们通过余弦相似度来判断是否相似

pros & cons

优点:

  • 不需要其他user的信息
  • 能够按用户的口味推荐
  • 能够推荐新的或不流行的item
  • 可解释性

缺点:

  • 寻找合适的feature去构建item profile是较难的
  • 对于新用户,没有user profile,无法推荐
  • 过于专一化,绝不推荐user的content profile之外的item,用户也许想有不同的兴趣

协同过滤

我们首先找到N个其他user,这些user对item的打分与user x的打分是类似的,我们基于这N个用户的打分来预测x的打分,所以叫协同

寻找相似的user

jaccard 相似度

如果我们不考虑具体的打分多少,而只考虑有没有打分,然后可以对集合计算jaccard相似度

cos 相似度

我们将未打分的item视作0,于是一个user对应的item就是一个向量,计算余弦即可

pearson 互相关系数

皮尔森互相关系数,具体公式见ppt,这是统计里面相关性检验常用的方法

协同过滤

假设utility矩阵是user x item的

user-user 协同过滤

即只考虑一列,通过一列上的其他相似user的值来预测自己,N代表与那些对i打过分的user中的与x最相似的k个user,s_xy代表x与y的相似度 $$ r_{xi} = \frac{\sum_{y∈N}s_{xy}*r_{yi}}{\sum_{y∈N}s_{xy}} $$

item-item 协同过滤

即只考虑一行,通过一行上的其他相似item的值来预测自己 $$ r_{xi} = \frac{\sum_{j∈N}s_{ij}*r_{xi}}{\sum_{j∈N}s_{ij}} $$

pros & cons

优点:

  • 不需要选择feature,对所有类型的item都适用

缺点

  • 冷启动
  • first rater,对于未被打分过的新item,不能推荐
  • popularity bias,一般会倾向于推荐热门的item,而不是对味的item