背景
电商领域中经常需要计算或预测一些转化率指标,如最典型的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} X∼Ber(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} Xi∼Ber(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