技術乾貨 | 如何選擇上班路線最省時間?從A/B測試數學原理說起

AI科技大本營發表於2018-03-03

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


作者 | 陳運文


當面對眾多選擇時,如何選才能最大化收益(或者說最小化我們的開銷)?比如,怎麼選擇最優的上班的路線才能使途中花費的時間最少?假設每天上下班路線是確定的,我們便可以在賬本中記下往返路線的長度。


A/B測試便是基於資料來進行優選的常用方法,在記錄多次上班路線長度後,我們便會從資料中發現到一些模式(例如路線A比路線B花的時間更少),然後最終一致選擇某條路線。


當A/B測試遇到非簡單情況時(如分組不夠隨機時,或使用者量不夠大到可以忽略組間差異,或不希望大規模A/B測試長期影響一部分使用者的收益),該怎樣通過掌握理論知識來更好的指導實踐呢?本文嘗試通過由淺入深的介紹,希望能夠幫助大家對A/B測試有更加深入的理解。


為什麼需要A/B測試


任何問題,只要它的每個選項能夠被多次進行測試,並且每個選項在被測試時都能返回固定的結果,那麼它就能使用A/B測試技術來進行優化。在上述例子中,每天的上下班路線是確定的,所以我們能夠在賬本中記下往返路線的長度。


那麼什麼樣的路線對於使用者來說才是一個好的方案呢?是考慮路線A還是B?什麼時候使用者才有充分的資料去確定哪條線路是最好的?測試線路好與不好的最優策略又是什麼?圖1用形式化概括定義了問題。


640?wx_fmt=jpeg

圖1 形式化定義的問題


在這個場景中,參與的使用者正面臨一個選擇,根據他的決策會生成一個結果,而這個結果會對應一份給參與者的反饋。假設使用者持續地暴露於這個決策,他應該怎麼制定獲得最大收益(或等效地說,最小成本)的策略?


圖1中假定了使用者多次處於需要進行選擇的場景中,每一次進行決策都會達成一項結果,而這個結果會關聯相應的反饋。在上下班這個例子中,假定他每天都需要上下班,而且他每次上下班都必須進行線路的選擇,產出的結果是這次上下班中所有因素的結合體,反饋就是從這些因素中構建出來的(陳運文 達觀資料)。


這是個淺顯的例子,在網際網路產品研發時,有大量類似的場景需要做出各種正確的選擇,例如:


1.著陸頁優化(Landing-page optimization)


在使用者點選去往的頁面(著陸頁),如何獲得最大的轉化率(常用計算方法為有購買行為或深度網頁互動行為的使用者數佔網站訪問總使用者數的比率)。決策要考慮到著陸頁的形式和內容(要從可能已有的3或4個備選方案中做出選擇),希望能夠從候選集合中選出最好的著陸頁,以能夠吸引來訪的使用者,並讓深度互動或者購買行為的概率最大化。


2.廣告創意優化(Ad creative optimization)


線上廣告提出了許多適合機器學習技術應用的挑戰,其中之一就是如何選擇廣告的形式和內容。當我們決定將要進行廣告展示,以及確定了廣告的價格後,在這個廣告位上選擇放置什麼廣告呢?我們需要對大量的決策進行測試,選出正確的廣告創意組合。


什麼是A/B測試


經常遇到的問題是,我們應該怎麼評估各不相同的決策,以及應該採用哪些策略來測試我們的產出? A/B測試(A/B testing)就是其中之一的方法。A/B測試近年來很受歡迎,但大部分產品經理也許會簡單地認為它只不過是一種包含兩個組的實驗,其實背後有更為複雜的數學統計理論知識。


具體細節


當進行A/B測試時,通常會採用兩個(或多個)組:A組和B組。第一個組是對照組,第二個組會改變其中一些因素。就以著陸頁優化為例,A組會展示現有的著陸頁,B組會展示一個內容或者內容作了某些修改的新著陸頁。A/B測試的目的就是嘗試瞭解新的佈局是否在統計上顯著地改變了轉化率。


特別值得注意的是,將使用者分配到對應的組需要經過深思熟慮。對於A/B測試,我們可以高效地進行隨機分組。當使用者數量較大時,各組間使用者行為可以假設是相同的(即組間沒有偏差)。但是,這裡有三個非常重要的關鍵點,是大家有必要進一步理解其數學理論原理的原因:


