为什么要在离线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 ...
随机推荐
- python settings 中通过字符串导入模块
1. 项目文件结构 set_test ├─ main.py # 入口函数 │ ├─notify # 自定义的模块 │ ├─ email.py # 自定义模块 │ ├─ msg.py # 自定义模块 │ ...
- 浅谈C# Dictionary实现原理
使用C#已经有好多年头了,然后突然有一天被问到C#Dictionary的基本实现,这让我反思到我一直处于拿来主义,能用就好,根本没有去考虑和学习一些底层架构,想想令人头皮发麻.下面开始学习一些我平时用 ...
- Java enum枚举在实际项目中的常用方法
在项目实际开发过程中,经常会遇到对某些固定的值.字典项的定义的需求,很多项目经常使用常量来定义,其实在jdk1.5就已经引入了枚举,使用枚举可以更好的解决这类需求,本文主要记录枚举的优势以及经常在项目 ...
- python Could not find a version that satisfies the requirement pymysql (from versions: none) ERROR: No matching distribution found for pymysql
使用pip安装pymysql出错;Could not find a version that satisfies the requirement cryptography (from pymysql) ...
- 前端每日实战:52# 视频演示如何用纯 CSS 创作一个小球绕着圆环盘旋的动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gKxyWo 可交互视频 此视频是可 ...
- mysql从5.5升级到5.7遇到的坑
在安装mysql5.7时很顺利安装完成,但在启动项目时报错: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clau ...
- Xml反序列化记录
1.概述 公司项目遇到一个需要对接webservice的,webservice大部分用的都是xml来传输的,这里记录一下xml反序列化遇到的问题 2.xml工具类 xml序列化: public sta ...
- python笔记28(TCP,UDP,socket协议)
今日内容 1.TCP协议 协议的特点:三次握手,四次挥手: 2.UDP协议 3.OSI七层模型:每层的物理设备,每一层协议. 4.代码部分: ①介绍socket: ②使用socket完成tcp协议的w ...
- DOM是什么(初级版)
js新手村出村之路--基础知识 在这里默认你已经粗粗的自学过了一遍js知识.(也许是在昏昏欲睡的课堂上听了两分钟,也许是跟着b站上的视频打了一遍.who cares) 在下面的内容中我将整理一些在平常 ...
- 02 VMware下载与安装
一.虚拟机的下载 1.进入官方网站 vmware Workstation 官方网站: https://www.vmware.com/cn.html 2.根据操作系统选择合适的产品,在这里以Window ...