AB test

前言


AB test
在实际工作中,A/B test是产品改动时常用到的手段。
为同一目标,制定两种方案,在相同时间维度下,随机分组,让用户使用两种不同的方案,并收集两组人群的用户行为数据和业务数据。
比如,通过设计两种文案/操作方式/界面风格等,通常其中一套方案是老版本,另一套方案是新版本。
在新版本上线前,先对少部分人进行AB test,根据显著性检验,检验方案是否的确可以带来特定业务指标的提升,若通过检验,才选择改版。
不过,显著性检验并不一定准确,涉及到统计功效。若统计功效低,即使通过显著性检验,也不一定能说明方案真的能够带来改进。(统计功效是啥,将会在本文具体展开)
本文主要内容:
1. A/B test显著性检验
2. 统计功效(R实现样本量计算)
3. 几种常用检验方法

A/B test显著性检验

随机将用户分为两组,用户群1使用原方案A,用户群2使用新方案B。经过一定时间积累用户数据,根据显著性检验判断新方案效果是否比原方案好。

示例

A/B test进行一周,得到两个方案的数据

方案 用户数 下单人数 转化率
A 88497 47523 0.537
B 6219 3619 0.582

在这里能否说明新方案B转化效果比老方案好呢?显然是不行的,因为往往会有一些随机因素参杂其中。
因此,我们首先对该A/Btest的结果进行显著性检验。

显著性检验是用于检测科学实验中实验组与对照组之间是否有差异以及差异是否显著的办法。

假设检验:原假设H_0;备则假设H_1。
检验结果有四种情况。

实际为真 实际为假
检验为假 第一类错误α 正确
检验为真 正确 第二类错误 β

如果原假设实际为真,检验的结论却让你放弃原假设。此时称为犯了第一类错误α
如果原假设实际为假,检验对结果却让你不放弃原假设,此时称为犯了第二类错误β

不考虑第二类错误β,只限定犯第一类错误的最大概率α ,这样的假设检验称为显著性检验,概率α 称为显著性水平。一般α 取值为0.1,0.05或0.01.α 越大说明越可能犯第一类错误,就是条件太严格,更容易拒真。
一般而言,把你希望得到的结果作为备择假设。
因为拒绝才是有意义的,一但拒绝原假设,那么备择假设成立。如果不拒绝原假设也不能说明原假设是正确的,只能说明要拒绝原假设的条件还不够。

在该示例中,我们想得到方案B转化率大于方案A的结论,因此可以做如下假设:
原假设:方案A转化率 >= 方案B; 备则假设:方案A转化率 < 方案B.

借用R,计算其P值。

prop.test(n=c(88497, 6219),x=c(88497*.537, 6219*.582), alternative = "less")  

data:  c(88497 * 0.537, 6219 * 0.582) out of c(88497, 6219)
X-squared = 47.188, df = 1, p-value = 3.225e-12
alternative hypothesis: less
95 percent confidence interval:
 -1.00000000 -0.03426326
sample estimates:
prop 1 prop 2 
 0.537  0.582

计算结果显示P值<0.05,可以拒绝原假设,可以认为方案B转化率比A好。

P值

P值通俗解释:原假设正确的前提下,得到当前情况乃至更差情况的概率。
将P值与显著性水平α比较。
我们相要证明命题(即备则假设)是真的,即要证明该命题的否命题(即原假设)是假的。此时,在否命题的假设(原假设)下,观察到小概率事件发生了,此时否命题(原假设)被推翻,原命题(备则假设)为真。
P值越小,说明当前观察到的事件越是小概率事件,否命题(原假设)越有可能被推翻,原命题(备则假设)越可信。
因此P值越小,越可以拒绝原假设。而α 值就是我们容忍的上限。

统计功效

P值小于显著性水平,得到拒绝原假设的结论就一定正确吗?
不是的,P值的计算结果受样本量大小的影响,样本量越大越准确。假如在样本量不足的情况下做显著性检验得到的结论,并不具有说服力,因为其统计功效很低。
但我们知道,实际中,样本量越大,往往成本越大。假设在这个例子中,方案B转化率实际比方案A低,但我们却把更多的用户划到了方案B中,这样是不是就影响了转化,从而影响了收入。因此我们需要确定能够使结论尽可能准确的最小样本量。

统计功效,可用1-β表示。其中β就是第二类错误的概率,实际为伪,认为是真的情况。
统计功效越高的实验意味着,它观察到的统计学差异(P<0.05)能反映真实情况的可能性越大。

影响统计功效的因素主要有:样本量和显著性水平α
样本量 :样本量越大,越能代表整体,计算的结果也越准确。
显著性水平α :即第一类错误,通常定为0.05.

借助工具R,我们可以通过样本量,显著性水平计算统计功效;也可以限定显著性水平和统计功效,计算能够得出当前限度统计功效值的最小样本量。

计算统计功效

pwr.p.test(h = NULL, n = NULL, sig.level = 0.05, power = NULL, alternative = c("two.sided","less","greater"))

h: Effect size
n: Number of observations
sig.level: Significance level (Type I error probability)
power: Power of test (1 minus Type II error probability)
alternative(备则假设): a character string specifying the alternative hypothesis, must be one of “two.sided” (default), “greater” or “less”

> library(pwr)
> pwr.p.test(h = ES.h(0.537,  0.582), n =6219, sig.level = 0.05, alternative = "less")

     proportion power calculation for binomial distribution (arcsine transformation) 

              h = -0.0906765
              n = 6219
      sig.level = 0.05
          power = 1
    alternative = less

可以得出统计功效值为1 。

pwr.p.test(h = ES.h(0.537,  0.582), n =621, sig.level = 0.05, alternative = "less")

     proportion power calculation for binomial distribution (arcsine transformation) 

              h = -0.0906765
              n = 621
      sig.level = 0.05
          power = 0.7306543
    alternative = less

将观察的样本量n改为 621,可以得到功效值为0.73,说明在此样本量下得出的显著性检验结果的可信度只有73%,与样本量为6219相比,下降。

计算样本量

R code

# ------------------------ helper
> # wrapper
> p.test.wrap = function(origin, incr) {
+     test_obj = pwr.p.test(h = ES.h(origin, origin + incr), 
+                           sig.level = 0.1, power = 0.9, alternative = 'less')
+     return(test_obj$n)
+ }
> 
> 
> # ------------------------ sample size estimates based on complete
> # original complete rate
> complete_seq = seq(0.6, 0.7, 0.02)
> # % increase
> complete_incr_seq = seq(0.02, 0.06, 0.01)
> # combination
> complete_incr_df = expand.grid(complete_seq, complete_incr_seq)
> # rename
> names(complete_incr_df) = c("original_complete", "ratio_incr")
> # return and combine sample size
> complete_sample_size = mapply(p.test.wrap, complete_incr_df[[1]], complete_incr_df[[2]])
> (complete_sample_size_df = cbind(complete_incr_df, complete_sample_size))

此段代码表示在显著性水平为0.1,统计功效为0.9的情况下,验证转化率确实从0.6增加0.02,需要的样本量。

原始完成率 假设提升 所需样本量
0.60 0.02 3906.5777
0.62 0.02 3827.7081
0.64 0.02 3735.6918
0.66 0.02 3630.5275
0.68 0.02 3512.2140
0.70 0.02 3380.7494
0.60 0.03 1727.6860
0.62 0.03 1691.151

几种常用检验方法

比例检验 P检验

本文所举例子采用的检验。

t检验

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章