日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sanity Check: SRM, AA test

發布時間:2023/12/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的原因:

  • 實驗涉及重定向網頁等:如果treatment group的treatment是要通過再點擊一個鏈接,導向一個新的界面,才能做的,那么由于用戶們比較懶,可能就因此放棄了繼續做下去,這樣treatment group的sample size就會在實驗過程中意外減小了;另一方面,如果部分用戶把這個重定向的鏈接發給他們的朋友,那么這個treatment group的sample size就會意外擴大了。所以實驗中要盡量避免這種重定向界面的出現!或者至少要使control group和treatment group關于重定向問題付出同樣的努力才行!
  • 數據清洗時,對于control group和treatment group的數據,drop掉的數量相差太多,也會導致最后的SRM。
  • 當前實驗會使treatment group的人的屬性發生變化,從而隨后被drop掉,導致treatment group size變小。比如一項實驗是針對不活躍用戶進行的,但是該實驗卻意外地使實驗組的一部分不活躍用戶變成了活躍用戶,那么他們就不符合條件了,會在隨后被drop掉。
  • 因為實驗有bug而導致SRM:比如實驗過程中,實驗組出現了一個很嚴重的bug,修復過后繼續實驗,但這個bug已經使實驗組體驗很不好了,因而一部分人會drop,所以treatment group size就不可避免地變小了。
  • 通過數據檢驗是否出現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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。