文章目录

  • 背景
    • 贝叶斯平滑
      • 点击率贝叶斯平滑的假设
    • 点击率的极大似然估计
    • 点击率的贝叶斯估计
      • 平滑系数的计算
    • 贝叶斯平滑因子的工程实践
      • 矩估计
      • 工程实践
  • 非二项分布的贝叶斯平滑

背景

电商领域中经常需要计算或预测一些转化率指标,如最典型的CTR(点击率,Click-Through Rate)。这些转化率可以是模型的预测值,也可以作为模型的特征(feature)使用。以商品点击率预测为例,CTR的值等于点击量(Click)除以曝光量(Impression或Exposure)。以rrr表示点击率,

r=CI(1)r=\frac{C}{I} \tag{1}r=IC​(1).

但在实际应用过程中会碰到两个问题:

  • 新商品点击率的预测与计算
    对于新上线的商品,其曝光为0,点击量也为0,此时这件商品的CTR应该设为0还是赋一个初始值?

  • 不同商品点击率之间的比较
    有两件商品A和B,其点击率分别为rA=510r_A=\frac{5}{10}rA​=105​和rB=50100r_B=\frac{50}{100}rB​=10050​,rA=rBr_A=r_BrA​=rB​,但商品A的曝光只有10次,商品B的曝光有100次,这样比较是否合理?

第一个问题,初始值设0是可以的,但不太合理。当CTR作为特征使用时,表示这个商品完全没有点击,不太符合日常推断,通常是赋一个大于0的初始值。第二个问题,不合理,通常会认为曝光次数少的商品权重应该低一些。

解决以上两个问题可以使用平滑的技术解决。最简单的方法是在计算CTR的公式中分子分母同时加上一个数,加上之后可避免这两个问题。

r=C+aI+b(2)r = \frac{C+a}{I+b} \tag{2}r=I+bC+a​(2)

但(2)式中aaa和bbb的值如何确定? 这两个数可以人为设定,但若设置得不合理会出现数据被放大的情况。本文介绍如何通过历史数据来计算有统计意义的aaa和bbb,即贝叶斯平滑。

贝叶斯平滑

贝叶斯平滑的思想是给CTR预设一个经验初始值,再通过当前的点击量和曝光量来修正这个初始值。如果某商品的点击量和曝光量都是0,那么该商品的CTR就是这个经验初始值;如果商品A和商品B的曝光量差别很大,那么可以通过这个经验初始值来修正,使得曝光量大的商品的权重增大。

贝叶斯平滑就是确定这个经验值的过程。贝叶斯平滑是基于贝叶斯统计推断的,因此经验值计算的过程依赖于数据的分布情况。

贝叶斯平滑的推导涉及贝叶斯参数估计,如果对贝叶斯参数估计不熟悉,可以先参考这篇文章:贝叶斯参数估计的理解及其在电商算法中的应用

点击率贝叶斯平滑的假设

对于一件商品或一条广告,对于某次曝光,用户要么点击,要么没点击,这符合二项分布。因此下文中对于点击率类的贝叶斯平滑,都是基于以下假设:对于某件商品或广告XXX,其是否被点击是一个伯努利分布(Bernoulli)

X∼Ber(r)(3)X \sim Ber( r) \tag{3}X∼Ber(r)(3)

其中XXX表示某个广告是否被点击,点击取1,未被点击取0,rrr是某件商品被点击的概率,即点击率

对于不符合二项分布的比值类数据,也可以通过贝叶斯参数估计的方法计算平滑参数,但是数据分布假设需要修改,后文有说明。

点击率的极大似然估计

在(3)式的假设下,可以使用极大似然法计算出点击率的估计值r^\hat{r}r^。从用户日志中随机抽取nnn条记录,对任一条记录iii都有

Xi∼Ber(r)(4)X_i \sim Ber( r) \tag{4}Xi​∼Ber(r)(4)

