從零開始AB測試

1. AB測試簡介

1.1 什么是AB測試

A/B測試為一種隨機測試二汛,將兩個不同的東西(即A和B)進行假設比較。該測試運用統(tǒng)計學上的假設檢定雙母體假設檢定送淆。 A/B測試可以用來測試某一個變量兩個不同版本的差異,一般是讓A和B只有該變量不同熟嫩,再測試其他人對于A和B的反應差異岔留,再判斷A和B的方式何者較佳。在這里先推薦一下udacity的學習課程 Udacity A/B testing by Google

簡單來講址貌,和控制變量法基本一致删壮,起源于醫(yī)學中的雙盲試驗

1.2 AB測試的應用

一般在數(shù)據(jù)分析工作中贪绘,對一個產(chǎn)品不同階段的轉(zhuǎn)化程度,會使用漏斗模型來分析央碟。例如以下為一個酒店預訂網(wǎng)站的漏斗模型:

我們的目標是盡可能多的讓用戶轉(zhuǎn)化到下一個階段税灌。而AB測試則可以測試不同的功能/配置/界面等對一個用戶轉(zhuǎn)化程度的提升,從而改進我們的產(chǎn)品亿虽。
在設計AB測試的初期菱涤,我們需要尋找某個指標,作為測量值洛勉。例如進行一個網(wǎng)頁點擊情況的測試粘秆,可用以下指標:

  • CTR(click-through rate),點擊數(shù)/瀏覽數(shù)收毫,一般用來測量可用性(usability)
  • CTP(click-through probability)攻走,點擊人數(shù)/瀏覽人數(shù),一般用來測量影響(impact)

rate和probability對應的中文一般均為此再,實際則不同昔搂。rate更傾向于概率,例如我們丟一個無偏的硬幣输拇,正面向上的可能性是50%摘符;probability更傾向于可能性,例如我們丟10000次無偏的硬幣,正面向上的次數(shù)服從伯努利分布逛裤。

1.3 測試結(jié)果

  • 統(tǒng)計上顯著(statistical significant)vs.現(xiàn)實中顯著(pratical significant)
    統(tǒng)計上顯著代表著可重復性(repeatability)瘩绒,而現(xiàn)實中顯著則根據(jù)不同業(yè)務來界定。
  • \alpha代表H_0正確带族,但是拒絕掉H_0的概率锁荔,一般取值為0.05。也就是本來有用炉菲,但是有5%的可能測試結(jié)果是沒用堕战。
  • \beta代表H_0錯誤,但是接受H_0的概率拍霜,一般取值為0.20。也就是本來沒用薪介,但是有20%的可能測試結(jié)果是有用祠饺。
  • 小樣本量,低\alpha汁政,高\beta道偷;大樣本量,低\alpha记劈,低\beta

2. 測試準則以及道德問題

2.1 風險(Risk)

受試者是否需要承擔任何風險勺鸦?例如金錢、情感目木、身體等等换途。閾值根據(jù)具體業(yè)務場景定義,如果超過某個閾值刽射,則需要告知受試者军拟。

醫(yī)學上的部分臨床試驗會分測試組與對照組,廣義上也是A/B測試誓禁,均會告知受試者并簽署協(xié)議懈息。

2.2 收益(Benefit)

測試是否帶來任何收益?

2.3 替代(Alternatives)

除了測試外摹恰,受試者是否有其他選擇辫继?如果有其他選擇,例如對一個App進行測試俗慈,受試者是否會被影響從而流失轉(zhuǎn)往競品姑宽?有多少會流失?成本是多少姜盈?

2.4 數(shù)據(jù)敏感性(Data Sensitvity)

  • 收集的數(shù)據(jù)是否具有敏感性低千?是否有保險措施?
  • 這部分數(shù)據(jù)將用于什么用途?如何保護數(shù)據(jù)不會用于其他用途示血?
  • 如果需要公開部分數(shù)據(jù)棋傍,是否會帶來額外的風險?

3. 定義與選擇指標

指標(Metrics)是用來衡量業(yè)務的一個參數(shù)难审,例如上文所說的點擊率瘫拣,或者用戶量,GMV均為指標告喊。在A/B測試中麸拄,我們需要考慮如何可以科學有效的定義或選擇一個指標。

3.1 定義指標

3.1.1 指標檢測

合理性:指標符合業(yè)務上的理解黔姜,例如漏斗中的轉(zhuǎn)化率不高于100%拢切。
穩(wěn)定性:兩個分組如果沒有區(qū)別,指標的表現(xiàn)應該是相同的秆吵。

