简单推荐模型之一:基于流行度的推荐模型

最简单的流行度估计

  • 定义
    什么是基于流行度(Popularity-based)?通俗地讲,就是什么内容吸引用户,就给用户推荐什么内容

    • 隐含假设:就是物品质量的好坏和流行度成正比例关系
  • 流行度常见影响因素
    不能简单看流量或者点击的绝对量来评价

    • 时间
      比如用户对新闻的观看时间一般是有规律的,所以会影响绝对数据
    • 位置
      物品显示的位置也会影响绝对数据
  • 如何衡量

    • 采用比值Ratio,或者某种可能性
      • 比如点击率,但是点击率估计所需要的数据依赖会收到时间和位置的偏差的影响,所以如何构建无偏差数据呢?
  • 构建无偏差数据(点击率)
    本身就是一个负责的问题,这里举简单的解放办法:

    • EE算法(Exploitation & Exploration)(epsilon贪心算法)
      就是将流量分为两部分,一部分随机显示物品,然后基于这部分流量计算流行度,第二部分跟进这个流行度来显示物品

对点击率建模

如果从数学上对点击率建模,其实可以把一个物品在显示之后是否被点击看成是一个“伯努利随机变量”,于是对点击率的估计,就变成了对一个伯努利分布参数估计的过程

  • 最大似然估计(Maximum Likelihood Estimation)
    • 定义
      就是说,希望找到参数的取值可以最大限度地解释当前的数据
      • 这个估计的数值就是某个物品当前的点击总数除以被显示的次数。通俗地讲,如果我们显示某个物品 10 次,被点击了 5 次,那么在最大似然估计的情况下,点击率的估计值就是 0.5
    • 弊端
      如果我们并没有显示当前的物品,那么,最大似然估计的分母就是 0;如果当前的物品没有被点击过,那么分子就是 0
      • 在这两种情况下,最大似然估计都无法真正体现出物品的流行度

高级流行度估计

我们从统计学的角度来讲了讲,如何利用最大似然估计法来对一个伯努利分布所代表的点击率的参数进行估计。这里面的第一个问题就是刚才我们提到的分子或者分母为 0 的情况。显然,这种情况下并不能很好地反应这些物品的真实属性

  • 先验信息(解决方案之一)
    虽然我们现在没有显示这个物品或者这个物品没有被点击,但是,我们“主观”地认为,比如说在显示 100 次的情况下,会有 60 次的点击

    • 注意,这些显示次数和点击次数都还没有发生
    • 在这样的先验概率的影响下,点击率的估计,或者说得更加精确一些,点击率的后验概率分布的均值,就成为了实际的点击加上先验的点击,除以实际的显示次数加上先验的显示次数。
    • 你可以看到,在有先验分布的情况下,这个比值永远不可能为 0
      • 利用先验信息来“平滑”(Smooth)概率的估计,是贝叶斯统计(Bayesian Statistics)中经常使用的方法
    • 如果用更加精准的数学语言来表述这个过程,我们其实是为这个伯努利分布加上了一个 Beta 分布的先验概率,并且推导出了后验概率也是一个 Beta 分布。这个 Beta 分布参数的均值,就是我们刚才所说的均值
  • 时间折扣(基于前后时间关联)(另一种方法)
    每个时段的估计和前面的时间是有一定关联的。这也就提醒我们是不是可以用之前的点击信息,来更加准确地估计现在这个时段的点击率

    • 一种最简单的方法还是利用我们刚才所说的先验概率的思想
      • 那就是,当前 T 时刻的点击和显示的先验数值是 T-1 时刻的某种变换
        • 比如早上 9 点到 10 点,某个物品有 40 次点击,100 次显示。那么 10 点到 11 点,我们在还没有显示的情况下,就可以认为这个物品会有 20 次点击,50 次显示。注意,我们把 9 点到 10 点的真实数据乘以 0.5 用于 10 点到 11 点的先验数据
      • 这种做法是一种主观的做法。而且是否乘以 0.5 还是其他数值需要取决于测试。但是这种思想,有时候叫作“时间折扣”(Temporal Discount),是一种非常普遍的时序信息处理的手法

总结

  • 我们简要介绍了为什么需要基于流行度进行推荐
  • 我们详细介绍了如何对流行度进行估计以及从统计角度看其含义
  • 我们简要地提及了一些更加高级的流行度估计的方法

极客时间版权所有