干貨分享|A/B實驗在字節(jié)跳動推薦系統(tǒng)中的應用與實踐

本文源自火山引擎A/B測試團隊資深研發(fā)團隊內部演講,以下為分享實錄:

1. 什么是A/B實驗?

AB實驗,也被稱為A/B測試,是一種統(tǒng)計學方法,通過對比兩個或多個版本的事物,以確定哪個版本對目標的影響更大,目前在各大互聯(lián)網(wǎng)公司有非常廣泛的應用。例如在字節(jié)跳動,2023年中數(shù)據(jù)顯示,A/B測試平臺目前服務了500多條業(yè)務、在線上開的實驗總量超過了240萬,每天新增的實驗數(shù)有4000余個,同時線上運行的實驗數(shù)有5萬余個 。

2. 什么是推薦系統(tǒng)?

隨著移動互聯(lián)網(wǎng)的快速發(fā)展,用戶規(guī)模和網(wǎng)絡信息量都得到了爆炸式增長。在此背景下,信息過載導致用戶產生選擇焦慮,推薦系統(tǒng)也就應運而生。

可以說,推薦系統(tǒng)本質上是在用戶需求不明確的情況下, 為用戶從海量的內容中尋找其感興趣的內容的技術手段,通過結合用戶的基礎信息(地域,年齡,性別等)、用戶的歷史行為(點擊、播放、購買等)、以及內容本身的特征(分類、標簽、價格等),利用機器學習技術構建用戶的興趣模型,再疊加一定的推薦策略,實現(xiàn)為用戶提供精準的個性化內容服務,使流量得到充分的利用,最大限度地提高內容轉化效率及用戶獲取信息的效率。

3. 推薦架構

雖然不同推薦產品的體驗和調性差異很大,但其背后的推薦系統(tǒng)總體技術方案大同小異,一般都由在線服務和離線處理兩個模塊組成:

干貨分享|A/B實驗在字節(jié)跳動推薦系統(tǒng)中的應用與實踐

3.1 在線服務

在線服務是為用戶提供內容的個性化推薦服務。其對效率要求比較高,需要在百毫秒級完成從海量備選集中篩選用戶感興趣的內容,一般由召回、粗排、精排、重排四個階段組成。這四個階段所處理的內容量由多到少、處理復雜度由簡單到復雜、內容和用戶的相關性由弱到強,隨著階段的推進逐步完成推薦。

干貨分享|A/B實驗在字節(jié)跳動推薦系統(tǒng)中的應用與實踐

3.2 離線處理

離線處理輔助于在線服務,能夠為在線服務提供內容基礎和數(shù)據(jù)基礎:

  • 用戶發(fā)布的內容經過審核、打標簽以及內容運營,篩選合規(guī)、優(yōu)質內容,構建推薦內容池
  • 對用戶行為數(shù)據(jù)進行處理和計算,生成樣本和特征,更新和優(yōu)化推薦模型;
  • 結合A/B實驗分流結果和用戶行為的打點上報,用于指標計算和實驗分析,也可搭建指標報表和dashboard,觀測如dau、用戶時長等核心指標的走勢

推薦系統(tǒng)中經常會有推薦算法、策略、特征、功能、UI的迭代,特別是推薦算法。但由于現(xiàn)在廣泛應用深度學習模型,本身具有很強的黑盒屬性。所以在進行調整后,用戶體驗如何,是否向著預期的方向發(fā)展,都無法通過經驗來判斷,需要通過A/B實驗量化指標變化才能進行評估及后續(xù)優(yōu)化。

因此,可以說A/B實驗和推薦系統(tǒng)是相生相伴的,有推薦系統(tǒng)就必須有A/B實驗。接下來就重點介紹A/B實驗在持續(xù)改進推薦系統(tǒng)中的應用以及分享一些實踐經驗。

4. 使用A/B實驗改進推薦系統(tǒng)

4.1 A/B實驗的流程

一個標準的A/B實驗包含分析并提出假設、實驗設計、實驗上線、實驗觀測、實驗決策五個環(huán)節(jié):

