導讀:本文將利用一個例子來探索設計、運行和分析對照實驗的基本原則。這些原則適用于各種軟件開發環境,包括網頁服務器和瀏覽器、桌面應用程序、移動端應用程序、游戲主機、虛擬個人助理等。為了敘述盡量簡單和具體,我們將專注于一個網站優化的例子。
作者:羅恩·科哈維(Ron Kohavi)、黛安·唐(Diane Tang)、許亞(Ya Xu)
來源:華章科技

01 設立實驗
我們用一個虛構的線上銷售小部件的電子商務網站作為具體的例子。我們可以測試各類改動:新功能的引入、用戶界面的改動、后端的改動等。
在我們的例子里,市場營銷部門希望通過發送含打折優惠券的促銷郵件提高銷量。這涉及潛在業務模型的改變,因為該公司之前沒有發過優惠券。然而,公司有員工最近了解到Dr. Footcare公司在添加優惠券后大幅流失營收的案例,也通過GoodUI.org了解到移除優惠券會產生正面的影響。
因為這些外部數據,公司擔心在結賬頁面增加優惠券輸入框會降低營收,即使沒有優惠券,僅僅因為看到這一欄也會拖慢用戶的結賬速度,并導致用戶開始搜索優惠券甚至放棄結賬。
我們希望評估僅添加優惠券輸入框帶來的影響。這里可以用“偽門法”或“畫門法”——如同造一個假門或者在墻上畫一個門——來看看多少人會試圖打開它。
在這個例子中,我們實現了一個在結賬頁面添加優惠券輸入框的微小改動。這里我們不是要實現一個真正的優惠券系統,因為并沒有優惠券可用。不論用戶填寫的是什么,系統都會顯示:“此優惠券不可用。”
我們的目的僅是評估添加一個優惠券輸入框本身對營收的影響,并確定是否有必要擔心它會分散用戶結賬的注意力。
由于這是一個很簡單的改動,我們將測試兩種UI的實現方式。同時測試多個實驗組去評估一個想法而不是一個實現是很常見的實驗設置。在這個例子里,“想法”是添加優惠券輸入框,“實現”是指一個特定的UI改動。
這個簡單的A/B測試是評估這一新業務模型可行性的關鍵一步。
思考如圖2.1所示的漏斗形的線上購物過程有助于我們將UI改動方案轉換成一個假設。客戶從網站主頁開始,瀏覽一些小部件,往購物車里添加小部件,開始付款過程,最終完成付款。

▲圖2.1 一個用戶線上購物漏斗模型。用戶不一定會在這個漏斗里線性前進,可以跳過、重復或是往返于步驟間
當然,這個漏斗是簡化的模型,客戶很少會這樣線性化地完成每個步驟,他們會在步驟之間往返,有些重復訪問的客戶也會跳過某些中間步驟。然而,這個簡單模型對我們全面考慮實驗設計和實驗分析很有幫助,因為實驗的目的通常是有針對性地改善這個漏斗中的某個特定步驟。
對于這個實驗,我們在結賬頁面添加一個優惠券輸入框,測試如圖2.2所示的兩個不同的UI,并評估它們對營收的影響。我們的假設是:“添加優惠券輸入框會降低營收。”

