ABTest流量分發(fā)和業(yè)界的一些做法經(jīng)驗
大家好,我是寶器!
流量為王的時代,如何精準的利用用戶的流量進行分析和產(chǎn)品的迭代?ABTest就是其中不可缺少的一環(huán),那么ABTest是什么呢?下面來一層一層揭開它神秘的面紗。
0.流量分發(fā)
在互聯(lián)網(wǎng)流量的分發(fā)模式中,主要的兩種分發(fā)模式為:
中心化:平臺負責(zé)流量的分配,節(jié)點的流量來自平臺分配,平臺擁有流量的控制權(quán),比如像淘寶、京東、美團等互聯(lián)網(wǎng)產(chǎn)品都是一個中心化的流量分發(fā)模式 去中心化:相對于中心化而言,去中心化模式并不負責(zé)流量的分配,節(jié)點的流量需要自己獲取,節(jié)點本身擁有流量的控制權(quán),其中典型的產(chǎn)品是微信,張小龍在闡述微信公眾平臺的八大觀點時,就提到說“微信要打造的是一個真正的去去中心化系統(tǒng),不會提供一個中心化的流量入口來給所有的第三方平臺”
因為本文主要介紹的是ABTest,所以針對去中心化的模式就不展開敘述,主要聊一下中心化模式。
基于不同的流量分發(fā)模式,流量分發(fā)的方式包括:搜索分發(fā)、算法分發(fā)、社交分發(fā)、人工分發(fā)、付費分發(fā),其對應(yīng)的產(chǎn)品如下所示,其中除了社交分發(fā)是屬于去中心化的模式,其他的均屬于中心化的流量分發(fā)方式,可見中心化分發(fā)方式的廣泛性。

