A/B測試怎么做?火山引擎A/B測試全流程實(shí)踐分享

為什么要做 A/B 測試

首先我們看一個(gè)案例。字節(jié)跳動有一款中視頻產(chǎn)品叫西瓜視頻,最早它叫做頭條視頻。為了提升產(chǎn)品的品牌辨識度,團(tuán)隊(duì)想給它起個(gè)更好的名字。經(jīng)過一些內(nèi)部調(diào)研和頭腦風(fēng)暴,征集到了西瓜視頻、奇妙視頻、筷子視頻、陽光視頻 4 個(gè)名字,于是團(tuán)隊(duì)就針對一共 5 個(gè) APP 名稱進(jìn)行了 A/B 實(shí)驗(yàn)。這個(gè)實(shí)驗(yàn)中唯一改變的是應(yīng)用市場里該產(chǎn)品的名稱和對應(yīng)的 logo,實(shí)驗(yàn)?zāi)康氖菫榱蓑?yàn)證哪一個(gè)應(yīng)用名稱能更好地提升“頭條視頻” APP 在應(yīng)用商店的點(diǎn)擊率。最后西瓜視頻和奇妙視頻的點(diǎn)擊率位列前二,但差距不顯著,結(jié)合用戶調(diào)性等因素的綜合考量后,最終決定頭條視頻正式更名為西瓜視頻。

通過這個(gè)案例可以看到,A/B 測試可以幫助業(yè)務(wù)做最終決策。結(jié)合案例的直觀感受,我們可以這樣來定義 A/B 測試:在同一時(shí)間對目標(biāo)受眾做科學(xué)抽樣、分組測試以評估效果。

A/B測試怎么做?火山引擎A/B測試全流程實(shí)踐分享

以上圖圖示為例,假設(shè)我們有 100 萬用戶要進(jìn)行 A/B 測試:

● 先選定目標(biāo)受眾,比如一線城市的用戶。

● A/B 測試不可能對所有用戶都進(jìn)行實(shí)驗(yàn),所以要進(jìn)行科學(xué)抽樣,選擇小部分流量進(jìn)行實(shí)驗(yàn)。

● 抽樣之后需要對樣本進(jìn)行分組,比如 A 組保持現(xiàn)狀,B 組的某一個(gè)因素有所改變。

● 分組之后在同一時(shí)間進(jìn)行實(shí)驗(yàn),就可以看到改變變量后用戶行為的變化。

● 再根據(jù)對應(yīng)實(shí)驗(yàn)?zāi)繕?biāo)的指標(biāo),比如點(diǎn)擊率的高低,來評估實(shí)驗(yàn)的結(jié)果。

以上就是我們對 A/B 測試的定義。目前,A/B 測試已被 Google、Facebook、亞馬遜等大型互聯(lián)網(wǎng)公司廣泛采用;字節(jié)跳動更是在 2012 年成立之初便開始使用 A/B 測試,公司內(nèi)部一直流傳一句話:一切皆可 A/B 測試。A/B 測試在字節(jié)跳動已是非?;A(chǔ)的設(shè)施和文化,目前,字節(jié)跳動累計(jì)已有 80W+ 的 A/B 實(shí)驗(yàn),日新增實(shí)驗(yàn) 1500+,同時(shí)運(yùn)行試驗(yàn) 1W+,服務(wù) 500+ 業(yè)務(wù)線。

那我們?yōu)槭裁匆?A/B 測試呢?我總結(jié)有 3 點(diǎn)原因:

● 風(fēng)險(xiǎn)控制:小流量實(shí)驗(yàn)可以避免直接上線效果不好造成損失。其次,實(shí)驗(yàn)迭代的過程中,決策都是有科學(xué)依據(jù)的,可以避免系統(tǒng)性的偏差。

● 因果推斷:我們相信 A/B 實(shí)驗(yàn)中的優(yōu)化和改變最終能影響到線上數(shù)據(jù)以及用戶的行為。在這個(gè)前提下,A/B 測試就是最好的因果推斷工具。

