从零开始AB测试

2021-12-13  本文已影响0人  屹然1ran

1. AB测试简介

1.1 什么是AB测试

A/B测试为一种随机测试,将两个不同的东西(即A和B)进行假设比较。该测试运用统计学上的假设检定双母体假设检定。 A/B测试可以用来测试某一个变量两个不同版本的差异,一般是让A和B只有该变量不同,再测试其他人对于A和B的反应差异,再判断A和B的方式何者较佳。在这里先推荐一下udacity的学习课程 Udacity A/B testing by Google

简单来讲,和控制变量法基本一致,起源于医学中的双盲试验

1.2 AB测试的应用

一般在数据分析工作中,对一个产品不同阶段的转化程度,会使用漏斗模型来分析。例如以下为一个酒店预订网站的漏斗模型:

我们的目标是尽可能多的让用户转化到下一个阶段。而AB测试则可以测试不同的功能/配置/界面等对一个用户转化程度的提升,从而改进我们的产品。
在设计AB测试的初期,我们需要寻找某个指标,作为测量值。例如进行一个网页点击情况的测试,可用以下指标:

rate和probability对应的中文一般均为,实际则不同。rate更倾向于概率,例如我们丢一个无偏的硬币,正面向上的可能性是50%;probability更倾向于可能性,例如我们丢10000次无偏的硬币,正面向上的次数服从伯努利分布。

1.3 测试结果


2. 测试准则以及道德问题

2.1 风险(Risk)

受试者是否需要承担任何风险?例如金钱、情感、身体等等。阈值根据具体业务场景定义,如果超过某个阈值,则需要告知受试者。

医学上的部分临床试验会分测试组与对照组,广义上也是A/B测试,均会告知受试者并签署协议。

2.2 收益(Benefit)

测试是否带来任何收益?

2.3 替代(Alternatives)

除了测试外,受试者是否有其他选择?如果有其他选择,例如对一个App进行测试,受试者是否会被影响从而流失转往竞品?有多少会流失?成本是多少?

2.4 数据敏感性(Data Sensitvity)


3. 定义与选择指标

指标(Metrics)是用来衡量业务的一个参数,例如上文所说的点击率,或者用户量,GMV均为指标。在A/B测试中,我们需要考虑如何可以科学有效的定义或选择一个指标。

3.1 定义指标

3.1.1 指标检测

合理性:指标符合业务上的理解,例如漏斗中的转化率不高于100%。
稳定性:两个分组如果没有区别,指标的表现应该是相同的。

有时会使用A/A test,来检测两个分组内各特征是否分布均匀。两个分组如果没有区别,指标应该在统计上是没有显著差别的,如果有则说明两个分组内的分布不均匀,例如新老客比例、男女分布等。

3.1.2 定义指标

通常会自上而下的来定义指标

3.1.3 指标统计量
3.1.4 多指标

根据不同的公司/团队文化(对于数据的接受程度),我们可以考虑是否需要使用多个指标。
如果要使用多个指标,可以考虑制定一个综合评价标准(OEC Overall Evaluation Criterion) - 对所有指标的一个加权平均值。

通常情况不建议这么做,因为加权系数难以定义;个别指标增长导致整体增长,所以业务方可能仅持续优化某个指标等等

3.1.5 筛选数据

我们需要根据不同的原因,来筛选掉不需要的数据。

如何确定数据是否有偏差的呢?

3.2 敏感性(Sensitivity)与鲁棒性(Robustness)

最理想的指标,应该反映我们想关注的数据变化(高敏感性),不反映我们不想关注的部分(高鲁棒性)。

鲁棒性,来源于音译Robust,意译为稳健性,可能更容易让人理解。

例如:均值对于离群值较为敏感,而中位数则不易收到离群值的影响,所以拥有更强的鲁棒性;但是如果数据集中的仅部分用户的数据发生变化,中位数可能不会有任何变化,所以敏感性较低。

那么,该如何验证指标的敏感性和鲁棒性呢?

a) 测试
b) 回顾分析(Retrospective Analysis)

3.3 变异性(Variability)

不同的指标拥有不同的可变性,有些指标尽管在业务上十分合理,但是可变性过强,会使该指标没有应用意义。

指标类型 分布 方差
可能性(Probability) Binomial/Normal \frac{\hat{p}(1-\hat{p})}{N}
平均数(Mean) Normal \sigma^2
分位数/中位数 - -
量/差值 Normal var(x)+var(y)
率(rate) Poisson \overline{X}
比值(ratios) - -

计算指标的可变性,可以使用分析法和经验法:

在重复进行A/A测试时,可以使用抽样法(Bootstrapping)。只进行一次A/A测试,但是每次只观测随机部分样本的结果,然后下次进行有放回的再次抽样。


4. 设计实验

实验设计通常需要确定以下几个部分:

4.1 分流对象

为了测试,通过某种方式将流量(Traffic)分为A\B两组,称之为分流(Diversion),而分流所使用的单位,则称之为分流单位(Unit of Diversion)。

常用的分流单位:

非常用的分流方法:

在选择分流方式时,通常需要考虑以下三点:

4.1.1 一致性(Consistency)

对于用户可感知的测试,用户ID可以保证一个用户即使在多次访问一个界面,任然会被分在同一个组内;而对于用户不可感知测试,例如不同搜索排序算法的测试,则可以使用事件分流。
例:各种实验为了确定一致性,可以选择哪种分流方式?

实验 测试者是否会知晓 用户ID cookie 事件
减小视频加载时间 应该不会 \checkmark
更改按钮的颜色或大小 如果刷新界面就会变化,用户就会注意到 \checkmark
更改搜索结果的排序 应该不会 \checkmark
考试前增加一份复习资料 应该会 \checkmark
4.1.2 伦理性(Ethical)

如果使用用户id进行分流,可能会有信息告知、披露的问题需要考虑,而使用cookie分流则不需要。

4.1.3 变异性(Variability)

分流单位需要和测试单位(指标的分母,也就是多少单位进入了测试)一致,否则计算出的变异性要远远小于实际的变异性。这是因为我们在计算变异性时,其实在假设数据的分布是独立的。

例如使用用户ID分流,一个用户会有多个事件,然后指标是根据事件维度的,则两个分组内的数据,则不是独立的。因为用户和事件是相关的。

4.2 选择群体

使用用户内测试需要注意两个问题:
a. 时间周期需要是可比的
b. 学习效应(learning effect)
b1. 变化厌恶(change aversion),用户对于变化是厌恶的,从而会对”变化“本身而产生反应。
b2. 知识效应(knowledge effect),用户对于变化的学习,可能开始时有效的,慢慢适应后变得无效。
避免学习效应可以使用留存用户(cohort)进行测试,或者在测试前与测试后均进行A/A测试。

附:插入式实验(Interleaved Experiments)
例如要对两种搜索排序算法进行对比测试,A算法的搜索结果排序为A1, A2, ..., AN,B算法的搜索结果排序为B1, B2, ..., BN。使用插入式实验,则可以将所有用户的搜索结果去重排序为A1, B1, A2, B2, ..., AN, BN,观测结果A和结果B的CTR,来验证测试结果。详见Interleaved in online Experiments at Netflix

4.3 样本量与周期

样本量基于\alpha\beta、和d_{min}(最小业务显著值)
如果想减少样本量,可以:

对样本曝光的风险控制:


5. 验证结果

5.1 合理性检验(Sanity Test)

收集到数据后的首当其冲我们要做的就是,检测数据的合理性,对照组和测试组的样本量需要是可对比的。
例如se = \sqrt{\frac{0.5*0.5}{x*y}}margin = \frac{x}{x+y} - \frac{y}{x+y}
如果se大于margin则说明统计上是不显著的。

5.2 单一指标

使用单一指标验证测试结果,我们可以使用简单的T检验或者Z检验,亦或是ANOVA和卡方检验均可。值得注意的是,在验证结果时,可能需要进行维度拆分,因为实验结果可能仅作用于某个子集。

注意辛普森悖论(Simpson's Paradox):两个组见每个子集均表现出差异,但是整体无差异,说明两个组中每个子集的占比不同

5.3 多个指标

使用多个指标验证测试结果,可能碰到的问题是,我们更有可能让测试的差异显著。也就是说,每一次进行测试结果的验证,都有一个几率,让我们的结果显著,而多次验证则会放大这个机率,也就是所谓的Type II Error
解决方法是使用Bonferroni correction:缩小单个测试的置信区间,以获得合理的整体置信区间。例如进行三个指标的验证,而整体我们想要的置信水平p_{overall}=0.05,则单个指标的置信水平p_{individual}=0.05/3=0.016

很明显,Bonferroni correction会使整个测试过于保守,其他有效的方法为 closed testing procedure, Boole-Bonferroni boundHolm-Bonferroni method,抑或是上文提到的综合评价标准(OEC)

5.4 Ramp-Up

通常AB测试的上线,我们会从1%等比较低的流量开始,然后慢慢上升到全部流量,达到功能的正式上线。在整个Ramp-Up过程中,可能会有一些原因导致测试之前是显著的,但是之后是不显著的:


Reference:
Tang, Diane, et al. "Overlapping experiment infrastructure: More, better, faster experimentation." Proceedings of the 16th ACM SIGKDD international conference on Knowledge discovery and data mining. 2010.
Udacity A/B testing by Google
Bootstrapping by wikipedia
Interleaved in online Experiments at Netflix
Bonferroni correction

上一篇下一篇

猜你喜欢

热点阅读