美团点评联盟广告场景化定向排序机制
在美團(tuán)點(diǎn)評(píng)的聯(lián)盟廣告投放系統(tǒng)(DSP)中,廣告從召回到曝光的過(guò)程需要經(jīng)歷粗排、精排和競(jìng)價(jià)及反作弊等階段。其中精排是使用CTR預(yù)估模型進(jìn)行排序,由于召回的候選集合較多,出于工程性能上的考慮,不能一次性在精排過(guò)程中完成候選集的全排序,因此在精排之前,需要對(duì)候選廣告進(jìn)行粗排,來(lái)過(guò)濾、篩選出相關(guān)性較高的廣告集合,供精排使用。
本文首先會(huì)對(duì)美團(tuán)點(diǎn)評(píng)的廣告粗排機(jī)制進(jìn)行概要介紹,之后會(huì)詳細(xì)闡述基于用戶(hù)、天氣、關(guān)鍵詞等場(chǎng)景特征的廣告粗排策略。
廣告粗排框架對(duì)引擎端召回的若干廣告進(jìn)行排序,并將排序的結(jié)果進(jìn)行截?cái)?#xff0c;截?cái)嗪蟮暮蜻x集會(huì)被傳遞給廣告精排模塊處理。
粗排是為了盡可能在候選廣告集合里找到與流量相關(guān)性較高的廣告,一般以有效轉(zhuǎn)化(通常包括點(diǎn)擊后發(fā)生后續(xù)行為、電話、預(yù)約、購(gòu)買(mǎi)等)為目標(biāo)。流量因素通常包含媒體、用戶(hù)(用戶(hù)包含用戶(hù)畫(huà)像、歷史搜索、歷史點(diǎn)擊等各類(lèi)用戶(hù)行為)因素。此外,還可包含流量外因素,如LBS、當(dāng)前實(shí)時(shí)天氣特征等。
考慮到不同流量所覆蓋的特征不盡相同:如有的流量包含大量豐富的用戶(hù)畫(huà)像,而有的流量無(wú)用戶(hù)畫(huà)像,但有標(biāo)識(shí)性較為明顯的媒體特征,如P2P、母嬰類(lèi)媒體等,因此對(duì)于不同流量,會(huì)使用不同的粗排策略,以更好地應(yīng)用流量特征。
下面將根據(jù)不同場(chǎng)景詳細(xì)介紹各類(lèi)粗排機(jī)制的離線模型,以及線上應(yīng)用方案。
用戶(hù)興趣對(duì)于廣告轉(zhuǎn)化有著顯著影響。在用戶(hù)畫(huà)像基礎(chǔ)上,向不同興趣的用戶(hù)推薦不同類(lèi)型的廣告,對(duì)廣告的點(diǎn)擊和轉(zhuǎn)化皆能帶來(lái)較大提升。下面先對(duì)用戶(hù)畫(huà)像進(jìn)行簡(jiǎn)要介紹,之后闡述我們是如何應(yīng)用用戶(hù)畫(huà)像完成廣告定向的。
用戶(hù)畫(huà)像
用戶(hù)畫(huà)像也稱(chēng)用戶(hù)標(biāo)簽。美團(tuán)點(diǎn)評(píng)的用戶(hù)畫(huà)像與用戶(hù)的站內(nèi)行為息息相關(guān)。用戶(hù)的原始行為多為用戶(hù)對(duì)店鋪的瀏覽、點(diǎn)擊、購(gòu)買(mǎi)、點(diǎn)評(píng)、收藏等,用戶(hù)畫(huà)像主要是基于這些用戶(hù)行為產(chǎn)出的統(tǒng)計(jì)型畫(huà)像。除了原始行為,我們還整合了其他團(tuán)隊(duì)的數(shù)據(jù),包含通過(guò)頻繁集挖掘出的用戶(hù)預(yù)估標(biāo)簽,以及一些產(chǎn)品上自定義標(biāo)簽等。此外,聯(lián)盟廣告獨(dú)有的ADX數(shù)據(jù)源也被使用進(jìn)來(lái),ADX日均約數(shù)十億次請(qǐng)求,涵蓋了文學(xué)、金融、教育、母嬰等各類(lèi)媒體,我們將媒體帶來(lái)的部分用戶(hù)信息進(jìn)行清洗,并整合到用戶(hù)畫(huà)像,從而提升用戶(hù)畫(huà)像的覆蓋率和豐富性。融合以上所有數(shù)據(jù)源信息,我們產(chǎn)出了針對(duì)聯(lián)盟廣告的用戶(hù)畫(huà)像。
在策略應(yīng)用的同時(shí),考慮到產(chǎn)品投放,用戶(hù)標(biāo)簽體系的設(shè)計(jì)采用了樹(shù)狀結(jié)構(gòu),以便于投放選擇。
標(biāo)簽體系分為五大類(lèi):
在工程方面,用戶(hù)畫(huà)像工程每日例行化運(yùn)行一次,離線處理各數(shù)據(jù)源,并進(jìn)行合并,產(chǎn)出設(shè)備ID粒度(IMEI或IDFA)的標(biāo)準(zhǔn)化用戶(hù)標(biāo)簽。用戶(hù)標(biāo)簽結(jié)果會(huì)從Hive表導(dǎo)入Redis緩存,以供線上加載使用。
離線建模
用戶(hù)定向包含了兩層含義:
本文所述的用戶(hù)定向,僅指策略應(yīng)用。
在用戶(hù)定向上,我們使用了頻繁集挖掘方案,因?yàn)橛脩?hù)標(biāo)簽與商戶(hù)分類(lèi)較為相似,直觀上講,規(guī)則的收益可能好于模型。使用頻繁集方案,一方面可以挖掘出規(guī)則考慮不到的關(guān)聯(lián)關(guān)系;另一方面,它的可解釋性較強(qiáng),且后期可以方便地進(jìn)行人工干預(yù)。
我們抽取一段時(shí)間的用戶(hù)點(diǎn)擊歷史數(shù)據(jù),來(lái)挖掘用戶(hù)興趣與廣告商戶(hù)分類(lèi)的關(guān)聯(lián)關(guān)系。同時(shí),考慮到轉(zhuǎn)化(包含電話、預(yù)約、購(gòu)買(mǎi)等種種行為)是一種強(qiáng)行為,我們將其等同于多次點(diǎn)擊行為,進(jìn)行升采樣(如一次電話等于兩次點(diǎn)擊,等等)。之后使用Spark的ML庫(kù)來(lái)進(jìn)行頻繁集挖掘。數(shù)據(jù)處理上,每條點(diǎn)擊紀(jì)錄會(huì)將廣告商戶(hù)的一級(jí)、二級(jí)、三級(jí)分類(lèi)分別與用戶(hù)標(biāo)簽關(guān)聯(lián),即一條記錄會(huì)拆分成多份,分別使用不同級(jí)別的分類(lèi)與用戶(hù)標(biāo)簽關(guān)聯(lián),這樣保證在計(jì)算頻繁集的時(shí)候,各個(gè)層級(jí)分類(lèi)都不會(huì)被遺漏。通過(guò)Spark的ML庫(kù)找出大量頻繁集后,剔除掉僅包含廣告分類(lèi)或僅包含用戶(hù)標(biāo)簽的,僅保留兩者共存集合。同時(shí)我們限制了用戶(hù)標(biāo)簽在頻繁項(xiàng)中的數(shù)量,使其不超過(guò)兩個(gè),以保證規(guī)則可以覆蓋較多線上用戶(hù)。接著,我們對(duì)標(biāo)簽與廣告分類(lèi)的關(guān)系進(jìn)行打分,廣告分類(lèi)A與興趣標(biāo)簽B的打分為:\(\frac{\sum(A \bigcap B)}{A}\)。
舉例見(jiàn)下表:
“美食/火鍋”更為大眾化,因此訪問(wèn)量遠(yuǎn)大于“親子/兒童樂(lè)園”,上列訪問(wèn)量雖為虛構(gòu),但與實(shí)際認(rèn)知相符。上列表格想要說(shuō)明的是,像“美食/火鍋”這樣的廣告分類(lèi),可能與很多用戶(hù)標(biāo)簽的共生次數(shù)都很高,但由于它本身是大眾化的分類(lèi),因此分母取值也很大,則實(shí)際關(guān)聯(lián)打分就會(huì)很小(除非是強(qiáng)相關(guān)興趣)。用這種方式打分,可以篩選出指定標(biāo)簽下關(guān)聯(lián)度較高的廣告二級(jí)分類(lèi)。
得到全部的頻繁集及相應(yīng)打分后,可線下進(jìn)行人工篩選,剔除掉明顯不符合認(rèn)知的頻繁項(xiàng)集。最終結(jié)果作為離線模型產(chǎn)出,寫(xiě)入MySQL。
檢索端加載
檢索端每天定時(shí)加載一次離線結(jié)果到內(nèi)存中。對(duì)于實(shí)時(shí)廣告請(qǐng)求,先從Redis讀取當(dāng)前用戶(hù)設(shè)備的用戶(hù)畫(huà)像,然后根據(jù)用戶(hù)實(shí)時(shí)位置等條件召回幾百條廣告后,對(duì)于當(dāng)前流量中有用戶(hù)畫(huà)像的,根據(jù)離線訓(xùn)練結(jié)果,對(duì)廣告進(jìn)行打分及排序,排序后會(huì)根據(jù)線上的設(shè)置進(jìn)行截?cái)唷S脩?hù)定向的整體應(yīng)用框架如下:
在業(yè)務(wù)引擎端,我們會(huì)進(jìn)行A/B分流實(shí)驗(yàn),隨機(jī)劃分一定百分比的流量作為實(shí)驗(yàn)流量,用于進(jìn)行用戶(hù)定向?qū)嶒?yàn)。之后,分析一段時(shí)間的累積實(shí)驗(yàn)結(jié)果,與base分流作對(duì)比,以檢測(cè)用戶(hù)定向策略帶來(lái)的轉(zhuǎn)化率提升,同時(shí)反饋給上游頻繁集模型,用于干預(yù)調(diào)整離線產(chǎn)出模型。
實(shí)時(shí)天氣情況對(duì)用戶(hù)有一定影響。直觀上來(lái)說(shuō),炎熱的天氣下,用戶(hù)會(huì)更傾向于點(diǎn)擊游泳館的廣告;而寒冷的天氣下,飄著熱氣的星巴克廣告會(huì)更受歡迎。有些廣告行業(yè)則跟天氣的關(guān)系不大,如非實(shí)時(shí)消費(fèi)的結(jié)婚、攝影、親子類(lèi)廣告。下面將介紹我們基于天氣場(chǎng)景的離線模型及在線打分方案。
數(shù)據(jù)準(zhǔn)備
天氣基礎(chǔ)數(shù)據(jù)包括溫度、雨量、雪量、天氣現(xiàn)象(大雨、霧霾等)、風(fēng)力等級(jí)等。我們需要的天氣數(shù)據(jù),并不需要實(shí)時(shí)更新,原因如下:
① 從應(yīng)用角度講,由于天氣情況在短時(shí)間內(nèi)比較穩(wěn)定,并不需要每時(shí)每刻都抓取天氣數(shù)據(jù); ② 第三方媒體對(duì)DSP(Demand-Side Platform)的響應(yīng)時(shí)間有嚴(yán)格限制,如果每次廣告請(qǐng)求都去請(qǐng)求天氣數(shù)據(jù),對(duì)廣告引擎的性能將造成較大影響。因此我們以小時(shí)粒度來(lái)保存天氣數(shù)據(jù),即在確定的某個(gè)城市、某個(gè)小時(shí)內(nèi),天氣情況是固定的。
天氣數(shù)據(jù)包含兩種: ① 線下模型使用的歷史天氣數(shù)據(jù); ② 線上檢索使用的當(dāng)前天氣數(shù)據(jù)。
兩者在相同特征上的數(shù)據(jù)取值涵義要保證一致,即特征的一致性。美團(tuán)配送團(tuán)隊(duì)對(duì)基礎(chǔ)天氣數(shù)據(jù)進(jìn)行清洗和加工,每日提供未來(lái)72小時(shí)內(nèi)的天氣預(yù)報(bào)數(shù)據(jù),同時(shí)保存了穩(wěn)定的歷史數(shù)據(jù),與我們的需求完全吻合,因?yàn)槲覀兪褂昧嗽摂?shù)據(jù)。
離線建模
天氣特征的離線模型選用了AdaBoost模型,該模型可使用若干簡(jiǎn)單的弱分類(lèi)器訓(xùn)練出一個(gè)強(qiáng)大的分類(lèi)器,且較少出現(xiàn)過(guò)擬合現(xiàn)象。考慮到要在線上檢索端加載弱分類(lèi)器進(jìn)行計(jì)算,基礎(chǔ)的弱分類(lèi)器不能太過(guò)復(fù)雜(以免影響線上性能),基于以上考慮我們選用了AdaBoost常用的樹(shù)樁模型(即深度為1的決策樹(shù))。
選定模型后,首先需要對(duì)原始數(shù)據(jù)進(jìn)行處理,將其處理成適合決策樹(shù)分類(lèi)的特征。我們選定溫度、濕度、降水量、降雪量、天氣情況等特征。以溫度舉例,將其作為連續(xù)變量處理,對(duì)于特征為溫度的決策樹(shù),訓(xùn)練合適的分割點(diǎn),將溫度歸類(lèi)到合適的葉子節(jié)點(diǎn)上;而對(duì)于天氣情況icon-code,由于其僅有幾個(gè)取值(正常、一般惡劣、非常惡劣等),因此當(dāng)做離散值對(duì)待,進(jìn)行one-hot編碼,散列到有限的幾個(gè)數(shù)值上(如1、2、3)。在樹(shù)樁模型中,左右葉子節(jié)點(diǎn)分別對(duì)離散值進(jìn)行排列組合(如左子樹(shù)取1、3,右子樹(shù)取2等),直到左右子樹(shù)的均方誤差值之和為最小。當(dāng)然,對(duì)于離散值較多的情況,出于性能上考慮,多以連續(xù)值對(duì)待,并訓(xùn)練合適的分割點(diǎn)分離左右子樹(shù)。
對(duì)特征進(jìn)行處理后,可以應(yīng)用模型對(duì)特征進(jìn)行迭代處理。我們以轉(zhuǎn)化為目標(biāo),搜集一段時(shí)間的歷史點(diǎn)擊數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行特征化處理,最終訓(xùn)練出合適的離線模型。直觀上來(lái)講,天氣對(duì)不同行業(yè)的轉(zhuǎn)化影響有顯著差異。某些行業(yè)對(duì)天氣更為敏感,如餐飲、運(yùn)動(dòng)等,而有些行業(yè)則對(duì)天氣不敏感,如親子、結(jié)婚(因?yàn)檗D(zhuǎn)化一般不發(fā)生在當(dāng)下)等,因此我們對(duì)不同的廣告分類(lèi)分別做訓(xùn)練,每個(gè)行業(yè)訓(xùn)練一個(gè)模型。考慮到在檢索端需要對(duì)廣告和天氣的特征關(guān)系進(jìn)行打分,因此分類(lèi)模型不能完全滿(mǎn)足我們的需求。最終我們選取了AdaBoost的改進(jìn)版Gentle AdaBoost,有關(guān)該模型的論述網(wǎng)上有很多(根據(jù)文獻(xiàn)1,在采用樹(shù)樁模型時(shí),該模型效果好于傳統(tǒng)的離散AdaBoost),本文不再對(duì)其進(jìn)行數(shù)學(xué)說(shuō)明。算法大致流程如下圖所示:
另外說(shuō)明一下我們對(duì)該模型的一些工程處理,我們?nèi)サ袅俗詈蟮母兄髂P?#xff0c;直接使用回歸函數(shù)的和作為打分。在每次迭代過(guò)程中,我們會(huì)保留當(dāng)前錯(cuò)誤率,當(dāng)?shù)_(dá)到一定次數(shù),而錯(cuò)誤率仍大于給定閾值時(shí),則直接舍棄對(duì)該行業(yè)的訓(xùn)練,即在天氣場(chǎng)景定向中,不對(duì)該行業(yè)的廣告打分。
工程上,我們使用Spark進(jìn)行特征處理和模型訓(xùn)練,并將最終結(jié)果寫(xiě)入在線緩存Tair中。其中key為一級(jí)及二級(jí)行業(yè),value即為AdaBoost模型的多輪迭代結(jié)果,同時(shí)保留了最后一輪迭代的錯(cuò)誤率。保留錯(cuò)誤率的原因是在線上檢索端加載模型時(shí),可以動(dòng)態(tài)配置錯(cuò)誤率閾值,根據(jù)模型的錯(cuò)誤率超過(guò)閾值與否來(lái)決定是否對(duì)廣告打分。另外,考慮到線上加載迭代模型會(huì)犧牲性能,我們將迭代輪次控制在100次以?xún)?nèi)。
天氣場(chǎng)景的離線數(shù)據(jù)和線上數(shù)據(jù)模型如下圖所示:
經(jīng)過(guò)Gentle AdaBoost訓(xùn)練出的多棵樹(shù)模型,以JSON格式寫(xiě)入Tair中;線上在獲取ADX請(qǐng)求后,根據(jù)Tair中已經(jīng)寫(xiě)好的天氣預(yù)報(bào)信息,加載當(dāng)前小時(shí)當(dāng)前城市的天氣情況,檢索端根據(jù)當(dāng)前天氣和模型,對(duì)廣告進(jìn)行打分和排序。
線上優(yōu)化
廣告檢索端需要從Tair讀取離線模型,來(lái)完成廣告打分。由于第三方媒體對(duì)DSP響應(yīng)時(shí)間要求較高,在線上做迭代模型的加載,是一個(gè)較為耗時(shí)的操作,因此需要做一些優(yōu)化處理。我們一共做了三層優(yōu)化處理:
模型緩存:對(duì)于檢索端召回的幾百條廣告,對(duì)廣告一級(jí)/二級(jí)分類(lèi)進(jìn)行緩存處理,對(duì)某條廣告打分后,其對(duì)應(yīng)的二級(jí)分類(lèi)及相應(yīng)模型加入緩存,而后續(xù)遇到來(lái)自同樣二級(jí)行業(yè)的廣告,將直接使用緩存模型。
打分緩存:由于我們使用了小時(shí)級(jí)的天氣數(shù)據(jù),因此對(duì)于指定的城市,在指定的小時(shí)內(nèi),天氣狀況完全一致,當(dāng)廣告一級(jí)/二級(jí)行業(yè)確定后,模型對(duì)于該廣告的打分是確定的。因此我們對(duì)廣告行業(yè)+城市的打分進(jìn)行緩存處理,且每個(gè)整點(diǎn)清空一次緩存。對(duì)于已經(jīng)打分過(guò)的城市+廣告行業(yè),可以直接從緩存中讀取并使用打分結(jié)果。
性能與打分的折中:使用了前面兩種緩存方案后,性能仍無(wú)法得到足夠保證,此時(shí)我們需要考慮一個(gè)折中方案,犧牲一部分廣告打分,以換取性能的提升。即我們使用動(dòng)態(tài)配置的閾值來(lái)控制每次檢索請(qǐng)求中模型迭代的輪次。舉個(gè)例子,閾值設(shè)為200次,在整點(diǎn)時(shí)刻,前五個(gè)召回的廣告的行業(yè)各不相同,且使用的模型分別迭代80、90、60、60、30次結(jié)束,則本次請(qǐng)求中我們只對(duì)前三個(gè)廣告打分(80+90+60<200),并將廣告打分進(jìn)行緩存。后續(xù)召回廣告,其二級(jí)分類(lèi)若能命中緩存,則打分,否則不打分。在第二次廣告請(qǐng)求過(guò)來(lái)時(shí),同樣沿用這個(gè)策略,對(duì)已經(jīng)緩存的廣告打分直接加載,否則迭代模型進(jìn)行打分,直到達(dá)到迭代閾值200為止。通過(guò)打分緩存機(jī)制,可以保證前面犧牲掉的廣告行業(yè)被逐步打分。使用該優(yōu)化策略,可以完全確保上線后的性能,通過(guò)調(diào)整迭代輪次的閾值,控制打分與性能的折中關(guān)系。
通過(guò)以上三層優(yōu)化處理機(jī)制,保證了AdaBoost這樣的迭代模型可以在線上被加載使用。另外,我們還會(huì)考察離線模型中的錯(cuò)誤率,通過(guò)線上動(dòng)態(tài)調(diào)整閾值,舍棄一些錯(cuò)誤率較高的模型,以達(dá)到效果的最優(yōu)化。模型上線后,我們進(jìn)行A/B testing,以檢測(cè)使用天氣場(chǎng)景模型帶來(lái)的轉(zhuǎn)化率提升。
用戶(hù)在美團(tuán)點(diǎn)評(píng)站內(nèi)搜索的關(guān)鍵詞,強(qiáng)烈地表達(dá)了用戶(hù)的短期偏好。基于關(guān)鍵詞定向(Query Targeting)是許多廣告精準(zhǔn)定向的利器。尤其對(duì)于閉環(huán)條件下的應(yīng)用,如百度鳳巢,淘寶的直通車(chē),當(dāng)用戶(hù)在站內(nèi)進(jìn)行搜索,可以直接根據(jù)搜索詞展示相關(guān)廣告,引導(dǎo)用戶(hù)在站內(nèi)轉(zhuǎn)化。一般來(lái)說(shuō),關(guān)鍵詞定向的效果都非常出色。聯(lián)盟的關(guān)鍵詞定向,是通過(guò)對(duì)用戶(hù)近期搜索詞的分析,識(shí)別出用戶(hù)感興趣的店鋪及店鋪分類(lèi),進(jìn)而在站外App為用戶(hù)投放相關(guān)廣告。下面將介紹聯(lián)盟廣告基于關(guān)鍵詞特征的廣告排序機(jī)制。
離線模型
離線模型需要根據(jù)用戶(hù)搜索詞分析出用戶(hù)的偏好,對(duì)于大多數(shù)搜索引擎來(lái)說(shuō),需要使用NLP的相關(guān)技術(shù)和復(fù)雜的基礎(chǔ)特征建設(shè)工作。對(duì)于美團(tuán)點(diǎn)評(píng)的關(guān)鍵詞搜索場(chǎng)景,由于大部分搜索詞與美團(tuán)點(diǎn)評(píng)店鋪及店鋪分類(lèi)強(qiáng)相關(guān)(大部分搜索詞甚至直接是店鋪名稱(chēng)),且新詞搜索量增長(zhǎng)幅度不大,同時(shí)考慮到開(kāi)發(fā)成本,我們的關(guān)鍵詞定向舍棄了基礎(chǔ)特征構(gòu)建的方案,而是直接采用一套合理的離線分析模型,來(lái)構(gòu)建搜索詞和店鋪分類(lèi)的關(guān)系。
我們選用了TF/IDF模型,來(lái)構(gòu)建關(guān)鍵詞和用戶(hù)偏好的關(guān)系。用這個(gè)方案原因是文章-詞模型與詞-店鋪模型非常相似。該方案主要用于計(jì)算店鋪分類(lèi)(或商圈)與關(guān)鍵詞的相關(guān)程度,也是對(duì)其打分的依據(jù)。該模型相關(guān)資料很多,不再做原理性闡述,此處僅舉一例如下:
用戶(hù)搜索詞為“潮汕火鍋”,計(jì)算“美食/火鍋”的商家分類(lèi)與該關(guān)鍵詞的相似程度。
假設(shè): c1 = 搜索“潮汕火鍋”后的全部點(diǎn)擊數(shù), c2 = 搜索“潮汕火鍋”后點(diǎn)擊“美食/火鍋”類(lèi)目店鋪的全部點(diǎn)擊數(shù), c3 = 搜索詞總數(shù), c4 = 搜索點(diǎn)擊“美食/火鍋”類(lèi)目的詞總數(shù)。則 $$tfidf = (c2 / c1) × log(c3 / (c4 + 1))$$由此計(jì)算出店鋪分類(lèi)與關(guān)鍵詞的關(guān)系,取topN(根據(jù)存儲(chǔ)大小及不同店鋪對(duì)同一詞的TF-IDF差距擬定)個(gè)店鋪分類(lèi)。
單店及商圈計(jì)算方法與此類(lèi)似,它們的計(jì)算值會(huì)同時(shí)與店鋪分類(lèi)的TF-IDF進(jìn)行比較,不作區(qū)分。(此處有一點(diǎn)需注意:如果用戶(hù)搜索“中山公園 火鍋”,可以預(yù)見(jiàn)店鋪分類(lèi)與商圈會(huì)同等重要,則最終產(chǎn)出兩條獨(dú)立打分規(guī)則,分別掛在店鋪分類(lèi)和商圈下面)。
我們使用Spark來(lái)構(gòu)建離線模型,提取用戶(hù)的搜索詞和搜索后點(diǎn)擊的店鋪及店鋪分類(lèi),運(yùn)用上述方案來(lái)計(jì)算每個(gè)搜索詞的關(guān)聯(lián)店鋪及店鋪分類(lèi),設(shè)置閾值,保留分?jǐn)?shù)較大的分類(lèi)結(jié)果。
為了提升線上命中率,我們使用了點(diǎn)評(píng)分詞系統(tǒng),對(duì)長(zhǎng)度較長(zhǎng)的搜索詞進(jìn)行分詞,同時(shí)保存原始詞和切分后基礎(chǔ)詞的TF-IDF結(jié)果。為了方便線上快速檢索,結(jié)果同樣保存在Tair中。以檢索詞為key,關(guān)聯(lián)店鋪分類(lèi)和店鋪的TF-IDF打分作為value進(jìn)行保存。
實(shí)時(shí)流計(jì)算
對(duì)于關(guān)鍵詞定向,與用戶(hù)定向的一個(gè)區(qū)別在于前者時(shí)效性要求很高,因此需要使用實(shí)時(shí)計(jì)算系統(tǒng)來(lái)處理用戶(hù)行為,并將最后的結(jié)果保存在Tair集群。首先通過(guò)Kafka訂閱用戶(hù)行為實(shí)時(shí)流,以五分鐘為時(shí)間片處理用戶(hù)行為,查找用戶(hù)ID和搜索詞,如果搜索詞過(guò)長(zhǎng),則進(jìn)行分詞,接著從Tair中查找出與該搜索詞相關(guān)的店鋪及店鋪分類(lèi)和打分(離線模型給出)。接下來(lái)會(huì)Tair中查找該用戶(hù)ID是否有歷史結(jié)果,若有,則讀出,對(duì)之前的打分進(jìn)行衰減(衰減方案見(jiàn)下文),并與當(dāng)前新的打分進(jìn)行合并;否則,將新的數(shù)據(jù)及時(shí)間戳寫(xiě)入Tair。該方案的流程圖如下:
比較重要的部分是合并新來(lái)的數(shù)據(jù)與Tair里的老數(shù)據(jù),合并時(shí),如果新數(shù)據(jù)包含老數(shù)據(jù)中某些店鋪(店鋪分類(lèi)),就直接使用新數(shù)據(jù)中的店鋪(店鋪分類(lèi))權(quán)重;否則,對(duì)老數(shù)據(jù)中的店鋪(店鋪分類(lèi))權(quán)重進(jìn)行衰減,若衰減后權(quán)重小于給定的閾值,則直接將這個(gè)店鋪(店鋪分類(lèi))從合并數(shù)據(jù)中剔除。
衰減方案根據(jù)時(shí)間進(jìn)行衰減。默認(rèn)半衰期(即衰減權(quán)重從1衰減到0.5的時(shí)間長(zhǎng)度)為72小時(shí)(不同的店鋪分類(lèi)給予不同的半衰期),使用牛頓冷卻定律,參數(shù)計(jì)算公式為: 0.5 = 1 × e-α*時(shí)間間隔 ,解出α,并帶入下面公式得到實(shí)際權(quán)重為:$$ w’ = w × e ^{-\alpha × 時(shí)間間隔} $$ 其中,w為老權(quán)重,w’為新權(quán)重。
檢索端排序
檢索端接收到廣告請(qǐng)求,根據(jù)當(dāng)前獲取的用戶(hù)ID,從Tair中讀取用戶(hù)偏好的店鋪分類(lèi),與召回的廣告進(jìn)行匹配,當(dāng)廣告分類(lèi)與召回廣告匹配成功,則可將Tair讀出的分?jǐn)?shù)進(jìn)行時(shí)間衰減后,作為該廣告的最終打分。檢索端采用與實(shí)時(shí)流同樣的時(shí)間衰減方案,以保證一致性。舉例如下:
用戶(hù)A在早上8:30有火鍋類(lèi)搜索行為,Spark Streaming處理后進(jìn)入Redis,假設(shè)此時(shí)最新時(shí)間戳為8:30,而該用戶(hù)在11:00搜索親子類(lèi)商鋪,Spark Streaming處理該條記錄后,之前的火鍋權(quán)重需要衰減,同時(shí)時(shí)間戳更新為11:00,假設(shè)此時(shí)立即有廣告檢索請(qǐng)求命中該用戶(hù),則此時(shí)用戶(hù)火鍋類(lèi)偏好權(quán)重為11:00時(shí)權(quán)重;假設(shè)下午16:00有ADX請(qǐng)求命中該用戶(hù),則用戶(hù)火鍋類(lèi)權(quán)重需要根據(jù)16:00到11:00的時(shí)間間隔繼續(xù)衰減。
除了上述三種定向策略,還有其他基于上下文的定向,重定向等,它們方案各異,但大致思路與前述方案類(lèi)似,本文不再詳述。
在經(jīng)過(guò)上述各類(lèi)定向場(chǎng)景分別打分之后,需要對(duì)每個(gè)場(chǎng)景打分進(jìn)行綜合,因?yàn)椴煌膹V告行業(yè)在不同場(chǎng)景下的重要性是不同的。如餐飲行業(yè)更注重距離和天氣,而麗人、親子等行業(yè)較注重媒體和用戶(hù)畫(huà)像。因此,不同行業(yè)下,各個(gè)定向打分的權(quán)重是不同的。我們使用模型的方式對(duì)各個(gè)場(chǎng)景打分進(jìn)行權(quán)重的訓(xùn)練和預(yù)測(cè)。
綜合打分我們采用了LR模型,分不同廣告行業(yè),以點(diǎn)擊為樣本,轉(zhuǎn)化為模型,以各個(gè)場(chǎng)景下的前期打分為特征,進(jìn)行混合打分權(quán)重的離線建模。 公式如下:$$h_\theta=g(\theta^{T})=\frac{1}{1+e^{-\theta^{T}x}}$$
其中θ是向量,θ0x0 + θ1x1 + …, + θnxn = \(\sum_{i=0}^n \theta _ix _i={\theta}^Tx\),其中,\(x _1\),…,\(x _n\)是各個(gè)場(chǎng)景定向下的具體打分,打分分布在[0,1]之間。
冷啟動(dòng)時(shí),對(duì)每個(gè)場(chǎng)景打分給予一個(gè)默認(rèn)權(quán)重,積累一定量數(shù)據(jù)后,使用離線模型訓(xùn)練出各個(gè)廣告行業(yè)下的θ向量,并在引擎端加載使用。引擎端加載各個(gè)場(chǎng)景的廣告打分,并根據(jù)廣告行業(yè)加載打分權(quán)重,最終完成每個(gè)廣告與當(dāng)前的流量綜合打分。
場(chǎng)景化定向綜合考慮了當(dāng)前流量的種種場(chǎng)景因素(用戶(hù)、天氣、媒體等),分別根據(jù)業(yè)務(wù)需求設(shè)計(jì)了不同的模型來(lái)構(gòu)建廣告打分機(jī)制,并對(duì)單個(gè)場(chǎng)景的廣告打分進(jìn)行綜合。通過(guò)這種場(chǎng)景化的廣告粗排機(jī)制,對(duì)召回的廣告進(jìn)行排序和篩選,可以保留相關(guān)性較強(qiáng)的廣告,以用于后續(xù)的CTR排序和處理。從實(shí)際的A/B testing來(lái)看,使用了場(chǎng)景化排序機(jī)制的流量,其點(diǎn)擊率和轉(zhuǎn)化率的提升效果都較為顯著。
展望未來(lái),如何豐富各類(lèi)場(chǎng)景特征(如天氣、媒體的更多特征),引入更多的場(chǎng)景因素(如所處環(huán)境周邊店鋪、當(dāng)前時(shí)間用戶(hù)行為等),嘗試不同的模型方案,都是下一步的可探索方向。
- Friedman J, Hastie T, Tibshirani R.(2000), Additive Logistic Regression: A Statistical View of Boosting, Annals of Statistics, 28, 337-307.
美團(tuán)點(diǎn)評(píng)廣告聯(lián)盟團(tuán)隊(duì)招聘各類(lèi)數(shù)據(jù)挖掘、算法,以及Java后臺(tái)開(kāi)發(fā)的技術(shù)人才,有興趣的同學(xué)可以發(fā)送簡(jiǎn)歷到suxin03#meituan.com。
馬瑩,美團(tuán)點(diǎn)評(píng)高級(jí)算法工程師,2012年畢業(yè)于浙江大學(xué),同年加入百度聯(lián)盟研發(fā)部。2016年加入美團(tuán)點(diǎn)評(píng)聯(lián)盟廣告部門(mén),長(zhǎng)期從事廣告行業(yè)策略算法研究開(kāi)發(fā)工作。專(zhuān)注于計(jì)算廣告、用戶(hù)畫(huà)像、數(shù)據(jù)挖掘等方向。
一凡,美團(tuán)點(diǎn)評(píng)高級(jí)算法工程師,現(xiàn)負(fù)責(zé)美團(tuán)點(diǎn)評(píng)廣告平臺(tái)聯(lián)盟廣告網(wǎng)盟方向。2011年畢業(yè)于華中科技大學(xué),畢業(yè)后先后就職于百度、騰訊,2014年加入點(diǎn)評(píng)平臺(tái),2016年加入美團(tuán)點(diǎn)評(píng)聯(lián)盟廣告部,長(zhǎng)期致力于計(jì)算廣告算法優(yōu)化、推薦算法、大數(shù)據(jù)挖掘等方向。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的美团点评联盟广告场景化定向排序机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Netty堆外内存泄露排查盛宴
- 下一篇: LsLoader——通用移动端Web A