● 復(fù)利效應(yīng):A/B 測試是可以持續(xù)不斷進(jìn)行的實(shí)驗(yàn),即使一次實(shí)驗(yàn)提升的效果不大,但是長期下來復(fù)利效應(yīng)的積累會產(chǎn)生很大的變化和回報(bào)。

A/B 測試系統(tǒng)實(shí)現(xiàn)

了解了我們?yōu)槭裁匆?A/B 測試,下面我們來看一下火山引擎的 A/B 測試系統(tǒng)是如何實(shí)現(xiàn)的。

A/B測試怎么做?火山引擎A/B測試全流程實(shí)踐分享

上圖是火山引擎 A/B 測試系統(tǒng)的架構(gòu)示意圖,整體架構(gòu)分為幾層:

● 運(yùn)行環(huán)境層:在最底層,服務(wù)可以運(yùn)行在容器內(nèi),也可以運(yùn)行在物理機(jī)上。

● 基礎(chǔ)設(shè)施層:會用到關(guān)系型數(shù)據(jù)庫和鍵值對。因?yàn)?A/B 測試要處理很大的數(shù)據(jù)量,這一層也會使用離線和實(shí)時(shí)的大數(shù)據(jù)組件。

● 服務(wù)層:包括實(shí)驗(yàn)所需的分流服務(wù)、元信息服務(wù)、調(diào)度服務(wù)等。在 A/B 測試中我們也需要標(biāo)識用戶,因此這一層有設(shè)備服務(wù)。為了提供多種數(shù)據(jù)查詢,還有 OLAP 引擎。

● 業(yè)務(wù)層:包括實(shí)驗(yàn)管理、指標(biāo)管理、Feature 管理、評估報(bào)告等。

● 接入層:包括 CDN、網(wǎng)絡(luò)防火墻、負(fù)載均衡。

● 應(yīng)用層:提供管理后臺控制實(shí)驗(yàn)、查看報(bào)告等,SDK 調(diào)用。

●下面介紹幾個(gè)實(shí)驗(yàn)流程的實(shí)現(xiàn)。

客戶端實(shí)驗(yàn)參數(shù)傳遞及生效過程

A/B測試怎么做?火山引擎A/B測試全流程實(shí)踐分享

客戶端實(shí)驗(yàn)的流程如上圖所示:

● 業(yè)務(wù)方開發(fā)策略,確定實(shí)驗(yàn)內(nèi)容;

● 枚舉策略中的映射關(guān)系并在客戶端實(shí)現(xiàn)映射關(guān)系;

● 創(chuàng)建并開啟實(shí)驗(yàn);

● 客戶端已經(jīng)集成了火山引擎 A/B 測試系統(tǒng)的 SDK,向 A/B 測試系統(tǒng)請求分流服務(wù),判斷用戶命中哪些實(shí)驗(yàn)?zāi)男┌姹?,下發(fā)參數(shù);

● 客戶端從 SDK 取到參數(shù),進(jìn)行相對應(yīng)的流程完成實(shí)驗(yàn)。

服務(wù)端實(shí)驗(yàn)參數(shù)傳遞及生效過程

A/B測試怎么做?火山引擎A/B測試全流程實(shí)踐分享

服務(wù)端的實(shí)驗(yàn)和客戶端類似:

● 設(shè)計(jì)實(shí)驗(yàn);

● 服務(wù)端實(shí)驗(yàn)的 SDK 是跟業(yè)務(wù)系統(tǒng)比如服務(wù)端集成在一起。客戶是從其他 C 端用戶直接請求業(yè)務(wù)的服務(wù)端,該服務(wù)端會在本地 SDK 做決策;

● 決策完之后將參數(shù)下發(fā)到下游,使策略生效。

統(tǒng)計(jì)分析實(shí)踐

● 在統(tǒng)計(jì)分析中,我們總結(jié)了一些有用的實(shí)踐經(jīng)驗(yàn):