問題1:怎樣驗證兩個組的使用者的行為是無偏差、完全相同的


問題2:當兩個組的使用者行為不完全相同時(例如分組不夠隨機或者組內使用者數量較小時),該如何設計AB測試以實現期望的驗證結果


問題3:當使用者基礎行為受其他因素影響發生整體變化了呢?例如季節、時間波動、熱度等因素影響下,怎樣更好的剔除干擾來評估結果


AB測試的統計理論


假設我們已經構建了兩組數目較大的使用者組,這些使用者組的區別僅在於他們到達的著陸頁。我們現在希望能測試兩組間的轉化率在統計上是否存在明顯差異。由於樣本量大,我們可以採用雙樣本單尾z-檢驗(two-sample, one-tailed z-test)。另外,對於較小的樣本集合,我們可以依賴於t-檢驗。


z檢驗(z-test)是在資料是正態分佈和隨機抽樣的假設下執行的,目的是驗證測試集(B組)是否與該對照集(A組)有顯著不同,但是如何執行這個測試呢?


假設有來自A組和B組中的每一組的5,000個樣本。我們需要一個數學公式來說明我們的零假設(null hypothesis)——兩組群體的轉化率沒有顯著的正差異,和備擇假設(或稱對立假設,alternative hypothesis)——不同人群間的轉化率確實存在著正差異。


我們可將取樣轉化率視為一個正態分佈的隨機變數,也就是說,取樣的轉化率是在正態分佈下對轉化率的一個觀測。要了解這一點,請考慮從同一組中提取多個樣本進行實驗將導致略有不同的轉化率。每當對某組進行抽樣時,可獲得群體轉化率的估計,對於A組和B組都是如此。為此我們提出一個新的正態隨機變數,它是A和B組的隨機變數的組合,是差值的分佈。讓我們用X來表示這個新的隨機變數,定義為:


640?wx_fmt=png


其中,Xe表示實驗組的轉化率的隨機變數,Xn表示對照組的轉化率的隨機變數。現在我們可以寫出零假設和備擇假設。零假設可以表示為:


640?wx_fmt=png


這表示實驗組和對照組是相同的。兩個隨機變數Xe和Xn分佈在相同的群體平均值周圍,所以我們的新隨機變數X應該分佈在0左右。我們的備擇假設可以表示如下:


640?wx_fmt=png


實驗組的隨機變數的期望值大於對照組的期望值;該群體的平均值較高。


我們可以在零假設的前提下,對X的分佈執行單尾z檢驗,以確定是否有證據支援備擇假設。為了達到這個目的,我們對X進行取樣,計算標準分,並測試已知的顯著性水平。


X的取樣等效於執行兩個實驗,確定它們各自的轉化率,並將對照組和實驗組的轉化率相減。按照標準分的定義,可以寫作:


640?wx_fmt=png


其中,P_experiment是實驗組的轉化率,P_control 是對照組的轉化率,SE是轉化率差值的標準差。


為確定標準誤差,注意到轉化過程是符合二項分佈的,因此訪問該網站可以被看作單次伯努利試驗(single Bernoulli trial),而積極結果(完成轉化)的可能性是未知的。


假設樣本數量足夠大,我們可以使用廣泛採用的Wald方法(參考Lawrence D. Brown, T. Tony Cai, and Anirban DasGupta, “Confidence Intervals for a Binomial Proportion and Asymptotic Expansions,” The Annals of Statistics 30, no. 1 (2002): 160–201.)將該分佈近似為正態分佈。為了捕獲特定轉化率的不確定性,我們可以將標準誤差(SE)寫入實驗組和對照組,其中p是轉化的可能性,n是樣本數量,具體如下:


640?wx_fmt=png


從二項分佈(np(1-p))的方差得到分子,而分母表示當採用更多的樣本時,轉化率的誤差會隨之下降。請注意正面結果的概率等同於轉化率,並且因為兩個變數的標準誤差可以通過相加來合併,得到如下結果:


640?wx_fmt=jpeg


通過替換,可獲得如下的z檢驗公式,這是一個符合二項分佈的Wald(或正態)區間的公式:


640?wx_fmt=jpeg