圖2.2 a對照組:舊的結賬頁面 b實驗組1:優惠券或禮品券輸入框位于信用卡下方 c實驗組2: 優惠券或禮品券彈出框
為了測量這一產品改動帶來的影響,我們需要定義目標指標,也稱為成功指標。如果只有一個目標指標,那么我們可以直接將其用作綜合評估標準(Overall Evaluation Criterion, OEC)。對于這個實驗,營收可能是個顯而易見的選擇。
請注意,即便想要提高的是營收總和,也不建議將營收總和作為指標,因為它依賴于變體對應的用戶數量。即使各變體被等量分配,實際用戶數也可能因為偶然性而有所不同。我們推薦按實際樣本量歸一化的關鍵指標,因此人均營收才是一個好的OEC。
下一個關鍵問題是決定哪些用戶被計入人均營收這一指標的分母中:
- 所有訪問該網站的用戶。這是可行的,但會帶來噪聲:未進入結賬頁面的用戶也會被包括進來。由于我們的改動發生在結賬頁面,這些用戶不會受到任何影響。將他們排除在外可以提高A/B測試的靈敏度。
- 僅包括完成付款的用戶。這是不正確的,因為它假設這個改動只會影響付款額度,而不影響完成付款的用戶的比例。如果更多的用戶付款,那么即使總營收增加,人均營收也可能會降低。
- 僅包括開始付款流程的用戶。考慮到改動發生在漏斗中的環節,這是最好的選擇。我們包括了所有潛在受影響的用戶,且排除了不被影響但會稀釋實驗結果的那部分用戶(從未進入結賬頁面的用戶)。
現在細化后的假設是“在結賬頁面添加優惠券輸入框會降低開始付款流程的用戶的人均營收”。
02 假設檢驗:確立統計顯著性
設計、運行或分析實驗之前,先來復習一些與統計假設檢驗相關的基礎概念。
首先,我們通過理解基準線均值及其標準差來刻畫一個指標。標準差表明了指標估值的變動有多大。我們需要知道這一變動,以正確地估計實驗所需的樣本量,以及在分析時計算統計顯著性。對于大多數指標,我們測量它們的均值,但是也可以選擇其他的概述統計量,比如百分位數。
靈敏度,或者說檢測到統計上顯著差異的能力,會隨著標準差的降低而提高。提高靈敏度的典型做法是分配更多的流量進入變體,或者拉長實驗的運行時間(通常用戶量會隨著時間增加)。
然而,實驗開始的幾周后,后面這種方法可能沒有前者有效果,因為重復訪問的用戶使得去重用戶量的增長呈次線性,而有些指標本身的方差也會隨著時間而增長。
運行實驗時,我們會為多組樣本,而非單組樣本,刻畫一個指標。具體來說,在對照實驗中,實驗組有一組樣本,每個對照組各有一組樣本。如果零假設是來自實驗組的樣本和來自對照組的均值相同,我們會定量測試兩組樣本的差異的可能性大小。
如果可能性非常小,則我們拒絕零假設,并宣稱差異是統計顯著的。確切地說,有了實驗組樣本和對照組樣本的人均營收的估計值,我們可以計算估計值的差異的p值,即在零假設為真的情況下觀測到這種差值或更極端的差值的概率。
如果p值足夠小,則我們拒絕零假設,并得出實驗有效應(或者說結果統計上顯著)的結論。但是多小是足夠小呢?
科學的標準是使用小于0.05的p值,也就是說,如果事實上是沒有效應的,那么100次里我們有95次能正確地推斷出沒有效應。另一種檢驗樣本差異是否統計顯著的方法是看置信區間有沒有包含零值。95%置信區間是一個可以在95%的時間里覆蓋真實差異值的區間。
對于較大的樣本量,這個區間通常以觀測到的實驗組和對照組差值為中心點,向兩邊各擴展1.96倍于標準差的寬度。圖2.3展示了p值和置信區間這兩種方法的等價性。