● 確定業(yè)務(wù)的指標(biāo)體系:可以從宏觀/微觀、長期/短期、橫向/縱向三個(gè)角度建設(shè)指標(biāo)體系。

● 分類檢驗(yàn):對指標(biāo)進(jìn)行置信度計(jì)算的時(shí)候,并不會每次都用同一套方法,而是針對不同的指標(biāo)類型(包括轉(zhuǎn)化類、人均類、CTR 類等)進(jìn)行不同的建模采用不同的方法。

● 統(tǒng)計(jì)修正:如果一個(gè)實(shí)驗(yàn)開了多個(gè)組,可能犯了多重比較的錯(cuò)誤。還有時(shí)開完實(shí)驗(yàn)之后每天都會查看結(jié)果,這就犯了連續(xù)觀測的錯(cuò)誤。所以在實(shí)踐中需要有一些統(tǒng)計(jì)修正的方法來修正行為。

● 基于葉貝斯體系的探索:區(qū)別于經(jīng)典的假設(shè)檢驗(yàn),我們也在探索基于葉貝斯體系,如何評估實(shí)驗(yàn)效果,降低面向用戶使用時(shí)候的理解門檻。在智能流量調(diào)優(yōu)、模型超參數(shù)搜索等場景下有具體落地。

● 這里也跟大家分享一些 A/B 實(shí)驗(yàn)設(shè)計(jì)背后的思考:

● 避免過度曝光:A/B 實(shí)驗(yàn)中有一個(gè)很關(guān)鍵的點(diǎn)是決策哪些樣本應(yīng)該進(jìn)入實(shí)驗(yàn)。如果所有打開應(yīng)用的人都能命中實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果就不會很明顯。

● 進(jìn)組和出組:假設(shè)我們對北京的用戶進(jìn)行了實(shí)驗(yàn),有些人出差或者旅游離開北京之后還能命中實(shí)驗(yàn)嗎?我們可以把這個(gè)決策留給實(shí)驗(yàn)者,讓實(shí)驗(yàn)者自己決定是進(jìn)組還是出組。

● 和 Feature Flag 的珠聯(lián)璧合:實(shí)驗(yàn)之前可以把能進(jìn)行實(shí)驗(yàn)的內(nèi)容抽象成 Feature Flag,簡單理解成功能開關(guān)。實(shí)驗(yàn)完成之后的上線或者重復(fù)實(shí)驗(yàn),也可用 Feature Flag 進(jìn)行管理。

字節(jié)跳動 A/B 測試最佳實(shí)踐

在字節(jié)跳動,A/B 測試已經(jīng)是一種企業(yè)文化,大家都認(rèn)可其價(jià)值,達(dá)成共識才能一起探討。A/B 測試跟其他環(huán)節(jié)是緊密相關(guān)的。我們在收集和分析數(shù)據(jù)之后會得到一些洞察,基于這些洞察可以知道有些環(huán)節(jié)是比較薄弱的,可進(jìn)行提升,然后就可以提出假設(shè),設(shè)計(jì) A/B 實(shí)驗(yàn),完成實(shí)驗(yàn)之后評估效果。有可能實(shí)驗(yàn)沒有達(dá)到預(yù)期效果,可以對實(shí)驗(yàn)進(jìn)行迭代繼續(xù)收集數(shù)據(jù),這樣就形成了以 A/B 測試為核心的業(yè)務(wù)增長閉環(huán)。

下面為大家介紹如何完整進(jìn)行一次 A/B 實(shí)驗(yàn)。

如何產(chǎn)生好的實(shí)驗(yàn)想法

關(guān)于如何產(chǎn)生好的實(shí)驗(yàn)想法,我們可以從定量分析和定性分析幾個(gè)角度來看。前面提到的構(gòu)建完善的指標(biāo)體系就是定量分析,這里不再贅述。在收集到指標(biāo)數(shù)據(jù)以后,對于指標(biāo)發(fā)生的異動進(jìn)行現(xiàn)象分析,針對已存在問題(非異動),則可以進(jìn)行新的產(chǎn)品策略或者運(yùn)營策略迭代執(zhí)行。