那么所有记录的点击数的联合概率密度就是上式的连乘。将连乘后的式子对rrr求导,并令其等于0,可以解出rrr的值r^\hat{r}r^,r^\hat{r}r^就是点击率的极大似然估计。当某件商品的点击次数或曝光量等于0时,可以用r^\hat{r}r^当成它的初始值。它解决了最开始提出的第一个问题,但没有解决第二个问题。

上述r^\hat{r}r^的计算没有用到历史信息。所谓历史信息是指:虽然我们不知道rrr的具体取值,但是可以知道rrr取值的范围,更精确地,我们可以假设rrr服从某个分布。要将这些信息融入到rrr的估计中需要用到贝叶斯参数估计。关于贝叶斯参数估计的具体内容可以参考:贝叶斯参数估计的理解及其在电商算法中的应用。

点击率的贝叶斯估计

在贝叶斯框架下,我们假设点击率rrr服从某个分布:

r∼π(r)(5)r \sim \pi(r) \tag{5}r∼π(r)(5)

因为这是基于经验的,这个分布称为先验分布。贝叶斯参数估计可以同时解决最开始提出的两个问题。其过程是基于经验或历史数据先给出一个rrr的估计值,然后基于现有的数据在这个估计值上修正,得到最终的点击率估计,此时的估计值已经是修正过的。更美好的是我们可以分离出修正参数(即(2)式中的aaa和bbb)。

既然有先验分布,就有后验分布。rrr的后验分布记作π(r∣x)\pi(r|x)π(r∣x)。其中xxx表示输入数据或特征,对于点击率预测,xxx就是点击次数和曝光量。因为已经看到了数据,才确定rrr的分布,因此叫做『后验』分布。**贝叶斯估计的实质就是求后验分布。**即基于当前的点击次数和曝光量,求点击率的分布;而未看到数据之前点击率的分布是π(r)\pi(r)π(r)。下面讲解如何计算后验分布π(r∣x)\pi(r|x)π(r∣x).

贝叶斯估计的过程可以简单认为:

用历史数据根据π(r)\pi(r)π(r)估计rrr,记作r^history\hat{r}_{history}r^history​;用当前数据根据π(r∣x)\pi(r|x)π(r∣x)估计rrr,记作r^current\hat{r}_{current}r^current​,然后用r^history\hat{r}_{history}r^history​修正r^current\hat{r}_{current}r^current​。

平滑系数的计算

rrr的后验分布π(r∣x)\pi(r|x)π(r∣x)是个概率密度函数,无法知道rrr确切的值。需要求出最接近真实情况的rrr需要损失函数来约束。

适用于点击率的损失函数有:

  • L(r^,r)=(r^−r)2L(\hat{r}, r) = (\hat{r} - r)^2L(r^,r)=(r^−r)2
  • L(r^,r)=∣r^−r∣L(\hat{r}, r) = |\hat{r} - r|L(r^,r)=∣r^−r∣

贝叶斯参数估计的过程可以简单描述为:求r^\hat{r}r^,使得损失函数在rrr的后验分布上的期望最小。

这句话的数学公式是:

arg⁡min⁡∫L(r,r^)π(r∣x)dr=arg⁡min⁡EπL(r,r^)(6)\arg \min \int L(r, \hat{r}) \pi(r|\boldsymbol{x})\ dr = \arg \min E_{\pi} L(r, \hat{r}) \tag{6}argmin∫L(r,r^)π(r∣x) dr=argminEπ​L(r,r^)(6)

整个过程的推导可以参考:贝叶斯参数估计的理解及其在电商算法中的应用。

要计算上式需要知道π(r∣x)\pi(r|x)π(r∣x)的形式,然而π(r∣x)\pi(r|x)π(r∣x)的形式一般不知道的,但是可以知道π(r)\pi(r)π(r)的形式(经验值嘛,我们指定的,例如点击率就是伯努利分布)。此外,数据的分布我们也是知道的(通过样本得知),其概率密度函数(pdf)记为f(x∣r)f(x|r)f(x∣r),表示数据的分布跟参数rrr有关,rrr是要求解的参数,在这里就是点击率。

