为什么需要平滑?

某个物品CTR(click-Through-Rate)定义为“物品被点击的概率”。CTR是某个物品在其他条件保持不变下自身的属性。但是概率我们不好确定,能确定的是频率。根据大数定理,随着实验次数的增加,频率会逐渐稳定到概率附近。所以我们用一般物品被点击的频率

来表示它的CTR,即

(公式1)

我们当然希望CTR越大越好,由上面的公式我们可知CTR的大小实际上由两部分决定。首先是展示的次数,英文里用了impression,直译为给人留下的印象,我们可以理解为曝光并且被用户看到,是有效的曝光。其次是被点击的次数。如果有一件物品a 曝光了1次,并且被点了,那它的CTR就是100%。而另外一件物品b曝光了1000次,被点击了100次,它的CTR就是10%。那我们能说物品a的CTR比物品b的CTR更高吗?显然不能,一次被曝光并且被点击,这其中包含了很大的不确定性。根据大数定律,在实验次数不断增加下,频率才会稳定在概率附近。显示CTR等于100%这个数据,只是在一次实验中得到,它偏离真实CTR的可能性非常高。

那么怎么能获得更可靠的结论呢?一种显然的想法是提高物品a的曝光,增大实验次数,让频率更接近概率。但是大多数时候曝光不是你想增加,增加就能增加的。

指数平滑

另外一种朴素的想法是我们假定物品的CTR在一定时间内是不变的,我们可以利用历史的数据来修正今天的CTR。今天的CTR实际上CTR的观测值。根据这个思路我们首先想到了指数平滑

(公式2)

可以看出来随着时间的推移,历史的信息在很快的衰减。

为什么利用beta分布得到的结果是

beta分布是在0-1之间beta分布的概率密度函数

我们假设某件物品的CTR服从参数为

的beta分布,即有

(公式3)

那么每次曝光可以看成从服从

的beta分布里的一次随机抽样。显然被点击的次数服从参数为

和r的n重伯努利分布,其中

和r都是已知条件

(公式4)

曝光

和点击率是独立的,

(公式5)

明确我们的目标是要求在已知曝光

和点击

下点击率

的估计,根据贝叶斯公式

(公式6)

其中B表示Beta函数,可见新的点击率也服从Beta分布,当我们得到

之后,就可以确定点击率的分布了。

对于参数为

的Beta分布的它的众数是

,它的平均数是

。所以我们可以拿

或者

来作为平滑之后的CTR.

如何计算

假设我们拥有的是时间序列格式的数据,每天点击数独立同分布,所以有如下的概率密度函数,根据极大似然估计的原理。我们使下式取到最大值

(公式7)

上式对

求导有

其中

迭代求解

import scipy.special as special

def update(clicks,imps,init_alpha,init_beta,epoches,epsilon):

assert len(clicks) == len(imps), print("length not equal")

alpha, beta = init_alpha, init_beta

last_alpha = last_beta = 0

for i in range(epoches):

normalization = sum([special.digamma(imps[i]+alpha+beta) - special.digamma(alpha+beta) for i in range(len(clicks))])

alpha = alpha * (1/normalization) * sum([special.digamma(clicks[i] + alpha)-special.digamma(alpha) for i in range(len(clicks))])

beta = beta * (1/normalization) * sum([special.digamma(imps[i]-clicks[i]+beta)-special.digamma(beta) for i in range(len(clicks))])

if abs(last_alpha - alpha)

break

last_alpha = alpha

last_beta = beta

return alpha,beta

写在最后

计算

时用到的极大似然函数也可以用我们在推导平滑CTR用到的公式6,最后对

的迭代求求我也没太搞清楚,有兴趣的朋友可以看下第一个参考文献。

参考文献

Environmental I S . Click-Through Rate Estimation for Rare Events in Online Advertising[J]. Online Multimedia Advertising Techniques & Technologies, 2011.