干貨分享|A/B實驗在字節(jié)跳動推薦系統(tǒng)中的應用與實踐

  • 基于分析提出假設:即在業(yè)務體驗和數(shù)據(jù)分析過程中,基于發(fā)現(xiàn)的問題和可優(yōu)化點,提出某個實驗的假設。例如某信息流推薦開發(fā)同學,在體驗業(yè)務時提出一個假設:如果用戶在消費視頻時若能產生點贊關注等互動行為,可提升用戶黏性從而提升用戶留存。
  • 實驗設計:確定實驗策略、實驗目的、實驗對象、實驗時長等。例如基于上面的假設,可設計針對低活躍用戶,優(yōu)化推薦模型的實驗策略;目標是提升用戶留存率;實驗時長則建議設置14天以上,覆蓋兩個完整周,以此消除工作日與周末用戶消費視頻的差異及波動。
  • 實驗上線:按照設計的實驗方案,實現(xiàn)業(yè)務邏輯并進行線上實驗。且需要在上線前通過設置實驗白名單,體驗并檢查實驗邏輯是否符合預期。
  • 實驗觀測:實驗上線后,觀察實驗指標的變化趨勢。這個階段也可以抽樣檢查實驗用戶的推薦結果和行為數(shù)據(jù),進一步驗證實驗邏輯是否正確。
  • 實驗決策:根據(jù)實驗結果決定下一步計劃,若實驗效果為負向,則應關閉實驗或進行相應的數(shù)據(jù)分析并迭代優(yōu)化實驗策略后重新上線實驗;若實驗有顯著正向,則可全量發(fā)布,且在全量發(fā)布時建議同步創(chuàng)建反轉實驗,以便觀察實驗的長期收益。因為一般A/B實驗的周期相對比較短,短期的正向收益也可能是由于新算法或新策略的新鮮度較高帶來的,因此可通過反轉實驗來檢驗長期收益是否符合預期。實驗上線后,也可以進行進一步的數(shù)據(jù)分析發(fā)掘是否有新的A/B實驗點,以此循環(huán)往復。

在字節(jié)跳動,每天都運行著大量的推薦實驗,以下分享幾個我們積累的實踐經驗。

4.2 A/B實驗在推薦系統(tǒng)的應用方向

推薦系統(tǒng)的本質是連接內容和用戶,這樣就構成了<內容,推薦系統(tǒng),用戶>的三元組,A/B實驗也是圍繞這個三元組展開。內容側,可以進行內容池優(yōu)化、內容打標優(yōu)化、視頻封面模型的優(yōu)化等;用戶側,可以通過A/B實驗實現(xiàn)功能優(yōu)化、性能優(yōu)化、UI改進等;而在推薦系統(tǒng)方面,可A/B實驗的維度更多,例如多路召回優(yōu)化、粗排和精排模型迭代升級優(yōu)化、模型多目標融合優(yōu)化、重排多樣性/興趣探索優(yōu)化、廣告收入優(yōu)化等等,可以說,在推薦系統(tǒng)中,萬物皆可A/B實驗。

干貨分享|A/B實驗在字節(jié)跳動推薦系統(tǒng)中的應用與實踐

需要指出的是,在進行內容側的A/B實驗時,例如信息流產品可能會做作者發(fā)布視頻獎勵、視頻清晰度調整等,改變的是內容側的屬性,但我們通常觀察的是大盤用戶側的指標。在進行這類實驗時,建議轉化為用戶側實驗并輔助觀測內容側指標來評估,權衡用戶側和內容側的綜合收益后再決策是否上線。

比如視頻帶貨推薦中,商家分潤規(guī)則調整僅對實驗用戶生效,通過對比實驗組與對照組的指標差異評估對大盤的影響的同時,可以創(chuàng)建并觀察商家入駐率等內容側指標的變化。在大盤收入指標不變、商家入駐率指標有提升,甚至大盤收入指標微跌、商家入駐率顯著提升的情況下,都可以發(fā)布上線。

另外,A/B實驗上線后,我們會頻繁地查看分析實驗指標。有的實驗在開啟后前幾天可能出現(xiàn)指標下跌,這種情況下不建議立即關閉實驗,因為我們遇到過很多這種指標開始下跌、后續(xù)慢慢回漲的情況,比如在內容多樣性策略實驗中,當增強興趣探索后,短期可能會因為探索而出現(xiàn)用戶不感興趣的內容變多導致消費時長下跌,但從長期來看。探索到更多用戶興趣后,用戶黏性更強,用戶消費時長也會慢慢回漲,且更有益于平臺生態(tài)。因此在面對實驗開始指標下跌的情況,一般還是建議繼續(xù)實驗至少一周以上,覆蓋觀察一個完整周后再進行評估會更加準確。