有時會使用A/A test淮椰,來檢測兩個分組內(nèi)各特征是否分布均勻。兩個分組如果沒有區(qū)別纳寂,指標應該在統(tǒng)計上是沒有顯著差別的主穗,如果有則說明兩個分組內(nèi)的分布不均勻,例如新老客比例毙芜、男女分布等忽媒。

3.1.2 定義指標

通常會自上而下的來定義指標

  • 第一步:高層次、低抽象腋粥、更廣義且貼近商業(yè)晦雨、業(yè)務的指標。例如日活(日活躍用戶量)灯抛、CTR金赦。
  • 第二步:更細節(jié)的指標。例如日活用戶是由哪些組成对嚼?不同城市夹抗?不同版本APP?老用戶回歸纵竖?
3.1.3 指標統(tǒng)計量
  • 聚合指標漠烧,例如日活、點擊量靡砌。
  • 分布指標已脓,例如平均數(shù)、分位數(shù)通殃。
  • 概率度液、可能性厕宗、和比值
3.1.4 多指標

根據(jù)不同的公司/團隊文化(對于數(shù)據(jù)的接受程度),我們可以考慮是否需要使用多個指標堕担。
如果要使用多個指標已慢,可以考慮制定一個綜合評價標準(OEC Overall Evaluation Criterion) - 對所有指標的一個加權(quán)平均值。

通常情況不建議這么做霹购,因為加權(quán)系數(shù)難以定義佑惠;個別指標增長導致整體增長,所以業(yè)務方可能僅持續(xù)優(yōu)化某個指標等等

3.1.5 篩選數(shù)據(jù)

我們需要根據(jù)不同的原因齐疙,來篩選掉不需要的數(shù)據(jù)膜楷。

  • 外部原因:導致數(shù)據(jù)被污染的原因。例如用戶的惡意操作贞奋,其他實驗導致的流量異常等赌厅。
  • 內(nèi)部原因:導致數(shù)據(jù)僅能反映部分實驗的原因。例如實驗僅可以影響分組中的新用戶忆矛。

如何確定數(shù)據(jù)是否有偏差的呢察蹲?

  • 拆分各種維度,觀測流量是否受某個維度所影響催训。
  • 增加時間維度。對比天vs天/周vs周之間的數(shù)據(jù)差異宗收。

3.2 敏感性(Sensitivity)與魯棒性(Robustness)

最理想的指標漫拭,應該反映我們想關(guān)注的數(shù)據(jù)變化(高敏感性),不反映我們不想關(guān)注的部分(高魯棒性)混稽。

魯棒性采驻,來源于音譯Robust,意譯為穩(wěn)健性匈勋,可能更容易讓人理解礼旅。

例如:均值對于離群值較為敏感,而中位數(shù)則不易收到離群值的影響洽洁,所以擁有更強的魯棒性痘系;但是如果數(shù)據(jù)集中的僅部分用戶的數(shù)據(jù)發(fā)生變化,中位數(shù)可能不會有任何變化饿自,所以敏感性較低汰翠。

那么,該如何驗證指標的敏感性和魯棒性呢昭雌?

a) 測試
  • 使用歷史測試進行驗證
  • A/A測試
b) 回顧分析(Retrospective Analysis)
  • 觀測指標在歷史數(shù)據(jù)上的變化复唤,分析造成變化的原因

3.3 變異性(Variability)

不同的指標擁有不同的可變性,有些指標盡管在業(yè)務上十分合理烛卧,但是可變性過強佛纫,會使該指標沒有應用意義。

指標類型 分布 方差
可能性(Probability) Binomial/Normal \frac{\hat{p}(1-\hat{p})}{N}
平均數(shù)(Mean) Normal \sigma^2
分位數(shù)/中位數(shù) - -
量/差值 Normal var(x)+var(y)
率(rate) Poisson \overline{X}
比值(ratios) - -

計算指標的可變性,可以使用分析法和經(jīng)驗法:

  • 分析法(Analytical)
    例如中位數(shù)和比值的分布呈宇,是數(shù)據(jù)的分布類型好爬,所以我們需要分析數(shù)據(jù)的分布類型是什么,來確定指標的分布攒盈,以確定該指標可變性抵拘。

  • 經(jīng)驗法(Emprical)
    重復進行A/A測試,記錄每次測試指標差值的變化型豁,以確定指標的可變性僵蛛。

在重復進行A/A測試時,可以使用抽樣法(Bootstrapping)迎变。只進行一次A/A測試充尉,但是每次只觀測隨機部分樣本的結(jié)果,然后下次進行有放回的再次抽樣衣形。


4. 設計實驗

