为什么要在离线A/B测试中使用贝叶斯方法
当涉及到假设检验时,贝叶斯方法可以取代经典的统计方法。这里将使用web分析的具体案例来演示我们的演示。

贝叶斯方法在经典统计中的重要性在此链接。
https://towardsdatascience.com/from-frequentism-to-bayesianism-hypothesis-testing-a-simple-illustration-11213232e551
假设检验是统计学中的一个中心话题,它的应用范围很广,超出了数学的范围,即使不是全部科学领域,也可以扩展到大多数科学领域。
我们将高度重视常规统计频率的方法的局限性,并提出一个相关的贝叶斯框架,以解决数据科学家在零售或营销工作中可能遇到的最常见的情况之一:A/B测试。
问题陈述
A/B测试(也称为分桶测试)为一种随机测试,将两个不同的东西(即A和B)进行假设比较。该测试运用统计学上的假设检定和双母体假设检定。 A/B测试可以用来测试某一个变量两个不同版本的差异,一般是让A和B只有该变量不同,再测试其他人对于A和B的反应差异,再判断A和B的方式何者较佳(维基百科)
也许我们想为我们的网站测试一个新的设计,新的功能,甚至是针对我们的客户的新策略,以衡量哪一个会导致最高的投资回报率。为了清晰起见,我们将考虑广告使用A和B两种创意的情况下试图提高转化率:每个交互广告的用户可以被看作是有两个可能的结果的伯努利试验:“转换”和“不转换”,根据用户购买我们产品后显示广告。
可以考虑两种设计来运行这个实验:
- 离线:可以理解为已缓存的本地数据集中进行实验
- 在线:在实验中进行分析和决策。
由于离线A/B测试问题需要截然不同的解决方案,因此本文只讨论离线情况。
频率方法:p值法和roc曲线法
每个用户被展示为创意A或B的概率为0.5,并直接以未知的概率p_A=0.04或p_B=0.05进行转换。
import scipy.stats as stats
#真实概率
p_A = 0.05
p_B = 0.04
#用户流量
n_users = 13500
n_A = stats.binom.rvs(n=n_users, p=0.5, size=1)[0]
n_B = n_users - n_A
#转换策略
conversions_A = stats.bernoulli.rvs(p_A, size=n_A)
conversions_B = stats.bernoulli.rvs(p_B, size=n_B)
print("creative A was observed {} times and led to {} conversions".format(n_A, sum(conversions_A)))
print("creative B was observed {} times and led to {} conversions".format(n_B, sum(conversions_B)))
第一个困难很快出现:为了确定一个广告素材是否比另一个更好,我们应该使用哪种测试?下表总结了常见的测试,由我们来选择最适合我们的问题的测试。