在查看指標時,也建議多關注實驗指標下鉆分析結果,例如關注不同性別、不同年齡層用戶的指標變化,有的產品也會關注不同活躍度用戶、特別是新用戶和低活用戶的指標變化趨勢,因為這類用戶更決定了產品未來的增長。在DataTester,可以借助用戶屬性過濾功能,查看指標的下鉆分析數(shù)據(jù)。

干貨分享|A/B實驗在字節(jié)跳動推薦系統(tǒng)中的應用與實踐

4.3 實驗參數(shù)在A/B實驗的作用

在推薦系統(tǒng)中,我們常常會想看不同算法疊加不同的策略或功能的效果,這時可以借助實驗參數(shù)來做功能組合的A/B實驗。實驗參數(shù),是對A/B實驗中實驗版本的補充,一般是一個功能控制配置項,需要開發(fā)人員獲取并解析后才能生效。

借助實驗參數(shù),一方面能區(qū)分對照組和實驗組,另一方面通過合理的實驗配置的設計,可以在不增加開發(fā)工作量的情況下進行更靈活的實驗。目前火山引擎DataTester支持Number、String、Boolean、Json類型的實驗參數(shù)配置,可以幫助用戶實現(xiàn)不同維度的A/B實驗。

干貨分享|A/B實驗在字節(jié)跳動推薦系統(tǒng)中的應用與實踐

以視頻帶貨推薦場景為例,我們假設商品內容展示時機不同會對用戶的視頻消費時長和電商GMV產生影響,因此設計如下實驗:

干貨分享|A/B實驗在字節(jié)跳動推薦系統(tǒng)中的應用與實踐

  • 對照組:視頻開始播放時立即展示商品卡片
  • 實驗組1:視頻播放5秒后展示商品卡片
  • 實驗組2:視頻播放10秒后展示商品卡片

我們可以設計實驗參數(shù)goods_card_show_time=0/5/10分別對應對照組、實驗組1和實驗組2,然后在代碼中解析goods_card_show_time參數(shù)并實現(xiàn)視頻播放{goods_card_show_time}秒后展示商品卡片,即可完成上述實驗。假如后續(xù)要實驗“視頻播放8秒后展示商品卡片”的效果,則無需修改代碼,僅需要創(chuàng)建一個實驗參數(shù)為goods_card_show_time=8的實驗即可,甚至可以創(chuàng)建更多組不同參數(shù)值的實驗后取最優(yōu)的goods_card_show_time值全量發(fā)布。

需要注意的是,從開發(fā)同學的視角看,實驗參數(shù)是一個功能控制配置,因此在進行A/B實驗參數(shù)設計的時候需要避免一個誤區(qū):不要按實驗設計來設計實驗參數(shù)。例如如下場景:

信息流視頻推薦中,想通過提高用戶互動率來提升產品的用戶黏性(即用戶留存),因此設計通過優(yōu)化推薦模型互動目標的同時,疊加在客戶端展示互動引導的實驗,且互動引導不同的展示時機和展示時長會對數(shù)據(jù)有較大影響,因此設計如下實驗:

  • 對照組:無推薦模型優(yōu)化,不展示互動引導
  • 實驗組1:優(yōu)化推薦模型互動目標,不展示互動引導
  • 實驗組2:優(yōu)化推薦模型互動目標,且在視頻播放剩10秒時展示互動引導5秒
  • 實驗組3:優(yōu)化推薦模型互動目標,且在視頻播放剩15秒時展示互動引導8秒

一個不恰當?shù)膶嶒瀰?shù)設計方案是枚舉所有實驗組(如下interact_optimize_mod的設計),此時功能的控制只能通過硬編碼來處理,如果涉及到實驗方案調整,或者其他實驗需要復用某些功能,則都需要另外開發(fā)。

JSON
“interact_optimize_mode”: 0 // 0/1/2/3 分別對應對照組和實驗組1/2/3

合理的實驗參數(shù)應該按功能控制維度來設計,針對上面的實驗,可以設計如下控制參數(shù),然后通過這些參數(shù)的組合達到實驗的效果:

JSON
“recommend_model_optimize”: true // 是否進入推薦模型互動目標優(yōu)化,true-是,false-否
“show_interact_guide”: true, // 是否展示互動引導,true-展示,false-不展示
“show_duration”: 5, // 互動引導展示時長,單位:秒,show_interact_guide=true時有效
“video_play_duration”: 10, // 視頻播放時長,單位:秒,show_interact_guide=true時有效

對照組:無推薦模型優(yōu)化,不展示互動引導

JSON
{
“recommend_model_optimize”: false,
“show_interact_guide”: false
}

實驗組1:優(yōu)化推薦模型互動目標,不展示互動引導

JSON
{
“recommend_model_optimize”: true,
“show_interact_guide”: false
}

實驗組2:優(yōu)化推薦模型互動目標,且在視頻播放剩10秒時展示互動引導5秒

JSON
{
“recommend_model_optimize”: true,
“show_interact_guide”: true,
“show_duration”: 5,
“video_play_duration”: 10
}

實驗組3:優(yōu)化推薦模型互動目標,且在視頻播放剩15秒時展示互動引導8秒

JSON
{
“recommend_model_optimize”: true,
“show_interact_guide”: true,
“show_duration”: 8,
“video_play_duration”: 15
}

通過以上設計的實驗參數(shù),便可實現(xiàn)多個功能維度的A/B實驗??梢哉f,合理利用實驗參數(shù),往往可以達到事半功倍的效果,這一點在移動端APP實驗中尤為重要,因為APP一般發(fā)版周期長,無法做頻繁變更,而有了實驗參數(shù),就可以在不發(fā)版的情況下,開啟多組不同參數(shù)的A/B實驗,篩選最優(yōu)參數(shù)組合在線上生效。

4.4 全量發(fā)布A/B實驗

當A/B實驗決出優(yōu)勝組后,我們便可以將優(yōu)勝組的策略全量發(fā)布。那么如何發(fā)布呢?

一種做法是修改代碼,將優(yōu)勝組策略對應的參數(shù)對全量用戶生效,同時將對照組下線,這種方式的缺點是每次全量發(fā)布都需要修改代碼后發(fā)布上線,流程復雜增加了出錯風險,特別是如果要全量發(fā)布客戶端實驗,考慮到客戶端發(fā)版除了開發(fā)測試,還需要應用商店審批上線,這種方式將會嚴重影響迭代效率,并且這種方式難以回滾,在新特性上線時可能會造成上下游服務負載過高而影響用戶體驗。

基于以上可能存在的問題,一般的做法是會開發(fā)一套配置系統(tǒng),將A/B實驗控制邏輯配置化,當需要全量發(fā)布實驗時,只需要全量發(fā)布對應實驗配置即可,若發(fā)布時出現(xiàn)異??赏ㄟ^回滾配置恢復服務。

在DataTester,除了能夠為用戶提供A/B實驗的能力,還能為用戶提供FeatureFlag功能,以滿足A/B實驗全量發(fā)布的訴求,用戶無需再開發(fā)上述的配置服務?;贔eatureFlag功能,全量發(fā)布實驗時,用戶僅需要將實驗配置固化為Feature,然后發(fā)布Feature即可,同時此功能支持自定義流量滿足灰度發(fā)布的需求,保護上下游服務,出現(xiàn)異常時也支持配置秒級回滾,高效保障服務安全上線。

干貨分享|A/B實驗在字節(jié)跳動推薦系統(tǒng)中的應用與實踐

以上就是DataTester在推薦系統(tǒng)改進中的實踐及其經驗總結,希望對大家有所啟發(fā)?;鹕揭鍰ataTester作為火山引擎數(shù)智平臺VeDI旗下的核心產品,源于字節(jié)跳動長期的技術和業(yè)務沉淀。目前,DataTester已經服務了上百家企業(yè),包括美的、得到、博西家電、凱叔講故事等知名品牌,助力企業(yè)在業(yè)務增長、用戶轉化、產品迭代、策略優(yōu)化以及運營提效等環(huán)節(jié)科學決策,將成熟的“數(shù)據(jù)驅動增長”經驗賦能給各行業(yè)。

本文來自投稿,不代表增長黑客立場,如若轉載,請注明出處:http://m.allfloridahomeinspectors.com/quan/113125.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
上一篇 2024-01-31 19:39
下一篇 2024-01-31 22:46

增長黑客Growthhk.cn薦讀更多>>

發(fā)表回復

登錄后才能評論