定性分析可以分為三個(gè)方面:

● 產(chǎn)品本身的價(jià)值主張是什么?比如一款打車 APP 的價(jià)值主張是通過共享經(jīng)濟(jì)實(shí)現(xiàn)社會的效率提升,這個(gè)產(chǎn)品有沒有很好地體現(xiàn)價(jià)值主張?可以從這一方面產(chǎn)生一些實(shí)驗(yàn)想法。

● 推動因素

相關(guān)性:同一個(gè)頁面中如果有不相關(guān)的功能,用戶大概率也不會點(diǎn)擊,這樣的設(shè)計(jì)就沒有效果。

清晰度:要表達(dá)的內(nèi)容(比如命名)是否足夠清晰。

緊迫性:對于有時(shí)間周期的活動,可以設(shè)計(jì)一些事件營造緊迫感。

● 阻礙因素:

注意力分散:避免在一個(gè)頁面放五花八門的信息讓用戶找不到重點(diǎn)。

焦慮性:有的地方可能給了用戶很多選擇,也會造成選擇困難,不自覺地形成一種焦慮感,不如簡單一些只設(shè)計(jì)一個(gè)選擇。

如何建立一個(gè)有效的實(shí)驗(yàn)假設(shè)

我們需要針對一個(gè)用戶群體做出改變,然后產(chǎn)生一定的影響。但是這個(gè)假設(shè)不是無腦定的,要有邏輯性是合理的,最終能通過指標(biāo)來評估變化的影響。針對這幾個(gè)要素,我們總結(jié)出了設(shè)計(jì) A/B 實(shí)驗(yàn)的 PICOT 原則,即 Population、Intervention、Comparison、Outcome、Time,明確對什么樣的用戶做出了什么樣的改變,然后進(jìn)行分組比較,最終需要設(shè)計(jì)衡量結(jié)果的指標(biāo),并決策實(shí)驗(yàn)要進(jìn)行多長時(shí)間。

A/B 測試效果評估

看哪些數(shù)據(jù)

A/B測試怎么做?火山引擎A/B測試全流程實(shí)踐分享

上圖是一份 A/B 測試實(shí)驗(yàn)報(bào)告,可以看到指標(biāo)在實(shí)驗(yàn)版本里是絕對值,還有變化值以及置信區(qū)間。置信區(qū)間是指假設(shè)策略全量上線,你有 95% 的把握會看到真實(shí)的指標(biāo)收益在 [,] 這個(gè)范圍內(nèi)。置信區(qū)間越窄且不包含 0,可信度就越高。從「查看圖表」進(jìn)入選擇差異值可以觀察累計(jì) diff 趨勢圖,如果呈現(xiàn)置信區(qū)間逐漸變窄的現(xiàn)象,說明隨著樣本量越來越大,我們對評估結(jié)果的信心就越來越強(qiáng)。

指標(biāo)變化是顯著的嗎

A/B 實(shí)驗(yàn)的結(jié)果有以下幾種:

● 正向顯著:說明當(dāng)前樣本容量條件下,實(shí)驗(yàn)版本優(yōu)于對照版本,實(shí)驗(yàn)結(jié)果和假設(shè)一致;

● 負(fù)向顯著:說明當(dāng)前樣本容量條件下,實(shí)驗(yàn)版本不優(yōu)于對照版本,實(shí)驗(yàn)結(jié)果和假設(shè)不一致;

● 不顯著:

確實(shí)不顯著:可以參考 MDE 指標(biāo)是否符合預(yù)期,如果符合,則說明結(jié)果確實(shí)不顯著。

其他原因?qū)е碌牟伙@著:比如樣本容量小,指標(biāo)對應(yīng)的用戶行為滲透率低,實(shí)驗(yàn)時(shí)長較短等。在這些情況下,如果實(shí)驗(yàn)效果不顯著,可以進(jìn)一步優(yōu)化實(shí)驗(yàn),比如增大樣本量,擴(kuò)大流量、再觀察一段時(shí)間積累更多進(jìn)組用戶等。

