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è)務來界定。 - 代表正確带族,但是拒絕掉的概率锁荔,一般取值為。也就是本來有用炉菲,但是有5%的可能測試結(jié)果是沒用堕战。
- 代表錯誤,但是接受的概率拍霜,一般取值為。也就是本來沒用薪介,但是有20%的可能測試結(jié)果是有用祠饺。
- 小樣本量,低汁政,高道偷;大樣本量,低记劈,低
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 | |
平均數(shù)(Mean) | Normal | |
分位數(shù)/中位數(shù) | - | - |
量/差值 | Normal | |
率(rate) | Poisson | |
比值(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 | 事件 |
---|---|---|---|---|
減小視頻加載時間 | 應該不會 | |||
更改按鈕的顏色或大小 | 如果刷新界面就會變化,用戶就會注意到 | |||
更改搜索結(jié)果的排序 | 應該不會 | |||
考試前增加一份復習資料 | 應該會 |
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 樣本量與周期
樣本量基于、莫湘、和(最小業(yè)務顯著值)
如果想減少樣本量尤蒿,可以:
- 提升、幅垮,或下降
- 使分流單位需要和測試單位一致
- 縮小實驗范圍到有效的實驗樣本上
對樣本曝光的風險控制:
- 對于未知結(jié)果的新功能上線腰池,先小流量測試
- 長周期小流量的安全性 > 短周期大流量
5. 驗證結(jié)果
5.1 合理性檢驗(Sanity Test)
收集到數(shù)據(jù)后的首當其沖我們要做的就是,檢測數(shù)據(jù)的合理性忙芒,對照組和測試組的樣本量需要是可對比的示弓。
例如,
如果大于則說明統(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ū)間。例如進行三個指標的驗證乌叶,而整體我們想要的置信水平盆偿,則單個指標的置信水平
很明顯,Bonferroni correction會使整個測試過于保守准浴,其他有效的方法為 closed testing procedure, Boole-Bonferroni bound和Holm-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