在明确了观察指标之后,最后我们再来聊聊实验方案的具体设计。互联网产品实验方案的思想很大程度上来自科学研究中的对照实验。
1.对照实验
在医学临床实验中,如果我们要测量一种新药物的有效性,应该怎样设计实验方案呢?最简单的方案是将患者随机分为两组,一组维持原有治疗方案不变,称为空白组;另一组在治疗方案中加入新药物,称为实验组。通过两组对比,如果实验组的患者治愈率统计上显著高于空白组,那么我们就可以认为新药物是有效的。
这样的研究方法会有什么问题呢?1955年,美国医生Henry K.Beecher提出了空白组与实验组之间可能存在的新变量——安慰剂效应,即如果患者知道自己处于实验组,有可能因为心理暗示机体产生反应或更加配合诊疗方案等原因(而并非新药物)使得病情好转。换句话说,上面的实验设计方案并不能排除患者心理因素带来的自愈效果提升。
因此,在现代的医学临床实验中,我们常常会再增加一个对照组(或替换掉空白组),与实验组相比,会对这一组的患者使用淀粉丸或生理盐水等安慰剂来伪装成新药物或新注射液。这样一来对于实验组和对照组的患者来说,如果前者的治愈率显著高于后者,那么我们可以认为新药物是有效的,即通过将安慰剂效应剥离实现了对新药物效果的观察[1],如图9-7所示。
图9-7 临床实验方案设计与归因
可以看到,实验设计的要点还是控制变量并进行对比,无论是空白组和对照组进行对比(可以验证安慰剂效应),还是对照组和实验组进行对比(可以验证药物效果),都能够通过控制变量验证方案是否对患者治愈真正产生影响。
这样的实验设计理念也在互联网产品迭代过程中得到应用。对于一个新的产品方案(可以是UI、交互方面的变化,也可以是模型方面的变化),如果我们将其直接上线,通过上线前后业务指标的变化来决策,会存在两个潜在问题:一是有业务指标下降的风险,二是即使数据显示新方案可以显著性提高业务指标,仍然不能排除时间因素带来的影响。
因此,为了规避这样的风险同时证明新方案的有效性,我们可以选择将用户随机分为A和B两组:A组为对照组,这部分用户看到的是线上已有的产品方案;B组为实验组,只影响一小部分用户(如5%~10%),这部分用户看到的是新的产品方案。这样一来我们不仅控制了风险,还可以消除时间因素带来的额外影响,将变量控制在产品方案上,并根据新方案是否能够在业务指标上显著高于已有方案来决定是否要将新方案全面上线。这样的实验方法即为我们常说的A/B测试。
2.随机流量分组与辛普森悖论
前面我们讲了A/B测试的第一个重要概念——对照,接下来谈一谈A/B测试的第二个重要概念——随机。
1986年,一项关于肾结石手术方案的临床研究显示[2],同样是对350位患者进行手术治疗,与传统的开放式外科手术相比(A组,对照组),一种新的微创手术(B组,实验组)的成功率似乎更高(83%>78%),如表9-6所示。
表9-6 一项肾结石手术方案成功率对比
然而,如果我们对实验数据中每组患者的病况进一步细分会发现,无论患者是小结石还是大结石,A组的成功率都要高于B组(93%>87%,73%>69%),如表9-7所示。
表9-7 按病况细分后的成功率对比
这样一个看上去似乎颠覆了我们认知的现象被称为辛普森悖论(Simpson's Paradox),它是英国统计学家E.H.辛普森(Edward H.Simpson)于1951年提出的统计学悖论,即按某个条件分组比较时占优的一方,合并比较后却可能反而表现更差。
这样的现象产生的原因在于,在对患者进行分组时并未做到完全的随机抽样。在上面的例子中,传统的开放式外科手术(A组)分配到了更多病情较重的患者(大结石),而病情较重的患者本身治愈率就更低,因此造成最终A组的治愈率低于B组。这样的分配可能是因为医生认为病情较重的患者最好采用更为保守的传统手术方案,但最终导致的结果就是上面这种分组与汇总数据的偏差。
从数学的角度看,假设α为对照组或实验组组内的患者数量分布(上例中αA=[25%,75%]T),β为组内的治愈率分布(上例中βA=[93%,73%]T),那么最终整个组的治愈率应为αTβ(上例中αTAβA=78%)。如果能够做到尽可能地随机分组,那么A/B两组组内的分布α应当是相等的,即αA=αB>0,这时即使组内治愈率分布β之间存在偏序关系βA>βB>0,即A组中每类患者治愈率都高于B组,最终汇总后的治愈率也应当是αTAβA>αTBβB,不会出现辛普森悖论中描述的情况。
因此,对我们而言,辛普森悖论的意义不仅在于证明了9.2节中数据细分工作的价值,而且指导了我们在做A/B测试时数据划分要尽可能随机。如根据用户编号或设备码等无实际意义的随机ID划分,使最后得到的A/B两组用户无论根据哪个特征进行细分最后的数量分布都相等(αA=αB=α)。这种数据划分的随机性是可以检验的,根据前面对照的思想,可以再增加一个新对照组(此时分组为AAB)或新实验组(此时分组为ABB)来实现,前者检验新增组与原对照组的业务指标是否存在显著性差异(即应该均为αβA),后者检验新增组与实验组的业务指标是否存在显著性差异(即应该均为αβB)。
3.重叠实验框架:提升A/B测试的效率
与心理学、医学等科学研究的实验相比,互联网系统最大的优势在于反馈周期短,基本上能够做到数据立等可取,且组织成本低,不需要花大量时间和费用来寻找被试。这些优势让我们在互联网系统中开展大规模的随机对照实验成为可能。
前面介绍了产品迭代过程中常用的A/B测试实验,我们可以将用户流量进行随机划分,通过对照实验来达到验证新方案优劣的目的。
如图9-8所示,每一个实验都将用户流量划分为了对照组和实验组。如果说我们希望同时进行多个A/B实验,例如分别测试UI的变化和搜索模型的变化带来的效果,从确保对照的角度出发,就需要在进入实验的用户在流量处进行划分并进行独立测试,以避免实验变量之间的交叉影响。
图9-8 单层A/B测试实验框架
一次完整的A/B测试往往需要最小样本量才能得到显著性结果,这段时间用户流量是被独占的。所以,即使不同实验之间对照组可以共享,这种单层的A/B测试框架能够同时支持的实验数量依然是有上限的。随着业务发展到一定程度,样本量的增加已经赶不上A/B实验需求量的增加,于是能够支撑更大规模实验的多层A/B测试框架应运而生。
目前国内大部分公司的多层A/B测试框架都来自谷歌在KDD 2010发表的一篇论文[3]。在这篇文章中,谷歌的工程师们架构了一种能够并发支撑大量A/B测试的系统框架,其核心思想是将实验划分为相互独立的层,这样一份用户流量可能会被同时分配到多个实验中,同时每一层出口的用户流量将按比例随机分配到下一层的所有组中(包括对照组和每个实验组)。
如图9-9所示,将所有可能的实验分为UI类实验、搜索模型类实验和广告模型类实验,每一层可以开展多个该类别的实验,同时不同类别的实验也可以并发进行。流量在层与层之间穿透时按实验所需的流量比例在下一层随机分配。这样在每个实验组与同一层对照组对比时,两个组里面来自其他层的用户分布实际上是相等的。由前面对辛普森悖论的分析可知,这样的随机性确保了实验结果的可靠性。由此可见,这样的多层A/B测试框架不仅扩大了可同时进行的实验量,也满足了对照和随机这两个重要的要求。
图9-9 多层A/B测试实验框架
4.A/B测试的局限性
这个世界没有银弹,最后我们来聊聊A/B测试本身的局限性。
首先,A/B测试的特性决定了需要足够的样本数据量才能完成显著性检验,关于测试的最小样本量,可以在网上找到许多相关的在线计算器[4]。由此可见,这一方法更多适用于成熟的高频业务,当处于业务发展初期或本身属于低频业务的情况下,更多需要依靠产品经理对业务的理解和判断。
其次,在一些情况下场景不具备条件独立性,例如外卖配送、网约车等匹配调度类场景,这些场景往往牵一发而动全身,不适合用常规的A/B测试来验证新方案。因此这种情况下一般的解决方案是构建一个专门的仿真系统,尽可能还原线上的业务数据(如订单等),加上一定的假设数据(如ETA预估等),来近似模拟一个离线世界用于验证一个新方案产生的效果提升。
最后一点则是我们前面提到的,这种A/B测试实验只适合用来观察业务的短期指标,对于一些长期指标,需要从对用户和商业逻辑的理解入手,长时间保持对这些指标的监控和运营投入。
[1] 这种混淆患者认知的方案称为单盲实验,为了避免医生知道患者分组后差异性对待,我们还会设计双盲实验方案,即在单盲实验基础上对医生也混淆患者分组信息,从而进一步排除实验实施人员的因素。
[2] C.R.Charig,D.R.Webb,S.R.Payne,J.E.Wickham(29 March1986).Comparison of treatment of renal calculi by open surgery,percutaneous nephrolithotomy,and extracorporeal shockwave lithotripsy.Br Med J(Clin Res Ed).292(6524):879-882。
[3] Diane Tang,Ashish Agarwal,Deirdre O'Brien,Mike Meyer.Overlapping Experiment Infrastructure:More,Better,Faster Experimentation.ACM SIGKDD'10。
[4] 如https://www.optimizely.com/sample-size-calculator/。