您的位置:首页 > 其它

转化率(CTR)预测的贝叶斯平滑

2017-10-24 20:42 369 查看

概述

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

r=CI(1).

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

新商品点击率的预测与计算

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

不同商品点击率之间的比较

有两件商品A和B,其点击率分别为rA=510和rB=50100,rA=rB,但商品A的曝光只有10次,商品B的曝光有100次,这样比较是否合理?

第一个问题,初始值设0是可以的,但不太合理。当CTR作为特征使用时,表示这个商品完全没有点击,不太符合日常推断,通常是赋一个大于0的初始值。第二个问题,不合理。

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

r=C+aI+b(2)

但(2)式中a和b的值如何确定?若设置得不合理会出现数据被放大的情况。本文介绍如何使用贝叶斯平滑来确定a和b的值。

贝叶斯平滑

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

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

贝叶斯平滑的推导涉及贝叶斯参数估计,如果对贝叶斯参数估计不熟悉,可以参考这篇文章:贝叶斯参数估计

点击率贝叶斯平滑的假设

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

X∼Ber(r)(3)

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

对于不符合二项分布的比值类数据,后文有说明。

点击率的极大似然估计

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

Xi∼Ber(r)(4)

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

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

点击率的贝叶斯估计

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

r∼π(r)(5)

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

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

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

用历史数据根据π(r)估计r,记作r^history;用当前数据根据π(r|x)估计r,记作r^current,然后用r^history修正r^current。

损失函数

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

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

L(r^,r)=(r^−r)2

L(r^,r)=|r^−r|

贝叶斯参数估计的过程可以简单描述为:

求r^,使得损失函数在r的后验分布上的期望最小。

这句话的数学公式是:

argmin∫L(r,r^)π(r|x) dr=EπL(r,r^)(6)

整个过程的推导可以参考贝叶斯参数估计

因此需要知道π(r|x)的形式,然而π(r|x)的形式一般不知道的,但是可以知道π(r)的形式(经验值嘛,我们指定的)。此外,数据的分布我们也是知道的,其概率密度函数(pdf)记为f(x|r),表示数据的分布跟参数r有关,r是要求解的参数,在这里就是点击率。

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

π(r|x)=f(x|r)π(r)f(x)(7)

其中,

f(x)=∫∞0f(x|r)π(r)dr (边缘概率密度定义)

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

共轭先验:

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

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

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

对于点击率预测,求出π(r|x),带入公式(6),当L(r^,r)=(r^−r)2时,

r^=C+αI+α+β(8)

上式的求解过程可以参考贝叶斯参数估计最后的例子。(8)式就是点击率估计(平滑)的最终形式。其中C和I就是点击次数和曝光量,α即为公式(2)中的a,α+β是公式(2)中的b。α和β是从历史数据中得到的。

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

贝叶斯平滑因子的计算

综上,贝叶斯平滑的最终落脚点是要估计Beta分布(点击率r服从的分布)中的参数α和β。下面给出比较直观的矩估计的方法。

矩估计

Beta分布的期望是E(X)=αα+β,方差是D(X)=αβ(α+β)2+(α+β+1). 我们可以用样本的均值代替期望,样本的方差代替总体的方差,此时就可以解出α和β的值。X¯是样本均值,S2是样本方差,则:

α=X¯(X¯(1−X¯)S2−1)(9)

β=(1−X¯)(X¯(1−X¯)S2−1)(10)

工程实践

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

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

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

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



非二项分布的贝叶斯平滑

公式(8)的结论适用于数据是二项分布的情况,如点击率。对于不是二项分布的数据公式(8)不适用。如果数据不是二项分布,那么其先验概率就不是Beta分布了。比如某件商品一天的点击量与一周的点击量的比值,这个数据不符合二项分布,因此不适用公式(8)。但这个数据有可能是高斯分布。如果数据是高斯分布,那么其先验概率π(r)是逆Gamma分布(invers Gamma)分布,进而其后验概率π(r|x)也是逆Gamma分布,此时公式(8)会有不一样的形式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息