增長團隊有三寶:埋點、漏斗、AB測。工作中一直想實踐,沒有合適的機會,過段時間又忘了。在此整理一下,雖然比不上做過來的印象深刻,但未來復習起來也方便。
實際上很多以前我寫過的代碼也完全沒印象了,一眼看上去好陌生,只覺得寫的還不錯,哈哈。
一、基本原理
AB測試概念來自生物醫學的雙盲測試,即分組藥物實驗,比較一段時間后兩組病人的表現是否具有顯著差異(假設檢驗)。AB測試是一種驗證性研究方法,適于微觀層面,不適合戰略級的策略驗證。
考慮到投入產出比,一般要具備兩個必要條件:1、測試對象的決策影響大,或決策后不易修改;2、測試對象的方案選擇存在困難。
零假設總是表述為研究沒有改變,沒有效果,不起作用等,H1是我們想要的假設。為什么統計者想要拒絕的假設放在原假設呢?因為原假設備被拒絕如果出錯的話,只能犯第I類錯誤,而犯第I類錯誤的概率已經被規定的顯著性水平所控制。
檢驗方式分為兩種:雙側檢驗和單側檢驗。單側檢驗又分為兩種:左側檢驗和右側檢驗。雙側檢驗:備擇假設沒有特定的方向性,形式為“≠”;單側檢驗:備擇假設帶有特定的方向性,形式為">""<"的假設檢驗, "<"稱為左側檢驗,">"稱為右側檢驗。
給定顯著性水平α后,查表就可以得到具體臨界值,將檢驗統計量與臨界值進行比較,如果樣本觀測計算出來的檢驗統計量的具體數值落在拒絕域內,就拒絕原假設,否則不拒絕原假設。
假設檢驗根據業務數據分為兩種:一個總體參數的假設檢驗、兩個總體參數的假設檢驗,檢驗統計量計算方式有所不同。例如,時段1,A版本,時段2,B版本,假設檢驗為同一總體(全部客戶);版本A\B各分配50%的流量,兩個總體。
一個總體參數的假設檢驗:
假設形式,;
;
。
檢驗統計量,,
。
大、小樣本的拒絕域確認略有不同,大樣本查詢Z分布,小樣本查詢t分布。
大樣本的,
小樣本的,
。
兩個總體參數的假設檢驗
假設形式,;
;
。
檢驗統計量,
拒絕域與一個總體參數的假設檢驗一致。
樣本成數:它是指樣本中具有某一相同標志表現的單位數占樣本容量的比重,記為p。總體成數:它是指總體中具有某一相同標志表現的單位數占全部總體單位數的比重,一般用π表示。
該假設檢驗可用于某一天的回款率情況(某天3000客戶,回款客戶所占比重為p)。
一個總體成數的假設檢驗
假設形式,;
;
。
檢驗統計量,
拒絕域與總體參數的假設檢驗一致。
兩個總體成數的假設檢驗
當都大于或等于5時,就可以稱為大樣本,
假設形式,;
;
,其中可根據需要將0調整為
。
檢驗統計量,,兩個樣本的合并成數
。
情況下(一般形式),
二、檢驗統計量與樣本量計算
檢驗統計量
據以對原假設和備擇假設作出決策的某個樣本統計量稱為檢驗統計量,兩個簡單的例子:
1、兩組測試,雙樣本均值顯著性檢驗,使用Z檢驗。單側檢驗值,顯著性水平為0.05時,=1.645,當
,拒絕原假設。
2、兩組測試,不同的樣本(如人),雙獨立樣本是否相等的檢驗;小樣本、數據分布近似符合正態分布,采用t檢驗;因為備選假設是A版本和B版本有差別,采用雙尾檢驗。
服從什么分布,就用什么區間估計方式,也就就用什么檢驗。比如:兩個樣本方差比服從F分布,區間估計就采用F分布計算臨界值(從而得出置信區間),最終采用F檢驗。
Z檢驗:一般用于大樣本(即樣本容量大于30),平均值差異性檢驗的方法,總體標準差σ已知。它是用標準正態分布的理論來推斷差異發生的概率,從而比較兩個平均數的差異是否顯著。
T檢驗:主要用于樣本含量較小(例如n < 30),總體標準差σ未知的正態分布。T檢驗是用t分布理論來推論差異發生的概率,從而比較兩個平均數的差異是否顯著。
一般情況下我們是不知道總體分布的標準差的,根據中心極限定理,當樣本量很大時(大于30),抽樣分布服從正態分布,樣本的標準差是總體分布標準的一個很好估計,抽樣分布方差就等于總體分布方差除以樣本容量。
當樣本容量小于30的時候,我們用樣本標準差估計的總體分布標準差是不準的,一般會低估,所以出現了 t 分布,公式和Z 統計量一樣,但查的是 t 表。
卡方檢驗:卡方檢驗是統計樣本的實際觀測值與理論推斷值之間的偏離程度,實際觀測值與理論推斷值之間的偏離程度就決定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若兩個值完全相等時,卡方值就為0,表明理論值完全符合。適合x類別型變量,y類別型變量。
樣本量計算
最小樣本量計算公式,
其中是每組所需樣本量,因為AB測試一般至少2組,所以實驗所需樣本量為
。
分別稱為第一類錯誤概率和第二類錯誤概率,一般分別取0.05和0.2,
為正態分布的分位數函數,
為兩組數值的差異,如點擊率1%到1.5%,那么
就是0.5%。
為標準差,是數值波動性的衡量,
越大表示數值波動越厲害。
對兩類錯誤上限的選取(α是5%,β是20%),我們可以了解到AB實驗的重要理念:寧肯砍掉4個好的產品,也不應該讓1個不好的產品上線。
棄真錯誤也叫第I類錯誤或α錯誤:它是指原假設實際上是真的,但通過樣本估計總體后,拒絕了原假設。明顯這是錯誤的,我們拒絕了真實的原假設,所以叫棄真錯誤。這個值也是顯著性水平,在假設檢驗之前我們會規定這個概率的大小。
取偽錯誤也叫第II類錯誤或β錯誤:它是指原假設實際上假的,但通過樣本估計總體后,接受了原假設。明顯者是錯誤的,我們接受的原假設實際上是假的,所以叫取偽錯誤。
Statistical Significance =1-α = 95%
Statistical Power = 1-β = 80%
Baseline Rate,是在實驗開始之前,對照組本身的表現情況,即舊方案的點擊率,由歷史數據決定的。在我們的實驗中,我們假定,實驗開始之前的歷史點擊率是5%。所以Baseline Rate=5%。這個參數越小,你需要的樣本量越大(分母越大,這個參數越小)。(debug)
Minimum Detectable Effect,衡量了我們對實驗的判斷精確度的最低要求,參數越小(比如1%),說明我們希望實驗可以有能力檢測出1%的細微差別。檢測細微的差別當然更加困難(power變小)所以樣本量越大,所以如果要保持power不變的話,需要的樣本量會增加。
比例類數值的假設檢驗在統計學中叫做兩樣本比例假設檢驗,其最小樣本量計算的公式為:
具體實踐,可使用在線工具(https://www.evanmiller.org/ab-testing/sample-size.html)、Excel(NORM.S.INV函數)、R(power.prop.test)、Python計算。
# R
power.prop.test(p1 = 0.30, p2 = 0.305, sig.level = 0.05, power = 0.80, alternative = "two")
# python
from statsmodels.stats.power import zt_ind_solve_power
from statsmodels.stats.proportion import proportion_effectsize as es
zt_ind_solve_power(effect_size=es(prop1=0.30, prop2=0.305), alpha=0.05, power=0.8, alternative="two-sided")
三、實驗設計與注意事項
1、計算兩樣本的描述性統計,建立零假設和備選假設,例如:
零假設:A版本和B版本鍵盤沒有差別,即A版本的平均值等于B版本的平均值。
備選假設:A版本和B版本有差別,即A版本平均值不等于B版本平均值。
2、確定檢驗類型、檢驗統計量(如t檢驗),求t值、雙尾檢驗的P值和自由度df,一般設置顯著水平alpha=5%。
如雙邊檢驗,p < 判斷標準(顯著水平)alpha/2 時,拒絕零假設,有統計顯著,也就是有差異。
import statsmodels.stats.weightstats as st
#?import scipy.stats
#?t, pval = scipy.stats.ttest_ind(B,A) #表示B-A
t, p_two, df = st.ttest_ind(data['A'], data['B'], usevar='unequal')
# 自由度一般只保留整數部分
print('t=', t, 'p_twoTail=', p_two, ',df=', df)
3、計算置信區間和效應統計量(Cohen's d)。
置信區間的上下限,,95%置信度下對應的t值(查詢t表)。
# 計算標準誤差
se = np.sqrt(np.square(a_std)/a_n + np.square(b_std)/b_n)
# 對于雙獨立樣本檢驗,置信區間的樣本平均值=A版本平均值 - B版本平均值
sample_mean = a_mean - b_mean
Cohen's d = (樣本平均值1-樣本平均值2) / 標準差,因是兩個獨立樣本,此處要用合并標準差。效應量太小,意味著處理即使達到了顯著水平,也缺乏實用價值。(debug,效應統計量顯著的范圍;標準差的計算公式)
# 合并標準差
sp = np.sqrt( ((a_n-1)*np.square(a_std) + (b_n-1) * np.square(a_std))
????????????/ (a_n+b_n-2) )
# 效應量Cohen's d
d = (a_mean - b_mean) / sp
4、生成數據分析報告。
注意事項
控制變量,只有一個變量不同,否則將會影響測試中的基準控制,保證AB組數量和特征均勻(如男女比例接近),同時發布上線。
同時關注正向與負向指標,正向指標,一般依據實驗路徑制定,是策略好壞的直接評價,如:留存人數->點擊人數->瀏覽人數->成交人數。負向指標,適用于結果指標相近的場景,如實驗策略是下發公眾號模板,其中兩組的成交人數相近,但實驗組卻致使用戶取關人數激增。如正向收益小于負向收益,則應分析問題考慮優化實驗或停止實驗。
四、實際案例
1、點擊率的假設檢驗
某公司想知道產品優化是否有效,設立實驗組與對照組收集一周點擊率,請檢驗產品優化是否有效。
實驗組7天點擊率分別為:0.72,0.75,0.7,0.75,0.73,0.72,0.71
對照組7天點擊率分別為:0.7,0.76,0.69,0.75,0.7,0.69,0.68
由于不同統計日之間是有隨機波動的差異,而且實驗組和對照組流量相等且隨機,可以認為樣本來自同一個總體,實驗組是對同一天的對照組進行優化的結果,所以可以采用相關樣本t檢驗。
Step1:μ為點擊率
H0:功能優化之后與優化前沒有差異(μ2-μ1=0)
H1:功能優化之后與優化前有差異(μ2-μ1≠0)
Step2:確定顯著性水平α=0.05。計算統計量,相關樣本t檢驗是以每一組數據的差值作為檢驗的,所以以點擊率差作檢驗
day1:0.72-0.7=0.02 …… day7:0.71-0.68=0.03
Md為七組差值的均值,經計算為0.0157;樣本方差(0.02-0.016)^2+……+(0.03- 0.016)^2/(7-1)=0.000262,開根號得到標準誤=0.0161。最后代入t分數:t=(0.0157-0)*sqrt(n-1)/0.0161=2.38。
Step3:查表,按α=0.05,df=6,確定臨界值,2.447。Step3中的t=2.38在臨界值內,接受零假設,認為功能優化沒有效果。
2、機器人催收的AB測試思路
未開展因測試數據量不足,A版本,人工催收M0回款率,B版本機器人。
附,參考資料:
1、python獨立雙樣本t檢驗: AB測試,https://zhuanlan.zhihu.com/p/40227306
2、A/B實驗,了解一下,https://mp.weixin.qq.com/s/PAxmkE2Dp1tyKIK3VJv2EQ
3、數據分析|如何做一個ABtest測驗,https://zhuanlan.zhihu.com/p/75762862
4、假設檢驗——這一篇文章就夠了,https://zhuanlan.zhihu.com/p/86178674
5、Z分布標準正態分布表