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

概述

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

(1)r=CI” role=”presentation”>r=CI(1)(1)r=CI
.

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

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

  • 不同商品点击率之间的比较
    有两件商品A和B,其点击率分别为rA=510” role=”presentation”>rA=510rA=510,但商品A的曝光只有10次,商品B的曝光有100次,这样比较是否合理?

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

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

(2)r=C+aI+b” role=”presentation”>r=C+aI+b(2)(2)r=C+aI+b

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

扫描二维码关注公众号,回复: 1497883 查看本文章

贝叶斯平滑

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

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

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

点击率贝叶斯平滑的假设

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

(3)X∼Ber(r)” role=”presentation”>XBer(r)(3)(3)X∼Ber(r)

其中X” role=”presentation”>XX是某件商品被点击的概率,即点击率

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

点击率的极大似然估计

在(3)式的假设下,可以使用极大似然法计算出点击率的估计值r^” role=”presentation”>r̂ r^都有

(4)Xi∼Ber(r)” role=”presentation”>XiBer(r)(4)(4)Xi∼Ber(r)

那么所有记录的点击数的联合概率密度就是上式的连乘。将连乘后的式子对r” role=”presentation”>rr当成它的初始值。它解决了最开始提出的第一个问题,但没有解决第二个问题。

上述r^” role=”presentation”>r̂ r^的估计中需要用到贝叶斯参数估计。关于贝叶斯参数估计的具体内容可以参考:贝叶斯参数估计

点击率的贝叶斯估计

在贝叶斯框架下,我们假设点击率r” role=”presentation”>rr服从某个分布:

(5)r∼π(r)” role=”presentation”>rπ(r)(5)(5)r∼π(r)

因为这是基于经验的,这个分布称为先验分布。贝叶斯参数估计可以同时解决最开始提出的两个问题。其过程是基于经验或历史数据先给出一个r” role=”presentation”>rr)。

既然有先验分布,就有后验分布r” role=”presentation”>rr.

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

用历史数据根据π(r)” role=”presentation”>π(r)π(r)

损失函数

r” role=”presentation”>rr需要损失函数来约束。

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

  • L(r^,r)=(r^−r)2” role=”presentation”>L(r̂ ,r)=(r̂ r)2L(r^,r)=(r^−r)2
  • L(r^,r)=|r^−r|” role=”presentation”>L(r̂ ,r)=|r̂ r|L(r^,r)=|r^−r|

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

r^” role=”presentation”>r̂ r^的后验分布上的期望最小。

这句话的数学公式是:

(6)arg⁡min∫L(r,r^)π(r|x) dr=EπL(r,r^)” role=”presentation”>argminL(r,r̂ )π(r|x) dr=EπL(r,r̂ )(6)(6)arg⁡min∫L(r,r^)π(r|x) dr=EπL(r,r^)

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

因此需要知道π(r|x)” role=”presentation”>π(r|x)π(r|x)是要求解的参数,在这里就是点击率。

这时可以根据贝叶斯公式计算出π(r|x)” role=”presentation”>π(r|x)π(r|x)

(7)π(r|x)=f(x|r)π(r)f(x)” role=”presentation”>π(r|x)=f(x|r)π(r)f(x)(7)(7)π(r|x)=f(x|r)π(r)f(x)

其中,

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

上式好复杂,但其实一些常见的分布都可以求出上式积分的具体形式。但通常不用实际去积分,因为满足一定条件,π(r)” role=”presentation”>π(r)π(r)也就容易求得了。下面介绍共轭先验的概念。

共轭先验:
如果找到一个π(r)” role=”presentation”>π(r)π(r)会有一样的形式。

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

之前假设广告是否点击服从伯努利分布,参数为r” role=”presentation”>rr

对于点击率预测,求出π(r|x)” role=”presentation”>π(r|x)π(r|x)时,

(8)r^=C+αI+α+β” role=”presentation”>r̂ =C+αI+α+β(8)(8)r^=C+αI+α+β

上式的求解过程可以参考贝叶斯参数估计最后的例子。(8)式就是点击率估计(平滑)的最终形式。其中C” role=”presentation”>CC是从历史数据中得到的。

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

贝叶斯平滑因子的计算

