为什么要在离线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 ...
随机推荐
- 谈谈Vue的递归组件
2月最后一天,而且还四年一遇,然而本月居然一篇博客没写,有点说不过去.所以,今天就来谈谈Vue的递归组件.我们先来看一个例子: See the Pen 递归组件 by imgss (@imgss) o ...
- 8——PHP循环结构&&条件结构
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- 云机器同步数据 - rsync
一.需求 从google cloud云机器上定期同步图片内容,选用了支持增量备份的rsync. 二.rsync概述 rsyn是类unix系统下的数据镜像备份工具 - remote sync,安全性高, ...
- C#使用正则表达式获取HTML代码中a标签里包含指定后缀的href的值
//C#使用正则表达式获取HTML代码中a标签里包含指定后缀的href的值,表达式如下: Regex regImg = new Regex(@"(?is)<a[^>]*?href ...
- 大马提权详细过程webshell到提权
.在shell路径这一栏里输入服务器端cmd.exe对应的绝对路径,这里用我们刚刚上传上去的smallchao.exe 8.WINDOWS常见命令:net user 查看所有用户query user ...
- layer打开弹窗时传递参数(content:)
在使用layer打开弹窗时,我希望带一些参数过去,进行某些判断.直接就可以用链接+参数的方式即可. js var userGrade=Mrant layer.open({ title: '权限管理', ...
- 【新功能】MaxCompoute禁止Full Scan功能开放
摘要: 2018年1月10日,MaxCompute禁止Full Scan功能开放.对于新创建的project默认情况下执行sql时,针对该project里的分区表不允许全表扫描,必须有分区条件指定需要 ...
- zookeeper伪集群搭建
zookeeper伪集群搭建 1. 下载zookeeper: https://zookeeper.apache.org/ 2. 解压: tar -zxvf zookeeper-3.4.14.tar.g ...
- python框架Django实战商城项目之用户模块创建
创建用户APP 整个项目会存在多个应用,需要存放在一个单独的文件包了,所以新建一个apps目录,管理所有子应用. 在apps包目录下穿件users应用 python ../../manage.py s ...
- Unity 相机平移、旋转、缩放
内容不多,一个脚本,直接上代码 using System.Collections; using System.Collections.Generic; using UnityEngine; publi ...