▲圖2.3
- 上圖:用p值評定觀測到的差值是否統計顯著。如果p值小于0.05,則認為是統計顯著的。
- 下圖:用95%置信區間Δ-1.96σ,Δ+1.96σ評定統計顯著性的等價方法。如果零值落在置信區間之外,則認為是統計顯著的
關于p值更詳細的解讀可以參考此前的文章《終于有人把p值講明白了》。
03 設計實驗
現在可以開始設計實驗了。我們已經有了一個假設和一個實際顯著的邊界,并且刻畫了指標。我們將接著做以下決定來敲定設計:
- 隨機化單元是什么?
- 我們的目標群體是什么?
- 實驗需要多大的樣本量?
- 實驗需要運行多久?
這里我們假設隨機化單元是用戶。
以一個特定群體為目標意味著你只想對具有某一特征的用戶運行實驗。例如,要測試新的僅限于某幾種語言的文本,這時,可以選擇界面語言設置為這幾種語言的用戶。其他常見的目標屬性包括地理區域、平臺和設備類型。在我們的這個例子里,假設以所有用戶為目標。
實驗的樣本量大小(對我們而言就是用戶量)對結果的精確度有直接影響。如果你想要檢測出很小的變化或者對結論更有信心,那么就要運行一個有更多用戶的實驗。這里我們列出一些可能要考慮的調整:
- 如果用購買指示符(即用戶買/沒買,無論買了多少)而不是人均營收作為OEC,那么標準差會更小,意味著更少的用戶就能達到同樣的靈敏度。
- 如果提高實際顯著水平,比如我們不再關心1%的變化,而只關心更大的變化,由于更大變化更容易被檢測到,我們就可以縮小樣本量。
- 如果想用更小的p值閾值,比如0.01,以使得我們能更確信結果有差異而拒絕零假設,則需要增大樣本量。
其他一些決定實驗樣本量的考慮因素如下:
- 實驗的安全性如何?對于一些重大的改動,由于無法確定用戶會有什么反應,你可能想要先從一小部分用戶開始測試。這個考量不影響實驗最終所需樣本量,但是會影響放量策略。
- 這個實驗是否需要和其他實驗共享流量?如果是,怎么平衡流量需求?概括來說,如果有其他的變動也要測試,可以選擇同時運行或者依序運行。如果必須在多個同時運行的測試間分割流量,那么每個測試將只能得到更小的流量。
另一個重要的問題是實驗需要運行多久。我們需要考慮如下這些因素:
- 更多的用戶:對于線上實驗,用戶隨著時間流入實驗,時間越長,用戶數越多。統計功效通常也會隨之提高(當測量累積指標時會有例外,比如會話數,其方差也隨著增大,統計功效則未必會隨用戶數增加而提高)。考慮到同樣的用戶會反復訪問,用戶隨時間的累積可能是次線性的:第一天有N個用戶,兩天的總用戶數會小于2N,因為部分用戶這兩天都會來訪問。
- 周內效應:周末訪問的用戶群體可能和周中訪問的不一樣。即使同一用戶在周中和周末也可能有不一樣的表現。確保實驗能覆蓋一周的周期是很重要的。我們建議實驗至少要運行一整周。
- 季節性:還有一些用戶可能有其他不同表現的重要時期需要考慮,比如節假日。如果你的用戶遍布全球,美國假期和非美國假期可能會有影響。例如,禮品卡可能在圣誕期間銷量很好,但在一年的其他時期則不行。這被稱為外部有效性,即實驗結果可以被歸納推廣到什么程度,這里指被推廣到其他時間段。
- 初始和新奇效應:有些實驗在初始階段有較大或較小的效應,并在之后的一段時間趨于穩定。例如,用戶可能會嘗試一個新的很亮眼的按鈕,然后發現它并不好用,這個按鈕的點擊量則會隨著時間而減少。而有些新功能會有一個被接受的過程,需要一定的時間來建立用戶基礎。
至此,我們的實驗設計如下:
- 隨機化單元是用戶。
- 我們以全體用戶為目標,并分析那些訪問結賬頁面的用戶。
- 為了能以80%的統計功效檢測出至少1%的人均營收的變化,我們會通過功效分析來確定樣本量。
- 根據所需樣本量,實驗要按34%/33%/33%的比例將流量分配到對照組/實驗組1/實驗組2,且至少運行4天。為了確保了解周內效應,我們將運行實驗一整周,如果發現新奇效應或初始效應,則可能需要運行更長時間。
一般來說,實驗的統計功效過大是沒有問題的,甚至是推薦的,因為有時候我們需要檢查細分群(例如,地理區域或平臺),且有時候需要保證實驗有足夠的統計功效來檢測多個關鍵指標的變化。例如,我們可能有足夠的統計功效來檢測對所有用戶的營收的影響,但沒有足夠的統計功效來觀測針對加拿大用戶的影響。
還有一點值得注意的是,雖然這里的對照組和實驗組有近似相同的樣本量,但如果實驗組數量增加,則可能要考慮讓對照組的樣本量比實驗組多。
04 運行實驗并獲得數據
現在我們運行實驗并收集必要的數據。這里只簡單概述一下要點。
為了運行實驗,我們需要:
- 工具化日志記錄來獲得用戶和網站互動的日志數據,以及這些互動是屬于哪個實驗的。
- 基礎設施來支持實驗的運行,從實驗配置到變體分配。
一旦開始運行實驗,并且使用工具化日志記錄收集了日志數據,就可以開始著手處理數據、計算概述統計量并可視化結果了。
05 分析結果
實驗有數據了!分析實驗對人均營收的影響之前,需要先做一些合理性檢查來確定實驗的運行是正確的。
多種漏洞都會使實驗結果無效。為了抓住這些漏洞,我們會關注護欄指標(guardrail metric)或不變量(invariant)。這些指標不應該在對照組和實驗組之間存在差異。如果有差異,那么實驗中測量到的差異有可能是由其他變動而不是被測試的改動導致的。
不變量指標有兩種類型:
- 與可信度相關的護欄指標,比如對照組和實驗組的樣本量應該和實驗構建時的預期一致,或者它們有同樣的緩存命中率。
- 機構的護欄指標,比如延遲指標。延遲指標對機構很重要,而且在很多實驗中不應該有變化。對于結賬頁面的實驗,如果延遲改變了會令人感到意外。
如果合理性檢查失敗,那么很有可能背后的實驗設計、基礎設施或數據處理是有問題的。
完成基于護欄指標的合理性檢查之后,我們可以開始看結果(表2.1)。