综上,贝叶斯平滑的最终落脚点是要估计Beta分布(点击率r” role=”presentation”>rr。下面给出比较直观的矩估计的方法。

矩估计

Beta分布的期望是E(X)=αα+β” role=”presentation”>E(X)=αα+βE(X)=αα+β是样本方差,则:

(9)α=X¯(X¯(1−X¯)S2−1)” role=”presentation”>α=X¯(X¯(1X¯)S21)(9)(9)α=X¯(X¯(1−X¯)S2−1)

(10)β=(1−X¯)(X¯(1−X¯)S2−1)” role=”presentation”>β=(1X¯)(X¯(1X¯)S21)(10)(10)β=(1−X¯)(X¯(1−X¯)S2−1)

工程实践

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

也可以每天计算前一天的α” role=”presentation”>αα,用于当天的点击率预测平滑。

实际应用时根据历史数据得到的α” role=”presentation”>αα的范围达到预期的效果。

下图是某件商品在两周时间内的点击率。黄色线是每天根据点击次数C” role=”presentation”>CC,设置得比较夸张。可以看到如果平滑参数设置的不合理,会放大数据的表现,有时候甚至会扭曲数据的走势,数据预处理时需要考虑这样的情况。

点击率贝叶斯平滑效果

非二项分布的贝叶斯平滑

公式(8)的结论适用于数据是二项分布的情况,如点击率。对于不是二项分布的数据公式(8)不适用。如果数据不是二项分布,那么其先验概率就不是Beta分布了。比如某件商品一天的点击量与一周的点击量的比值,这个数据不符合二项分布,因此不适用公式(8)。但这个数据有可能是高斯分布。如果数据是高斯分布,那么其先验概率π(r)” role=”presentation”>π(r)π(r)也是逆Gamma分布,此时公式(8)会有不一样的形式。

                                            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/production/markdown_views-ea0013b516.css">
                                </div>

概述

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

(1)r=CI” role=”presentation”>r=CI(1)(1)r=CI
.

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

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

  • 不同商品点击率之间的比较
    有两件商品A和B,其点击率分别为rA=510” role=”presentation”>rA=510rA=510,但商品A的曝光只有10次,商品B的曝光有100次,这样比较是否合理?

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

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

(2)r=C+aI+b” role=”presentation”>r=C+aI+b(2)(2)r=C+aI+b

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

贝叶斯平滑

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

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

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

点击率贝叶斯平滑的假设

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

(3)X&#x223C;Ber(r)” role=”presentation”>XBer(r)(3)(3)X∼Ber(r)

其中X” role=”presentation”>XX是某件商品被点击的概率,即点击率

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

点击率的极大似然估计

在(3)式的假设下,可以使用极大似然法计算出点击率的估计值r&#x005E;” role=”presentation”>r̂ r^都有

(4)Xi&#x223C;Ber(r)” role=”presentation”>XiBer(r)(4)(4)Xi∼Ber(r)

那么所有记录的点击数的联合概率密度就是上式的连乘。将连乘后的式子对r” role=”presentation”>rr当成它的初始值。它解决了最开始提出的第一个问题,但没有解决第二个问题。

上述r&#x005E;” role=”presentation”>r̂ r^的估计中需要用到贝叶斯参数估计。关于贝叶斯参数估计的具体内容可以参考:贝叶斯参数估计

点击率的贝叶斯估计

在贝叶斯框架下,我们假设点击率r” role=”presentation”>rr服从某个分布:

(5)r&#x223C;&#x03C0;(r)” role=”presentation”>rπ(r)(5)(5)r∼π(r)

因为这是基于经验的,这个分布称为先验分布。贝叶斯参数估计可以同时解决最开始提出的两个问题。其过程是基于经验或历史数据先给出一个r” role=”presentation”>rr)。

既然有先验分布,就有后验分布r” role=”presentation”>rr.

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

用历史数据根据&#x03C0;(r)” role=”presentation”>π(r)π(r)

损失函数

