前言
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檢驗
本文所舉例子採用的檢驗。