好的推荐系统

1.1 什么是推荐系统

今天开始学习并记录《推荐系统实践》(项亮)一书。
为了解决信息过载,推荐系统通过一定的方式将用户和物品联系在一起,主要是两方面的理解:

  1. 对于用户来说,希望给用户推荐需要的、感兴趣的商品
  2. 对于物品来说,则是希望能够推送给更可能使用的用户,包括浏览、点击、评论、购买等

1.2 个性化推荐系统的应用

  1. 电子商务
    比如亚马逊,提供了个性化的推荐列表,这个列表包括个性化的推荐商品,同时给出了该推荐结果的标题、属性、推荐结果的平均分、推荐理由等等。除了个性化推荐列表之外,亚马逊还提供了相关推荐列表,这个相关推荐列表包括两种,一种是购买了该商品的用户还购买了哪些商品,第二种是浏览了该商品的用户还浏览了哪些商品,本质上来说,是利用了用户之间的相关性及行为。亚马逊有20-30%的销售都是来源于推荐系统,使得每一个用户好像都拥有了自己的一个商店,能够在该商店中找到自己需要的东西。
  2. 电影和视频网站
    比如Netflix,是美国著名的DVD租赁王作战,也包括视频业务,2006年的时候举办了著名的Netflix Prize大奖,奖励100万美元,使得其推荐算法能够提高10%的准确度。
    还有诸如Youtube、Hulu等公司也都有自己的个性化推荐算法。
  3. 个性化音乐网络电台
  4. 社交网络
  5. 个性化阅读
  6. 基于位置的服务
  7. 个性化邮件
  8. 个性化广告
    (a)搜索广告
    (b)上下文广告
    (c)个性化展示广告

1.3 推荐系统评测

系统评测用于衡量一个推荐系统性能的好坏,主要包括三类评测方法:

  1. 离线实验
    (a)将日志中的用户行为数据进行处理,得到标准的数据集
    (b)将数据集分为训练集和测试集,进行模型的训练和测试
    其实这里主要是用系统的历史数据来进行评测,虽然无法实时获得用户的最新反馈,但是能够方便、快速测试大量的算法。
  2. 用户调查
  3. AB测试
    AB测试是一种常用的在线评测方法,通过一定的规则将用户分成几组,对不同组的用户进行不同的算法测试。
    ABtest的缺点是实验周期较长,需要较长时间的测试才能得到不同算法的实际测试结果。
    AB测试系统的设计也是一项复杂的工作,因为多个团队负责的不同版块可能都会做测试,那么切分流量就是AB测试中的关键,对于不同层来说,流量应该是相互正交的关系。
    http://www.abtests.com/
    后台实验人员需要配置流量分配系统,决定满足什么条件的用户参加什么样的测试。当用户进入网站后,流量分配系统决定用户是否需要被进行AB测试,如果是的话,将会被打上在测试中属于某个分组的标签,然后用户的行为会被日志系统发回后台的日志数据库。实验人员需要统计分析日志数据库中不同用户的实验数据,得到评测结果。

1.3.1 评测指标