r” role=”presentation”>rr需要损失函数来约束。

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

  • L(r&#x005E;,r)=(r&#x005E;&#x2212;r)2” role=”presentation”>L(r̂ ,r)=(r̂ r)2L(r^,r)=(r^−r)2
  • L(r&#x005E;,r)=|r&#x005E;&#x2212;r|” role=”presentation”>L(r̂ ,r)=|r̂ r|L(r^,r)=|r^−r|

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

r&#x005E;” role=”presentation”>r̂ r^的后验分布上的期望最小。

这句话的数学公式是:

(6)arg&#x2061;min&#x222B;L(r,r&#x005E;)&#x03C0;(r|x)&#xA0;dr=E&#x03C0;L(r,r&#x005E;)” role=”presentation”>argminL(r,r̂ )π(r|x) dr=EπL(r,r̂ )(6)(6)arg⁡min∫L(r,r^)π(r|x) dr=EπL(r,r^)

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

因此需要知道&#x03C0;(r|x)” role=”presentation”>π(r|x)π(r|x)是要求解的参数,在这里就是点击率。

这时可以根据贝叶斯公式计算出&#x03C0;(r|x)” role=”presentation”>π(r|x)π(r|x)

(7)&#x03C0;(r|x)=f(x|r)&#x03C0;(r)f(x)” role=”presentation”>π(r|x)=f(x|r)π(r)f(x)(7)(7)π(r|x)=f(x|r)π(r)f(x)

其中,

f(x)=&#x222B;0&#x221E;f(x|r)&#x03C0;(r)dr&#xA0;&#xA0;(&#x8FB9;&#x7F18;&#x6982;&#x7387;&#x5BC6;&#x5EA6;&#x5B9A;&#x4E49;)” role=”presentation”>f(x)=0f(x|r)π(r)dr  ()f(x)=∫0∞f(x|r)π(r)dr  (边缘概率密度定义)

上式好复杂,但其实一些常见的分布都可以求出上式积分的具体形式。但通常不用实际去积分,因为满足一定条件,&#x03C0;(r)” role=”presentation”>π(r)π(r)也就容易求得了。下面介绍共轭先验的概念。

共轭先验:
如果找到一个&#x03C0;(r)” role=”presentation”>π(r)π(r)会有一样的形式。

『轭』是指驾车时套在牲口脖子上的曲木。古代拉扯的牲口通常有两只,因此轭是连接两只牲口的工具。在这里共轭是指&#x03C0;(r)” role=”presentation”>π(r)π(r)联系起来了。

之前假设广告是否点击服从伯努利分布,参数为r” role=”presentation”>rr

对于点击率预测,求出&#x03C0;(r|x)” role=”presentation”>π(r|x)π(r|x)时,

(8)r&#x005E;=C+&#x03B1;I+&#x03B1;+&#x03B2;” role=”presentation”>r̂ =C+αI+α+β(8)(8)r^=C+αI+α+β

上式的求解过程可以参考贝叶斯参数估计最后的例子。(8)式就是点击率估计(平滑)的最终形式。其中C” role=”presentation”>CC是从历史数据中得到的。

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

贝叶斯平滑因子的计算

综上,贝叶斯平滑的最终落脚点是要估计Beta分布(点击率r” role=”presentation”>rr。下面给出比较直观的矩估计的方法。

矩估计

Beta分布的期望是E(X)=&#x03B1;&#x03B1;+&#x03B2;” role=”presentation”>E(X)=αα+βE(X)=αα+β是样本方差,则:

(9)&#x03B1;=X&#x00AF;(X&#x00AF;(1&#x2212;X&#x00AF;)S2&#x2212;1)” role=”presentation”>α=X¯(X¯(1X¯)S21)(9)(9)α=X¯(X¯(1−X¯)S2−1)

(10)&#x03B2;=(1&#x2212;X&#x00AF;)(X&#x00AF;(1&#x2212;X&#x00AF;)S2&#x2212;1)” role=”presentation”>β=(1X¯)(X¯(1X¯)S21)(10)(10)β=(1−X¯)(X¯(1−X¯)S2−1)

工程实践

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

也可以每天计算前一天的&#x03B1;” role=”presentation”>αα,用于当天的点击率预测平滑。

实际应用时根据历史数据得到的&#x03B1;” role=”presentation”>αα的范围达到预期的效果。

下图是某件商品在两周时间内的点击率。黄色线是每天根据点击次数C” role=”presentation”>CC,设置得比较夸张。可以看到如果平滑参数设置的不合理,会放大数据的表现,有时候甚至会扭曲数据的走势,数据预处理时需要考虑这样的情况。

点击率贝叶斯平滑效果

非二项分布的贝叶斯平滑

公式(8)的结论适用于数据是二项分布的情况,如点击率。对于不是二项分布的数据公式(8)不适用。如果数据不是二项分布,那么其先验概率就不是Beta分布了。比如某件商品一天的点击量与一周的点击量的比值,这个数据不符合二项分布,因此不适用公式(8)。但这个数据有可能是高斯分布。如果数据是高斯分布,那么其先验概率&#x03C0;(r)” role=”presentation”>π(r)π(r)也是逆Gamma分布,此时公式(8)会有不一样的形式。

                                            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/production/markdown_views-ea0013b516.css">
                                </div>

猜你喜欢

转载自blog.csdn.net/xiao2cai3niao/article/details/79947682