增長黑客AB-Testing系統(tǒng)設計
編輯導語:增長黑客這一概念起源于美國互聯(lián)網(wǎng)行業(yè),最早由 Sean Ellis 提出。近年來,增長黑客的概念傳到國內(nèi),其核心是驅(qū)動用戶飛漲增長黑客,指的是創(chuàng)業(yè)型團隊在數(shù)據(jù)分析基礎上,利用產(chǎn)品或技術手段來獲取自發(fā)增長的運營手段。本文作者詳細的分析了增長黑客的AB-Testing系統(tǒng)應該如何設計,希望對你有所幫助。
一、AB-test思路
數(shù)據(jù)驅(qū)動概念興起的同時,AB-test也同步出現(xiàn)在大家的視線中,各互聯(lián)網(wǎng)大廠率先引進了AB-test系統(tǒng),希望通過循環(huán)的測試,上線最符合公司客群的產(chǎn)品。
這一理念一出引發(fā)行業(yè)內(nèi)各個公司的效仿,各種宣導紛至而來,那么什么是AB-test?什么樣的公司能迅速構建出AB-test系統(tǒng)?我們今天來一起聊一下。
1. 什么是AB-test?
攜程的大佬們曾給出一個定義:AB試驗可以簡單的認為是傳入一個實驗號和用戶分流ID到AB試驗分流器,分流器吐出分流版本A、B、C、D等,截取一部分應用流量,落地某一段時間的分流數(shù)據(jù),進而分析各個版本的優(yōu)劣,決定啟用新版本還是沿用老版本的過程。
這一定義大家能不能理解呢?我們用更通俗的語言做一下解讀:
首先:試驗的目的是為了決策新開發(fā)的兩個或兩個以上的版本該上線哪一個的問題——即當有較多的版本選擇時可以先測一把,讓數(shù)據(jù)告訴我們哪一個方案比較適合我們公司的客戶。
大家有沒有遇到經(jīng)驗失效的時候,就是我們按照自己的經(jīng)驗設計出來的產(chǎn)品、活動,客戶并不買賬,失效的原因有很多,其中一個比較常見的原因就是經(jīng)驗失效,即我們培養(yǎng)起來的經(jīng)驗往往是根據(jù)之前公司或者歷史數(shù)據(jù)形成的。
問題在于新公司/當下時間中客群發(fā)生了變化,我們之前的經(jīng)驗未必完全符合現(xiàn)在的客群,這也就凸顯出了AB-test的價值,AB-test是根據(jù)本公司現(xiàn)在的客群進行的對照試驗,可以直觀的表達出客戶需要什么樣的產(chǎn)品。
其次:試驗用到的一個重要組件是分流器,分流器有什么用處呢?
顧名思義——分流用的,就是通過一定的規(guī)則將APP中隨時流動的數(shù)據(jù)分成多個版本,客戶進入APP后會自動分配到各個版本中,各個版本對應開發(fā)的新舊版本,進行穩(wěn)定測試。
分流器中常用的方法是對客戶的session/cookie進行hash運算,然后將運算結(jié)果取模mod(即取余運算,不清楚的看官可以百度一下)。通過取模后的值進行分流,分流的過程涉及正交、互斥試驗的設計,其中細節(jié),我們下文中會詳細描述。
其三:就是試驗效果評估的過程,AB-test的兩個重點之一就是效果評估(另一個就是上面的分流器),如何評估一個試驗是否成功?試驗1的UV大于試驗2的UV是否就說明試驗1是好的?
這其中就涉及到了統(tǒng)計中的各種檢驗知識,我們會在下文原理部分詳細描述。
現(xiàn)在我們從簡到繁了解一下AB-test的試驗思路,假設一個客戶來到我們的APP,其在AB-test中的數(shù)據(jù)訪問可以如下圖描述:
看圖聽故事如下:
- 一個客戶進入到我們的APP時,會在客群的部分做一次篩選,即試驗是否是有劃分客群,如果有客群劃分,則需要判斷新來的客戶是否命中我們的試驗客群;
- 第二步我們要判斷需要進行什么類型的試驗,正交還是互斥?以及此次試驗需要切分多少流量,5%還是10%;
- 經(jīng)過了客群識別和流量切分后,我們的客戶來到了試驗分組部分,系統(tǒng)采集客戶訪問的cookie/session信息計算出唯一hash值,并對這一hash值做mod處理;
- mod處理之后的數(shù)據(jù)會被分到t個桶中的某一個,然后再根據(jù)一定的比例和算法將t個桶中的數(shù)據(jù)分成三組,即:A組、A組和B組,假設分流比例為:1/3,1/3,1/3;
- A-A組即為舊版本對照組,用來檢驗分流是否有效,如果A-A組不顯著,說明數(shù)據(jù)不受系統(tǒng)性因子影響,分流是有效的;A-B組即為新舊版本的對照組,其中B組為新版本;
- A-A-B組的數(shù)據(jù)比較即為試驗數(shù)據(jù)分析,分析人員借此完成試驗的效果檢驗,確定試驗是否顯著。
看完上面這一串介紹,有沒有一種原來如此的感覺?
AB-test的基本流程可以是上圖的樣式,但是充其量只能作為一個簡圖,接下來我們一點點的抽絲剝繭,還原AB-test產(chǎn)品的真相:
2. 什么是正交試驗?什么是互斥試驗?
正交試驗:每個獨立試驗為一層,為保證各層之間不相互影響,一份流量穿越每層試驗時,會再次隨機打散,且隨機效果離散,這一過程叫正交,這樣的試驗叫正交試驗。
正交試驗能最大化的保證各層試驗相互獨立,確保各個試驗不會相互影響。
我們用圖形來表示正交,如下圖:
X層的全部流量隨機打散,然后進入到Y(jié)層,看到的結(jié)果即為Y層的流量為X層流量重組之后的再分配,兩層之間相互獨立。
互斥試驗:即為在同一層中拆分流量,且不論如何拆分,不同的流量是不重疊的。
互斥試驗是在流量足夠的情況下進行的分流策略,各個試驗之間也不會相互影響。我們同樣用圖形來表示互斥,如下圖:
X層的流量會各自獨立的分到Y(jié)層,相互之間不受影響。
3. 如何計算最小樣本量?
最小樣本量的計算,我們會在下文原理篇詳細講解~
4. 多個試驗同時發(fā)生時如何分層?
前面我們講解了正交和互斥兩個原則,接下來我們介紹一下在正交和互斥的原則下該如何設計試驗分層?
正交、互斥兩種試驗的引用是為了能夠更充分、更高效的使用流量,實際試驗中往往是多組試驗同時存在,既有正交,又有互斥,如下圖:
上圖中的分組情況可以看出:域1和域2互斥拆分流量,域2中的流量串過1-1層、1-2層、1-3層,進入到2層和3層,1-1層、1-2層、1-3層是互斥的,1層、2層、3層是正交的,上層的流量大于等于下層。
從使用場景上看,1層、2層、3層可能分別為UI層、搜索結(jié)果層、廣告結(jié)果層,這幾個層級基本上沒有任何的業(yè)務關聯(lián)度,即使共用相同的流量,也不會對實際的業(yè)務造成影響。
但是如果不同層之間所進行的試驗相互關聯(lián),就需要進行互斥試驗。
例如:1-1層是修改頁面按鈕上文字的顏色,1-2層是修改按鈕顏色,如果按鈕和文字顏色一致,估計按鈕就不可用了。試驗的基本原則是控制變量,即盡可能的保證每次試驗只有一個變量,不要讓一個變量的試驗動態(tài)影響另一個變量試驗,否則試驗就會失去公正性。
另外,如果我們覺得一個試驗可能會對新老客戶產(chǎn)生完全不同的影響,那么就應該對新客戶和老客戶分別展開定向試驗,觀察結(jié)論。
無論從層級上還是單層的分流上都被充分應用,流量的使用效率很高,但是,隨著試驗越來越多,對試驗的管理也會顯得越來越重要,往往后期會需要專門的人員進行管理。
5. Hash分流過程是啥樣的?
分流的方式有很多種,筆者這次來和大家聊一下hash的算法如何實現(xiàn)分流效果。
AB-test又稱作是桶測試,為什么叫桶測試呢?關鍵就在于分流的過程,我們先解釋一下桶和試驗組的關系:
假設試驗有12個人,我們對這12個人進行編號,編號方法可以使用cookie,也可以使用session,總之獲取到這12個人的唯一編碼。
當獲取到唯一編碼之后我們就可以開始分流了,我們對每個人的唯一編碼進行hash處理,常規(guī)使用MD5進行hash計算,這樣計算的好處在于MD5幾乎不會重復,分流效果較好。
計算好的hash值需要進行mod處理,圖中有6個桶,我們就用6進行mod處理, 12個人按照余數(shù)分散到六個桶里面,原則上12個人的分流是隨機的分散到各個桶里面,很難保證每個桶里的人數(shù)一致。
但是從統(tǒng)計學的角度上講,當數(shù)據(jù)量足夠大時,數(shù)據(jù)會均勻的分散到各個桶里面。
桶分流完成后,我們需要處理的就是將這些桶平均分成兩組,原則是保證隨機性和平均分配,聰明如你,應該已經(jīng)明白分流的原理了吧?
6. Hash分流是否能保證樣本在A-A-B三組中平衡分布?
三組數(shù)據(jù)的分流原則上需要盡可能平衡,即各個特征都能均勻的分布在三組試驗中,這樣才能符合AB-test控制變量的原則。
生化試驗中控制變量是一個較為簡單的問題,不管是脊蛙反射還是腸胃蠕動試驗;但是社會學中的試驗,控制變量卻異常復雜,因為面對大量人群,很難通過隨機分配保證各個特征的平衡,而且有些隱含變量很難被發(fā)現(xiàn),也難以做到平衡。
這樣的問題稱在生化試驗中稱作是系統(tǒng)誤差,在互聯(lián)網(wǎng)AB-test中則會引發(fā)辛普森悖論。
生化試驗中往往通過重復試驗來避免,互聯(lián)網(wǎng)下的AB-test很難進行重復試驗,因為無法讓一個人即使用A版本,又使用B版本,串行試驗又會添加時間因素,所以只能采用其他的方式解決這個問題。
那么,什么是辛普森悖論呢?
我們用一個真實的醫(yī)學 AB 測試案例來說明這個問題,這是一個腎結(jié)石手術療法的 AB 測試結(jié)果:
看上去無論是對于大型結(jié)石還是小型結(jié)石,A療法都比B療法的療效好。但是總計而言,似乎B療法比A療法要好。
這個AB測試的結(jié)論是有巨大問題的,無論是從細分結(jié)果看,還是從總計結(jié)果看,都無法真正判斷哪個療法好。
那么,問題出在哪里呢?
這個AB測試的兩個實驗組的病歷選取有問題,都不具有足夠的代表性。
參與試驗的醫(yī)生人為的制造了兩個試驗組本身不相似,因為醫(yī)生似乎覺得病情較重的患者更適合A療法,病情較輕的患者更適合B療法。所以下意識的在隨機分配患者的時候,讓A組里面大結(jié)石病歷要多,而B組里面小結(jié)石病歷要多。
更重要的問題是:很有可能影響患者康復率的最重要因素并不是療法的選擇,而是病情的輕重!換句話說,A療法之所以看上去不如B療法,主要是因為A組病人里重病患者多,并不是因為A組病人采用A療法。
所以,這一組不成功的AB測試,問題出在試驗流量分割的不科學,主要是因為流量分割忽略了一個重要的“隱藏因素”,也就是病情輕重。
正確的試驗實施方案里,兩組試驗患者里,重病患者(也就是AB-test中的特征值)的比例應該保持一致。
我們再來聊一個互聯(lián)網(wǎng)領域的場景:我們對APP上一個按鈕進行了顏色調(diào)整,需要比較一下顏色調(diào)整前后用戶UV點擊率是否提高?
經(jīng)過一段時間的試驗,我們得到了兩組試驗的數(shù)據(jù),為了說明辛普森悖論的問題,我們單獨抽離出了性別作為比較。
原因有二:一是性別在這次試驗中是重要特征;二是這一特征的數(shù)據(jù)不均衡,剛好出現(xiàn)了辛普森問題。計算出了兩組試驗的點擊率,如下:
數(shù)據(jù)中我們發(fā)現(xiàn):單獨看這一試驗,無論是女性特征和男性特征,數(shù)據(jù)表現(xiàn)都是A組中較好。但是,總計卻是B組效果較好,其中的差異我想大家已經(jīng)清楚了,性別特征并沒有均衡的分布在兩個試驗組中。
這個解決方法就是——定向試驗。
在進行試驗之前,先做一次試驗分析,確定對試驗影響較大的因素,然后通過分流的權重設置來均衡各個組之間的特征差異,因素確認用到的方法較多,比如GBDT等等。
如下圖:
在進行試驗同時,可以實現(xiàn)各分組特征中的監(jiān)控。如果發(fā)現(xiàn)某一特征在某一組中偏小,就增加這一特征在這一組的分配權重,以保證特征一致性。
但是這樣也存在特征取舍的問題,具體就不展開來描述了,有興趣的小伙伴可以自行查詢一下。畢竟,能做到這一點的公司已經(jīng)很不錯了。
分層試驗,交叉試驗,定向試驗是我們規(guī)避辛普森悖論的有力工具。
規(guī)避辛普森悖論,還要注意流量動態(tài)調(diào)整變化的時候新舊試驗參與者的數(shù)據(jù)問題,試驗組和對照組用戶數(shù)量的差異問題,以及其他各種問題。
而優(yōu)秀的增長黑客,不會去投機取巧“制造數(shù)據(jù)”,而是認真思考和試驗,用科學可信的數(shù)據(jù)來指導自己和企業(yè)的決策,通過無數(shù)次失敗的和成功的AB測試試驗,總結(jié)經(jīng)驗教訓,變身能力超強的超級英雄。
二、AB-testing原理
統(tǒng)計計算主要應用在效果評估領域。
客戶經(jīng)過分流之后在各個試驗組中產(chǎn)生數(shù)據(jù),統(tǒng)計的作用即為查看對應組的樣本量是否達到最小樣本量,數(shù)據(jù)之間是否存在顯著性差異,以及進行差異大小的比較。
如下圖:
A-A-B三組數(shù)據(jù)觀察n天后,會產(chǎn)生3組數(shù)據(jù),我們接下來的任務就是計算這三組數(shù)據(jù)的統(tǒng)計效果,進而確定哪個方案效果好。
1. 如何計算最小樣本量?
最小樣本量是按照統(tǒng)計功效進行計算的,主要分兩類:絕對值類(例如:UV)和比率類(例如:點擊率)。
在試驗過程中,大部分場景是進行比率類指標的比較,單純的計算絕對值是沒有價值的;而且對于試驗效果來講,絕對值的比較可以轉(zhuǎn)化為比率的比較。
所以在計算過程中,我們統(tǒng)一成比率計算,以方便口徑統(tǒng)一和數(shù)值比較。
理論上,比率類最小樣本量計算:
例如:“XX提交”按鈕由紅色變?yōu)槌壬?,統(tǒng)計的指標是點擊UV轉(zhuǎn)化率UV_rate,測試時間是20200801~20200814,則計算“XX提交”按鈕的歷史月均值mean(UV_rate)為下面數(shù)據(jù)的均值avg(UV_rate):
注:此處的計算需要對統(tǒng)計學中的統(tǒng)計功效有所了解,閱讀有阻力可以補充一下“統(tǒng)計功效”的計算方法。
流程圖介紹:最小樣本量的作用是確定試驗是否有效,后管配置好對應的客群信息、開放流量占比、提升率等信息后,后臺需要進行“最小樣本量”的計算,并進行相關判斷,如下圖:
2. 如何計算試驗有效天數(shù)?
補充——統(tǒng)計功效:
確定好最小樣本量并實現(xiàn)分流、試驗上線之后,需要進行數(shù)據(jù)的有效天數(shù)需要進行相應計算:
試驗的有效天數(shù)即為試驗進行多少天能達到流量的最小樣本量。
當流量達到最小樣本量時,查看數(shù)據(jù)是否存在顯著性差異,如果不存在顯著性差異則繼續(xù)進行試驗,直到達到最大要求天數(shù);如果試驗仍然沒有達到顯著性,則確定兩組試驗不顯著,即沒有明顯差異。
計算過程如圖:
如果到達試驗最小天數(shù)且試驗樣本量>=最小樣本量n_per,則觀察試驗是否有顯著性,如果A-A試驗沒有顯著性且A-B存在顯著性(B>A),則表示試驗成功,否則試驗失敗。
如果到達試驗最小天數(shù)且試驗樣本量<最小樣本量n_per,則繼續(xù)進行試驗;
3. 判斷試驗天數(shù)是否到達試驗最大天數(shù)(t天):
如果到達試驗最大天數(shù)且試驗樣本量>=最小樣本量n_per,則觀察顯著性;如果到達試驗最大天數(shù)且試驗樣本量<最小樣本量n_per,則終止試驗并標注試驗失敗。
邏輯流程圖為:
通過每天的數(shù)據(jù)計算可以做出如上判斷,進而確定試驗進行的有效天數(shù)并計算出顯著性水平。
三、AB-testing工程化
經(jīng)過上面的描述,我們可以通過下面的兩張圖來了解一下在工程方面,AB測試系統(tǒng)是什么樣子的:
注釋:
- 根據(jù)需求設計好AB試驗之后,在AB測試系統(tǒng)配置好對應的策略;
- 將這一策略固化成文件,并推送到APP的AB系統(tǒng)SDK中;
- 客戶每次訪問APP,先掃描AB系統(tǒng)SDK中的策略文件,根據(jù)策略文件給客戶打標,分配對應的A、B版本;
- APP中根據(jù)策略呈現(xiàn)A、B版本的試驗內(nèi)容,并監(jiān)控客戶的操作行為以及訂單行為;
- 這一行為被記錄并上報到大數(shù)據(jù)環(huán)境中;
- 天在大數(shù)據(jù)中進行顯著性計算和最小樣本量的處理,得到對應的顯著性結(jié)果。
我們再來看一個詳細的系統(tǒng)數(shù)據(jù),如下圖:
目前為止,AB系統(tǒng)已經(jīng)介紹完成了,AB的結(jié)構深不可測,其中也需要經(jīng)常的更新和討論,歡迎大家關注溝通~
作者:野水晶體;個人公眾號:livandata
本文由 @野水晶體 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來自 Pexels,基于 CC0 協(xié)議
詳細的討論了辛普森悖論和解決方法 提出的定向?qū)嶒炗脴淠P蛠碓u估特征重要度并據(jù)此來平衡兩組間重要特征分布的做法,引人入勝 非常受啟發(fā)
馬
歡迎大家關注公眾號:livandata,內(nèi)容更全面詳細~
謝謝很干貨,不知道是否有機會聯(lián)絡一下。
企業(yè)的痛有三:一曰戰(zhàn)略,二曰組織,三即為產(chǎn)品,這其中,處處少不了增長~
看完后只是覺得樓主挺適合做學術研究的
為啥?全從原理入手?
硬核攻略,收藏+點贊+分享三連走起
感謝~