z的值越大,反對零假設的證據就越多。為了獲得單尾測試的90%置信區間,我們的z值將需要大於1.28。這實際上這是指在零假設(A組和B組的人口平均值是相同的)的條件下,等於或大於這個轉化率差值的偶然發生的概率小於10%。


換句話說,在對照組和實驗組的轉化率來自具有相同平均值的分佈的假設前提下,如果執行相同的實驗100次,只會有10次具有這樣的極端值。我們可以通過95%的置信區間,更嚴格的邊界和更多的證據來反對零假設,這時需要將z值增加到1.65。


研究影響z大小的因素會帶來很多有用的幫助。很顯然,如果在一個給定的時間點從一個實驗集和一個對照集中提取兩個轉化率,轉化率的差值越大將導致z分數越大。因此就有了更多的證據表明兩個集合分別來自不同的人群,而且這些人群帶有不同的均值。然而樣品的數量也很重要,如你所見,大量樣本將導致總體較小的標準誤差。這表明執行實驗的時間越長,轉化率的估算越準確。


A/B測試的數學原理


評估效果的程式碼實現


設想你在負責大型零售網站,設計團隊剛剛修改了著陸頁。每週有約20,000使用者,並可以量化使用者的轉化率:即購買產品的百分比。設計團隊向你保證新網站將帶來更多的客戶。但你不太確定,希望執行A / B測試來看看效果是否真的會提高。


使用者在第一次訪問網站時被隨機分配到A組或B組,並在實驗期間始終保留在該組中,實驗結束時評估兩組使用者的平均轉化率。統計結果是,新著陸頁的平均轉化率是0.002,而原先的著陸頁的平均轉化率是0.001。在著陸頁永久更改為新設計之前,你需要知道這一增長是否足夠明確。下面這段程式碼幫你回答這個問題。


640?wx_fmt=jpeg


這段程式碼獲取實驗中z的值,在上述引數條件下z值為1.827,超過了92%置信區間,但不在95%的區間內。可以說,從控制分佈中抽取資料的概率小於0.08。因此在該區間內資料提升是顯著的。我們應該否定零假設,接受備擇假設,即組之間有差異,第二組具有較高的轉化率。如果我們控制了使用者組的所有其他方面,就意味著網站的新設計產生了積極的效果。


你應該能夠從程式碼中看到轉化率分佈的標準誤差對返回的z值有直接影響。 對給定的常數值p_experiment和p_control,兩個組的SE越高,z的數值越小,結果就越不顯著。還注意到由於SE的定義,z的數值與樣本的數量具有直接關係,對於給定的轉換概率也同樣如此。圖2展示了這種關係。


640?wx_fmt=jpeg

圖2


圖2 展示了A / B組的固定轉化率,以及A / B組中的使用者數量和z值之間的關係。 假設轉化率不會隨著我們收集更多資料而改變,我們需要每個組中大約3,000個使用者達到70%的置信區間。 要達到80%的置信區間時需要每組約5000個使用者,達到90%時需要 7500個使用者,達到95%時需要12000個使用者。


圖2中可見對於兩個組的給定轉化率,測試組中的使用者越多,備擇假設的證據就越充分。直觀上來看這很容易理解:當收集的資料越多,我們對結果越自信!我們也可以繪製一張類似的圖,保持使用者數量不變,改變組之間的差異。但必須注意,對正在關注的應用,不應該期望效果的大幅度變化。


5. A/B測試方法的副作用和處理辦法


對於非常小的效果變化,往往都需要建立相當大的對照組和測試組來實現AB測試,這個的代價往往是很大的。設想下在零售商場中,每天觀察到的使用者數量,往往需要很久的時間才能得出明顯的結論。在實際業務應用中,會遇到的問題是:當你執行測試時整體執行的效果是受到很大影響的,因為必須有一半的使用者處於效果不佳的實驗組,或者有一半的使用者處於效果不佳的對照組,而且你必須等待測試完成才能停止這種局面。


這是被稱為探索利用難題(explore-exploit conundrum)的一個經典問題。我們需要執行次優方法,以探索空間,並找到效果更好的解決方案,而一旦找到了更好的解決方案,我們還需要儘快利用它們來實現效果提升。能否可以更快地利用新的解決方案,而不必等待測試完全完成呢?答案是肯定的。下面簡單介紹下多臂賭博機(multi-armed bandit,MAB)的概念。


1.多臂賭博機的定義


多臂賭博機(multi-armed bandit,MAB)的名字來源於著名的賭博遊戲角子賭博機(one-armed bandit)。對那些從沒去過賭場的人,我們來做下解釋:角子機(又稱老虎機)是一個需要你拉槓桿(或搖臂)的賭博機器,根據機器展示的數值,你可能會得到一筆獎勵,也可能(更大機率)得不到任何東西。和你想的一樣,這些機器的設定都對莊家有利,所以能獲的獎勵的機率是非常非常小的。


多臂賭博機(理論上的)擴充套件了這種形式,想象你面對的是一堆角子賭博機,每個賭博機都被分配按照一個獨立的概率進行獎勵。作為一個玩家,你不知道在這些機器後的獲獎概率,你唯一可以找到獲獎概率的方法是進行遊戲。你的任務是通過玩這些機器,最大限度地提高所獲的獎勵。那麼你應該使用什麼策略呢?


2.多臂賭博機策略


為了更嚴格地定義問題,我們通過數學形式化來表達,假設現在有k個賭博機,可觀察到的每臺的獲獎概率等於p_k。假設一次只能拉動一個搖臂,並且賭博機只會按照它關聯的概率機型獎勵。這是一個設定了限定局數的有限次的遊戲。在遊戲期間任意時間點時,水平線H被定義為允許的剩餘遊戲的數量。


對所有機器使用者會嘗試最大化的獲獎回報。在遊戲中的任一時間點,我們都可以通過使用稱為遺憾值(regret)來度量使用者的表現。遺憾值的意思是,假設使用者能在每一步選擇最優的賭博機,得到的獎勵和目前獲得的實際獎勵的差值。遺憾值的數學定義為:


640?wx_fmt=png


其中T表示我們到目前為止進行過的步數,r_t表示在第t步獲得的獎勵,u_opt表示每一局從最優賭博機返回來的期望獎勵。遺憾值的數值越低,策略越優。但因為這個度量值會受到偶然性的影響(獎勵可能會被從最優賭博機選擇中獲得的期望獎勵更高),我們可以選擇使用遺憾值的期望值代替,定義為:


640?wx_fmt=png


其中μ_t是在第t步從賭博機中獲得的平均獎勵(不可觀測的)。因為第二項是來自所選策略的期望獎勵,所以它將小於或等於來自最優策略(每一步都選擇最優的賭博機)的期望獎勵。


3.Epsilon優先方法


Epsilon優先(Epsilon first)是MAB策略中最簡單的一種方式,它被認為和事先執行A/B測試方法具有同等意義。給定ε,執行探索空間操作的次數為(1 – ε) × N,其中N是遊戲中總共的局數,剩餘的次數都是執行後續探索的局數。


update_best_bandit演算法會持續統計記錄每一個賭博機的獎勵收入和遊戲局數。變best_bandit會在每一局結束進行更新,記錄當前具有最高獲獎概率的賭博機的編號,流程如下:


640?wx_fmt=jpeg


4.Epsilon貪婪


Epsilon貪婪(epsilon-greedy)策略中,ε表示我們進行探索空間的概率,和進行利用已知最優搖臂的事件互斥


640?wx_fmt=jpeg


該方法的特點:不需要等到探索階段完成,才能開始利用有關賭博機的獎勵表現的知識。但要小心,該演算法不會考慮效果資料的統計意義。因此可能發生這樣的情況:個別賭博機的獎勵峰值導致後續的所有局遊戲都錯誤地選擇了這個賭博機(陳運文 達觀資料)。


5.Epsilon遞減


Epsilon遞減(epsilon-decreasing)策略在實驗開始階段,會有一個很高的ε值,所以探索空間的可能性很高。ε值會隨著水平線H上升而不斷遞減,致使利用似然知識的可能性更高。


640?wx_fmt=jpeg


需要注意這裡有幾種方法去來選擇一個最優的速率來更新ε值,具體取決於賭博機的數量,以及他們各自進行獎勵的權重。


6.貝葉斯賭博機