其中搜索分發(fā)和算法分發(fā)應(yīng)該是做算法同學(xué)接觸最多的了,因為搜廣推的場景下流量的珍貴性和嚴謹性,是我們算法策略迭代的基石。
在互聯(lián)網(wǎng)行業(yè),無路是構(gòu)建搜索、廣告、推薦系統(tǒng),還是智能營銷等場景,其實都是圍繞著用戶流量進行不同的實驗,這其中流量的分發(fā)顯得就格外的重要,因為我們要基于不同的流量,進行各項指標(biāo)的監(jiān)控和對比,繼而決策算法策略改進的方法。
而流量分發(fā)中一個很重要的概念就是ABTest(AB實驗),那么什么是ABTest呢?我們往下看。
1.ABTest介紹
1.1 ABTest來源
ABTest的前身是隨機對照試驗-雙盲測試,是「醫(yī)療/生物試驗將研究對象隨機分組,對不同組實施不同的干預(yù),對照起效果」。
雙盲測試中病人被隨機分成兩組,在不知情的情況下分別給予安慰劑和測試用藥,經(jīng)過一段時間的實驗后再來比較這兩組病人的表現(xiàn)是否具有顯著的差異,從而決定測試用藥是否真的有效。
2000年谷歌工程師進行了第一次AB Test,試圖確定在搜索引擎結(jié)果頁面上顯示的最佳結(jié)果數(shù)量。后來AB測試不斷發(fā)展,但基礎(chǔ)和基本原則通常保持不變,2011年,谷歌首次測試后11年,谷歌進行了7000多次不同的AB測試。
12年奧巴馬競選網(wǎng)站的樣式,通過AB Test 找到了更能吸引募捐,幫助奧巴馬贏得了更高的募捐金額。
1.2 ABTest描述
關(guān)于ABTest并沒有一個官方的定義或者怎么樣,因為從名字上我們就可以知道其大概的表述含義,每個人理解的都相差無幾。維基百科上給ABTest下了一個定義為:
A/B testing is a way to compare two versions of a single variable, typically by testing a subject's response to variant A against variant B, and determining which of the two variants is more effective.
其實通俗來講,ABTest就是比較兩個事物好壞的一套方法論。比如某個平臺將不同的用戶分成不同的組,同時測試不同的方案,通過用戶反饋的真實數(shù)據(jù)來找出哪一個方案更好。這解決的是“多種方案需要拍腦袋確認哪一種更好的問題”。
1.3 ABTest特性
對于ABTest,有哪些特性呢?如下描述
先驗性:ABTest 是一種“先驗體系”,屬于預(yù)測型結(jié)論(與其相對的是后驗型的經(jīng)驗歸納)。同樣是一個方案是否好壞:ABTest 通過小流量測試獲得具有代表性的實驗結(jié)論,來驗證方案好壞后再決定是否推廣到全量;后驗型則是通過發(fā)布版本后的版本數(shù)據(jù)對比總結(jié)得到 并行性:是指支持兩個或以上的實驗同時在線,并需要保證其每個實驗所處環(huán)境一致。并行性極大的降低了多實驗的時間成本 科學(xué)性:ABTest是用科學(xué)的方式來驗證方案,科學(xué)性體現(xiàn)在流量分配的科學(xué)性、統(tǒng)計的科學(xué)性。記得在開篇提到的“AB測試的前身是隨機對照實驗,醫(yī)療/生物實驗將研究對象隨機分組,對不同組實施不同的干預(yù),對照起效果”,這要求ABTest將相似特征的用戶均勻的分派到實驗組別中,確保每個組別的用戶特征相同
1.4 ABTest目的
一些通用目的為:
減少發(fā)布新功能或者改版的風(fēng)險,比如某個產(chǎn)品需要進行界面的改版,在沒有進行ABTest的情況貿(mào)然切換到新版,如果引發(fā)用戶流失、相關(guān)指標(biāo)的下降,帶來的后果是非常嚴重的。 收集用戶的數(shù)據(jù),基于數(shù)據(jù)了解平臺用戶的偏好,現(xiàn)在很多功能的改動,都是抄襲競品的變化,看對手動了,沒有去思考對方為什么這么改動,是否適合我們的用戶,經(jīng)過多次AB測試后,能讓我們更加了解自己的用戶偏好,用戶群的畫像特征,也更利于下一次改版 真正的用數(shù)據(jù)幫助決策,通過AB實驗的效果數(shù)據(jù),決定策略的迭代和更新
在做推薦算法的過程中,我們也離不開ABTest,這樣的背景下,ABTest的目的主要是評估優(yōu)化后策略算法的效果,如果我們優(yōu)化的一個策略相對于基準組是正向且顯著的,那么就可以將該策略進行推全。
1.5 ABTest局限
ABTest雖然強大,但卻不是萬能的,因為ABTest是驗證方案、想法、策略的有效性,而不是憑空去創(chuàng)造一個方案、想法、策略。
知乎上有一個關(guān)于ABTest的描述極其的準確,分享給大家:
你可以用A/B測試讓你在已經(jīng)到達的山上越來越高,但你不能用它來發(fā)現(xiàn)一座新的山脈。如果你的產(chǎn)品真正需要的是一個完整的改造,那么A/B測試可能做不到
同時字節(jié)跳動創(chuàng)始人張一鳴在清華經(jīng)管學(xué)院,對問題“PM是否可以產(chǎn)品設(shè)計上是否更多的依賴ABtest而非直覺?”的解答,也準確的描述ABTest的意義:
我們認為這和ABtest同樣重要。我們反對從邏輯到邏輯,從邏輯到邏輯,很容易失之毫厘謬以千里。有一手的體驗?zāi)軒臀覀冞h離偏差,我們愿意把用戶的感受、體會帶到公司。我們?nèi)蚧牡谝患虑槭呛M庥脩舴答仯峁┞?lián)系方式,讓用戶可以直接聯(lián)系到我們。PM是需要sense的,AB的science可以用來的降低在細節(jié)層面的精力付出。
ABTest是有開發(fā)成本的,一個公司想要打磨出一個優(yōu)秀的ABTest平臺必定要投入大量的精力、人力。
ABTest的數(shù)據(jù)只有現(xiàn)象,沒有詳情。它可以給出實驗組比對照組的效果好現(xiàn)象,但無法給出過程數(shù)據(jù)。測試相對復(fù)雜的方案,ABTest無法表述出具體是哪個方面呈現(xiàn)出了優(yōu)勢。
所以說ABTest并不是萬能的,但是在做產(chǎn)品的過程中離開ABTest也是萬萬不能的。
2.產(chǎn)品發(fā)展到哪個階段需要ABTest
上面針對ABTest做了詳細的介紹,那么在針對一個產(chǎn)品做到什么程度需要ABTest呢?當(dāng)然有精力、能力的團隊可以在產(chǎn)品的一開始就進行ABTest平臺的建設(shè)和利用,但是大多數(shù)團隊和產(chǎn)品在產(chǎn)品的出去階段并沒有能力去建設(shè)自己的ABTest平臺。
所以這個答案并不是一概而論的,一個比較通常的理解是當(dāng)產(chǎn)品在初期階段、或者是月活只有幾十萬的級別并不需要搭建復(fù)雜的ABTest平臺,但是這并不說明不需要進行ABTest,可以利用一些簡單的做法進行ABTest,比如利用用戶的唯一ID做簡單的Hash進行測試,或者一開始設(shè)計用戶ID時進行自增設(shè)計,這種情況下可以利用ID的尾數(shù)進行簡單的分桶測試。
當(dāng)產(chǎn)品的月活達到百萬級別時,這時候就需要開始搭建自己的ABTest平臺了,這時候月活已經(jīng)到達了一定的規(guī)模,需要對流量進行控制和有效的利用,基于此來進行產(chǎn)品的迭代和策略的更替。
當(dāng)產(chǎn)品的月活達到千萬、億級別時,這時候自己公司的ABTest平臺應(yīng)該是達到了一個比較完善和精準的狀態(tài)了,因為國內(nèi)用戶的流量價值比較高,這時候需要進行可靠的、精準的分發(fā)和測試。
當(dāng)然上述只是筆者自己的觀點,不過大多數(shù)互聯(lián)網(wǎng)公司的產(chǎn)品是符合這個發(fā)展規(guī)律的。針對一些大平臺孵化的一些小產(chǎn)品,可能在產(chǎn)品的初期階段就會進行精準的ABTest,因為已經(jīng)有成熟的內(nèi)部平臺可以使用了。
3.ABTest流量切分方式
這里結(jié)合推薦系統(tǒng)來介紹ABTest流量的切分方式,將推薦系統(tǒng)簡化為召回和精排兩個過程。
ABTest流量切分主要有兩種方式:
水平的切分方式 樹形的切分方式
水平的切分方式比較容易理解:比如我們有100%的流量,將其中的50%流量分給召回,把剩下的50%流量分給精排。在這種情況下進行試驗,當(dāng)某個試驗的指標(biāo)為正向時,進行推全,然后在該部分流量上繼續(xù)進行別的試驗,這種流量切分方式比較直觀,可以看到定向組合流量下得到的試驗效果,但是不夠靈活,流量的利用程度不高。
樹形的切分方式則是將推薦系統(tǒng)中的不同模塊進行分層,比如召回是一個層,精排是一個層,因為召回出來的結(jié)果需要匯聚之后送到精排層做排序。這種情況下每層都是100%的流量,可以進行流量的充分利用。
一般情況下,采用的流量切分方式為:樹形的切分+水平的切分。
比如召回100%的流量,召回中又分為多路召回,在召回層中我們可以采樣水平的切分方式,將流量切分為若干個桶,比如1-10,然后選定基準桶(假設(shè)編號為1),然后在剩下的2-10個桶里進行不同的召回試驗。同樣可以將精排層的流量劃分為若干個桶,每個桶進行不同的模型試驗、不同的特征試驗、不同的參數(shù)試驗等。
4.ABTest平臺應(yīng)該包含哪些功能
一個標(biāo)配的ABtest平臺應(yīng)該包含哪些功能呢?這里主要借鑒的OPPO的ABTest平臺知識,詳細原文可以閱讀:OPPO在A/B實驗分析平臺的建設(shè)與實踐
4.1 ABTest的核心能力
從A/B實驗的形態(tài)上來看,可以分為算法類、產(chǎn)品功能類、頁面展示類等實驗。從集成端看,可以分為服務(wù)端、客戶端、網(wǎng)關(guān)等。
站在實驗生命周期的角度考慮,一個完整的實驗流程一般是創(chuàng)建實驗 —> 做實驗 —> 實驗效果分析 —> 調(diào)整實驗的閉環(huán),流程的示意圖如下。