接下來我們可以再看兩個(gè)案例。

哪個(gè)首頁新 UI 版本更受歡迎

今日頭條 UI 整體風(fēng)格偏大齡被詬病已久,不利于年輕和女性用戶泛化,歷史上幾次紅頭改灰頭實(shí)驗(yàn)都對大盤數(shù)據(jù)顯著負(fù)向。因此團(tuán)隊(duì)設(shè)計(jì)了 A/B 實(shí)驗(yàn),目標(biāo)是在可接受的負(fù)向范圍內(nèi),改一版用戶評價(jià)更好的 UI。通過控制變量法,對以下變量分別開展數(shù)次 A/B 實(shí)驗(yàn):

● 頭部色值飽和度

● 字號

● 字重

● 上下間距

● 左右間距

● 底部 tab icon

● 結(jié)合用戶調(diào)研(結(jié)果顯示:年輕用戶和女性用戶對新 UI 更偏好)

綜合來看,效果最好的 UI 版本如圖 2 所示,全量上線。

A/B測試怎么做?火山引擎A/B測試全流程實(shí)踐分享

新 UI 上線后,Stay duration 顯著負(fù)向從-0.38% 降至 -0.24%,圖文類時(shí)長顯著 +1.66%,搜索滲透顯著 +1.47%,高頻用戶(占 71%)已逐漸適應(yīng)新 UI。

選擇更優(yōu)的視頻上滑引導(dǎo)產(chǎn)品形態(tài)

某款短視頻在剛面世時(shí),很多用戶都不知道上滑的玩法,因此就設(shè)計(jì)實(shí)驗(yàn)驗(yàn)證如何能更好地引導(dǎo)用戶上滑。實(shí)驗(yàn)?zāi)繕?biāo)定為優(yōu)化后提升新用戶留存,上滑操作滲透率提升 1%,錯(cuò)誤操作滲透率下降 1%。定向受眾為新用戶,面向 10% 的線上流量進(jìn)行為期 1 個(gè)月的實(shí)驗(yàn)。

A/B測試怎么做?火山引擎A/B測試全流程實(shí)踐分享

我們做了兩輪實(shí)驗(yàn),第一輪實(shí)驗(yàn)結(jié)果并不符合預(yù)期,上滑操作滲透率下降 1% 且顯著,錯(cuò)誤操作滲透率提升 1.5%,不符合預(yù)期。新用戶留存未見顯著上升。但在不符合預(yù)期的情況下,還是能做一些分析來發(fā)現(xiàn)原因。因此經(jīng)過改進(jìn)我們做了第二輪實(shí)驗(yàn),結(jié)果上滑操作滲透率上升 1.5% 且顯著,新用戶 7 日內(nèi)留存提升 1%-1.8%,且指標(biāo)結(jié)果呈顯著,符合預(yù)期。

上面的例子就說明了我們可以把 A/B 測試當(dāng)成一個(gè)理解用戶的工具。

展望

● 最后想跟大家一起展望一下 A/B 測試行業(yè)未來的情況。從行業(yè)前景來看:

● 認(rèn)知率和普及率在高速提升:我們之前做過一個(gè)調(diào)研,發(fā)現(xiàn) A/B 測試在國內(nèi)整體認(rèn)知度較低,可能低到一個(gè)難以想象的數(shù)字。我們認(rèn)為在未來 5-10 年內(nèi),A/B 測試的認(rèn)知度可能會有 50-100 倍的提升,這個(gè)市場還是一片藍(lán)海。

● 從 nice-to-have 到 must-have:現(xiàn)在很多人認(rèn)為 A/B 測試是一個(gè)錦上添花的工具,但在數(shù)據(jù)驅(qū)動越來越重要的今天,A/B 測試是必須要掌握的工具,是企業(yè)開展業(yè)務(wù)過程中的剛需,否則在行業(yè)競爭中就會失去優(yōu)勢。

