- Jason
- https://zhuanlan.zhihu.com/p/96382982
1. 前言
持续快速有效的 A/B Test 是实现业务从十到百增长的必杀器,而背后的黑科技来源于基础的统计理论。为此,本文将介绍做 A/B Test 所涉及的重要统计学知识,以帮助更好的设计实验和解读实验结果,做出科学有效的数据驱动决策。
2. 统计与 A/B Test
为什么统计对于 A/B Test 如此重要呢?因为 **A/B Test 从本质上来说是一个基于统计的假设检验过程 **,它首先对实验组和对照组的关系提出了某种假设,然后计算这两组数据的差异和确定该差异是否存在统计上的显著性,最后根据上述结果对假设做出判断。
但是事实上,我们关心的重点并不是实验组和对照组这一小部分用户,而是我们的新方案最终全量曝光给所有用户会带来多大的影响。如果这是一个不太成功的方案,未经过测试就直接上线,等到真正造成用户损失可能为时已晚。「而统计的价值在于其先验性」,能帮助我们在事情尚未发生时通过手头有限的信息来预测和估计将来我们不了解的结果,且具有一定的准确度。
既然统计能根据有限信息一定程度上准确推测全量信息,那么它满足了我们同时验证多个 idea 的需求,让平台同时并行跑大量实验成为可能,大大提高测试效率。而测试效率与业务增长速度呈高度正相关,即使 100 个实验里有 80 个与预想的转化率提升无关,也帮助验证了 100 个 idea,挡住了 80 个无效的尝试,这就是为什么统计对于 A/B Test 来说如此有价值的原因。
这看起来很简单,但其实也不简单。试想我想知道发 5 元券相比发 3 元券对于新用户的冒泡率是否有提升,针对这个例子,随机选取了 10000 个用户做实验,5000 个用户分到「对照组 - 得到 3 元券」,5000 个用户为「实验组 - 拿到 5 元券」,经过一周的的观察,得到对照组转化率为 40%,实验组为 41%。那么能否认为 5 元券起到了更好的拉新效果呢?如果简单粗暴来看,41% 明显优于 40%,我们可以认为对于这 10000 个用户来说,实验组方案确实起到了更好的拉新效果。但需要注意的是,这 10000 个用户仅是这个实验中的样本,样本永远不可能是总体的完美代表,「用样本估计总体是有偏的」,那么这次估计可不可信,多大程度可信,这就是统计需要解决的问题。
3. 基本术语介绍
接下来,让我们来快速了解一些术语:
- 「总体 (Population)」 : 我们最终关注的全部对象。例如,如果我们的实验对象是 10% 的用户,那么它与剩下 90% 用户组成的全部用户是总体;如果我们的对象是这 10% 的用户产生的订单,那么全部用户产生的全部订单是总体。
- 「样本 (Sample)」 : 总体中的小部分用户,这是我们的实验对象。例如,如果我们的实验对象是 10% 的用户,那么样本就是这 10% 的用户;如果我们的对象是这 10% 的用户产生的订单, 那么样本就是这 10% 的用户产生的订单。
- 「样本量 (Sample Size)」 : 样本的总个数。例如,如果一个实验的核心指标是冒泡发单用户转化率 (发单用户数 / 冒泡用户数),那么这个实验的实验对象是用户,实验周期内有过冒泡的用户数是这个实验的样本量;如果一个实验的核心指标是冒泡发单率 (发单数 / 冒泡数), 那么实验周期内的总冒泡数是这个实验的样本量,这里需要特别注意。
- 「样本统计量 :」 它本身是个很宽泛的概念,可以是样本均值,可以是比率或方差,或其他通过样本计算出来的某个关系式。但是在 A/B Test 中,由于我们目标是了解实验组和对照组方案的好坏,样本统计量特指这两组的转化率(如发单率)的差异,用
表示 (
代表比率),或均值指标 (如平均订单数) 的差异,用
表示。
- 「抽样 (Sampling)」 : 采用某种特定的方法,如随机抽取,从总体中选取一部分有代表性样本的方法。
- 「分布 (Distribution)」 : 你可以把分布想象成一个横轴为观测值,纵轴为出现频率的图,比如扔骰子只可能出现 1-6 这 6 种可能,重复扔 50 次筛子,它的分布也许如下:
- 「正态分布 (Normal Distribution)」 : 又叫高斯分布。它的分布图是一个两头少 / 中间多的对称的钟形曲线。自然界的许多随机事件都服从这种分布,如人的身高,体重。实际业务中的大部分均值指标,如平均应答时长、人均发单数基本都满足这种分布。
- 「伯努利分布 (Binomial Distribution) :」 只有 0 和 1 两种取值。都可以表达为是或否的问题。例如,抛一次硬币是正面向上吗?新出生的小孩是女孩吗?大部分率指标如发单率、应答率等都满足这种分布 (一个用户只有发单或不发单两种情况)。
- 「中心极限定理 (Central Limit Theorem)」 : 随着抽样次数增多,样本均值的抽样分布趋向于服从正态分布。这里需要注意的是,抽样次数并不是样本量,一次实验只是一次抽样,只能得到一个样本均值。而 n 次抽样会得到 n 个值,这些值的分布才是正态分布。举个例子,在下图中当抽样次数达到 30 次时,样本均值的分布逐渐呈一个对称的钟形曲线。
「中心极限定理是概率论的重要定理,它是接下来谈到的显著性检验的基础」。如果一组数据属于正态分布,我们可以根据正态分布的概率密度函数推算出置信区间或
,当一组数据不属正态分布时,我们仍然可以依据中心极限定理和正态分布的函数推导出置信区间和对应的
。
有了以上背景知识铺垫,我们接下来继续学习 A/B Test。理想状态中,样本能够完美的代表总体。例如,总体有 100000 个用户,有 10000 个用户成功转化,那么转化率为 10%。理想状态中,抽取 100 个用户做实验,那么一定有 10 个用户转化。在这个例子中,样本的转化率 10% 是严格等于总体转化率 10% 的。
但是现实没有这么完美。现实情况下,在这 100 个样本中,也许只有 2 个人转化,也许有 20 个人转化。这就是样本之间的波动。由于样本的随机性,样本的观测值 (如转化率) 和总体的真实参数 (如总体转化率) 存在差距。这种差距能用 「「抽样误差」」 衡量。「抽样误差越大,用样本估计总体的结果就越不准确。正因为抽样误差的存在,我们用样本观测值直接作为总体参数的估计值是不可取的。因此,直接比较实验组和对照组转化率的大小还不足以支撑一个有力的决策。我们需要更多的信息来描述这次抽样用样本估计总体的准确程度,「置信区间」和「
」正起到了这个作用」。
4. 如何理解置信区间和抽样误差?
「问题重述」
为比较实验组和对照组的转化率差异,我们需要首先收集实验组和对照组的转化率数据,经过 7 天的观察,对照组的转化率为 40%,实验组为 41%,是否实验组转化率优于对照组?
你也许会说因为实验组转化率比对照组高了 1%,所以实验组能实现更高的转化率。但是由于抽样误差的存在,这样的描述也许并不准确。更 smart 的表述可能是这样的:
❝我认为实验组转化率相比对照组转化率高 0.8-1.2%(1% ± 0.2 %), 置信度为 95%。 ❞
在这句话中,1% 是实验组和对照组的绝对差异(即 41%-40%), ± 0.2 % 是抽样误差,「绝对差异 ± 抽样误差给出了置信区间的范围」 为 0.8%-1.2%。
置信度 95% 说的是我们有 95% 的自信能说出 “实验组转化率相比对照组转化率高 0.8-1.2%” 这句话。从概率论的角度解释,就是在其他参数不变的情况下,如果我们重复做同样的实验 100 次,那么有 95 次得出的实验组和对照组的转化率差异都在 0.8%-1.2% 这个区间内。
因此,置信区间是一个区间,使得重复实验 n 次具有一定概率(这个概率就是置信度)的结果都落在此区间内。而置信度是人为给定的,我们需要在实验开始前选定一个置信度(常用 90%、95% 和 99%, 95% 在 A/B Test 中最常用),它会影响这个实验所需的样本量大小和显著性检验的结果。
如果我们想知道在这个世界上有多少人喜欢吃橘子,我们不可能去调查世界上所有人的喜好,只能通过抽样的方法用样本来推断总体。假设在这个世界上有 50% 的人真正喜欢吃橘子,但是否真的是 50% 我们是不确定的。于是我们试图通过随机抽样来检验这个值到底对不对,于是我们每次随机抽取 100 个样本,并且重复抽样 n 次。如果用
来表示每次抽样喜欢吃橘子的人的比例,那么重复抽样 n 次会得到 n 个
。不管
落在距离总体均值多么远的地方,总有 68.2% 个落在距离总体均值一个标准差 (
) 的范围内,95.4% 个落在距离总体均值两个标准差 (
) 的范围内,99.7% 个落在距离总体均值三个标准差 (
) 的范围内 (中心极限定理和正态分布的运用)。特别的,「有 95% 个落在距离总体均值 1.96 倍个标准差 (
) 的范围内」。
反过来思考,「以一次抽样的观测值
为中心,往前和往后推大约 1.96
的区间,就有可能抓住那个真实的 p 。如果重复抽样无数次,构成无数个这样的区间,有 95% 个区间会包含真实的 p,只有 5% 个区间不包含。」 在这个例子里,如果一次随机抽样的结果是 80% 的人喜欢吃橘子,标准差为
,抽样误差为
, 那么可以说我们 95% 肯定这个世界上爱吃橘子的人的比率在 [80%±1.96*0.04 ] 这个区间内。
通过上面的例子,我们知道置信区间的上届是样本均值 抽样误差,下届是样本均值 - 抽样误差,95% 置信度下的抽样误差是 1.96 * 样本标准差。
当得到了一个置信区间后,我们需要通过统计上的假设检验来判断这次抽样的结果是否具有统计上的显著性。在这个例子中,由于 [80%±1.96*0.04] 这个区间不包含我们事先的假设 0.5,并且我们已经 95% 肯定这个区间包含真实的值,那么先前的假设的 0.5 是非常值得怀疑的,是我们应该拒绝的。接下来,我们需要快速解释假设检验的概念。
5. 如何理解假设检验
假设检验是依据 「反证法」 思想,首先对总体参数提出某种假设(原假设),然后利用样本信息去判断这个假设是否成立的过程。在 A/B Test 中一般有两种假设:
- 原假设 H0:我们反对的假设(样本与总体或样本与样本间的差异是由抽样误差引起的)
- 备择假设 H1:我们坚持的假设(样本与总体或样本与样本间存在本质差异)
「假设检验的目标是拒绝原假设 ,它的核心是证伪」。
一般来说我们在多个备选项中选出其中的某一个有两种思考过程,一种是基于满意法的思考,也就是找到那个看上去最可信的假设;另一种是证伪法,即剔除掉那些无法被证实的假设。
满意法的严重问题是,当人们在没有对其他假设进行透彻分析的情况下就坚持其中一个假设,当反面证据如山时往往也视而不见。而证伪法能克服人们专注于某一个答案而忽视其他答案,减少犯错误的可能性。
证伪法的思考过程类似陪审团审判,首先假定一个人无罪,然后收集证据证明他有罪,如果有足够证据证明他有罪,就拒绝他无罪的假设。
在前面我们提到的吃橘子的案例里,世界上有 50% 的人爱吃橘子是我们的原假设。由于一次实验得出的置信区间 [80%±1.96*0.04] 不包含 0.5,并且我们 95% 确信这个区间包含真值,只有 5% 的概率出错,5% 概率非常小,小到我们可以接受,所以拒绝原假设。
在 A/B Test 中,我们的目标与橘子例子不同的是,我们不是要估算全部用户的转化率,而是选出实验组和对照组中的的更优方案。「因此 A/B Test 的估计量不再是 p,而是 p2-p1(实验组和对照组的转化率之差)」。原假设是 p2-p1=0 (即两者没差别),因为只有当你怀疑实验组和对照组不一样,你才有做实验的动机,所以我们支持的备择假设是
(两者有差别)。如果
,我们还需要确定这种差异是否具有 「统计上的显著性」 以支撑我们全量上线实验组方案。
由于抽样误差的存在,A/B Test 可能出现以下四种结果,其中当原假设 H0 为真,却拒绝原假设和当 H0 为假,却没有拒绝 H0 是假设检验的两类错误,分别用
和
) 表示, 相应的,做出正确判断的概率分别是
和
。
6. 一类错误和统计显著性
「一类错误指错误的拒绝原假设」, 对于 A/B Test 来说就是实验组相比对照组有提升,但实际没有差别。
这里所说的有提升,是相对于样本而言的,是否实验组相比对照组在总体上有提升,这是我们关心却不知道的。也许对于样本用户来说,实验组有提升,但对于总体用户,实验组并没有。我们想知道这次实验的提升,是否适用于总体,是否能使假设检验犯一类错误的概率保持在非常低的水平(例如 5% 以下),我们需要特别关注实验是否具有 「统计显著性 (statistically significant)」。要想判断实验是否具有统计显著性,
很重要。
❝
是什么? ❞
用万能的扔硬币来举例。我们的原假设是硬币是均匀的,备择假设是硬币不是均匀的。下表为扔硬币的次数和出现正面朝上的概率。
当扔硬币 1 次,正面朝上了,如果硬币是均匀的,那么发生这件事的概率是 0.5;
当扔硬币 2 次,两次正面都朝上,如果是均匀的硬币,那么发生这件事的概率是 0.5*0.5,为 0.25;
接着你扔了 3 次,4 次,每次都正面朝上。当扔硬币 5 次的时候,仍然是正面朝上,如果硬币是均匀的,那么发生这件事的概率只有 0.5^5=0.03,「这是一个非常小的概率。因为如果硬币是均匀的,是不太可能发生这样极端的事情的。但是这样极端的事情却发生了,这使你怀疑原假设的正确性,因为一枚不均匀的硬币极有可能投出这样的结果,因此你拒绝了原假设,接受了备择假设,认为这是一枚不均匀的硬币。」
在这个例子里,假设一枚硬币是均匀的,扔了 n 次,n 次都正面朝上的概率就是 p-value 。对于 A/B Test 来说, p-value 是在实验组和对照组没有差别这个前提成立的条件下,实验仍然检测到差异 (即极端事件出现) 的概率 。如果 p-value 非常小,就拒绝原假设,认为实验组和对照组没有差别这个前提是错误的。那么怎么定义非常小?这时需要显著性水平 (significance level) 来做标尺。
「显著性水平是人为给定的犯一类错误的可以接受的上限」,用
表示,在工业届它的取值一般是 5%,这说明我们寻求 95% 可能性正确的结果(可以联系上篇的置信度想这个问题)。当 p-value 超过这个值时(即 p-value >0.05),我们会认为这个实验犯一类错误的概率太高,因此用这个实验估计总体是不可信的。当 p-value 小于显著性水平时( p-value<0.05), 实验达到统计上的显著性,认为这个实验犯一类错误的概率比较小,因此适用于总体。
这里需要注意的是,「统计显著性不是实际显著性 (Practical significance)」。p-value 只能告诉你两个版本有没有差异,并不能说明实验组到底比对照组好了多少。举个例子,在某个 A/B Test 中,实验组相比对照组只有 0.1% 的提升, p-value =0.001,这说明这次实验是达到统计显著的,但是实验效果却只提升了 0.1%。是否你会为了这 0.1% 的提升全量上线实验组方案,还需从成本等角度全面衡量一个实验的商业效果。因此不能仅凭统计显著性做决策。
另外,对于很多实验,在实验前段时期的显著性是在显著和不显著之间上下波动的,我们需要足够的样本量和更长一段时间的实验周期来涵盖前期的波动期直到显著性趋于平稳。
上图为统计显著性随样本量逐渐增大的波动。在实验刚开始时,统计显著性的波动是非常明显的,这可能受到 「新奇效应(Novelty Effect)」 的影响。对于用户有感知的 A/B Test,如 UI 改版、新的运营方案、新功能上线等,实验组做的任何改变都可能引起用户的注意,好奇心驱使他们先体验一番,从而导致 A/B Test 中实验组效果一开始优于对照组,p-value 极小,实验效果非常显著。但是一段时间过去后,用户对于新的改版不再敏感,实验组效果回落,显著性可能会下降,最后趋于稳定。足够的样本量能保证一个合理的实验周期,从而避免这种新奇效应的影响。
统计显著性还可以通过 「置信区间」 来判断。A/B Test 的原假设是实验组与对照组没有差异,即 p2-p1=0 ,那么在刚才的例子里,在样本量达标的前提下,如果实验求得的置信区间不包含 0,也可以说明我们 95% 确定实验组相比对照组有提升。
7. 二类错误和统计功效
在 A/B Test 中,我们还需要注意 「二类错误」。「二类错误指没有正确的拒绝原假设」,即当原假设为假时没有拒绝原假设,犯这种错误的概率为
。对于 A/B Test 来说就是实验组和对照组没有差异,但实际实验组和对照组有差异。
一类错误和统计显著性有关;二类错误则和 「统计功效 (power)」 有关。统计功效是正确的拒绝原假设的概率,即
。为了让实验结果更准确,实验需要提高统计功效,一般来说提升到 80% 以上, 犯二类错误的概率控制到 20% 一下,实验结果就比较可信了。
「更大的样本量和更长的实验周期能获得更大的统计功效和更准确的测试」。为什么这么说?因为对于很多 A/B Test 来说,实验组相比对照组的实际提升值非常小,对于这么小的提升值,实验需要更多的样本量来发现和检测到。通过给定的统计功效值(如 80%), 可以推导出一个实验需要的最小样本量值。比较实验实际进入的样本量和最小样本量值,如果实际样本量能达到这个值,说明统计功效足够,此时可以下结论。
8. 总结 A/B Test 结果的注意事项
「1. 样本量达标」
根据给定的统计功效预估实验最小样本量,根据历史数据表现推测未来每日进入样本量。通过最小样本量 / 每日进入样本量估算实验时长。这可以保证实验达到统计功效,减小犯二类错误的概率。
「2. 观察实际提升」
对比实验组相比对照组的指标在实验周期内的累积提升值。比如我希望实验组相比对照组在某核心指标上有正向提升,实验累积结果确实出现了正向提升。
「3. 观察统计显著性」
若实验周期结束后的累积
,或置信区间不包含 0, 则拒绝原假设,说明实验组和对照组有差异,实验具有统计显著性。反之,则不拒绝原假设,说明实验组和对照组没有统计上的显著差异。特别的,观察 p-value 在实验周期的波动,是否在实验后期趋于稳定。
「4. 结合 2、3 和心理预期判断是否应该采纳实验组方案」
如果实验累积结果有符合预期的提升,并且实验检测出统计显著性。这时需要结合其他因素(如全量上线实验组方案的成本)衡量该提升幅度是否值得我们采纳实验组方案。一般来说实验组的提升幅度越大,实验效果越明显。在 A/B Test 前,你需要建立一个心理预期,比如实验组相比比对照组至少实际提升 2%,才认为实验组的版本有实际价值。这个最小预期提升幅度 (MDE) 需要在做实验之前就大概意识,根据具体优化需求确定。如果实验组相比对照组有提升,且检测到统计显著性,却没有达到你心理预期的最小提升,实验组方案就不值得被采纳。
最后来回顾一下,本文介绍了 A/B Test 的统计原理,具体从抽样和中心极限定理,到统计显著性和统计功效,再到如何将这些理论知识和实际的测试相结合来解读具体业务中的实验结果,希望能够帮助大家做到更好的数据驱动决策。