美团点评效果广告实验配置平台的设计与实现
廣告系統(tǒng)中,一個(gè)好的實(shí)驗(yàn)平臺(tái)可以令算法、工程、業(yè)務(wù)的迭代更多、更快、更好。本文詳細(xì)介紹了美團(tuán)點(diǎn)評(píng)效果廣告引擎團(tuán)隊(duì)結(jié)合自身業(yè)務(wù)實(shí)際,在廣告實(shí)驗(yàn)配置平臺(tái)上的實(shí)踐。目前該平臺(tái)已經(jīng)在搜索廣告中全面上線,支持線上所有實(shí)驗(yàn)需求。
一. 背景
效果廣告的主要特點(diǎn)之一是可量化,即廣告系統(tǒng)的所有業(yè)務(wù)指標(biāo)都是可以計(jì)算并通過數(shù)字進(jìn)行展示的。因此,可以通過業(yè)務(wù)指標(biāo)來表示廣告系統(tǒng)的迭代效果。那如何在全量上線前確認(rèn)迭代的結(jié)果呢?通用的方法是采用AB實(shí)驗(yàn)(如圖1)。所謂AB實(shí)驗(yàn),是指單個(gè)變量具有兩個(gè)版本A和B的隨機(jī)實(shí)驗(yàn)。在實(shí)際應(yīng)用中,是一種比較單個(gè)(或多個(gè))變量多個(gè)版本的方法,通常是通過測試受試者對多個(gè)版本的反應(yīng),并確定多個(gè)版本中的哪個(gè)更有效。Google工程師在2000年進(jìn)行了首次AB實(shí)驗(yàn),試圖確定在其搜索引擎結(jié)果頁上顯示的最佳結(jié)果數(shù)。到了2011年,Google進(jìn)行了7000多次不同的AB實(shí)驗(yàn)。現(xiàn)在很多公司使用“設(shè)計(jì)實(shí)驗(yàn)”的方法來制定營銷決策,期望在實(shí)驗(yàn)樣本上可以得到積極的轉(zhuǎn)化結(jié)果,并且隨著工具和專業(yè)知識(shí)在實(shí)驗(yàn)領(lǐng)域的發(fā)展,AB實(shí)驗(yàn)已成為越來越普遍的一種做法。
圖1 什么是AB實(shí)驗(yàn)我們都知道,機(jī)器學(xué)習(xí)在廣告投放中的作用是舉足輕重的,廣告收入的提升離不開算法模型的優(yōu)化迭代,因此算法模型的迭代也需要進(jìn)行AB實(shí)驗(yàn)。除了算法模型的迭代之外,工程中較大規(guī)模的重構(gòu)和優(yōu)化也需要AB實(shí)驗(yàn)來驗(yàn)證效果的有效性和正確性。此外,目前在大部分應(yīng)用中,應(yīng)用參數(shù)配置采用最多是單鍵值的配置方式,這種配置方式的確滿足了大部分配置的需要,但是在結(jié)合業(yè)務(wù)需求的情況下,使用起來可能會(huì)很乏力。
因此,我們需要搭建一個(gè)平臺(tái)(Wedge),來滿足算法、工程在迭代過程中的實(shí)驗(yàn)需求,并且滿足在不同流量下應(yīng)用參數(shù)配置的需求。
二. 方案設(shè)計(jì)
目標(biāo)
Wedge平臺(tái)的目標(biāo)如下:
設(shè)計(jì)思路
在《Overlapping Experiment Infrastructure: More, Better, Faster Experimentation》中,Google給出了一套通用的分層實(shí)驗(yàn)解決方案。我們以此為藍(lán)本,結(jié)合美團(tuán)點(diǎn)評(píng)效果廣告的LBS特性,針對不同的業(yè)務(wù)場景,實(shí)現(xiàn)了更適合日常迭代的實(shí)驗(yàn)配置框架。目前,該框架已在搜索廣告投放系統(tǒng)上全量上線。
實(shí)驗(yàn)分類
基于Google分層實(shí)驗(yàn)平臺(tái),結(jié)合實(shí)際需求進(jìn)行了以下實(shí)驗(yàn)分類。
根據(jù)實(shí)驗(yàn)種類分類
- 水平實(shí)驗(yàn):類似于Overlapping Layer中的實(shí)驗(yàn),是屬于同個(gè)“層”的實(shí)驗(yàn),實(shí)驗(yàn)是互斥的,在同一“層”上實(shí)驗(yàn)可以理解為是同一種實(shí)驗(yàn),例如:關(guān)鍵詞“層”表示這一層的實(shí)驗(yàn)都是關(guān)鍵詞相關(guān)的,該層上存在實(shí)驗(yàn)H1和H2,那么流量絕對不會(huì)同時(shí)命中H1和H2。
- 垂直實(shí)驗(yàn):類似于Non-overlapping Layer中的實(shí)驗(yàn),分布于不同“層”之間,實(shí)驗(yàn)是不互斥的,例如在關(guān)鍵詞“層”和CTR“層”上在相同的分桶上配置了實(shí)驗(yàn)V1和V2,那么流量可以同時(shí)命中V1和V2。
- 條件實(shí)驗(yàn):表示進(jìn)入某“層”的實(shí)驗(yàn)需要滿足某些條件,水平實(shí)驗(yàn)和垂直實(shí)驗(yàn)都可以是條件實(shí)驗(yàn)。
根據(jù)流量類別分類
這種分類主要了為了用戶體驗(yàn),使平臺(tái)在操作上更加的簡單、易用:
- 普通實(shí)驗(yàn):最基本的實(shí)驗(yàn),根據(jù)流量類別進(jìn)行配置。
- 引用實(shí)驗(yàn):流量分類是整個(gè)配置中心基礎(chǔ),但實(shí)際上存在一些實(shí)驗(yàn)是跨流量了,而引用實(shí)驗(yàn)則可以配置在不同的流量種類中。
- 全局實(shí)驗(yàn):可以理解為特殊的引用實(shí)驗(yàn),全局實(shí)驗(yàn)在所有流量上都生效。
架構(gòu)圖
圖2為整體架構(gòu)圖,比較便于大家理解,我們可以看到整體架構(gòu)分為四層:
- Web層:提供平臺(tái)UI,負(fù)責(zé)應(yīng)用參數(shù)配置、實(shí)驗(yàn)配置、實(shí)驗(yàn)效果查看以及其他。
- 服務(wù)層:提供權(quán)限控制、實(shí)驗(yàn)管理、拉取實(shí)驗(yàn)效果等功能。
- 存儲(chǔ)層:主要是數(shù)據(jù)存儲(chǔ)功能。
- 業(yè)務(wù)層:業(yè)務(wù)層結(jié)合SDK完成獲取實(shí)驗(yàn)參數(shù)和獲取應(yīng)用參數(shù)的功能。
三. 模型設(shè)計(jì)
1. 分流模型
實(shí)驗(yàn)?zāi)P?/strong>
如圖3所示,整體模型分為以下幾個(gè)部分:
- App:表示一個(gè)應(yīng)用,不同的應(yīng)用對應(yīng)的實(shí)驗(yàn)配置完全不同,首先從App上進(jìn)行區(qū)分可以更加明確實(shí)驗(yàn)的歸屬。
- Scene:表示某一類流量的集合,例如:搜索、美食篩選、到綜篩選等,在這些流量上配置的實(shí)驗(yàn)互不干擾。
- Layer:表示某一層(種)實(shí)驗(yàn)的集合。例如可以將在matching上做的實(shí)驗(yàn)放入Matching Layer中。流量命中時(shí)依次進(jìn)入每個(gè)Layer獲取實(shí)驗(yàn)配置參數(shù),此時(shí)的Layer更像一個(gè)抽象概念,與具體的業(yè)務(wù)或者邏輯相關(guān)。
- 條件Layer:是一種更加精細(xì)的流量控制方式,表示某一流量的某個(gè)或者某幾個(gè)參數(shù)在滿足一定條件下才會(huì)進(jìn)行實(shí)驗(yàn)。進(jìn)一步說就是相同Scene下,某一流量的參數(shù)A滿足條件一時(shí),采用一種實(shí)驗(yàn)配置策略;滿足條件二時(shí),采用另一種實(shí)驗(yàn)配置策略,那可以分為兩層,如圖3所示的Layer_3和Layer_4。例如:某流量需要在城市北京單獨(dú)做實(shí)驗(yàn),這種情況下,可以分為參數(shù)相同但是先決條件(即城市)互斥的兩個(gè)Layer。此時(shí)的Layer在抽象的基礎(chǔ)上更加的具體化。
- Exp:表示具體實(shí)驗(yàn),包括實(shí)驗(yàn)的分桶、實(shí)驗(yàn)參數(shù)、是否為垂直流量等等。
水平、垂直分流模型
如圖4所示,水平、垂直分流模型分為以下兩個(gè)部分:
- 僅包含水平實(shí)驗(yàn) :最基礎(chǔ)的實(shí)驗(yàn)需求,全部實(shí)驗(yàn)獨(dú)占一個(gè)Layer,每個(gè)實(shí)驗(yàn)覆蓋若干個(gè)桶,例如圖4中的Layer_1,將流量分為10份,包含三個(gè)實(shí)驗(yàn),這三個(gè)實(shí)驗(yàn)分別占用3、3、4份流量。
- 同時(shí)包含水平、垂直實(shí)驗(yàn):一個(gè)Layer中同時(shí)包含垂直、水平兩種類型的實(shí)驗(yàn)。例如圖4中的Layer_2和Layer_3,將最后的4份流量用來做垂直實(shí)驗(yàn),包含兩個(gè)垂直實(shí)驗(yàn),分別是Exp_6和Exp_7。
2. 實(shí)驗(yàn)命中模型
實(shí)驗(yàn)命中模型是指,當(dāng)一個(gè)請求過來時(shí),返回全局統(tǒng)一的實(shí)驗(yàn)參數(shù)。所有的請求都會(huì)平均地落入每一個(gè)分桶中,并且不同的Layer之間能夠保證流量的正交。
名詞解釋
- Hash優(yōu)先級(jí):在實(shí)驗(yàn)命中過程中,第一次Hash首先判斷命中垂直流量,如果沒有命中,則進(jìn)行第二次Hash再判斷水平流量。
- Hash因子:目前美團(tuán)側(cè)一般情況下為uuid,點(diǎn)評(píng)側(cè)為dpid。
- 垂直流量Hash串:Hash因子+scene_id。
- 水平流量Hash串:Hash因子+scene_id+layer_id+layer_name。
- 取模數(shù):在Hash過程中,垂直流量按照總Bucket(默認(rèn)取值100)取模;水平流量按照總Bucket數(shù)減去垂直流量Bucket數(shù)取模。這樣的命中模型能保證無論是垂直的Bucket,還是水平的Bucket都是全局的1%。
實(shí)例解析
以最復(fù)雜的流量分配為例,如圖5,水平、垂直流量各占全局50%流量。
水平流量上包含兩個(gè)實(shí)驗(yàn):Exp_1、Exp_2各占全局20%流量,還有10%流量未分配實(shí)驗(yàn),垂直流量與水平流量相同。
圖5 流量分配示例典型實(shí)驗(yàn)命中如圖6所示:
- 當(dāng)一個(gè)請求過來時(shí),命中順序按照Hash優(yōu)先級(jí)為先垂直流量后水平流量。
- 首先利用垂直流量Hash串進(jìn)行Hash并取模得到一個(gè)hashNum,如果命中了50~99,就會(huì)認(rèn)為命中了垂直流量,直接返回V_Exp_1、V_Exp_2或者未命中。
- 如果沒有命中50~99,則認(rèn)為命中了水平流量。再利用水平Hash因子進(jìn)行Hash并取模得到一個(gè)hashNum,根據(jù)配置直接返回Exp_1、Exp_2或者未命中。
應(yīng)用參數(shù)模型
應(yīng)用參數(shù)模型如圖7所示,分為兩層結(jié)構(gòu):
- 全局參數(shù):所有流量都能拿到的參數(shù)。
- 同類型流量參數(shù):相同類型的流量能拿到的參數(shù)。
值得注意的是,應(yīng)用參數(shù)的兩個(gè)層級(jí)以及之前提到的實(shí)驗(yàn)參數(shù)可能出現(xiàn)重復(fù)的情況,在出現(xiàn)重復(fù)的情況下參數(shù)的優(yōu)先級(jí)為:實(shí)驗(yàn)參數(shù)>同類型流量參數(shù)>全局參數(shù)。
3. 回滾模型
很明顯,平臺(tái)的分流模型是層次結(jié)構(gòu)的,所以在數(shù)據(jù)設(shè)計(jì)上也是每一層一個(gè)table。這樣就會(huì)出現(xiàn)一個(gè)問題,一般的參數(shù)配置回滾都是單值的回滾,但是存在多個(gè)表的情況下沒有辦法這么簡單地去回滾。
因此,我們設(shè)計(jì)了如下的回滾模型:
數(shù)據(jù)庫表的設(shè)計(jì)如下:
四. AB實(shí)驗(yàn)實(shí)時(shí)效果
實(shí)時(shí)效果指標(biāo)包含實(shí)際CTR、預(yù)估CTR、請求PV、廣告密度、有效曝光、RPS等,由于很多數(shù)據(jù)分布在不同的日志中,所以需要實(shí)時(shí)處理。
廣告的打點(diǎn)一般分為請求(PV)打點(diǎn)、SPV(Server PV)打點(diǎn)、CPV(Client PV)曝光打點(diǎn)和CPV點(diǎn)擊打點(diǎn),在所有打點(diǎn)中都會(huì)包含一個(gè)流量的requestId和命中的實(shí)驗(yàn)路徑。根據(jù)requestId和命中的實(shí)驗(yàn)路徑可以將所有的日志進(jìn)行join,得到一個(gè)request中需要的所有數(shù)據(jù),然后將數(shù)據(jù)存入Durid中。
計(jì)算各項(xiàng)效果指標(biāo),就是在日志join后帶有實(shí)驗(yàn)路徑的數(shù)據(jù)上做OLAP。為了支持高效的實(shí)時(shí)查詢,平臺(tái)采用時(shí)序數(shù)據(jù)庫Druid作為底層存儲(chǔ)。Druid作為分布式時(shí)序數(shù)據(jù)庫,提供了豐富的OLAP能力和強(qiáng)悍的性能。Druid將數(shù)據(jù)分為時(shí)間戳、維度和指標(biāo)三個(gè)部分,其中維度多用于過濾,指標(biāo)用于聚合和計(jì)算等。平臺(tái)將數(shù)據(jù)中的實(shí)驗(yàn)路徑同其他用于過濾的字段一同作為維度,結(jié)合時(shí)間戳和指標(biāo)字段,完成指定標(biāo)簽的廣告效果指標(biāo)計(jì)算。
五. 總結(jié)
目前Wedge平臺(tái)已經(jīng)完全上線,除了滿足目標(biāo)之外,還帶來了以下的成果:
總結(jié)
以上是生活随笔為你收集整理的美团点评效果广告实验配置平台的设计与实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring 中策略模式的 2 个经典应
- 下一篇: 动图 + 源码,演示 Java 中常用数