推荐系统实践 - 01推荐系统综述

1 什么是推荐系统

生活应用场景:

  • 当用户有明确需求时:可以浏览所有商品、借用分类信息、通过搜索引擎找到需要的东西。
    举例:买花生米可以在小卖部浏览所有商品 、在沃尔玛根据商品分类信息、在淘宝 通过搜索获得。
  • 当用户没有明确需求时:在信息过载的情况下,需要一个人或者工具来做筛选。
    举例:想看一部电影,但是不知道看什么好且电影数量非常庞大,需要喜欢看电影的朋友推荐或一个自动化的推荐工具。

从角色的角度出发,推荐系统的作用:联系用户与信息

  • 对于信息消费者:很难从大量的信息中找到自己感兴趣的信息
  • 对于信息生产者:很难让自己生产的信息脱颖而出,受到广大用户的关注

从用户角度出发,推荐系统的作用:推荐系统和搜索引擎是互补的工具。

  • 搜索引擎满足了用户有明确需求时主动查找的需求;
  • 推荐系统满足用户在没有明确需求时,系统通过分析用户历史行为给用户建模,从而主动给用户推荐信息

从商品角度出发,推荐系统的作用:发掘物品的长尾(long tail)

  • 电子商务大多数都是不热门的商品,但这些销量小的商品由于总量巨大,总销售额也许会超过热门商品。主流商品代表绝大多数用户的需求,长尾商品代表小部分用户的个性化需求,推荐系统的作用就是个性化推荐,发掘长尾而提高销售额。

推荐系统的推荐算法:

  • 社会化推荐(social recommendation):让朋友/网友推荐物品。
  • 基于内容的推荐(content-based filtering):通过分析用户过去喜欢的物品,为用户推荐相似的物品
  • 基于协同过滤(collaborative filtering):根据用户对物品的偏好发现与用户偏好相似的群体,并推荐该群体所偏好的物品

2 推荐系统的应用

2.1 电子商务

  • 个性化推荐列表:基于物品的推荐(item-based method)、基于好友的推荐
  • 相关推荐列表:购买这个商品的用户经常购买的商品、浏览过这个商品的其他用户经常购买的商品

2.2 音乐网络电台

  • 专家标注:对歌曲的特性(旋律、节奏、编曲、歌词)进行标注,根据基因相似度推送音乐。
  • 相关推荐:利用用户行为计算歌曲相似度,推荐和用户有相似爱好的其他用户喜欢的歌曲

2.3 社交网络

  • 利用社交网络信息对用户进行物品推荐
  • 利用社交网络为用户推荐好友在社交网站上的会话(会话排序)
  • 给用户推荐好友

2.4 个性化阅读

  • 关注自己感兴趣的人,然后看到用户分享的文章
  • 收集用户对文章的偏好信息,根据反馈更新用户个性化文章列表
  • 根据历史计算用户之间兴趣相似度,给用户推荐和他兴趣相似的用户喜欢的文章

2.5 个性化广告

  • 上下文广告:通过用户浏览的网页内容推荐相关广告
  • 搜索广告:通过用户的搜索记录,判断用户搜索的目的,投放目的相关的广告

3 推荐系统的测评

  • 用户:满足用户需求,推荐的内容令人感兴趣
  • 物品提供者:让物品都能够被推荐给对其感兴趣的用户
  • 对提供推荐系统的网站:推荐系统本身能够收集到高质量的用户反馈,不断完善推荐质量

3.1 推荐系统实验方法

3.1.1 离线实验(offline experiment)
实验步骤:

  1. 通过日志获取用户的行为数据,并将数据按照一定格式生成标准数据集
  2. 将数据集分为训练集和测试集;在训练集上训练用户兴趣模型,在测试集上进行预测
  3. 通过事先定义的评测指标,对测试集上的结果进行评测

离线实验的优点:

  • 不需要一个实际的系统来实验
  • 不需要真实用户参与
  • 可以快速测试大量算法

离线实验的缺点:

  • 无法获得商业上关注的指标,如点击率、转化率等(存疑:日志可以获取点击/浏览界面等指标,为什么离线实验无法利用
  • 指标和实际商业指标存在差距,比如高预测准确率不意味着高用户满意率。

3.1.2 用户调查(uesr study)
用户调查的优点:

  • 相对于上线测试风险较低
  • 可以获得与用户主观感受有关的指标

用户调查的缺点:

  • 招募测试用户代价大,很难进行大规模用户调查,且测试用户需要和真实用户分布相近
  • 用户在测试环境下的行为可能和真实环境下的行为不一致

3.1.3 在线实验(online experiment)
AB测试步骤:按照一定的规则将用户随机分组,对不同组采用不同的算法,统计不同组用户的各种的指标,比较不同的算法。

AB测试的优点:

  • 可以公平地获得不同算法在真实环境中的性能指标

AB测试的缺点:

  • 周期较长,无法测试大量算法
  • 从前端到后端多个层之间的AB测试会互相干扰,需要切分流量(标记测试分组标签)

3.2 推荐系统评指标

3.2.1 用户满意度
用户满意度可以通过调查问卷用户反馈界面其他指标衡量用户满意度

  • 调查问卷:更具体,询问结果满意与否的同时,可以加入更多指标,如具体原因。
    GroupLens论文系统调查问卷示例:
    1. 推荐的论文都是我非常想看的
    2. 推荐的论文很多我都看过了,确实是符合我兴趣的论文
    3. 推荐的论文和我的研究兴趣相关,但是我并不喜欢
    4. 不知道为什么会推荐这些论文,它们和我的兴趣丝毫没有关系
  • 用户反馈界面:节省空间、时间,能够得到用户满意的结果
  • 其他指标:可以根据点击率、用户停留时间、转化率等指标衡量满意度。如电子商务中,用户如果购买了推荐的商品,就表示用户在一定程度上满意。

3.2.2 预测准确度
预测准确度的两个重要的研究方向为评分测评TopN推荐

  • 评分测评:根据用户对物品的历史评分,从中习得用户的兴趣模型,并预测用户看到一个物品时,给这个物品的评分。
    评分预测的预测准确度通过均方根误差(RMSE)和平均绝对误差(MAE)计算。表示如下:

    • uu:用户
    • ii:物品
    • ruir_{ui}:用户u对物品i的实际评分
    • puip_{ui}:推荐算法的预测评分
    • mm:预测次数
      RMSE=1m(ruipui)2RMSE=\sqrt{\frac{1}{m}\sum{(r_{ui}-p_{ui}})^2}
      MAE=1mruipuiMAE=\frac{1}{m}\sum{|r_{ui}-p_{ui}|}
      RMSE加大了对预测不准确的惩罚(平方),因此对系统的测评更为苛刻。当用户给的评分都是整数时,对预测结果取整会降低MAE的误差。(存疑:为什么取整能降低误差?)
  • TopN推荐
    TopN推荐:在提供推荐服务时,给用户一个个性化推荐列表,这种推荐叫做TopN推荐
    TopN推荐的预测准确率通过准确率 / 召回率度量
    精确率(precision):被分为正例的示例中实际为正例的比例。
    召回率(recall):是覆盖面的度量,度量有多个正例被分为正例,

3.2.3 覆盖率(coverage)
描述推荐系统对长尾商品的发掘能力。
最简单的定义为能够推荐的商品占总商品的比例。覆盖率为100%的系统可以将每个商品都推荐给至少一个用户。但是,覆盖率为100%的系统可以有无数流行度分布。如果所有物品都能够出现在推荐列表中,且出现的次数差不多,则推荐系统发掘长尾的能力就很好。覆盖率最简单的公式如下,即推荐系统给所有用户推荐的物品列表集合,占所有物品的比例:
Coverage=UuUR(u)ICoverage=\frac{U_{u\in{U}}R(u)}{I}
有两个指标也可以定义覆盖率:信息熵基尼系数(Gini Index)

  • 信息熵公式为如下,p(i)p(i)为物品i推荐次数占所有商品的推荐次数的比例
    H=p(i)logp(i)H=-\sum{p(i)\log{p(i)}}
  • 基尼系数公式如下:
    • nn:列表总长
    • iji_{j}:表示按照流行度从小到大排序的物品列表中第j个物品
      G=1n1(2jn1)p(ij)G=\frac{1}{n-1}\sum{(2j-n-1)p(i_{j})}
      推荐系统实践 - 01推荐系统综述

推荐系统希望能够减小马太效应。测评推荐系统是否具有马太效应最简单的方法就是使用基尼系数

3.2.4 多样性
推荐列表多样可以增加用户找到感兴趣物品的概率。多样性描述了列表中物品的不相似性。表示如下:

  • uu:用户
  • RR:用户u推荐列表的长度
  • s(i,j)s(i, j):物品i和j之间的相似度
    Diversity=1s(i,j)12R(R1),ijDiversity=1-\frac{\sum{s(i,j)}}{\frac{1}{2}R(R-1)},i\neq{j}

3.2.5 新颖性
传统的新颖性设计:

  • 把用户之前有过行为的物品从推荐列表中过滤掉。但是,有些物品用户可能在别的网站上看过,仅仅过滤掉本网站中用户有过行为的物品不能完全实现新颖性。

新颖性的测评:

  • 利用推荐结果的平均流行,越不热门的商品越可能让用户觉得新颖(困难的是如何不牺牲精度)
  • 通过用户调查统计新颖性

3.2.6 惊喜度(serendipity)

  • 新颖性和惊喜度的区别:如果推荐结果和用户历史兴趣不相似,却让用户觉得满意,那么惊喜度就很高;新颖度仅仅取决于用户是否听说过这个推荐结果。
  • 惊喜度的测评:以电影为例,获得用户观影历史,得到电影的演员、导演的集合A,

3.2.7 信任度
如果用户信任推荐系统,就会增加用户和推荐系统的交互。
信任度的测评:只能是用户调查问卷
提高系统信任度的方式:

  • 增加推荐系统的透明度(transparency),提供推荐解释
  • 利用社交网络给用户做推荐,如用户的好友购买过的商品,如认可的网友的评价

3.2.8 实时性
实时性的两个方面:

  • 能够实时更新推荐列表以满足用户新的行为变化:如新闻的更新、当用户有了新的购买行为,相关推荐的更新等
  • 新物品的推荐

实时性的测评:

  • 基于推荐列表变化速率的测评
  • 利用推荐列表中有多大比例的物品是当天新物品来测评

3.2.9 鲁棒性(robust)
常见的作弊方式有:

  • 行为注入攻击(profile injection attack):绝大多数的推荐系统都是通过分析用户的行为实施推荐算法的。比如统计购买A商品的用户购买其他商品的次数。那么可以注册很多帐号,同时购买A和自己的商品,从而让自己的排名在推荐列表中靠前。再比如刷单。
  • 评分系统攻击:比如豆瓣电影评分,可以注册很多帐号,给自己的商品非常高的评分

鲁棒性的测评:

  • 鲁棒性用作衡量推荐系统抗击作弊的能力。给定数据集和算法,生成推荐列表。然后用常用的攻击方法向数据集注入噪声数据,在此数据集上再次生成推荐列表。最后,比较两个推荐列表的相似度,以测评算法的鲁棒性

提高鲁棒性的方法:

  • 设计系统时尽量使用代价较高的用户行为
  • 在使用数据前,进行攻击检测,从而清理数据

3.2.10 商业目标
最本质的商业目标是平均一个用户给公司带来的盈利。具体而言,商业目标可能是销售额、广告展示总数、广告点击总数等。

3.3 推荐系统评测维度

增加测评维度的意义在于知道一个算法在什么情况下性能最好。有些推荐算法可能整体性能不好,但是在某种情况下性能较好。

  • 用户维度:人口统计学信息、活跃度、是否新用户
  • 物品维度:物品属性信息、流行度、平均分、是否新加入的商品
  • 时间维度:季节、是否工作日、白天晚上