表2.1 結賬頁面實驗的人均營收結果
由于兩個對照組的p值都小于0.05,我們拒絕實驗組和對照組有相同均值的零假設。
這意味著什么呢?我們證實了在用戶界面添加優惠券輸入框會降低營收。如果進一步研究數據,結果表明營收降低是因為完成付款過程的用戶更少。
因此,任何發送優惠券的營銷郵件需要扣除的不僅是實現優惠券添加系統帶來的處理和維護成本,還有最開始添加優惠券輸入框的負面影響。
由于這一市場營銷模型被預測可以小幅增加部分目標用戶的營收,而A/B測試顯示它會顯著降低所有用戶的營收,最終我們決定放棄引入優惠券的想法。畫門法的A/B測試節省了我們很多精力!
06 從結果到決策
運行A/B測試的目標是收集數據以驅動決策。很多工作都用來確保實驗結果是可重復的且可信賴的,以做出正確的決策。接下來我們對幾種可能發生的不同情況梳理決策過程。
對于每一種情況,我們都已經有了實驗結果,且目標是將實驗結果轉化為產品功能發布/不發布的決策。強調決策部分是因為一個決策既需要考慮從測量結果得到的結論,也要考慮更廣泛的背景,例如:
- 你是否需要在不同的指標之間權衡取舍?如用戶互動度增加,但營收降低,應該發布嗎?另一個例子是,如果CPU利用率增加,運行服務的成本卻可能超過這一變化帶來的效益。
- 發布改動的成本是什么?包括:
- 發布之前完整搭建這個功能的成本。有些功能可能在實驗之前就已經完全建好。對于這種情況,從1%到100%的發布沒有額外的成本。也有其他的情況。像我們的例子,實現“畫門”是低成本的,但實現完整的優惠券系統則需要付出很高的成本。
- 發布之后持續維護的工程成本。維護新的代碼可能更加昂貴。新代碼容易有更多漏洞,且邊界情況的測試不完善。如果新代碼的復雜度更高,那么在其基礎上搭建新的改動會有更多的阻力和成本。
如果成本很高,則必須確保預計的收益高于成本。對于這種情況,需要確保實際顯著的邊界設立得足夠高。反過來,如果成本很低或沒有成本,你可以選擇發布任何有正面影響的改動,也就是說,實際顯著的邊界很低。
決策錯誤的代價是什么?不是所有的決策都是等價的,也不是所有的錯誤都是等價的。發布沒有影響的改動可能沒有任何壞處,但放棄有影響的改動可能機會成本很高,反過來也是一樣。例如,你在網站上測試兩個頭條推廣,且推廣只存續幾天的時間。由于改動的生命期很短,做出錯誤決策的代價很低。此時,你可能愿意降低統計顯著性和實際顯著性水平。
構造統計顯著性和實際顯著性閾值的時候,需要考慮以上這些背景。從實驗結果出發來做決策或采取行動的時候,這些閾值非常關鍵。假設我們在實驗開始之前已經考慮了這些背景并更新了閾值,現在來用圖2.4中的例子解釋如何用這些閾值指導決策。

▲圖2.4
圖2.4 關于決策是否發布時理解統計顯著性和實際顯著性的例子。實際顯著的邊界由兩條虛線表示。各個示例結果的估計差異值(及置信區間)由黑框表示
- 結果不是統計顯著的,顯然也不是實際顯著的。很容易得出結論:該改動沒有什么影響。可以做迭代或者放棄。
- 結果是統計顯著的,也是實際顯著的。同樣很容易得出結論:發布!
- 結果是統計顯著的,但不是實際顯著的。這時候,你對差異值的量級是有把握的,但是這個量級可能不足以勝過其他因素,比如成本。這一改動也許不值得發布。
- 跟例1一樣,這是個中性的例子。然而,這里置信區間越過了實際顯著的閾值。如果運行一個實驗然后發現它可能增加或降低10%的營收,你真的會接受這個實驗結果并認為結果是中性的嗎?更好的說法是沒有足夠的統計功效來得到一個有力的結論,也就是說,沒有足夠的數據來支持發布或不發布的決策。對于這個結果,我們推薦通過運行跟進實驗來測試更多的單元,以獲得更大的統計功效。
- 結果可能是實際顯著的,但不是統計顯著的。即便最好的猜測是這個改動有影響,也很有可能實際上完全沒有影響。從測量的角度來說,最好的建議是重復這個實驗,同時增大統計功效以提高結果的靈敏度。
- 這個結果是統計顯著的,并且可能是實際顯著的。像例5一樣,有可能這個改動并不是實際顯著的。因此,跟前面幾個例子一樣,我們推薦重復實驗并增大統計功效。不過從發布/不發布的決策角度來說,選擇發布是一個合理的決定。
要記住的關鍵一點是,有些時候實驗結果給不了清晰的答案,但仍然要做出決策。對于這種情況,我們需要明確考慮的因素,尤其是這些因素如何影響實際顯著和統計顯著的邊界設定。這些考慮會為未來的決策提供基礎,而非局限于當前的單一決策。
關于作者:羅恩·科哈維(Ron Kohavi)是愛彼迎的副總裁和技術院士,曾任微軟的技術研究員和公司副總裁。在加入微軟之前,他是亞馬遜的數據挖掘和個性化推薦總監。他擁有斯坦福大學計算機科學博士學位,論文被引用超過40 000次,其中有3篇位列計算機科學領域引用最多的1 000篇論文榜。
黛安·唐(Diane Tang)是谷歌院士,大規模數據分析和基礎設施、線上對照實驗及廣告系統方面的專家。她擁有哈佛大學的文學學士學位和斯坦福大學的碩士及博士學位,在移動網絡、信息可視化、實驗方法、數據基礎設施、數據挖掘和大數據方面擁有專利和出版物。
許亞(Ya Xu)是領英數據科學與實驗平臺負責人,曾撰寫了多篇關于實驗的論文,并經常在頂級會議和大學演講。她曾在微軟工作,擁有斯坦福大學的統計學博士學位。
本文摘編自《關鍵迭代:可信賴的線上對照實驗》,經出版方授權發布。

延伸閱讀《關鍵迭代:可信賴的線上對照實驗》
推薦語:愛彼迎、谷歌、領英A/B測試領軍人物撰寫,亞馬遜、谷歌、微軟和領英等公司互聯網產品成功的秘訣!谷歌院士JeffDean、臉書首任CTO、沈向洋等37位專家推薦。本書基于近些年實驗領域的研究成果和實踐經驗,對實驗的方法和應用做了很好的全景式描述,是一本兼顧系統性的方法論和基于實戰的經驗法則的書籍。