實驗設計通常需要確定以下幾個部分:

  • 分流對象(Subject):哪些是你的實驗對象驼侠?例如,需要分流為兩個組谆吴。
  • 選擇群體(Population):實驗對象是哪些群體倒源?例如,中國用戶句狼。
  • 樣本量(Size)
  • 周期(Duration)

4.1 分流對象

為了測試笋熬,通過某種方式將流量(Traffic)分為A\B兩組,稱之為分流(Diversion)腻菇,而分流所使用的單位胳螟,則稱之為分流單位(Unit of Diversion)。

常用的分流單位:

  • 用戶ID:通常是用戶名筹吐、手機號糖耸、郵箱地址等。用戶ID通常是穩(wěn)定丘薛,不會變化的嘉竟,這樣可以避免一個用戶在不同時間點分到不同組內(nèi)。
  • 匿名ID:通常是瀏覽器cookie等榔袋。匿名ID會隨著更換瀏覽器或者設備而跟著變化周拐,另外移動App的cookie相對PC端會更加穩(wěn)定一些。
  • 事件:事件可以理解為一個界面或按鈕等凰兑,通過是否到達這個界面而進行分流妥粟。這種分流方式通常用于用戶不可感知的測試。

非常用的分流方法:

  • 設備ID
  • IP地址

在選擇分流方式時吏够,通常需要考慮以下三點:

4.1.1 一致性(Consistency)

對于用戶可感知的測試勾给,用戶ID可以保證一個用戶即使在多次訪問一個界面滩报,任然會被分在同一個組內(nèi);而對于用戶不可感知測試播急,例如不同搜索排序算法的測試脓钾,則可以使用事件分流。
例:各種實驗為了確定一致性桩警,可以選擇哪種分流方式可训?

實驗 測試者是否會知曉 用戶ID cookie 事件
減小視頻加載時間 應該不會 \checkmark
更改按鈕的顏色或大小 如果刷新界面就會變化,用戶就會注意到 \checkmark
更改搜索結(jié)果的排序 應該不會 \checkmark
考試前增加一份復習資料 應該會 \checkmark
4.1.2 倫理性(Ethical)

如果使用用戶id進行分流捶枢,可能會有信息告知握截、披露的問題需要考慮,而使用cookie分流則不需要烂叔。

4.1.3 變異性(Variability)

分流單位需要和測試單位(指標的分母谨胞,也就是多少單位進入了測試)一致,否則計算出的變異性要遠遠小于實際的變異性蒜鸡。這是因為我們在計算變異性時胯努,其實在假設數(shù)據(jù)的分布是獨立的。

例如使用用戶ID分流逢防,一個用戶會有多個事件叶沛,然后指標是根據(jù)事件維度的,則兩個分組內(nèi)的數(shù)據(jù)忘朝,則不是獨立的恬汁。因為用戶和事件是相關(guān)的。

4.2 選擇群體

  • 用戶間測試(inter-user experiments):用戶組A和用戶組B對比
  • 用戶內(nèi)測試(intra-user experiments):用戶組在時間A與時間B對比

使用用戶內(nèi)測試需要注意兩個問題:
a. 時間周期需要是可比的
b. 學習效應(learning effect)
b1. 變化厭惡(change aversion)辜伟,用戶對于變化是厭惡的,從而會對”變化“本身而產(chǎn)生反應脊另。
b2. 知識效應(knowledge effect)导狡,用戶對于變化的學習,可能開始時有效的偎痛,慢慢適應后變得無效旱捧。
避免學習效應可以使用留存用戶(cohort)進行測試,或者在測試前與測試后均進行A/A測試踩麦。

附:插入式實驗(Interleaved Experiments)
例如要對兩種搜索排序算法進行對比測試枚赡,A算法的搜索結(jié)果排序為A1, A2, ..., AN,B算法的搜索結(jié)果排序為B1, B2, ..., BN谓谦。使用插入式實驗贫橙,則可以將所有用戶的搜索結(jié)果去重排序為A1, B1, A2, B2, ..., AN, BN,觀測結(jié)果A和結(jié)果B的CTR反粥,來驗證測試結(jié)果卢肃。詳見Interleaved in online Experiments at Netflix疲迂。

4.3 樣本量與周期

樣本量基于\alpha\beta莫湘、和d_{min}(最小業(yè)務顯著值)
如果想減少樣本量尤蒿,可以:

  • 提升\alpha\beta幅垮,或下降d_{min}
  • 使分流單位需要和測試單位一致
  • 縮小實驗范圍到有效的實驗樣本上

對樣本曝光的風險控制:

  • 對于未知結(jié)果的新功能上線腰池,先小流量測試
  • 長周期小流量的安全性 > 短周期大流量

5. 驗證結(jié)果