这时可以根据贝叶斯公式计算出π(r∣x)\pi(r|x)π(r∣x):

π(r∣x)=f(x∣r)π(r)f(x)(7)\pi(r|\boldsymbol{x}) = \frac{f(\boldsymbol{x}|r)\pi(r)}{f(\boldsymbol{x})} \tag{7}π(r∣x)=f(x)f(x∣r)π(r)​(7)

其中,

f(x)=∫0∞f(x∣r)π(r)dr(边缘概率密度定义)f(\boldsymbol{x}) = \int_0^\infty f(\boldsymbol{x}|r) \pi(r) dr\ \text{ (边缘概率密度定义)}f(x)=∫0∞​f(x∣r)π(r)dr  (边缘概率密度定义)

上式好复杂,但索性一些常见的分布都可以求出上式积分的具体形式。然而实际计算时通常不用去计算积分,因为满足一定条件,π(r)\pi(r)π(r)跟π(r∣x)\pi(r|\boldsymbol{x})π(r∣x)有一样的形式。π(r)\pi(r)π(r)是已知的,如果形式一样,π(r∣x)\pi(r|\boldsymbol{x})π(r∣x)也就容易求得了,这个条件就是共轭。下面介绍共轭先验的概念。

共轭先验:如果找到一个π(r)\pi(r)π(r),它是f(x∣r)f(x|r)f(x∣r)的共轭先验,那么rrr的后验分布π(r∣x)\pi(r|x)π(r∣x)和先验分布π(r)\pi(r)π(r)会有一样的形式。

『轭』是指驾车时套在牲口脖子上的曲木。古代拉扯的牲口通常有两只,因此轭是连接两只牲口的工具。在这里共轭是指π(r)\pi(r)π(r)和π(r∣x)\pi(r|x)π(r∣x)通过f(x∣r)f(x|r)f(x∣r)联系起来了。

之前假设广告是否点击服从伯努利分布,参数为rrr;对于点击次数,服从的是二项分布,即f(C,I∣r)∼Bin(r)f(C, I|r) \sim Bin(r)f(C,I∣r)∼Bin(r)。二项分布的共轭先验是Beta分布,Beta分布的参数是α\alphaα和β\betaβ,即π(r)=Beta(α,β)\pi(r) =Beta(\alpha, \beta)π(r)=Beta(α,β)。根据共轭先验的定义,rrr的后验分布π(r∣x)\pi(r|x)π(r∣x)的形式跟其先验分布π(r)\pi(r)π(r)一样,即π(r∣x)=Beta(α′,β′)\pi(r|x) = Beta(\alpha', \beta')π(r∣x)=Beta(α′,β′)。

对于点击率预测,求出π(r∣x)\pi(r|x)π(r∣x),带入公式(6),当L(r^,r)=(r^−r)2L(\hat{r}, r) = (\hat{r} - r)^2L(r^,r)=(r^−r)2时,
r^=C+αI+α+β(8)\hat{r} = \frac{C + \alpha}{I + \alpha + \beta} \tag{8}r^=I+α+βC+α​(8)

(8)式就是点击率估计(平滑)的最终形式。该式的具体求解过程可以参考贝叶斯参数估计最后二项分布的例子。其中CCC和III就是点击次数和曝光量,α\alphaα即为公式(2)中的aaa,α+β\alpha + \betaα+β是公式(2)中的bbb。α\alphaα和β\betaβ是从历史数据中得到的

上面的内容给出了为什么很多文章会假设点击率服从Beta分布的理由,因为最终的平滑的因子是Beta分布(先验分布)中的两个参数。那么如何计算(估计)这两个参数?

贝叶斯平滑因子的工程实践

综上,贝叶斯平滑的最终落脚点是要估计Beta分布(点击率rrr服从的分布)中的参数α\alphaα和β\betaβ,带入(8)式,得到平滑后的点击率。下面给出比较直观的矩估计的方法。

矩估计

Beta分布的期望是E(X)=αα+βE(X) = \frac{\alpha}{\alpha + \beta}E(X)=α+βα​,方差是D(X)=αβ(α+β)2(α+β+1)D(X) = \frac{\alpha \beta}{(\alpha+\beta)^2 (\alpha + \beta + 1)}D(X)=(α+β)2(α+β+1)αβ​. 我们可以用样本的均值代替期望,样本的方差代替总体的方差,此时就可以解出α\alphaα和β\betaβ的值。Xˉ\bar{X}Xˉ是样本均值,S2S^2S2是样本方差,则:
α=Xˉ(Xˉ(1−Xˉ)S2−1)(9)\alpha = \bar{X}\left(\frac{\bar{X}(1-\bar{X})}{S^2}-1 \right) \tag{9}α=Xˉ(S2Xˉ(1−Xˉ)​−1)(9)
β=(1−Xˉ)(Xˉ(1−Xˉ)S2−1)(10)\beta= (1-\bar{X})\left(\frac{\bar{X}(1-\bar{X})}{S^2}-1 \right) \tag{10}β=(1−Xˉ)(S2Xˉ(1−Xˉ)​−1)(10)

这里的样本指的就是我们能观察到的商品的点击情况。

工程实践

实际操作时可以连续取一段时间的数据,比如一周,然后在每天的数据中计算每件商品或广告的点击率,之后求出这些点击率的均值和方差,带入公式(9)和公式(10),可以得到每天的α\alphaα和β\betaβ. 最后求这段时间α\alphaα和β\betaβ的均值作为最终的平滑参数。

也可以每天计算前一天的α\alphaα和β\betaβ,用于当天的点击率预测平滑。

实际应用时根据历史数据得到的α\alphaα和β\betaβ可以帮助确定平滑参数的大致范围,防止设置参数时偏离过大。通常可以调整α\alphaα和β\betaβ的范围达到预期的效果。

下图是某件商品在两周时间内的点击率。黄色线是每天根据点击次数CCC和曝光量III计算得到的真实点击率;蓝色线是根据一周的历史数据计算得到的α\alphaα和β\betaβ带入公式(8)得到的平滑后的点击率;绿色线是自定义平滑参数的点击率,a=50a=50a=50,b=200b=200b=200,设置得比较夸张。可以看到如果平滑参数设置的不合理,会放大数据的表现,有时候甚至会扭曲数据的走势,数据预处理时需要考虑这样的情况。

非二项分布的贝叶斯平滑

公式(8)的结论适用于数据是二项分布的情况,如点击率。对于不是二项分布的数据公式(8)不适用。如果数据不是二项分布,那么其先验概率就不是Beta分布了。比如某件商品一天的点击量与一周的点击量的比值,这个数据不符合二项分布,因此不适用公式(8)。但这个数据有可能是高斯分布。如果数据是高斯分布,那么其先验概率π(r)\pi(r)π(r)是逆Gamma分布(invers Gamma)分布,进而其后验概率π(r∣x)\pi(r|x)π(r∣x)也是逆Gamma分布,此时公式(8)会有不一样的形式,视数据的具体情况而定。

