说到 A/B 测试,不论你是工程师、数据科学家、还是产品经理,应该对这个概念都不陌生。

简单来说,A/B 测试是一种数据分析手段,它可以对产品特性、设计、市场、营销等方面进行受控实验。在实验中,数据样本被分到两个“桶”中,分别加以不同的控制和处理,然后对采集回来的信息进行对比分析。

举一个例子。

假如你想修改 UI 上一个模块的交互设计,这个模块的内容是引导用户点击“下一步”按钮,但是你不知道设计改动前后哪一种效果更佳。

于是你通过 A/B 测试,让一部分用户体验新的 UI,另一部分用户继续使用旧的 UI,再对采集回来的数据进行分析,对不同组用户在这个页面上的转化率进行比较,观察在哪一种 UI 下,用户更愿意往下走。有了数据分析,我们就可以判断新的设计是否改进了用户体验。

原理就这么简单。下面我会从自己使用 A/B 测试的经验出发,重点说一说 A/B 测试中需要注意哪些问题,观点会比较侧重于工程师视角,但是对产品经理也会有帮助。

第一点:永远不要过分相信你的直觉。

有时候,我们会觉得一个功能特征的改动是理所当然的,更新后效果肯定更好,做什么 A/B 测试,这显然是画蛇添足。

这就像一个资深的程序员修改线上代码一样:这样改,一定不会出问题。我们当然不否认这样的情况存在,但每当你开始有这样的念头时,我建议你先停下来,仔细地想一想,是不是就不那么确定了呢?

把你的想法和别的工程师、设计师、产品经理深入交流一下,看看他们会不会有不同的意见和建议。不同的角色背景也不同,考虑问题的方式也就不一样。当你不确定哪种方式更好的时候,A/B 测试就是你最好的选择。

第二点:实验样本的数量和分配很重要。

如果你的实验注定没有太多数据,也许就不要去做 A/B 测试了,小样本偏差会很大,帮不了太多的忙,除非你的测试结果出现“一边倒”的情况。

另外,请确保你在 A 组和 B 组随机分配的数据是绝对公平的。也就是说,你的分配算法不会让两个桶的数据产生额外的干扰。

比如,不要按不同时间段把用户分配到不同的组里,因为在不同时间段使用产品的用户本身就会出现一些不同的情况。区域分配也存在同样的问题,这些都可能导致偏差。

第三点:分析的维度尽可能全面。

文章开头举的例子是说,虽然你最在乎的是用户转化率,但是功能改动可能会影响很多指标,这些指标都要尽可能地测量和分析。

比如,虽然 A 组转化率略高于 B 组,但是 A 组点击后会引发 API 调用流程的变化,结果延迟高出很多,或者出错率变高了,那么 A 依然不是更好的设计。

换句话说,A/B 测试不能只关注单一指标,测试目标虽然是转化率,但倘若高转化率的方案会导致其他风险,比如提高了出错率,也应当舍弃。

第四点:其它组的改动对 A/B 测试产生的影响。

当 A/B 测试成为一个广泛使用的工具后,产品很多特性的改动都会用到这个工具。这也就意味着,当你在采集数据做分析的时候,别人也在做同样的事,只不过策略和数据样本不同。

换句话说,你在跑 A/B 测试比较 A 和 B 的优劣,另一个同事在跑 A/B 测试比较 C 和 D 的优劣,结果因为实现细节的原因,A 组中大部分样本同样也是 C 组改动过的样本。这样一来,两个实验可能就会相互影响。因此,你要做足够的分析,确保实验结果考虑到了这种相关性的影响。

第五点:比较值的趋势必须是收敛的,而不是发散的。

要想比较结果有实际的统计意义,一定是每天采集数据的比较结果逐步收敛,最终趋于稳定。如果一周内 A 比较好,后面又开始波动,B 变得更好,这样来回波动的结果是没有太大参考价值的。

另外,即使比较值趋于稳定,还要确保这个稳定数据所处的阶段不在一个特殊时期。如果恰好有促销或者类似的市场活动,那么即便获得了稳定的结果,这个结果也不一定是普适的。

第六点:数据埋点。

数据的埋点和采集是 A/B 测试成功的关键。

怎么样进行埋点呢?总体来说,这其实和每个公司的代码架构有很大的关系。公司使用哪种方式触动事件、记录事件,尽可能地重用。

前端埋点一般可以采集实时数据,后端埋点可以采集实时事件,也可能是一些聚合数据。要视具体情况和应用而定。

第七点:形成一个流程,或者设计一个工具。

这一点很重要。A/B 测试作为一个工具,只有在它足够灵活、好用的情况下,才能更广泛地应用到日常的产品迭代和开发中。虽然说这个方法很简单,但是做好一套包括埋点、采集、处理和具备 UI 的工具,会让工程师事半功倍。

第八点:试图给每个结果一个合理的解释。

不用过分相信数据,也不要拿到什么分析结果都照单全收。试着去给每个结果一个合理的解释,不要觉得结果比期望值还好,就不用思考为什么结果如此完美。这可能并不是一件好事情,实际情况是:如果解释不了,可能它就是个 Bug。

第九点:必要的时候重新设计实验。

很多实验会有不同版本,每个版本都会根据实验结果做一些改动和调整。如果发现实验设计上有漏洞,或是代码实现有问题,那就需要随时调整或者重新设计实验,重新取样、分析。实验的版本控制,会让分析和重新设置的过程更加快捷。

第十点:不同客户端分开进行实验。

Web 端、iOS、Android 尽可能分开观察。很多时候你会发现,同样的实验数据对比,在不同的客户端会有完全不同的结果。如果不分开,很可能让数据变得难以解读,或者出现“将只对移动客户端成立的结果扩展到 Web 端”,这样以偏概全的错误。

最后,我们来做一个小结。

今天我结合自己的实际工作经验,为你讲述了 A/B 测试中需要注意一些问题。

A/B 测试是一种行之有效的产品验证和功能改进方法,很多互联网公司,如 Google、Facebook、Airbnb 等都有自己的 A/B 测试工具,他们会基于工具和数据验证自己的想法,持续进行功能改进、推动产品的发展。

如果你也在做 A/B 测试实验,可以对照我在文本中提到的那些问题来思考,相信你可以做出更好的测试结果。