目录
- 一、什么是A/B测试
- 1.1 A/A测试
- 1.2 多变量测试
- 二、A/B测试应用场景
- 三、A/B测试基本流程
- 四、A/B测试面试真题
- 4.1 【是什么】
- 4.2 【为什么】
- 4.3 【怎么做】
- 五、应用实战
一、什么是A/B测试
A/B 测试是一种常见的实验方法,用于比较两个或多个方案的效果,以确定哪种方案更优。通常,将用户随机分配到 A 组(对照组) 和 B 组(实验组),A 组使用当前版本(Baseline),B 组使用新版本(Variant),然后通过数据分析评估哪种方案在关键指标(如点击率、转化率、停留时间等)上表现更好。 A/B 测试广泛应用于 产品优化、网站设计、广告投放、功能迭代等领域,可以减少主观决策,提高用户体验和业务收益。
1.1 A/A测试
就是像AB测试一样流量会被随机分配到两个或者多个版本内,但又区别于AB测试,叫AA,就说明实验组的策略(变量)其实未生效,说白了就是实验组和对照组配置全都一样,可以理解为就是相同版本的“特殊AB实验”,有时也被叫做“空测试”。主要目的是为了确保AB测试结果的可靠性。假设实验和对照组的用户在AA测试阶段已出现显著差异,那么AB上线后的显著差异结论就是不可靠的。
1.2 多变量测试
多变量测试指的是通过比较页面上各元素中的选项组合,来确定哪个组合对特定受众的效果最佳,以及哪个元素对活动成功的影响最大。与 A/B测试相比,多变量测试提供的一个优势在于,它能够显示页面上哪些元素会对转化产生最大的影响,这被称为“主效应”。此外多变量测试还可以发现页面上两个或多个元素之间的复合效果(比如特定文案与特定横幅或主题图像结合使用时,特定广告可能会产生更多转化)这被称为“交互效应”。
多变量测试的终极版就是全因子多变量测试(以相等的概率测试所有可能的内容组合)由于可能生成大量的组合,因此多变量测试需要的时间和流量多于A/B测试。页面必须获得足够的流量才能为每个体验产生具有统计意义的结果。
二、A/B测试应用场景
一般来说,A/B测试可以应用以下三种场景:
- 产品迭代:界面优化、功能增加、流程增加等
- 算法优化:通过流量切分构造实验组和对照组来验证算法筛选、算法优化等
- 市场营销相关运营策略:内容的筛选、时间的筛选、人群的筛选、运营玩法的筛选等
A/B测试可以不适用的场景:
- 变量不可控:用户使用了A产品后再去使用B产品的概率,为什么关闭app,有非常多的不可控因素
- 样本量较小:从统计学角度,验证一个数据是否有效,需要一定的样本支撑。
- 全量投放:紧急修复、重大更新或用户期望一致等场景
三、A/B测试基本流程
(1)明确实验改动点
通常关于产品选代的AB测试需求一般是由产品经理或者项目经理提出,数据分析师在这个过程中更多的是一个参与者,那么在实验开始之前,我们首先需要跟需求提出者明确实验的变量是什么?我们要保证AB测试的“单一因素原则”,即每一个实验的评估因素都是单一因素,一次实验不能糅合多个影响因素,否则分析师在后续分析实验结果的时候难以区分是哪个因素的影响,可能会得出错误的结论。
(2)明确观测指标
一般来说,在实际工作中AB测试的观测指标通常只有一个(最多不超过3个),指标的类型分为两种:
- 绝对值类指标:DAU、平均停留时长等指标,通常会一段时间内的均值或者汇总值(较少)
- 比率类指标:主要通过多个指标计算得到,如:页面点击率、转化率、复购率等等(较多)
(3)AB测试样本量的计算
A/B 测试样本量的选取基于大数定律和中心极限定理。
AB测试样本量计算工具(绝对值)
AB测试样本量计算工具(比率)
(4)AB测试流量分割
为什么要进行合理的流量分割? 合理的流量分割能保证实验组和对照组的用户特征分布相似,避免因用户差异导致结果偏差。
流量分割常用的方法:分流、分层和分流分层模型。
分流:用户分流是指按照地域、性别、年龄等把用户均匀地分为几个组,1个用户只能出现在1个组中。
分层:同一份流量可以分布在多个实验层,也就是说同一批用户可以出现在不同的实验层。
分流分层模型:分流:组1、组2通过分流的方式分为2组流量,此时组1和组2是互斥的,即组1+组2=100%试验流量。分层:流量流过组2中的B1层、B2层、B3层时,B1层、B2层、B3层的流量都是与组2的流量相等,相当于对组2的流量进行了复用,即B1层=B2层=B3层=组2
扩展:流量流过组2中的B1层时,又把B1层分为了B1-1,B1-2,B1-3,此时B1-1,B1-2,B1-3之间又是互斥的,即B1-1层+B1-2层+B1-3层=B1层。再流经B2层时,B1层各部分会被随机打散,重新均匀分配,再形成一个新的流量分布,进入B2层的各个子层或实验组。
(5)实验周期的计算
AB测试中,对照组和实验组的样本量越大,实验时间越长,实验结果就更加准确。这可以说是常识性的判断,但是实际上这是由统计显著性决定的(统计显著性是指对照组和实验组的数据差异,有多大可能是真实存在的,而不是随机误差导致的。)所以周期更久、样本量更多的AB测试更有说服力。但是实际工作中,产品或活动的迭代速度快,这就要求AB测试的实验周期不能过长,所以在AB测试前对样本规模和实验周期的预估是非常重要的。
AB测试的实验周期应该如何确定呢?
首先这里也是确定一个最小实验周期,也就是说,实验时间必须超过最小实验周期,AB测试才算是有效。
实验周期计算公式:实验所需最少时间=每组最小样本数*组数量/某个时间段的访问流量(可以是每天,流量大的话可以按每小时)
要根据实验目的和历史经验,综合考虑用户行为周期、适应期等其他影响因素对实验流量的干扰,在成本可控的情况下适当延长实验时长(能覆盖最小实验周期)
(6)AB测试上线
一般在上线正式实验之前,会通过小流量去看一段时间的灰度实验。这个灰度实验的目的就是为了验证我们这个改动并不会造成什么特别极端的影响。在灰度之后就会正式发版,等到实验周期结束,我们对实验的结果进行显著性检验。
(7)效果评估验证
A/B测试开启之后,我们该怎么评估这个AB测试的实验效果,给出这个需求到底要不要上线的分析结论呢?
商业上的验证:通过前面确认的核心指标以及相关指标在对照组和实验组之间的对比,来综合判定AB测试效果。
统计上的验证:通过统计学上的假设检验来验证AB测试是够具有统计学意义上的显著有效。
A/B测试的基本原理:
A/B测试的统计理论基础是假设检验。假设检验是统计推断中的重要方法,其基本思路是“先假设、再检验”:即事先对总体参数或总体分布形式作出一个假设,然后利用样本信息来判断假设是否合理的过程。换句话说,假设检验会判断样本信息与原假设是否有显著差异,从而决定应接受还是否定原假设。
四、A/B测试面试真题
4.1 【是什么】
(1)什么是A/B测试?
在回答定义类问题时,既要描述AB测试的统计学定义【常规答案】,还要结合实际业务场景进行复述【加分项】
AB测试是一种基于统计学的实验方法,通过设置对照组和实验组,对变量进行试验,通过假设检验对不同组的结果进行检验,以检验变量是否对结果造成显著影响,从而选取最合理的方法。
在实际业务场景中就是为同一目标制定不同的页面版本,并且把用户流量对应分成几组,然后在同一时间维度让不同组的用户随机访问这些版本,收集各群组的用户体验数据和业务数据,最后分析、评估出最好版本,正式采用。这个就是AB测试。
(2)A/B测试的核心原理是什么?
回答出“假设检验”是常规答案。
AB测试的核心原理是通过随机合理分流,设置对照组和实验组,通过控制变量法,在保证两组用户除待验证变量不同外,其他变量分布均一致。分别对两组施加不同的变量,观察两组用户在一段时间内的表现,通过假设检验分析结果是否有显著差异,从而判断改动是否有效可执行。
本质上来说,AB测试就是一个基于统计的假设检验过程,首先对实验组和对照组的关系提出假设,然后计算两组数据的差异并确定该差异是否存在统计上的显著性,最后对假设做出判断。在整个测试背后,还隐藏着其他的理论:第一个是中心极限定理,也就是样本量足够大时(>30),变量均值的抽样分布都近似于正态分布;第二个是**“小概率事件"原理,也就是小概率事件在一次实验中基本上不会发生;第三个是反证法**,假设检验的机制是保护原假设,所以把要拒绝的假设放在原假设的位置,如果原假设成立的条件下,小概率事件还是发生了,那么就应该推翻原假设;第四个是P值,P值越小,拒绝原假设的理由就越充分。
(3)AB测试有哪些应用场景?
AB测试适用的场景主要有三类,一类是产品选代,比如UI界面优化,产品功能增加或者改版,流程增加或者删除等;第二类是算法优化,比如搜索、推荐、精准广告等算法的优化;第三类是营销/运营策略优化,比如内容的筛选、时间的筛选、人群的筛选、运营玩法的筛选等都可以适用AB测试。
AB测试不适用的场景主要是原始创新方案且全量投放的那种场景(比如:公司更新logo)、用户体量不大的业务(主要是样本量不够,难以支撑AB测试所需样本量)等。
(4)有没有接触过ABtest,请说说对AB测试的理解?
如果有相关工作经验,详细描述实际工作中AB测试的相关流程(每个公司的流程可能会有一些差异),重点讲解在整个流程中,你是如何配合工作的,以及你在相关工作中遇到了哪些难题,你是如何解决这些难题的;如果没有相关工作经验,则可以继续下面的问题,从AB测试的适用场景、定义、核心原理方面回答你对AB测试的理解。
示例:我在实际工作中没有接触过AB测试(解释一下公司有没有AB测试的相关业务,以及我的工作职责中有没有涉及AB测试的内容)。虽然我没有实际应用过AB测试,但是在工作之余,我了解了一些关于AB测试的相关知识。我理解的AB测试是一种XXX的方法【定义】,它的理论基础主要有xxx【核心原理】,在xxx场景中AB测试能够发挥很大的作用。接着分析一下你前公司没有做AB测试的原因(主要是前公司的业务主要是xxX方面的,很多业务无法使用AB测试来进行决策;或者AB测试平台的搭建一直是公司的目标,但是因为某些具体的原因没有搭建起来,接着展开聊聊你认为AB测试平台搭建中可能会遇到哪些困难)【加分项】
(5)你怎么理解AB测试中的第一、二类错误?你觉得哪个更严重?
第一类错误和第二类错误,是统计学中的两个概念,也是AB测试中最常提到的两个概念。第一类错误叫做弃真错误,也就是原假设是真的,但是我们否定了原假设接受了备择假设。在实际业务场景中,原假设一般是功能改动前后没有差异,第一类错误代表的是一个功能的改动,本来不能给我们带来任何收益(原假设一般指无差异),但是我们却误认为这个改动能带来收益。第二类错误叫做存伪错误,也就是原假设为假,但是我们接受了原假设。在实际业务场景中,第二类错误本来是一个好产品,它本来可以给业务带来更多的收益,但是由于我们统计的误差,导致好产品被拒绝。
在实际工作中,我认为第一类错误是我们更加不能接受的。因为,在商业世界里,一个坏产品的上线带来的损失可能是巨大的,所以我们宁愿放弃几个好的创意好的产品,也绝不能让坏的产品上线。如果一个坏产品上线了,不仅可能会极大程度的影响当时的用户体验,还有可能对以后的日活、留存等指标造成更大的影响。本身在实际工作中,把留存或者日活提升一个百分点都已经是非常耗时耗力的事情了,一个坏产品的上线可能一瞬间就能让留存下降好几个百分点。所以第一类错误在实际工作中更加不能被接受。
4.2 【为什么】
(1)为什么要做AB测试?有什么科学依据?
回答要点:AB测试的目的/好处+理论基础
首先我认为功能设计者是有个人思维的局限性,并且全量用户是具有不可调研性的,这就会导致一个问题–一个功能的预期效果可能与实际上线后的效果存在定的差异。这个差异到底有多大,我们能不能接受,最后要不要上线这个功能,这些都是需要进行决断的。
AB测试是一个基于统计的假设检验过程,首先对实验组和对照组的关系提出假设,然后计算两组数据的差异并确定该差异是否存在统计上的显著性,最后依据数据结果对假设做出判断。这个过程可以很大程度上避免我们拍脑袋决策,科学量化优化方案的效果。
(2)AB测试成本很高,每个调整都需要AB测试么?
首先,我认为需要从源头了解功能改动的重要性、影响程度等,如果重要性或者影响程度很大,那么是一定要做AB测试的,比如,个大型营销活动的落地页设计,就非常值得做AB测试,首先是这个页面的改动有可能直接影响最后的销售额,因为这个页面很大程度决定了用户是否对你的产品感兴趣,并为此而付费。此外,一个大型营销活动一定是投入了大量的人力物力财力,每一个细节都有可能决定最终的结果,所以前期一定要尽可能筛出最优的方案。
当然,如果只是验证一个小按钮或者一个小改动,并且这个改动并不会对用户体验、活动结果、最终收益产生巨大影响的时候,就可以选择不上AB测试了。可以选用成本更低的方式来验证,比如在界面上按设置一个开关,用户可以通过开关的形式自行决定采用哪一种方式,最后我们可以通过这个开关的相关指标来判断用户对于哪一种形式有更大的倾向性;或者可以做一些用户调研,比如通过访谈或者说设计问卷的形式,去搜集一些用户的反馈等等。
4.3 【怎么做】
(1)AB测试的主要流程是什么?
1、首先在开始实验之前,我们首先需要和相关的产品或者项目经理确定这个实验所要验证的改动点是什么。
2、在确认改动点之后,数据分析师需要设计实验中所需要去观测的一些核心指标,比如点击率、转化率等。
3、确定完核心指标之后,下一步就是计算实验所需的最少样本流量,实验样本越大,我们的结果越可信,但是对我们用户的不良影响就越大。所以我们需要计算能够显著地证明我们的策略有效的最少样本量。
4、在计算完所需样本量之后,就要设计流量分割策略,根据实验需要对样本流量进行分流分层,保证样本的随机和均匀分布,避免出现辛普森悖论。
5、然后还要结合目前的日均活跃的用户量,计算实验持续的时间周期。
6、以上准备工作就绪,就需要和产品经理、开发人员确认可以开始实验。一般在上线正式实验之前,会通过小流量去看一段时间的灰度实验。这个灰度实验的目的就是为了验证我们这个改动并不会造成什么特别极端的影响。并且这个过程中会检验数据埋点是否跑通,是否能够成功搜集到数据。
7、在灰度之后就会正式发版,等到实验周期结束,我们对实验的结果进行显著性检验以及最终的效果评估验证。实验结果主要分成有效和无效两种,无效的结果可转化为团队的经验,避免再犯同样的错误;有效的结果即成功通过实验提升了产品的转化率,可以把优胜的版本正式推送给全部客户,实现产品用户有效增长。
(2)选择AB实验的样本的时候,应该注意什么?
满足最小样本量。对于AB测试来说,样本量太少可能导致实验结果不可信,但是样本量也不是越多越好,一个最直接的原因就是样本量越大影响的用户就越多,就有可能影响到用户对产品的体验。
在AB测试时,影响样本量选择通常有4个因素:显著性水平、统计功效、均值差异、标准差。
N = σ 2 δ 2 ( Z 1 − α 2 + Z 1 − β ) 2 N = \frac { \sigma ^ { 2 } } { \delta ^ { 2 } } \, ( Z _ { 1 - \frac { \alpha } { 2 } } + Z _ { 1 - \beta } ) ^ { 2 } N=δ2σ2(Z1−2α+Z1−β)2
- 显著性水平:显著性水平越低,对AB测试结果的要求也就越高,越需要更大的样本量来确保精度。
- 统计功效:统计功效意味着避免犯二类错误的概率,统计功效越大,需要的样本量也越大。
- 均值差异:如果真实值和测试值的均值差别巨大,也不太需要多少样本,就能达到统计显著。
- 标准差:标准差越小,代表两组差异的趋势越稳定。越容易观测到显著的统计结果。
所以选择AB测试的实验样本时,需要满足最小样本数。【在实际业务操作时,满足不影响用户体验的前提下,可以比最小样本数多一些】。
除了满足最小样本量之外,在选择实验组和对照组的样本的时候,还要注意的是,选择同一时间段内的、特征保持一致的用户,可以通过从所有的用户中随机选择来解决这个问题。
(3)AB测试的实验周期如何选择?需要考虑哪些因素?过长或者过短会有什么影响?
实验周期=最小样本量/实验桶天均流量,但实际操作中实验周期选择需要考虑三方面因素:
①考虑最小样本量,实验周期内累计样本量,需要大于最小样本量要求
②考虑周末效应,一般产品周中和周末用户行为表现会存在差异,因此实验至少需要运行完整一周
③考虑新奇效应,重点针对老用户改版会对用户产生非持久性的行为驱动,这段时期的数据是缺乏置信度的,因此需要适当拉长实验周期。
在考虑以上因素的前提下,制定试验周期,时间过长会导致实验选代的效率变低,而时间过短会导致实验的不置信
(4)如何验证你的改进办法有效果?如何确定此功能上线收益?
考察要点:AB测试上线后,从哪些维度确定新方案比旧方案更好
对于A方案和B方案哪个方案的结果更好,通常会去关注指定的关键性指标,比如:点击率、留存率、复购率、转化率、人均时长等指标,然后运用假设检验对这些指标进行检验,看结果是否置信。如果结论置信,我们就能够得到A方案和B方案哪个指标更好(有显著性差异)
此外,还可以计算ROI来比对不同的方案。计算出每组的ROI来确定改动是否有效。
(5)请分析下AB test的结果统计显著不等于实际显著,你怎么看?
统计学上显著,实际不显著:可能的原因是我们在AB测试当中所选取的样本量过大,导致和总体数量差异很小
举例:对应到我们的互联网产品实践当中,我们做了一个改动,APP的启动时间的优化了0.001秒,这个数字可能在统计学上对应的P值很小(统计学上是显著的),但是在实际使用过程中,对于用户来说,0.001秒的差异太微小了,是感知不出来的。那么这样一个显著的统计差别,其实对我们来说是没有太大的实际意义的
统计上不显著,实际显著:一般我们会使用的通用的方式是将这个指标去拆分成每一天去观察。如果指标的变化曲线每一天实验组都高于对照组,即使它在统计上来说是不显著的,我们也认为在这样一个观测周期内,实验组的关键指标表现是优于对照组的,那么结合这样一个观测,我们最终也可以得出这个优化可以上线的结论。
(6)如果你在AB测试中发现实验组核心指标明显优于对照组,那这个优化就一定能够上线吗?
不一定,需要实际情况实际分析。举个例子,比如说有的时候我们想要提升产品的视觉展现效果。但是这种优化可能是以用户等待内容展现的时间作为代价来进行提升的。所以一个方面的优化可能会导致另一个方面的劣化。在做这个优化的时候,可能会对其他部门产生一些负向的影响,进而导致公司收入的下降。所以我们在进行AB测试的时候,必须要综合评估所有方面的一些指标变动,同时对于收益和损失来做一个评估,才能确认这个优化可以最终上线。
五、应用实战
step1:提出假设
设计AB test实验的第一步通常是提出假设。假设是对于某个特定变化我们所期望的结果,也是后续实验的基础,我们需要在后续实验中通过数据验证这个假设是否成立,如果验证成立,我们可以将这个变化推广到全部用户。如果验证不成立则需要继续优化这个假设或者放弃这个修改方案,以寻找更好的变化。
假设我们希望新页面可以提升2%的转化率,原则上我们应选择单尾检验,准确的说,应该选择右侧单尾检验,因为我们的假设是新页面的转化率要大于旧页面的转化率,但是,在本案例中,我们并不能确定新页面的性能一定比当前的页面更好。所以,这里选择双尾检验。
step2:确定实验分组
在AB测试中,我们分为实验组和对照组:
- 对照组:这一组用户将看到旧版落地页
- 实验组:这一组用户将看到新版落地页
为了后续计算每一组的转化效率,需要记录每一位参与实验的用户的购买行为,也就是说无论用户看到的是新版落地页还是旧版落地页,都需要记录这位用户最终是否购买了产品。这可以通过在网站上添加相应的追踪代码来实现:0(代表用户在测试期间没有购买产品);1(代表用户在测试期间购买l了产品),这样,后续就可以很容易地计算出每个组的均值,从而得到新旧两版落地页的转化率。
step3:计算实验样本量、试验周期
- 实验样本量的确定
根据大数定律和中心极限定理,样本量越大我们的估计就会越精确,但同时也意味着成本越高,所以需要知道实验所需的最小样本量是多少,在成本可控范围里,选择合适的样本量即可。
N = σ 2 δ 2 ( Z 1 − α 2 + Z 1 − β ) 2 N = \frac { \sigma ^ { 2 } } { \delta ^ { 2 } } \, ( Z _ { 1 - \frac { \alpha } { 2 } } + Z _ { 1 - \beta } ) ^ { 2 } N=δ2σ2(Z1−2α+Z1−β)2
当衡量指标为比率类指标时,标准差计算公式为:
σ 2 = P A ( 1 − P A ) + P B ( 1 − P B ) \sigma^2 = P_A(1 - P_A) + P_B(1 - P_B) σ2=PA(1−PA)+PB(1−PB)
其中, P A P_A PA和 P B P_B PB分别时对照组和实验组的观测值。
step4:上线AB测试并收集数据
目前市面上大家熟知的大公司基本上都在做AB测试,比如:百度、阿里、腾讯、字节跳动、京东、滴滴、携程、美团等。大公司做AB测试的主要特点就是。一般都是自研系统。而对于规模不是那么大的企业,也有做AB测试的需求,但是这部分企业一般是使用第三方的A/B测试工具。目前市面上的第三方AB测试工具主要有:神策数据、热云数据等。
step5:数据分析及假设检验
数据集及代码链接:https://pan.quark.cn/s/97d5c25bbc6d
代码也可见网页版资源链接。
step6:分析结果及建议
由于我们计算出来的P=0.607远高于显著水平a= 0.05,所以我们不能拒绝原假设H0,这意味着新版落地页与旧版落地页没有明显不同。此外,我们继续看置信区间,treatment组的置信区间为[0.117.0.136],可以看出:它包括我们的转化率基准线13%;它不包括我们的转化率目标值15%。也可以说明,新版落地页的真实转化率更有可能与我们的基线相似,而没有办法达到我们期望的15%。进一步证明了,新版设计并不是一个很好的改进。