DS 面试之 A/B Test
A/B Test 题目, 往往会和 Metric Questions 放在一起出, 属于DS 业务领域内的一大重点类型。 本文分几部分拆解A/B Test 面试中会遇到的各类问题。 但是如果想深入了解 A/B Test, 还需要大家真的花费时间去了解, 可以参考 Trustworthy Online Controlled Experiments 系列文章。
什么是A/B Test
A/B Test 是一种控制实验, 在面试中, 会被问到以下一些问题
- 你的A/B Test 的假设是什么
- 如何设计一个 A/B Test
- 如何评价结果
- 根据结果,做出决定
设计一个 A/B Test
- A/B 要运行多久?
- 需要多少样本? 这一般取决于
- Power (一般取 80%) (1 - TypeII error) 什么是 Power
- Significant Level (一般取 p-value = 0.05)
- 要能找到多精细的差异
- 常用公式 ( :样本方差 可识别最小差异 )
从上面的公式可以推导出
- 样本方差越小(数据变动小), 所需要的数据越少
- 要求的可检测差异越大(粗糙), 所需要数据越少
算出来的样本量, 是每组的样本量, 不是真整个实验需要的样本量
关于可检测差异如何设置, 这是一个经验之谈, 在Trustworthy Online Controlled Experiments 系列中, 也有专门的讨论。 一般的原则是, 这个值一定要在实验开始前定下来, 并且不能在实验中改动。
关于 ** A/B 要运行多久** 也可以从样本数量推出来, 比如,需要 20000 个样本, 而每天有4000个客户, 那么就需要5 天。 但是实际运行中, 还要考虑周末效应, 因此在这个例子中, 一般会选择7天。
多重测试
有时候, 我们会有不止一个干预组, 比如, 测试一个按钮的颜色。 我们可能会同时测试 10种颜色。
比如, 在一个 A/B Test 中 ,我们实验了10中颜色, 其中一种颜色胜出, 而且p< 0.05。这时,是否要决定使用该颜色呢?
答案是否定的, 因为比对的组越多, 可能第一类错误的概率越大, 在多组对照实验中, 应该用更低的 p-value。 比如, 如果有3组, 每组对比使用 p-value 0.05, 那么整个实验犯第一类错误概率为:
远远大于 0.05。
解决这种问题的方法
1. Bonferroni Correction:
方法也很简单, 在多组实验中, 使用
就是用 0.05 除以组数。 因此, 对于有10个group 的实验, 应该使用的p-value 是 0.05。
缺点:过于保守, 要求太高
2. Control False Discovery Rate
这个一般在有很多个 Metrics 的时候, 使用, 比如有 100+ 个Metrics
比如 200个 Metrics , FDR = 0.05 这意味着
- 5% 的假阳性率
- 在200 个指标中, 至少有1个是假阳性
新鲜感 (Novelty) 和先入为主(Primacy) 效应
- 先入为主(Primacy) : 用户需要时间,来适应改变。
- 新鲜感 (Novelty): 新功能带来的新鲜感, 会慢慢消退。
这两个效应带来的问题是, 他们带来的效果都不持久。另外, 实验一开始的高增长,和低增长可能都和他们有关系。
解决方案
- 使用新用户做测试, 对于新用户来书, 就不存在这两种效应。
- 如果实验已经运行了,那么可以现在比较干预组中新用户, 和老用户的行为区别。
干预手段对实验造成的影响
A/B Test 的两个假设
- 用户进入各个实验组完全是随机的
- 用户之间是独立的 (SUTVA)
对于一些应用,这两条不一定成立, 比如 Facebook, 微信, Uber 等。 一方面, 社交应用会有溢出效应, 另外方面 Uber, Airbnb 这种资源共享应用会有资源挤占效应。
如果在实验中, 一个社交应用导致用户发帖数上升 1%, 那么在实际推广以后, 这个效应会超过 1% , 这是由于网络效应导致的。 而对于资源共享型应用, 比如 Airbnb, 如果一个手段让实验组叫车量提升 1% , 那么实际使用中, 效应应该低于 1%, 因为实验组叫了更多的车, 那么控制组可叫的车的数量就减少了。
如果减少干预带来的影响
隔离用户
- 地理隔离: 比如在不同城市测试优惠券对打车的影响
- 时间隔离: 适用于干预效果较短的应用
对于社交应用, 可以使用 Cluster, 然后以不同的社群作为 Unit 做比较。