Sanity Check: SRM, AA test
Sanity Check
是實驗后第一件要做的事,來保證實驗進行地正確(主要在randomization;internal validity方面)。主要由兩方面組成:SRM(sample ratio mismatch)(保證randomization沒問題),AAtest(保證和實驗treatment無關的所有其他變量在各組之間應該是statistically indifferent的)。
SRM
我們實驗前分配好了control組和treatment組的sample size,但實驗后清洗完數據我們發現,sample ratio(control group sample size/treatment group sample size) 我們預先設計的那個比例。這時就是發生了SRM,它說明實驗的randomizatioin或數據收集過程出了差錯,我們應立即停止實驗來糾正這個錯誤,否則得到的結果就是不準確的。
產生SRM的原因:
通過數據檢驗是否出現SRM:
H0: the observed proportion = the expected proportion (sample size proportion)
H1:?the observed proportion ??the expected proportion
有兩種方式:t-test計算p-value;chi-square test計算p-value
假設最后觀察到的數據是這樣的:
由于t值計算公式:? ??(假設該實驗服從伯努利分布)
在excel中的t-test和chi-square test計算過程如下:
所以得到這兩種p-value全都遠<0.05, 可以拒絕H0,得出結論:observed proportion不等于expected proportion,出現了SRM,需要debug!
AAtest
隨機split用戶為兩組,不過這兩組完全一樣,即B=A,所以就不是ABtest,而是AAtest了。完全一樣是指,沒有treatment,所以兩組所有的variable應該statistically indifferent的。代碼和Multiple Testing那個代碼一模一樣:
def multi_cm(x):x0 = df[df['expid'] == 0][x]x1 = df[df['expid'] == 1][x]x2 = df[df['expid'] == 2][x]cm01 = sms.CompareMeans(sms.DescrStatsW(x0), sms.DescrStatsW(x1))cm02 = sms.CompareMeans(sms.DescrStatsW(x0), sms.DescrStatsW(x2))cm12 = sms.CompareMeans(sms.DescrStatsW(x1), sms.DescrStatsW(x2))print(x)print(cm01.tconfint_diff(alpha=0.05, alternative='two-sided', usevar='pooled'))print(cm02.tconfint_diff(alpha=0.05, alternative='two-sided', usevar='pooled')) print(cm12.tconfint_diff(alpha=0.05, alternative='two-sided', usevar='pooled'))returnfor feature in df.columns[2:]:multi_cm(feature)得到的結果樣式是這樣:
這組數據AAtest結果顯示control和treatment的各個變量都是statistically indifferent的,因為CI都包含0。
AAtest還可以幫助確定sample size: 對于擁有80% statistical power和5%的significance level的實驗來說,每個組的sample數量應為Power analysis 和 Type II error(選取多大的sample size)_小白的博客-CSDN博客
click0=np.mean(df.click) var_click0=np.var(df.click) #population variance delta = 0.05*click0 #effect sizesize = 16*var_click0/(delta**2) print(size)總結
以上是生活随笔為你收集整理的Sanity Check: SRM, AA test的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开始iOS 7中自动布局教程(二)
- 下一篇: cudnn.benchmark = Tr