整個核心流程主要涉及三個階段,創(chuàng)建實驗和調(diào)整實驗可歸結(jié)為同一階段,不同的階段各自可以相互獨立又相關(guān),每個階段需要提供的能力如下:
創(chuàng)建/編輯實驗需要提供實驗相關(guān)的管理,如參數(shù)、變量、版本控制、回滾,流量占比配置等一系列能力,可以抽取出一個實驗管理模塊 做實驗階段主要涉及分流和埋點數(shù)據(jù)上報,分流主要通過SDK來實現(xiàn),同時還需要一些服務(wù)化的能力提供些外部接口以及SDK的數(shù)據(jù)交互,埋點數(shù)據(jù)主要是實驗數(shù)據(jù)的回收 實驗效果分析主要涉及指標(biāo)體系的構(gòu)建和實時表報的開發(fā)等一整套olap的能力
4.2 實驗管理
試驗管理可以理解為一個易操作的web系統(tǒng),除了管理試驗外,需要包含一些相關(guān)的配置功能:業(yè)務(wù)線管理、賬號管理、權(quán)限管理等。而實驗管理主要涉及:
應(yīng)用:是管理所有實驗的單元體,一個應(yīng)用可以創(chuàng)建多個AB實驗,應(yīng)用也可以理解為一個個的實驗場景,比如首頁推薦、猜你喜歡 層:是應(yīng)用內(nèi)流量的橫向劃分,可以創(chuàng)建多層,每層是相同的流量,通過算法實現(xiàn)層與層的流量正交,層中包含實驗,創(chuàng)建實驗需要指定實驗層,一個層同時只能做一個實驗,因為要控制變量 指標(biāo):在每一個AB測試實驗中,用于對比不同實驗組優(yōu)劣的數(shù)據(jù)就是指標(biāo)(這里需要注意的是分析相關(guān)指標(biāo)需要有相應(yīng)的數(shù)據(jù)上報) 實驗組:實驗組和對照組是一組相對的概念,AB實驗通常是為了驗證一個新策略的效果,對照組一般又稱base組
4.3 分流服務(wù)
分流服務(wù)主要解決流量控制和切分,主要參考2010年Google論文《Overlapping Experiment Infrastructure:More, Better, Faster Experimentation》確定了流量模型,劃分了放量域、非重疊域、重疊域,重疊域支持分層,具體的了流量模型如下圖:

確定流量模型后,還需要解決如何分流,即一個用戶發(fā)起一個請求,如何命中實驗?這涉及分流算法、用戶標(biāo)識、標(biāo)簽、流量比例等一系列因素,這里為了突出分流的過程,結(jié)合分流算法和用戶標(biāo)識,抽象出了分流樹。如下圖,圖示的灰綠色箭頭為一次請求的完整分流過程,即一次分流,可能命中多個實驗或者一個實驗,也可能沒有任何命中,圖中的hash屬于一種分流算法,目前除了支持Hash算法,還支持隨機算法,也可讓業(yè)務(wù)方自定義分流算法

服務(wù)主要以SDK的方式提供服務(wù),接入方只需要集成相應(yīng)語言的SDK即可,這樣可以避免不必要的網(wǎng)絡(luò)請求,保障分流的穩(wěn)定性和響應(yīng)延遲。
4.4 實驗效果
實驗效果主要是在進行實驗后,針對AB實驗差別的可視化能力,為了方便業(yè)務(wù)團隊快速的分析,需要構(gòu)建一些基礎(chǔ)的指標(biāo)體系,比如:
基礎(chǔ)指標(biāo):PV、UV、人均次數(shù)、滲透率、分位數(shù)、去重 自定義組合指標(biāo)
數(shù)據(jù)回收與分析
實驗數(shù)據(jù)的回收,主要使用公司的統(tǒng)一埋點SDK實現(xiàn),有客戶端將實驗ID映射帶埋點事件,隨埋點上報到數(shù)據(jù)中心,然后使用flink從kafka消費入庫到分析引擎ClickHouse,為了達到數(shù)據(jù)延遲在1分鐘以內(nèi),數(shù)據(jù)在flink完成hash分片,然后直接寫到ClickHouse本地表。
5.ABTest指標(biāo)選擇與有效性檢驗
當(dāng)設(shè)計好ABTest實驗時,最重要的兩點就是實驗評判指標(biāo)的選擇和實驗結(jié)果的有效性檢驗。
5.1 評判指標(biāo)選擇
做AB實驗之前,需要明確測試的目的,根據(jù)目標(biāo)去制定合理的指標(biāo)。
比如針對產(chǎn)品的首頁改版,我們更加關(guān)注的是老用戶的留存率,因為不同的頁面對于老用戶的心智影響比較大,老用戶的行為習(xí)慣已經(jīng)被養(yǎng)成了,當(dāng)改動頁面時老用戶可能會因為不習(xí)慣新頁面的變化而流失。所以在做這類實驗時,要盡量避免大的改版,而且改版后給予的流量不要太大,否則影響會比較大。
比如電商產(chǎn)品的詳情頁改版,其目的是提高商品詳情頁的轉(zhuǎn)化率,因此確定指標(biāo)就需要考慮過程性指標(biāo),也要考慮結(jié)果指標(biāo),當(dāng)然結(jié)果指標(biāo)是最重要的。
過程性指標(biāo):商品詳情頁的跳出率、平均停留時長,頁面功能的點擊率
結(jié)果指標(biāo):加購或者立即購買的轉(zhuǎn)化率,支付金額、支付人數(shù)
比如:社區(qū)類產(chǎn)品增加了一個模塊,目的是增加用戶的粘性
過程性指標(biāo):新模塊的曝光點擊情況,舊模塊的曝光人數(shù)、舊模塊的點擊人數(shù)來判斷新增模塊對舊模塊的負面影響
結(jié)果指標(biāo):用戶總時長、用戶人均時長
最終根據(jù)這些指標(biāo)進行評價功能的好與壞,來決定新功能是否要保留上線
當(dāng)對于一些策略的AB實驗時,我們更關(guān)注的則是相關(guān)的業(yè)務(wù)KPI指標(biāo),比較策略算法都是為了業(yè)務(wù)服務(wù)的。經(jīng)常關(guān)注的一些指標(biāo)比如:CTR、CVR、CXR、交易額、RPM等。
5.2 有效性檢驗
當(dāng)產(chǎn)出ABTest的結(jié)果時,如何去判斷我們的結(jié)果是否有效呢?
首先需要保證的是我們流量比例,即樣本的量級。假設(shè)AB兩組實驗的用戶具有相同的標(biāo)準差
,根據(jù)公式,帶入n1,同時根據(jù)假設(shè)p值和a值,推導(dǎo)出需要的最低用戶數(shù)。

