learn-tech/专栏/朱赟的技术管理课/03每个工程师都应该了解的:A_B测试.md
2024-10-16 06:37:41 +08:00

89 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
03 每个工程师都应该了解的A_B测试
说到 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 测试实验,可以对照我在文本中提到的那些问题来思考,相信你可以做出更好的测试结果。