1. 程式人生 > >適用於線上服務的A/B測試方法論

適用於線上服務的A/B測試方法論

適用於線上服務的A/B測試方法論

簡介:

這篇文章旨在介紹適用於為線上服務進行A/B測試(A/B Test)的方法論。中文網路中目前還缺乏全面的入門級介紹。

我將首先討論線上服務業進行A/B測試所考慮的決策問題,然後介紹兩種不太常見的統計測試:序列概率比測試(Sequential Probability Ratio Test, SPRT)和基於多臂bandit(Multi-armed Bandit, MAB)演算法的測試。

I.不只是P-Value

經典統計學會用如下的方法進行A/B測試:

F1)選擇一個樣本N

F2)隨機平分到A/B

F3)計算原假設t統計量(雙樣本+未知方差)所對應的

p-value

F4)如過p-value小於一個特定的顯著性水平(例如0.05),那麼就拒絕原假設,否則啥也做不了。

基於農業和工業生產體系產生的經典統計檢驗方法並不一定適用於線上服務業。這不完全是因為p-value經常被誤解了,更多是因為經典假設檢驗不能滿足線上服務業的業務要求。

1.1 為持續改進服務的AB測試是決策問題而不是推斷問題

大部分時候,我們只關心是否A方案比B方案好,而不關心A方案比B方案好多少。換句話說,我們只關心實驗的業務正確性(decision),而不在乎實驗的統計可靠程度(inference)。

從這個角度來看,雙邊檢驗是一個糟糕的決策問題。拒絕原假設

並不能告訴我們到底應該選擇A方案還是B方案。單邊檢驗是一個更好的原假設。如果拒絕了原假設,那麼應該選擇A方案;否則就選擇B方案。

假設檢驗還可以有其他形式。我們可能並不關心A方案和B方案是否完全一致(貝葉斯主義者會說永遠不會一致),我們可能關心A方案的B方案差距是否在一定範圍內。如果是,那麼我們應該做出選擇,否則可以保持現有的方案。這樣的原假設檢驗是等價檢驗equivalence test):

總而言之,F3不適合線上AB測試。事實上,假設檢驗的鼻祖Ronald Fisher反對將原假設檢驗作為決策依據。

1.2 不僅關心實驗結果,而且關心實驗成本

在線上執行試驗(特別是大規模實驗)時,可能會影響使用者體驗,從而影響使用者留存等關鍵業務指標。除非主管老闆正好是實證主義的狂熱信徒,否則他們可能會對於做實驗頗有微詞。如果你運氣好,去了一家完全由

A/B測試驅動的公司,那麼實驗成本的問題不僅沒有消失反而更為重要了。

因此,我們希望在實驗過程中,儘可能降低優勢方案向用戶曝光的頻率。要實現這個目標有兩種方法,動態結束機制和非均衡分組。動態結束機制是指一旦確認某個方案勝出,就立即停止實驗;採用這種方法意味著F1不適合線上AB測試,因為我們不必死等到耗盡預訂樣本為止。非均衡分組是指向在當前估計下優勢方案多分配使用者,我們將在多臂bandit一節中更加詳細地討論這個問題;採用這種方法意味著F2不適用線上AB測試。

1.3 樣本是序列生成的

經典統計學暗中假定資料是同時生成的,而不是依次生成的(大概要歸功於假設檢驗的始祖Ronald Fisher是個農業統計學家)。然而線上服務業的使用者總是依次到達的。這個重要特徵使得我們可以兼顧實驗可靠性和實驗的成本,也是下面兩種檢驗方法的核心特徵。

II.序列概率比測試

序列概率比測試(Sequential Probability Ratio Test,以下簡稱SPRT)可以認為是經典假設檢驗在序列樣本環境下的變體。在相同顯著性(significance)和檢驗力(power)下,SPRT可以比經典t檢驗結束的更早,需要的樣本更少。而其代價就是更加複雜的統計量和更加複雜的決策程式。