ctr 平滑_CTR平滑的原理,包懂!!!附代码相关推荐

  1. 辗转相除法求最大公约数原理分析(附代码实现)

    辗转相除法求最大公约数原理分析(附代码实现) 前言 解释 原理分析 代码 结语 前言 辗转相除法用起来很简单,但是其原理却自己想不明白.于是乎看了几篇有关辗转相除法原理的分析,在这里自己写下自己的理解 ...

  2. AlphaGoZero 原理讲解(附代码)

    AlphaGoZero 原理讲解 前言 一.AlphaGoZero 棋盘编码器 二.AlphaGoZero树搜索算法 1. 树节点及其动作分支 2. 选择要探索的动作分支 3. 扩展搜索树 4. 选择 ...

  3. ctr 平滑_ctr平滑

    在广告系统中,一个重要的指标是CTR.ctr=点击(Click)/曝光(Impression). 如果一个广告只有5次曝光,没有点击,是否表示它的ctr为0? 如果一个广告曝光了4次,却有3次点击,它 ...

  4. ctr 平滑_CTR平滑方法

    一.Beta分布 从统计机器学习角度上讲,对于某个事件发生的概率,我们一般会假设其服从某一种先验分布. 举个例子,在棒球里可以把击球当做随机事件,只有击中和没击中两种状态,衡量棒球运动员职业技能的一个 ...

  5. matlab 平滑曲线连接_平滑轨迹插值方法之多项式插值(附代码)

    前言 今天我们来聊聊轨迹插值,在机器人的运动规划和控制领域,参考轨迹的生成是一个历史悠久的问题,已经发展出了一系列的方法.今天我们就来聊一聊轨迹插值领域中最常见的轨迹插值方法:多项式插值. 说明:本文 ...

  6. 独家 | creditR 的基于实践的导论:一个神奇的改良信用风险评分和验证的R包(附代码)...

    作者:Ayhan Dis 翻译:张睿毅 校对:丁楠雅 本文约3200字,建议阅读10+分钟. 本文介绍了关于creditR包的相关基础知识,并通过使用creditR深入研究一个全面的例子进行实际操作. ...

  7. 数据分析常用的python包_量化投资数据分析之常用的python包(附代码)

    小伙伴们都知道python功能强大,在金融量化分析中运用广泛,python常用的数据分析包很多,下面先给大家简单列举一些(如果您刚开始学python觉得这东西很烦看不懂,那么请不要担心,直接忽视跳到第 ...

  8. 量化投资数据分析之常用的python包(附代码)

    小伙伴们都知道python功能强大,在金融量化分析中运用广泛,python常用的数据分析包很多,下面先给大家简单列举一些(如果您刚开始学python觉得这东西很烦看不懂,那么请不要担心,直接忽视跳到第 ...

  9. 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解

    相关文章 K近邻算法和KD树详细介绍及其原理详解 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解 决策树算法和CART决策树算法详细介绍及其原理详解 线性回归算法和逻辑斯谛回归算法详细介绍及其原理详 ...

最新文章

  1. nodejs -- promise的返回
  2. Hibernate的条件查询的几种方式
  3. 黄聪:解决Jquery在GET方式传递参数时gb2312中文编码乱码
  4. 空指针 java调用_java-变量引用与重复性get调用以避免空指针
  5. boost::hana::eval_if用法的测试程序
  6. nuxt中必须要知道的一点 关于 nuxt-link 和 a 标签的区别
  7. overlayfs高密 读性能_RFID读写器天线圆极化与线极化的性能区别
  8. python linux 上 RS485通信 Modbus协议
  9. matlab绘图如何居中,word中插入绘图表格怎样居中
  10. 《Cracking the Coding Interview程序员面试金典》----猫狗收容所
  11. Java随机更换背景图片_利用Java处理图片,更换背景
  12. easyx的使用(1)
  13. 等保三级收费-等保三级的办理流程
  14. caj文献里的参考文献拷贝到word中格式错乱问题
  15. web3.0 nft 是什么? nft的意义是什么?
  16. 微信小程序盲盒系统源码 附带教程
  17. 从线性模型到广义线性模型(2)——参数估计、假设检验
  18. 高德地图添加瓦片图层
  19. [Android学习] 1. 简易登录界面设计
  20. 计算机连接网络不稳定,造成网络连接不稳定的原因有哪些

热门文章

  1. Cloud for Customer workCenterLoader
  2. jMeter debug postprocessor的用法
  3. Smart Template tile的绘制原理
  4. Hybris开发环境的license计算实现
  5. SAP Cloud for Customer(C4C)和微信集成系列教程
  6. mysql coreseek_centos+php+coreseek+sphinx+mysql之一coreseek安装篇
  7. Android 省份城市搜索,android - 非常不错的 城市省份的选择组件: citypicker
  8. origin遇到不适当的参数_Origin教程|如何更改Lable和设置非均匀坐标
  9. vlan绑定_图文并茂深入了解VLAN工作原理,不能错过干货
  10. java radiobutton获取信息_如何获取JRadioButton的文本值