点击率预测的贝叶斯平滑相关推荐

  1. 广告点击率的贝叶斯平滑

    广告点击率的贝叶斯平滑 声明: 1)该博文是Yahoo专家所无私奉献的论文资料整理的.具体引用的资料请看参考文献.具体的版本声明也参考原文献 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并 ...

  2. 广告点击率预测问题初探

    广告点击率预测问题初探 国庆7天参加了一个广告点击率预测的小竞赛,作为只看过机器学习实战的小白,纯粹抱着学习的心态去开眼,果然被大神按在地上虐呢,不过也学到了很多知识.感谢很多大佬都开源并分享了他们的 ...

  3. gamma函数、beta分布、贝叶斯平滑、特征校准

    目录 一. gamma函数 二.Beta分布 三.贝叶斯估计 四.贝叶斯估计的运用 一. gamma函数 1.在实数域上伽玛函数定义为 Γ ( x ) = ∫ 0 + ∞ t x − 1 e − t ...

  4. 深度学习下的点击率预测:交互与建模

    ©作者 | 林子涵 学校 | 中国人民大学信息学院硕士 来源 | RUC AI Box 引言 点击率(Click-Through Rate,简称 CTR)预测任务在各类互联网应用中大量存在,相关算法的 ...

  5. ctr 平滑_CTR预估中的贝叶斯平滑方法及其代码实现

    我们假设事件的发生并不是相互独立的,相反,在层级结构中相对比较靠近的两个事件的相关性要大于距离较远的两个事件,它们之间拥有很多共通之处.于是,我们便可以利用"相似"事件的信息来丰富 ...

  6. 点击率预测问题建模_使用预测建模技术预测住院率

    点击率预测问题建模 机器学习(Machine Learning) Hospital readmissions, particularly unplanned hospital readmissions ...

  7. 贝叶斯滤波和贝叶斯平滑(Kalman滤波,RTS平滑)

    文章目录 贝叶斯滤波(*Bayesian filtering equations*) 贝叶斯滤波方程 Kalman滤波 贝叶斯平滑(*Bayesian smoothing*) 贝叶斯最优平滑方程 Ra ...

  8. 贝叶斯平滑及其精确解

    贝叶斯平滑及其精确解 贝叶斯平滑方程 贝叶斯最优平滑方程 Rauch-Tung-Striebel 平滑器 RTS平滑器 平滑与滤波的区别在于:滤波只是用当前以及之前的量测量去估计当前状态(也可能是未来 ...

  9. 广告点击率预测 [离线部分]

    广告点击率预测 [离线部分] 2014-05-08 23:08:45|  分类: 计算广告学 |  标签:计算广告学  rtb  dsp  |举报|字号 订阅 下载LOFTER我的照片书  | 广告点 ...

最新文章

  1. Python知识点5——字典
  2. php curl 库参数,PHP 关于curl库参数问题的求助!!!
  3. MEF(可扩展框架)使用总结
  4. maven编译报程序包不存在_Hadoop学习之路(二)Hadoop2.7.5在CentOS6.7上的编译
  5. Codeforces Round #439 (Div. 2)
  6. 揭秘ASM磁盘头信息
  7. 决策树结果可视化中文乱码问题解决方案
  8. CashFiesta注册网赚
  9. 利用Google博客搜索查看加密QQ空间(qzone)日志
  10. 基于PHP课程网站设计开题报告,在线课程网站设计开题报告
  11. Overlay网络与物理网络的关系
  12. 设计一个对象池(Anno.XObjectPool)
  13. vue 前端仿QQ截图实现Web端自定义截屏(JS版)
  14. 蓝牙写入数据库_android 蓝牙 数据库
  15. 使用饿了么update组件 实现多文件上传到后台以及本地图片显示功能
  16. 深圳市工业和信息化局关于征集创新产品的通知
  17. 虚拟环境中安装requirement安装包出现错误ERROR: Could not open requirements file: [Errno 2] No such file or director
  18. Image Signal Processing(ISP)-第二章-Demosaic去马赛克以及BMP软件实现
  19. R语言绘图—Veen(韦恩图)
  20. John--解密工具

热门文章

  1. 查看未提交事务或sleep session最后执行的sql语句
  2. TIDB事务过大transction too large解决方法
  3. vi查找和替换字符串
  4. 重写慢日志解析程序,实现打印慢SQL信息及其所属数据库
  5. (转)使用异步Python 3.6和Redis编写快速应用程序
  6. 【编程好习惯】避免使用魔数
  7. 潘维良(帮别人名字作诗)
  8. 探索HTTP传输中gzip压缩的秘密
  9. ORACLE 如何产生一个随机数
  10. Windows10 环境下Jupyter Notebook的安装与使用