對於SPRT理論性質和正規檢驗方法感興趣的讀者可以鑽研David Seigmund(1985)Sequential Analysis一書。在這裡我們提供兩個更為實際的檢驗方法。第一是optimizely的統計檢測引擎,另一個是Evan Miller的簡易SPRT。前者雖然提供一個嚴格的False positive邊界,但是沒有完全披露其核心引數,因此不能下架即用。後者是個傻瓜式的檢驗,但是其顯著性和檢驗力堪憂,能夠適用的業務場景也較少(幾乎僅限於二元變數)。

如果你對於顯著性這個概念情有獨鍾,那麼SPRT可能是一個值得投入時間研究的方法。

III. 多臂bandit測試

 

如果SPRT所涉及的數學水平是精深的話,那麼真正理解多臂bandit(以下簡稱MAB)問題所需要的數學水平已經是非人了。Scott(2010)MAB問題的歷史提供了一個深入淺出的回顧。O’Reilly有一本書介紹了MAB經典解法和其Python程式碼

幸運的是,MAB有一個名為湯普森抽樣(Thompson Sampling)的貝葉斯解法。它容易理解,容易執行,擴充套件性強;因此非常適合用於線上AB測試。事實上,它正是Google AnalyticsYahoo!Bing實際使用的方法。

關於湯普森抽樣的技術細節請參見Google Analytics幫助選單和例子Scott(2010)提供了更為正式的表述。在這兒我主要討論一下GA演算法的核心思想。

3.1 什麼是多臂bandit

Bandit是美國人給bandit取得別名。下圖的bandit是一個獨臂one-arm bandit。你拉一下搖桿,得到一個獎勵。進一步假設獎勵是取值0,1的隨機變數,取值為1的概率是p

 

假設這個bandit有多個搖桿,從1N編號,每個搖桿返回獎勵的概率為,但是這個概率你不知道。每個回合你可以選擇拉動一個搖桿。

假設各個搖桿的返獎概率不變,使用什麼策略可以使得累計獎勵最大化?

簡而言之,這就是多臂bandit問題。回顧第一節關於線上服務優化的討論,可以發現兩者間的強關聯:兩者的核心目標都是做出決策;兩者的核心考量都是成本收益,兩者的資料生成過程都是序列化的。

3.2 探索與利用的權衡

如果用經典t檢驗的思路來解決多臂bandit問題,你的策略是這樣的:

1)在1輪,確保每個搖桿拉

2)在結束時,計算每個搖桿的樣本平均,選出樣本返獎概率最高的搖桿

3)從第輪開始,一直選擇搖桿

輪開始的策略是純利用(Exploration):即選擇實證獎勵最高的選項(play the winner);而前輪所用的策略是純探索(Exploitation):即無視經驗獎勵,讓概率做決定。

一般而言,像這樣涇渭分明的策略組合不是最優的。在實驗初期,應該鼓勵探索,因為我們不知道哪個選項更好。但是,當有證據表明某幾個選項相對更優時,應該增加利用的比例。這樣做有兩個好處:第一,多選贏家可以提高策略的整體收入;第二,多選贏家可以比平均分配更快地降低標準誤,從而提高我們對於贏家估計的信心。因此,利用的比例應該隨著時間的增加而增加。

湯普森抽樣提出了這樣一種直觀的貝葉斯解決方案:

在每個週期計算“搖桿i是最優搖桿”的後驗概率,以此作為下一輪隨機分配搖桿的依據。

湯普森抽樣保證在實驗過程中坑使用者的比例是最小的。此外,如果你懂一些貝葉斯模型,你就可以看到這種方法的靈活性和可擴充套件性有多強。

3.2 停止條件:潛在剩餘價值

儘管湯普森抽樣看似秒殺經典t檢驗,但是在決策過程中它有一個致命問題。所有的MAB策略本身都不是一個統計檢驗,因為它們沒有停止條件。湯普森抽樣會跑到海枯石爛,但是實際操作不允許無限長的實驗。目前為止,還沒有人公開發表一個簡單靠譜的終止條件。和經典t檢驗相比,這是基於MAB測試的一個重要缺點。