5.1 合理性檢驗(Sanity Test)

收集到數(shù)據(jù)后的首當其沖我們要做的就是,檢測數(shù)據(jù)的合理性忙芒,對照組和測試組的樣本量需要是可對比的示弓。
例如se = \sqrt{\frac{0.5*0.5}{x*y}}margin = \frac{x}{x+y} - \frac{y}{x+y}
如果se大于margin則說明統(tǒng)計上是不顯著的匕争。

5.2 單一指標

使用單一指標驗證測試結(jié)果避乏,我們可以使用簡單的T檢驗或者Z檢驗,亦或是ANOVA和卡方檢驗均可甘桑。值得注意的是拍皮,在驗證結(jié)果時,可能需要進行維度拆分跑杭,因為實驗結(jié)果可能僅作用于某個子集铆帽。

注意辛普森悖論(Simpson's Paradox):兩個組見每個子集均表現(xiàn)出差異,但是整體無差異德谅,說明兩個組中每個子集的占比不同

5.3 多個指標

使用多個指標驗證測試結(jié)果爹橱,可能碰到的問題是毙玻,我們更有可能讓測試的差異顯著鹊漠。也就是說,每一次進行測試結(jié)果的驗證腾誉,都有一個幾率椭盏,讓我們的結(jié)果顯著组砚,而多次驗證則會放大這個機率,也就是所謂的Type II Error掏颊。
解決方法是使用Bonferroni correction:縮小單個測試的置信區(qū)間糟红,以獲得合理的整體置信區(qū)間。例如進行三個指標的驗證乌叶,而整體我們想要的置信水平p_{overall}=0.05盆偿,則單個指標的置信水平p_{individual}=0.05/3=0.016

很明顯,Bonferroni correction會使整個測試過于保守准浴,其他有效的方法為 closed testing procedure, Boole-Bonferroni boundHolm-Bonferroni method事扭,抑或是上文提到的綜合評價標準(OEC)

5.4 Ramp-Up

通常AB測試的上線,我們會從1%等比較低的流量開始兄裂,然后慢慢上升到全部流量句旱,達到功能的正式上線阳藻。在整個Ramp-Up過程中,可能會有一些原因?qū)е聹y試之前是顯著的谈撒,但是之后是不顯著的:

  • 季節(jié)效應:節(jié)假日等帶來的數(shù)據(jù)波動腥泥。解決方法是保留一個組,持續(xù)的作為對照組啃匿。
  • 新奇效應以及變化厭惡:變化所帶來的對用戶行為本身的影響蛔外,例如新功能的上線導致客人更喜歡使用或厭惡使用產(chǎn)品。解決方案是以使用留存用戶(cohort)進行測試溯乒,或者在測試前與測試后均進行A/A測試夹厌。

Reference:
Tang, Diane, et al. "Overlapping experiment infrastructure: More, better, faster experimentation." Proceedings of the 16th ACM SIGKDD international conference on Knowledge discovery and data mining. 2010.
Udacity A/B testing by Google
Bootstrapping by wikipedia
Interleaved in online Experiments at Netflix
Bonferroni correction

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市裆悄,隨后出現(xiàn)的幾起案子矛纹,更是在濱河造成了極大的恐慌,老刑警劉巖光稼,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件或南,死亡現(xiàn)場離奇詭異,居然都是意外死亡艾君,警方通過查閱死者的電腦和手機采够,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冰垄,“玉大人蹬癌,你說我怎么就攤上這事『绮瑁” “怎么了逝薪?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝴罪。 經(jīng)常有香客問我翼闽,道長,這世上最難降的妖魔是什么洲炊? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮尼啡,結(jié)果婚禮上暂衡,老公的妹妹穿的比我還像新娘。我一直安慰自己崖瞭,他們只是感情好狂巢,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著书聚,像睡著了一般唧领。 火紅的嫁衣襯著肌膚如雪藻雌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天斩个,我揣著相機與錄音胯杭,去河邊找鬼。 笑死受啥,一個胖子當著我的面吹牛做个,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滚局,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼居暖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了藤肢?” 一聲冷哼從身側(cè)響起太闺,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘁圈,沒想到半個月后省骂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡丑孩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年冀宴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片温学。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡略贮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仗岖,到底是詐尸還是另有隱情逃延,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布轧拄,位于F島的核電站揽祥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏檩电。R本人自食惡果不足惜拄丰,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俐末。 院中可真熱鬧料按,春花似錦、人聲如沸卓箫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烹卒。三九已至闷盔,卻和暖如春弯洗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逢勾。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工牡整, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敏沉。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓果正,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盟迟。 傳聞我的和親對象是個殘疾皇子秋泳,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容