與A / B測試類似,貝葉斯賭博機(Bayesian bandits)假設每個賭博機的獲獎概率被建模為獲獎概率的分佈。當我們開始實驗時,每個賭博機都有一個通用的先驗概率(任意賭博機的獎勵比率初始都是同等的)。


在某一個賭博機上進行的局數越多,我們對它的獎勵資訊就瞭解越多,所以基於可能的獎勵概率更新其獲獎概率分佈。當需要選擇玩哪一個賭博機的時候,從獲獎概率分佈中取樣,並選擇對應樣本中具有最高獎勵比率的賭博機。圖3提供了在給定時間內對三個賭博機所含資訊的圖形化表示。

640?wx_fmt=jpeg

圖3


使用貝葉斯賭博機策略對三個賭博機的獲獎概率資訊進行建模。第1、2和3個賭博機的平均獲獎率分別為0.1、0.3和0.4。 第1個賭博機具有較低的平均值而且方差也比較大,第2個賭博機具有較高的平均值和較小的方差,第3個賭博機具有更高的平均值和更小的方差。


可以看到關於賭博機的獲獎概率分佈的資訊被編碼為三個分佈。每個分佈具有遞增的平均值和遞減的方差。因此,我們不太確定獎勵期望值為0.1的真實獎勵率,最可靠的是獎勵期望值為0.4的賭博機。因為賭博機的選擇是通過對分佈進行抽樣來進行的,所以分佈期望值是0.1的賭博機的搖臂也可能被拉動。這個事件會發生在第2個賭博機和第3個賭博機的取樣樣本獎勵值異常小,而且第1個賭博機的取樣樣本異常大時,相應程式碼如下(陳運文 達觀資料):


640?wx_fmt=jpeg


總結


A/B測試和貝葉斯賭博機的各自的優點和侷限是:兩者有各自適用的場景,也驗證的變數數量也各不相同,具體如下表。


640?wx_fmt=jpeg


此外,兩個方法的收斂速度也很不一樣。在A/B測試中是指獲得統計意義,在貝葉斯賭博機中是指累積遺憾值不再增加。以本章最開始的網站優化為例,首先請注意,任何行為的改變可能是微小的(<0.01),而我們已經知道貝葉斯賭博機相比大的改變提升,需要更多的收斂時間。如果加了多種選擇,在同一個實驗中測試多種登陸頁面,將更加會影響收斂速度。假如使用者變化導致的底層分佈變的比模型收斂更快呢?比如,季節趨勢,銷售或者其他因素可能會影響。


640?wx_fmt=jpeg


顯然,收集的資料越多,對效果的潛在變化的把握度就越高。當2個組劃分本身就存在統計差異時,通過多臂賭博機而不是A/B測試的方法可以從概率上修正我們選擇的分佈。本文還重點介紹了z檢驗(z-test)的數學知識,因為其構成了A/B測試的統計理論基礎。


關於作者

陳運文 達觀資料 CEO。復旦大學博士,知名計算機技術專家,國際計算機學會(ACM)和電子電器工程師學會(IEEE)會員,中國計算機學會(CCF)高階會員,上海浦東“百人計劃”專家和政協委員,在人工智慧領域有30餘項國家發明專利,曾擔任盛大文學首席資料官、騰訊文學高階總監、百度核心技術研發工程師。在機器學習、自然語言處理、搜尋推薦等領域有豐富的研究和工程經驗,成功帶領達觀資料成為中國文字智慧處理領域的領先企業。


招聘

新一年,AI科技大本營的目標更加明確,有更多的想法需要落地,不過目前對於營長來說是“現實跟不上靈魂的腳步”,因為缺人~~


所以,AI科技大本營要壯大隊伍了,現招聘AI記者和資深編譯,有意者請將簡歷投至:gulei@csdn.net,期待你的加入!


如果你暫時不能加入營長的隊伍,也歡迎與營長分享你的精彩文章,投稿郵箱:suiling@csdn.net


AI科技大本營讀者群(計算機視覺、機器學習、深度學習、NLP、Python、AI硬體、AI+金融方向)正在招募中,後臺回覆:讀者群,聯絡營長,新增營長請備註姓名,研究方向。


640?wx_fmt=gif


640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


☟☟☟點選 | 閱讀原文 | 檢視更多精彩內容

相關文章