Google Analytics推薦使用潛在剩餘價值Potential Value RemainingPVR)來判斷實驗結束的時間。當選擇搖桿後,我們想知道(基於返獎概率的後驗概率分佈)如果選擇其他搖桿的潛在收益有多大。如果這個收益很小,那麼我們就有足夠的理由的選擇最優解;如果這個收益還很大,那麼還需要收集更多的資料來消除對於返獎概率的不確定性。事實上,PVR並不是一個值,而是一個分佈。因此,潛在收益大小需要用兩個數()衡量,分界線,分界概率

潛在最優收益比目前最優收益大%的概率小於

比如,Google Analytics預設的設定是(0.010.05),即潛在最優收益比目前最優收益大1%的概率不到5%

需要警告讀者的是,即使A/B方案沒有任何區別,PVR停止政策也會導致相當一部分的實驗在有限時間內終止;並且隨著時間的延長,這樣第一類錯誤的概率會不斷增加。這與經典t檢驗下固定pvalue,樣本越大,顯著性越小的特徵正好相反。如果你非常關心第一類錯誤概率,那麼MAB測試不是一個好選擇!

IV. 什麼時候應該關心顯著性?

在假設檢驗中,我們一般討論第一類錯誤(Type I Error)和第二類錯誤(Type II Error)。假設原假設為H0:你沒有懷孕,被擇假設為H1:你懷孕了。那麼,兩類錯誤描述的情況如下圖所示。

 

 

Scott在好幾處都提到一個觀點,那就是線上實驗根本不用考慮第一類錯誤,因為其代價極小;反而是第二類錯誤犯了才致命。事實上,Scott反對的並不是第一類錯誤,而是雙邊假設檢驗。

考慮形如下第一類錯誤和第二類錯誤的業務含義。如果犯了第一類錯誤,A方案和B方案完全等效,我們錯誤認為其中一個方案更好。這有什麼實際代價麼?如果程式碼轉換和使用者體驗變化的成本可以忽略不計(對於小改變而言的確如此),那麼第一類錯誤的代價的確是0。與此恰恰相反,假設我們犯了第二類錯誤,並且假設新方案是更優的選擇,我們就錯過了一個永久改進的機會:這是一個代價不菲的錯誤。

當產品線穩定後,持續改進只能從細節入手時,Scott的批評是非常有用的。因為PM們能想到的改進都已經做了,意外驚喜靠人的想象力來發掘已經不太現實了;相反,用演算法生成大量組合,進行持續測試和優化,說不定可以積跬步而致千里。因此對於諸如Google或者Facebook這樣的公司來說,用實驗主導開發是更合理的選擇。

如果產品線不穩定,實驗資料被用來做改版的調研,此時我們在做推斷,而不是決策。因為人很容易被隨機性所欺騙,看到海市蜃樓般的改進道理;所以實驗方法論應該設計的更為保守。如果因為第一類錯誤而導致失敗的all in,這是一個代價不菲的錯誤。

因此,我個人推薦使用湯普森抽樣作為自動化實驗體系的統計檢驗方法,使用經典t檢驗作為戰略決策實驗的統計檢驗方法。

延展閱讀

為了提高可讀性,本文避開了以下重要話題。這些問題有助於我們更加深入地理解假設檢驗與業務的契合。有興趣的童鞋可以從這些部落格出發,進一步閱讀:

1頻率學派貝葉斯學派關於p-value的相愛相殺

2)重複顯著性檢驗(repeated significance test):為什麼Bayesian Test或者不是解決方案。我個人認為信貝葉斯又信p value屬於人格分裂,Andrew Gelman更加科學的解釋(下面的評論值得詳細閱讀!)

3)多重對比,為什麼過度的(簡易)AB測試是偽科學

關於經典t檢驗應該怎麼做,實驗經濟學大神John List2010)有一個非常實用的指導手冊。經典t檢驗絕不是把樣本五五開這麼簡單。

 

來源:http://www.fengjunchen.com/tag/abtest/