评测指标用于评价推荐系统各方面的性能,主要的评测指标如下:

  1. 满意度
    满意度是一个隐式的指标,最直接的方式是通过用户调查去获得用户的满意度。常常采用更为直观的一些间接指标是:点击率、停留时间、转化率等。

  2. 准确度
    准确度主要衡量两方面的推荐:
    (a)评分预测
    预测用户对电影/商品的评分,采用RMSE和MAE来进行衡量:
    在这里插入图片描述
    (b)Top-N预测
    其实更多的是给用户一个推荐列表,所以其实更应该是考虑Top-N的推荐,因此得到准确度的衡量:

    在这里插入图片描述
    其中R(u)表示根据训练集得到的用户u的预测推荐列表,T(u)表示用户的行为列表,从而通过交集得到了两个列表的相似性的度量。

    【Q:这里的T(u)是用户的行为列表,但是本质上也是给用户推荐的列表吗?如果这个T(u)是之前给用户推荐的列表,那么怎么能保证它一定是“真实值”呢?】

  3. 覆盖率
    \quad 还要考虑推荐给用户的商品的覆盖情况,即对于内容提供商来说,商品的覆盖情况是他们所要考虑的,他们希望能够尽可能多的把自己的商品推荐给用户。其实这里也就是经常所提到的长尾理论,对于很多场景而言,20%的商品吸引了80%的流量,而剩下80%的商品只得到了很少的曝光,但是这部分商品也许包含了很多同样很有价值的商品,因此需要尽可能的把所有的商品都展示给用户。

    \quad 覆盖率最简单的度量,如下coverage公式所示,也就是所有推荐过的商品占总商品数量的比例。但是仅依靠这个指标是很粗糙的,为了更好的发掘长尾价值,我们还要考虑每个商品被推荐的次数,也就是商品的统计分布,如果说所有的商品被推荐的次数都是差不多的,那我们就能认为该系统发掘长尾价值的能力很强,因此我们从统计分布的角度提出用信息熵和基尼系数进行衡量。

    \quad 信息熵是对信息不确定性的度量,不确定性越大,信息熵越大。(如下图所示)。比如,假设所有的商品流行度都相等,那么p(i)=1/n,此时可以理解为:每个商品被推荐的概率是相等的,这个时候不确定性就是最大的。

    \quad 基尼系数是来自经济学的一个概念,(如下图所示),可以理解成基尼系数是衡量物品流行度分布的指标,表示最不流行的x%的物品的流行度之和占总流行度的占比y%,比如下图的曲线所示,很明显在x较小的时候(不热门商品),y的增长非常缓慢,而对于x较大的时候(热门商品),y的增长非常迅速。最理想的情况就是,曲线与直线y=x重合,意味着所有的商品的流行度都是均匀分布的,之前不热门的商品此时的流行度增长速率,和热门的商品流行度的增长速率是一致的。
    基尼系数越小,表示流行度分布越均匀,等于下图A的面积除以A加B的面积。比如,当所有物品的流行度都相等的时候, p i , j = 1 N p_{i,j}=\frac{1}{N} ,带入式子可以得到G=0。相反,假设只有最后一个物品的流行度等于M(M为对该物品产生行为的用户数),那么此时 p i , j = 1 p_{i,j}=1 ,这个时候算出来G=1。
    在这里插入图片描述

  4. 多样性
    多样性主要衡量推荐列表的丰富度的情况,比如说用户连续看了20件衣服,那么不可能在推荐的时候给用户推荐满屏幕的衣服,而是需要对用户感兴趣的多个类别都要做一些推荐。衡量多样性,主要是考虑同一个推荐列表的物品相似度的大小,定义如下图所示,其中分母的二分之一乘以R(u)的长乘以R(u)减1的长,主要是做归一化,上面分子相似度的和最大情况就是:所有商品之间的相似度都是1,那么分子就等于C(n,2),等于 1 2 \frac{1}{2} *n*(n-1)。然后对所有的用户的多样性求和取平均,就得到了整个系统的多样性度量。
    在这里插入图片描述

  5. 新颖性
    新颖性主要衡量的是推荐给用户的商品跟之前推荐的历史商品不一样,不可能一直给用户推荐相同的商品,也不可能一直给用户推荐购买过的商品,因此需要考虑推荐商品的新颖性。新颖性的粗略性度量可以是:平均流行度,一般认为流行度越高的商品新颖性越低,流行度越低的商品新颖性越高。

  6. 惊喜性
    惊喜性可以理解成是,在新颖的基础之上,用户还觉得非常满意。比如给用户推荐了一个新的商品,刚好用户非常喜欢并进行了购买,那么就认为这个推荐是具有惊喜性的。

  7. 信任度
    信任度主要是指用户对推荐系统的信任的情况,很明显如果用户越信任推荐系统,那么用户越可能产生购买、点击等行为。为了提高信任度,一般考虑两方面的策略:
    (a)增加推荐系统透明性,主要办法是提供“推荐解释”
    (b)考虑用户的社交网络,利用好友信息做推荐,并用好友进行推荐解释。

  8. 实时性
    主要是希望时效性非常强,尤其在对时效性要求很高的场景,实时性尤其重要,主要包括两方面:
    (a)根据用户的行为数据,实时的进行推荐
    (b)对新的商品,也能够实时的推荐给用户(冷启动能力)

  9. 健壮性
    任何一个带来利益的算法都会被攻击,因此需要考虑系统的健壮性。主要是两方面的措施:
    (a)在使用数据前,进行攻击检测,从而对数据进行清洗
    (b)设计推荐系统时,尽可能选择代价比较高的行为。比如采用“购买”行为建模,那么攻击购买行为的代价是比较高的

10.商业目标
\quad 对于企业而言,电子商务更加关注销售额,展示广告更加关注广告展示情况,点击广告更加关注广告点击率,不同的企业商业目标各不一样,推荐系统除了要满足用户的推荐需求以外,也要考虑最大化商业目标。

11.评测维度
\quad 在进行评测的时候,也要考虑从不同的维度进行评测,可以考虑从以下三个维度:
(a)用户维度
(b)商品维度
(c)时间维度

12.总结
对于可以进行离线优化的指标,其实目标就是:
\quad 最大化预测准确度
约束:
\quad 覆盖率>A
\quad 多样性>B
\quad 新颖性>C

参考文献: [1]: 项亮,推荐系统实践.