在我们的例子中,Fisher’s exact test和 Barnard’s test似乎是最相关的,因为我们关注从二项式分布获得的转化率
我们将使用Fisher检验,它具有属于精确检验类别的特点,之所以这样称呼它,是因为它的p值可以精确计算
- H0:广告素材的效果相当(p_A = p_B)
- H1:一个广告素材的效果要好于另一个
优良作法要求我们确定测试的统计能力。可以根据给定环境设计的仿真结果进行计算。我们的目标是0.8,我们使用的观测量将被校准,以达到这个阈值。为了方便起见,我们仅考虑替代假设H1-“替代假设p_A = 0.04或p_B = 0.05”,这将使我们能够轻松地计算检验的效果。
通常,α= 0.05是p值(即误报率)的拒绝区域接受的极限。对于此阈值,将至少需要13500次观测。
解释测试结果
我们会问一个问题。从我们的测试结果和p值中我们可以得出什么结论?
- 我们是否可以估算广告素材A优于广告素材B的可能性?
- 如果是的话,我们可以估计他们之间的进步吗?
两个问题的答案都是否定的。我们已经了解到,在假设(H0)下,p值仅仅是观察结果的可能性至少是极端的。但这也凸显了p值最重要的局限性:
p值不是效果大小的度量!即使获得了积极的结果,它也没有提供关于A的效果优于B的信息。
为了提取有关效果大小的知识,可以使用另一个更强大的工具:置信区间。
置信区间(CI)
置信区间表示与真实参数在建议范围内的置信度相关的未知参数的合理值范围。
这给了我们更多的理解和丰富的见解,为我们提供了关于我们估计的概率和不确定性的知识。然而,它们也有自己的缺点:
- 我们需要选择不同的方法来定义这些区间,这取决于一些假设:二项分布的置信区间。
- p_A和p_B值的置信区间不会直接转换为p_A和p_B之间的差值的置信区间!幸运的是,存在直接计算差值的置信区间的方法,但是我们仍然需要从几十种方法中选择一种。
例如,我们可以使用“最简单的”,即不需要连续性校正的Wald方法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p6rBmV1M-1583200856883)(http://qiniu.aihubs.net/1_YEFyl7YnZ7ztwawQHhQ_BQ.png)]
用
为什么要在离线A/B测试中使用贝叶斯方法的更多相关文章
- 【测试方法】Web测试中bug定位基本方法
知识总结:Web测试中bug定位基本方法 涉及知识点:测试方法 在web测试过程中,经常会遇到页面中内容或数据显示错误,甚至不显示,第一反应就是BUG,没错,确实是BUG.进一步了解这个BUG的问题出 ...
- 第十三次作业——回归模型与房价预测&第十一次作业——sklearn中朴素贝叶斯模型及其应用&第七次作业——numpy统计分布显示
第十三次作业——回归模型与房价预测 1. 导入boston房价数据集 2. 一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示. 3. 多元线性回归模型,建立13个变量与房价之间的预测模 ...
- NeurIPS 2018 中的贝叶斯研究
NeurIPS 2018 中的贝叶斯研究 WBLUE 2018年12月21日 雷锋网 AI 科技评论按:神经信息处理系统大会(NeurIPS)是人工智能领域最知名的学术会议之一,NeurIPS 2 ...
- CTR预估中的贝叶斯平滑方法(二)参数估计和代码实现
1. 前言 前面博客介绍了CTR预估中的贝叶斯平滑方法的原理http://www.cnblogs.com/bentuwuying/p/6389222.html. 这篇博客主要是介绍如何对贝叶斯平滑的参 ...
- CTR预估中的贝叶斯平滑方法及其代码实现
1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad) ...
- CTR预估中的贝叶斯平滑方法(一)原理及实验介绍
1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad) ...
- Web测试中定位bug的方法
在web测试过程中,经常会遇到页面中内容或数据显示错误,甚至不显示,第一反应就是BUG,没错,确实是BUG.进一步了解这个BUG的问题出在那里,是测试人员需要掌握的,可以简单的使用浏览器自带开发者工具 ...
- Android测试中monkey的使用方法
1.直接使用adb命令 adb shell monkey -p 包名 <event-count> 例: 1)adb shell monkey -p 包名-s 500 --throttle ...
- 使用 LaTeX 绘制 PGM(Probabilistic Graphical Models)中的贝叶斯网络(bayesian networks)
Software for drawing bayesian networks (graphical models) 这里需要调用 latex 中的绘图库:TikZ and PGF. 注意,下述 tex ...
随机推荐
- Py基础之函数
'''函数是指一类同类事物的抽象,而且这种抽象可以拓展,并且可以用在同一类事物上'''print (abs(-100),abs(100)) #abs函数是python内置的函数,可以用来求绝对值#pr ...
- node--fs
1.fs模块内置方法 1)stat 检测是文件还是目录 fs.stat(fileAddress,(err,stats)=>{ //err 出错信息 //stats.isFile() 该东西是文件 ...
- 前端每日实战:160# 视频演示如何用纯 CSS 创作一个打开内容弹窗的交互动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/GYXvez 可交互视频 此视频是可 ...
- Vue父子组件通讯
我们知道,父组件不能修改子组件的数据[这种说法是不严谨的],严谨的说法是:子组件内部不能修改从父组件传递过来的值.原因是vue遵循的是数据单向流原则,父组件传递数据给子组件只能单向绑定,通过Props ...
- vue-element-admin 模板 登录页面 post请求通过django的csrf认证,处理304错误
经过一天的研究,终于把 vue-admin-template 模板的 post 请求 和django的api 弄通了 没有了那该死的304报错了 直接贴代码: 在main.js中 我直接给设置了一个 ...
- Polly每次重试执行不同的操作
Polly每次重试执行不同的操作 前言 最近在写WG(用的 .net core 3.1 + wpf + abp vnext),程序里大量用到了重试机制选用的是Polly组件(只知道这个...). ...
- C++ 理解类 和 类中的public、protected、private
我们要明确,不只是C++有类,很多语言也会用到类,因为现在很多都是面向对象编程... 在c++中,关于类的理解,个人理解是这样的,具有共同属性的一个集合被称为类, 比如说人这个集合,具有性别,年龄,出 ...
- 常用计算机CMD 命令
cd\ '返回到根目录 cd.. '返回到上一级目录 1 cd 显示当前目录名或改变当前目录. 2 dir 显示目录中的文件和子目录列表. 3 md 创建一个目录. 4 mkdir 创 ...
- 《自拍教程45》Python_adb实时监控Logcat日志
接上一篇:adb命令_一键截取logcat日志, 有一天, 系统稳定性开发负责人找到我,希望我能在跑android 系统monkey的时候, 实时监控logcat的输出,如果一旦发现"jav ...
- Clipboard.SetText()卡住问题
调用 Clipboard.SetText(),每次都抛出异常:"CLIPBRD_E_CANT_OPEN" 调查后发现,实际上SetText有成功的将文本复制到Clipboard,但 ...