● 破圈:我們也發(fā)現(xiàn) A/B 測試正在破圈。大家的印象中 A/B 測試只有互聯(lián)網(wǎng)公司會用,但是我們在交流的過程中發(fā)現(xiàn),很多傳統(tǒng)企業(yè)雖然沒有線上業(yè)務(wù),但如果能解決數(shù)據(jù)收集的問題,A/B 測試也能滿足傳統(tǒng)企業(yè)優(yōu)化的訴求。

● 從技術(shù)趨勢上來看,有這樣幾個(gè)發(fā)展方向:

● 智能化:A/B 測試目前還處在早期階段,一些實(shí)驗(yàn)結(jié)論或?qū)嶒?yàn)洞察對數(shù)據(jù)和用戶屬性的利用還不是很充分。如果 A/B 測試能和統(tǒng)計(jì)方法、算法模型相結(jié)合,很可能提高整個(gè)行業(yè)的水平。

● 場景化:很多場景還沒有開始使用 A/B 測試,未來更多的行業(yè)場景能和 A/B 測試相結(jié)合,讓 A/B 測試更易用。

● 被集成:目前我們的 A/B 測試平臺可以一站式管理實(shí)驗(yàn)、查看報(bào)告,但是一些用戶的業(yè)務(wù)已經(jīng)很成熟,希望 A/B 測試能夠走入業(yè)務(wù)和系統(tǒng),更順滑地使用。所以 A/B 測試技術(shù)也需要提高自身被集成的能力,無縫地和各種業(yè)務(wù)、系統(tǒng)結(jié)合起來。

Q&A

Q:A/B 測試對用戶體量有沒有基本限制?小用戶量在進(jìn)行 A/B 測試時(shí)有什么要注意的嗎?

A:A/B 測試方法本身對用戶量沒有限制,但是如果實(shí)驗(yàn)樣本太少,就很難看到顯著的結(jié)果,收益比較小。

Q:火山引擎 A/B 測試和算法等數(shù)據(jù)科學(xué)有哪些結(jié)合的嘗試和實(shí)踐?

A:我們內(nèi)部在做的一些事情可以簡單介紹一下:比如基于多臂老虎機(jī)的智能實(shí)驗(yàn),已經(jīng)在開始應(yīng)用一些算法。此外我們也在探索參數(shù)搜索的實(shí)驗(yàn),提升搜索參數(shù)的速度,讓 A/B 測試更智能化。

Q:A/B 實(shí)驗(yàn)一般要測試多才可以看到結(jié)果?

A:嚴(yán)格意義上,開多久是和實(shí)驗(yàn)?zāi)軒淼挠绊懹嘘P(guān)系的,以我們的經(jīng)驗(yàn)值來看,一般是要覆蓋一個(gè)完整的用戶生命周期。我們一般是以周為單位,實(shí)驗(yàn)至少開啟 1-2 周。

Q:A/B 測試在實(shí)驗(yàn)結(jié)果上有沒有自動歸因的能力,幫用戶直接定位到是什么原因引起實(shí)驗(yàn)結(jié)果好或者差的?

A:前面提到的一些智能化探索會對自動歸因有幫助,但是自動歸因還有一個(gè)很重要的點(diǎn)是,A/B 測試實(shí)驗(yàn)數(shù)據(jù)背后的原因可能需要很多業(yè)務(wù)知識的輸入或者很有力的指標(biāo)建設(shè)才能推斷出來。

Q:如此多的實(shí)驗(yàn),如何保證實(shí)驗(yàn)的正交?

A:我們通過大量的模擬實(shí)驗(yàn),以及對系統(tǒng)監(jiān)控的自檢來保證正交,一旦發(fā)現(xiàn)數(shù)據(jù)超過了閾值就會及時(shí)進(jìn)行調(diào)整。

(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實(shí),并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )