专栏首页巡山猫说数据「原理」AB测试-详细过程和原理解读

「原理」AB测试-详细过程和原理解读

上篇,我们讲述了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实验中需要注意的小问题。

以上,就是本期内容。

本文分享自微信公众号 - 巡山猫说数据(sven994777),作者:巡山猫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「原理」AB测试-来源及实验过程

    「原理」这个专题,主要介绍数据分析师的常用分析方法和原理。我们先从目前最常用的AB-Test讲起。

    巡山猫说数据
  • 网站渗透测试原理及详细过程

    网站渗透测试原理及详细过程 零、前言 渗透测试在未得到被测试方授权之前依据某些地区法律规定是违法行为。 这里我们提供的所有渗透测试方法均为(假设为)合法的评估...

    Angel_Kitty
  • A/B Test 的统计原理和效果解读

    持续快速有效的 A/B Test 是实现业务从十到百增长的必杀器,而背后的黑科技来源于基础的统计理论。为此,本文将介绍做 A/B Test 所涉及的重要统计学知...

    阿泽 Crz
  • Hadoop-HDFS读写原理的超详细教程

    最近在答疑工作中,有很多小伙伴都在问HDFS的读写原理是什么,小编其实在刚开始学习大数据的时候,也对此有所困惑。

    用户8639654
  • 一篇文章读懂A/B测试背后的统计学原理

    A/B 测试是一种对比试验,在试验过程中,我们从总体中抽取一些样本进行数据统计,进而得出对总体参数的一个评估。我们能从试验数据中得出有效结论的科学基础是基于统计...

    小老鼠
  • DNS的解析原理和过程

    DNS的解析原理和过程: 在Internet上域名和IP是对应的,DNS解析有两种:一种是正向解析,另外一种是反向解析。 正向解析:正向解析就是将域名转换成对应...

    Denmark
  • 图解JSP运行原理和过程

    下面代码通过注解来处理/hello的请求, 并在代码中将请求转发到上述hello.jsp.

    望天
  • Java线程池原理与源码详细解读,再也不怕面试问线程池了!

    “线程池”,顾名思义就是一个线程缓存,线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此Java中提供线程池对线程进行统一分配、...

    程序员追风
  • Laravel中Facade的加载过程与原理详解

    前言 本文主要给大家介绍了关于Laravel中Facade加载过程与原理的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 简介

    用户2323866
  • 布隆过滤器(BloomFilter)原理 实现和性能测试

    布隆过滤器(BloomFilter)是一种大家在学校没怎么学过,但在计算机很多领域非常常用的数据结构,它可以用来高效判断某个key是否属于一个集合,有极高的插入...

    xindoo
  • Tigase手动安装过程

    网上已有很多Tigase的安装文档,Tigase官方文档(英文)也很详细。但是我还是要再写一下安装过程,主要原因是网上的安装文档基本都是在特别简单的环境中进行安...

    普通程序员
  • Python参数传递实现过程及原理详解

    在分析python的参数传递是如何进行的之前,我们需要先来了解一下,python变量和赋值的基本原理,这样有助于我们更好的理解参数传递。

    砸漏
  • 统计学(2)|AB测试—理论基础

    ZZ之前承诺以A/B测试为案例,串联起统计学的理论,让理论直接落地于实践,搭建起统计学理论与工作实践的桥梁。所以,为了实现吹过的牛逼,这篇”A/B测试—理论基础...

    用户8612862
  • 什么是A/B test?有哪些流程?有什么用?终于有人讲明白了

    导读:关于A/B test的重要性无需多言,数据、产品等从业人员几乎必知,好的数据科学家我想一定是知道理解业务比模型更为重要,而A/B test就是伴随着业务增...

    华章科技
  • A/B 测试那点儿事:理论与工具实践

    21CTO社区导读: 各位,在我们之前的文章内容中发表过一些关于数据驱动设计的文章,或者使用分析工具来优化我们产品的UI设计。简单讲,我们可以用Google A...

    企鹅号小编
  • Python unittest工作原理和使用过程解析

    这篇文章主要介绍了Python unittest工作原理和使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可...

    砸漏
  • 数据分析面试中需要你必知必会的内容 !

    关于AB test的重要性无需多言,数据、产品等从业人员几乎必知,好的数据科学家我想一定是知道理解业务比模型更为重要,而AB test就是伴随着业务增长的利器。

    1480
  • AB test | 数据分析师面试必知 !

    关于AB test的重要性无需多言,数据、产品等从业人员几乎必知,好的数据科学家我想一定是知道理解业务比模型更为重要,而AB test就是伴随着业务增长的利器。

    数据森麟
  • 大四学生整理:一份“不完美”的数据科学问答清单

    用户1737318

扫码关注云+社区

领取腾讯云代金券