「原理」AB测试-详细过程和原理解读
这篇我们来详细讲讲AB测试的原理和具体的过程。
AB测试原理简介
AB测试最核心的原理,就四个字:假设检验。检验我们提出的假设是否正确。对应到AB测试中,就是检验实验组&对照组,指标是否有显著差异。
既然是假设检验,那么就是先假设,再收集数据,最后根据收集的数据来做检验。
先来说说假设。
假设一般成对出现,分为零假设 和 备选假设。
在AB测试中,零假设是:实验组&对照组 指标相同,无显著差异;备选假设则相反,实验组&对照组 指标不同,有显著差异。
举个例子。我们优化了某算法,想提高页面的点击率。针对这个场景的AB测试,零假设就是 新算法&老算法的页面点击率无明显差异,备选假设是 新算法&老算法的页面点击率有显著差异。
再来说说检验。
一般来说,我们是通过具体的指标属性来找寻相应的检验方法。那么问题来了,指标如何分类呢?
指标可以分为两种类别:
1、绝对值类指标。也就是我们平常直接计算就能得到的,比如DAU,点击次数等。我们的一般都是统计该指标在一段时间内的均值或者汇总值,不存在两个值之间还要相互计算。
2、相对值类指标。与绝对值类指标相反,我们不能直接计算得到。比如某页面的CTR,我们是用 页面点击数 / 页面展现数。我们要计算点击数和展现数,两者相除才能得到该指标。类似的,还有XX转化率,XX点击率,XX购买率一类的。我们做的AB实验,大部分情况下都想提高这类指标。
根据指标我们可以知道,该如何计算最小样本量,以及实验周期,以及对应的检验方法。
AB测试详细流程
我们先看一个图,结合这个实验的流程图,我们一点点来说:
选取指标
在做AB测试之前,我们一定要清楚,我们实验的目标是什么。并落地到具体的几个指标上,这几个指标对于我们度量实验结果,有非常明显的帮助。但是,指标也要分层级,唯一一个核心指标+多个观察指标。
核心指标用来度量我们这次实验的效果,以及计算相应的样本量。观察指标则用来度量,该实验对其他数据的影响(比如对大盘留存的影响,对网络延迟的影响等等)。
建立假设
建立假设就如同上文所说,我们建立了零假设和备选假设,零假设一般是没有效果,备选假设是有效果。
选取实验单位
大家应该都使用用户粒度来作为实验单位,但是总体说来,实验单位一般有3种。我们不用掌握,但是很多情况下面试官会问到,大家可以作为了解。
1、用户粒度:这个是最推荐的,即以一个用户的唯一标识来作为实验样本。好处是符合AB测试的分桶单位唯一性,不会造成一个实验单位处于两个分桶,造成的数据不置信。
2、设备粒度:以一个设备标识为实验单位。相比用户粒度,如果一个用户有两个手机,那么也可能出现一个用户在两个分桶中的情况,所以也会造成数据不置信的情况。
3、行为粒度:以一次行为为实验单位,也就是用户某一次使用该功能,是实验桶,下一次使用可能就被切换为基线桶。会造成大量的用户处于不同的分桶。强烈不推荐这种方式。
计算样本量
样本量计算,我们需要了解一下中心极限定理。具体书面定义和推导过程,大家可以在网上百度一下就好,我们这里就通俗的解释一下。中心极限定理的含义,就是只要样本量足够大,无论是什么指标,无论对应的指标分布是怎样的,样本的均值分布都会趋于正态分布。
基于正态分布,我们才能计算出相应的样本量和做假设检验。具体的样本量计算推导过程,大家如有需要,可以关注后加我微信私聊,这里就放结论。
整体公式如下:
由于指标可以分为将绝对值指标和相对值指标。对应的,我们在计算绝对值指标和相对值指标时,标准差的计算方式也会不同。具体如下:
我们举两个例子说明一下,让大家更有体感。
案例1-相对值指标:
某产品点击率1.5%,波动范围[1.0%,2.0%],优化了该功能后,需要AB测试计算样本量
P:1.5%,p:2.0%(由于波动范围是[1.0%,2.0%],所以至少是2.0%
总样本量 = 16 * (1.5%*(1-1.5%)+2.0%*(1-2.0%))/ (2.0%-1.5%)^2=22000
案例2-绝对值指标:
某产品购买金额标准差是25,优化了该功能后,预估至少有5元的绝对提升,需要AB测试计算样本量
σ=25,Δ=5
总样本量 = 16 * 25*25*2/5*5=800
总样本量,是指我们的实验单位,必须满足这个数量,实验结果中的数据检验才可信。也就是说,我们的实验桶和基线桶之和必须达到这个流量,才能收集数据及检验指标。
流量分割
流量切割有两种方式:分流和分层。
分流是指我们直接将整体用户切割为几块,用户只能在一个实验中。但是这种情况很不现实,因为如果我要同时上线多个实验,流量不够切怎么办?那为了达到最小样本量,我们就得延长实验周期,要是做一个实验,要几个月,相信我,你老板一定会和你聊聊人生理想的。
另一种方式,分层。就是将同一批用户,不停的随机后,处于不同的桶。也就是说,一个用户会处于多个实验中,只要实验之间不相互影响,我们就能够无限次的切割用户。这样在保证了每个实验都能用全流量切割的同时,也保证了实验数据是置信的。
两种方式用图来表达如下:
实验周期计算
相应的,最小样本量有了,我们切分了流量,知道了实验桶一天大概能有多少样本量(也可以算小时,如果产品的流量足够大)。我们直接用 最小样本量 / 实验桶天均流量 即可以得到相应的实验周期。
线上验证
很多公司不会做线上验证。当然,不验证也没关系,就是有可能会踩坑,所以还是建议大家在实验上线后进行线上验证。
线上验证主要是2个方向,一个是验证实验策略是否真的触发。即我们上线的实验桶,是否在产品上实际落地了。比如你优化了一个产品功能,你可以去实际体验下,实验桶产品是否真的有优化。
另一个是验证同一个用户只能在同一个桶中,要是同时出现在两个桶中,后期数据也会不置信。这个上文有说过。
数据检验
数据检验,大家可能都听过。比如Z检验,T检验,单尾检验,双尾检验,算P值,算置信区间等等。我们这里先说说哪种情况用Z检验,哪种情况用T检验。因为这个问题经常会碰到,也是AB测试中,面试官的必问问题。
大家应该都看过这个图:
贾俊平老师的书中就有这个图,具体的公式和原理书中有非常明细的介绍,关注公众号之后领取的“ 资料 ”中就有这本书的电子版PDF。
按照上文我们说的指标分类,一般情况下,绝对值指标用T检验,相对值指标用Z检验。因为绝对指标的的总体方差,需要知道每一个用户的值,这个在AB实验中肯定不可能。而相对值指标是二项分布,可以通过样本量的值计算出总体的值,就如同10W人的某页面点击率是10%,随机从这10W人中抽样1W人,这个点击率也是10%一样。
再来说说具体的检验。一般情况下我们可以用两种常用方法:
1、算P值,也就是算当零假设成立时,观测到样本数据出现的概率。统计学上,将5%作为一个小概率事件,所以一般用5%来对比计算出来的P值。当P值小于5%时,拒绝零假设,即两组指标不同;反过来,当P值大于5%时,接受零假设,两组指标相同。
2、算置信区间。一般情况下,我们都会用95%来作为置信水平。也就是说,当前数据的估计,有95%的区间包含了总体参数的真值。这么说可能比较绕,我们可以简单理解成 总体数据有95%的可能性在这个范围内。
我们计算两组指标的差异值,如果我们算出的差异值置信区间不含0,我们就拒绝零假设,认为两组指标不同;但是如果包含0,我们则要接受零假设,认为两组指标相同。
当然,我们也可以直接算出Z值或者T值,查表对比。但是这种不是很常用,还是以P值及置信区间为主流。
还有些公司,会将所有指标计算到为不同流量区间内的自然波动。比如我有三个指标,日活100W,那么可以拆分成多个流量区间,比如 1w、2w、5w、10w、20w、50w,100w这几个流量比例,然后依次计算这3个指标,在这些流量下的自然波动阈值,如果高于阈值,我们就认为实验有效。这种就会方便很多,但是不够严谨。
最后来说说单尾检验,双尾检验。单尾检验的前提是我们不仅认为两组指标不同,还明确了大小,一般情况下,我们都认为实验组的效果高于基线组。而双尾检验只是认为两组指标不同,未明确大小。通常来说,我们更推荐使用双尾检验,为什么呢?
因为实验本身就是一种利用数据来做决策的方法,我们不要再人为的带入主观设想。而是用双尾检验,我们不仅能量化涨了多少,还能量化掉了多少,因为实验结果有正有负,不一定都是有效果的(正向的),还可能有负向的效果,我们也可以将有负向效果的实验记录下来,沉淀成知识库,为后期实验避坑。
当然,生活中有些事件是可以用单尾检验的。比如我们优化了制造灯泡的流程,提升了灯泡的质量,那对于灯泡的质量检验我们就采用单尾检验就好,因为我们只关心灯泡质量是否和预期一样,有所提升。
知识点总结
以上,我们就讲完了整体的AB测试的流程,以及流程中的各个需要用到的知识点。
我们来总结下知识点:
1、实验流程是 选取指标 -- 建立假设 -- 选取实验单位 -- 计算样本量 -- 流量分割 -- 实验周期计算 -- 线上验证 -- 数据检验。
2、假设分为零假设和备选假设,零假设一般都是实验无效(指标无差异),备选假设是实验有效(指标有差异)。
3、指标可以分为 绝对值指标 和相对值指标,相应的,绝对值指标推荐用T检验,相对值指标推荐用Z检验。
4、检验数据是否有效,可以算P值,高于5%就接受原假设,两组指标相同;也可以算置信区间的差异值,如果差异值包含0,则接受原假设,两组指标相同。
以上,就是今天的内容,大家有问题欢迎后台留言。
点分享
点收藏
点点赞
点在看
「原理」AB测试-详细过程和原理解读相关推荐
- ARP中间人攻击详细过程及原理
ARP中间人攻击详细过程及原理 一.实验详细过程 实验工具: Kali,ENSP,Wireshark 实验环境: Kali:IP: 192.168.135.1 Server:192.168.135.2 ...
- DNS劫持详细过程及原理
DNS劫持详细过程及原理 一.DNS劫持原理 1: DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求 2: 局域网劫持, 攻击者通过伪装成网关, 劫持受害者的网络请求, 将网络请求拦截 ...
- 思岚雷达win与ubuntu18.04连接并测试详细过程
雷达简介 包含套件 雷达模组(内置pwm电机驱动) usb适配器 Micro-USB线缆 电源线 接线方式 ps:雷达不需额外的电源供电,直接使用电脑USB接口,5V供电 驱动安装 USB 适配器采用 ...
- 论文学习「MDP」:马尔可夫决策过程原理与代码实现
最近在学习 RL ,不得不先接触一下" 马尔可夫决策过程 ",这里找到了 David Silver 的课程: UCL Course on RL (http://www0.cs.uc ...
- linux 换行符_「linux」libevent demo详细分析(对比epoll)
libevent默认情况下是单线程,每个线程有且仅有一个event_base,对应一个struct event_base结构体,以及赋予其上的事件管理器,用来安排托管给它的一系列的事件. 当有一个事件 ...
- 「项目管理」如何制定详细的项目计划?
作为一个项目管理,应该如何制定项目计划才能做到,游刃有余,这里有一些建议: 如何制定详细的项目计划: 1.确定目标,围绕目标制定计划,不仅仅是要做什么?还有如何做? 2.目标分解,目标分解化整为零,将 ...
- 【SpringCloud技术专题】「Hystrix」(9)熔断器的原理和实现机制
熔断器(Circuit Breaker)介绍 熔断器,现实生活中有一个很好的类比,就是家庭电路中都会安装一个保险盒,当电流过大的时候保险盒里面的保险丝会自动断掉,来保护家里的各种电器及电路. Hyst ...
- 视频:3D打印的高超音速「客机」发动机测试
Hermeus公司所开发的Chimera发动机可实现涡轮联合循环,这意味着它是涡轮喷气发动机和冲压喷气发动机的混合体.在这两种模式之间切换的能力使Hermeus的Quarterhorse飞机能够从常规 ...
- 「游戏」游戏服务器中AOI的原理及四叉树实现
前言 要不是想起来这篇文章想写一个关于游戏服务器开发过程中关于AOI相关的文章,我都差不点忘了我是一个游戏服务器开发人员
最新文章
- 指导你成为C++编程高手的魔幻之书——写给大家看的C++书
- 数据蒋堂 | JOIN提速 - 外键指针的衍生
- 支付宝招兼职“找茬程序员” 不用坐班/最高奖励36万
- 在 ASP.NET 使用 jQuery BlockUI 插件
- Flutter ImageFilter 高斯模糊效果 BackdropFilter 实现过滤效果
- 【mysql】全文索引match多列报错
- maven插件打包exec_Exec Maven插件–从Maven Build运行Java程序
- I.MX6 Android shutdown shell command
- ace自定义在线编辑器方法及提示
- vue从s3(AWS)中获取图片并展示
- Vue开发者工具安装祥析
- 对于ARX的简单介绍
- 玩游戏用云电脑选高配有延迟吗
- modbus调试团结_团结:打破垃圾收集规则
- 电脑代理上网和共享上网
- spss 通径分析_使用SPSS线性回归实现通径分析的方法-学习资料.pdf
- 【基于UDP的网络聊天室】
- 特技摩托前线android安装_特技摩托前线修改中文版-特技摩托前线全摩托解锁版下载7.9.1安卓版-玩友游戏网...
- word里设置了标题,但生成的目录上没有显示
- 【柜子设计】草图大师及插件AFU321安装
热门文章
- java 异常抛出 顺序_java异常抛出时间顺序
- php中的echo单引号_PHP的数据类型
- php并发访问mysql_php并发对MYSQL造成压力的解决方法_PHP
- Vue parse之 从template到astElement 源码详解
- 为什么Python是最吸金编程语言?
- js中的类、继承、闭包
- 数据中心两种常用流量模型运用mininet的实现
- 集成云技术的Zoomla!逐浪CMS5.0研发全面启动
- 超级详细的教程 一步步教你Vue项目中使用axios如何进行参数拼接
- 已经了关联到svn的文件类型,如何添加到 ignore