点击率预测的贝叶斯平滑

文章目录

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

背景

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

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

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

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

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

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

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

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

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

贝叶斯平滑

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

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

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

点击率贝叶斯平滑的假设

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

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

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

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

点击率的极大似然估计

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

X i ∼ B e r ( r ) (4) X_i \sim Ber( r) \tag{4} XiBer(r)(4)

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

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

点击率的贝叶斯估计

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

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

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

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

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

用历史数据根据 π ( r ) \pi(r) π(r)估计 r r r,记作 r ^ h i s t o r y \hat{r}_{history} r^history;用当前数据根据 π ( r ∣ x ) \pi(r|x) π(rx)估计 r r r,记作 r ^ c u r r e n t \hat{r}_{current} r^current,然后用 r ^ h i s t o r y \hat{r}_{history} r^history修正 r ^ c u r r e n t \hat{r}_{current} r^current

平滑系数的计算

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

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

  • L ( r ^ , r ) = ( r ^ − r ) 2 L(\hat{r}, r) = (\hat{r} - r)^2 L(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^,使得损失函数在 r r r的后验分布上的期望最小。

这句话的数学公式是:

arg ⁡ min ⁡ ∫ L ( r , r ^ ) π ( r ∣ x )   d r = 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} argminL(r,r^)π(rx) dr=argminEπL(r,r^)(6)

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

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

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

π ( 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} π(rx)=f(x)f(xr)π(r)(7)

其中,

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

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

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

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

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

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

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

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

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

综上,贝叶斯平滑的最终落脚点是要估计Beta分布(点击率 r r r服从的分布)中的参数 α \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ˉ是样本均值, S 2 S^2 S2是样本方差,则:
α = X ˉ ( X ˉ ( 1 − X ˉ ) S 2 − 1 ) (9) \alpha = \bar{X}\left(\frac{\bar{X}(1-\bar{X})}{S^2}-1 \right) \tag{9} α=Xˉ(S2Xˉ(1Xˉ)1)(9)
β = ( 1 − X ˉ ) ( X ˉ ( 1 − X ˉ ) S 2 − 1 ) (10) \beta= (1-\bar{X})\left(\frac{\bar{X}(1-\bar{X})}{S^2}-1 \right) \tag{10} β=(1Xˉ)(S2Xˉ(1Xˉ)1)(10)

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

工程实践

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

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

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

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

点击率预测的贝叶斯平滑_第1张图片

非二项分布的贝叶斯平滑

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

你可能感兴趣的:(点击率预测的贝叶斯平滑)