其次是假設(shè)檢驗,在適當(dāng)?shù)臈l件下,中心極限定理告訴我們,大量相互獨立隨機變量的均值適當(dāng)標(biāo)準化后依分布收斂于正態(tài)分布,AB測試采用雙樣本對照的z檢驗公式,顯著性上,根據(jù)z檢驗算出p值,通常我們會用p值和0.05比較,如果p<0.05,我們認為AB沒有顯著差異,置信問題上,對一個概率樣本的總體參數(shù)進行區(qū)間估計的樣本均值范圍,他展現(xiàn)了這個均值范圍包含總體參數(shù)的概率,這個概率稱為置信水平。
從另一個角度來說,AB兩個實驗組之間即使有差異,也不一定能被觀測出來,必須保證一定的條件才能使你能觀測出統(tǒng)計量之間的差異;否則,結(jié)果也是不置信的。而這個條件就是開頭提到的問題,樣本數(shù)量問題。
關(guān)于假設(shè)檢驗,這里就不展開表述了,具體可以參考知乎文章:假設(shè)檢驗——這一篇文章就夠了
6.業(yè)界的一些ABTest經(jīng)驗
6.1 ABTest的兩種形式
據(jù)筆者了解到,業(yè)界ABTest的實現(xiàn)基本有兩種做法:
提前劃分好流量進行實驗 動態(tài)配置流量進行實驗
第一種就是提前分配好流量,對應(yīng)的是「流量切分方式」中的水平切分方式,比如將所有的流量劃分為20個桶,然后選定基準的試驗桶,在剩余的各個桶內(nèi)進行AB實驗,當(dāng)實驗效果是顯著正向時,將該實驗進行推全(即在每個實驗桶都進行配置,或者做一個前置的控制)。
第二種則是根據(jù)需要動態(tài)的劃分流量,這里可以區(qū)分層(比如推薦系統(tǒng)中的召回、粗排、精排等),也可以不進行層的區(qū)分。當(dāng)進行層的區(qū)分時就是樹形的流量切分方式+水平的切分方式,如果不進行分層,就是根據(jù)需要劃分5%或者10%或者其他占比的流量進行實驗。
針對第二種分層控制時,我們的召回有若干路,分別使用大些字母ABCD等表示,當(dāng)只有ABC三組召回時,可以進行配置的方式為:A:0-33,B:34-67,C:68-99,當(dāng)新增召回源D時,可以將陪配置修改為:A:0-24,B:25-49,C:50-74,D:75-99。依次類推。
這里還有一種特殊的ABTest形式,就是字節(jié)跳動的賽馬機制,不過這里是針對item的。其基本原理介紹如下:
冷啟動推薦:通過審核后,抖音會對實時在線用戶進行流量分桶,每桶按照總用戶量10%分配進行實驗推送,第一步叫冷啟動流量池曝光,比如你今天上傳一個視頻,通過雙重審核的作品,系統(tǒng)將會分配給你一個初始流量池:200-300在線用戶。不論你是不是大號,只要你有能力產(chǎn)出優(yōu)質(zhì)內(nèi)容,就有機會跟大號競爭 標(biāo)簽積累:分配的視頻流量再進行分配實驗組,每個實驗組按照5%比例分配,并為用戶貼上相近標(biāo)簽 加權(quán)推薦:把作品送量測試給首個實驗組用戶,根據(jù)用戶反饋的轉(zhuǎn)、評、贊、完播率等計算作品基數(shù),決定是否進行第二輪推薦及推薦力度。即播放量=A完播率+B 點贊率+C* 評論率+D* 轉(zhuǎn)發(fā)率。 加大流量推薦:達到通過推薦基數(shù),繼續(xù)把作品推送下一個分配實驗組進行測試 頂流推薦:進入精品推薦池,大規(guī)模曝光,一旦進入精品推薦后,人群標(biāo)簽就被弱化了,幾乎每個抖音用戶都會刷到
6.2 其他公司的ABTest做法
技術(shù)揭秘大眾點評大規(guī)模并行AB測試框架Gemini
教你如何對產(chǎn)品做AB測試
7.參考
7.1 文章
流量的概述系列:流量的分發(fā) 從數(shù)據(jù)產(chǎn)品經(jīng)理視角,聊聊科學(xué)的AB Test OPPO在A/B實驗分析平臺的建設(shè)與實踐 流量為王:ABTest流量分層分桶機制 假設(shè)檢驗——這一篇文章就夠了
7.2 論文
Overlapping Experiment Infrastructure: More, Better, Faster Experimentation
·················END················· 推薦閱讀
歡迎長按掃碼關(guān)注「數(shù)據(jù)管道」

