关于点击率模型,你知道这三点就够
關(guān)于點擊率模型,你知道這三點就夠 說到廣告,或者運營,關(guān)注的最多的就是點擊率了。我們經(jīng)常能聽說某某科學(xué)家通過建立更好的點擊率預(yù)測模型,為公司帶來上億的增量收入。點擊率這么簡單直接的統(tǒng)計量,為什么要用復(fù)雜的數(shù)學(xué)模型來刻畫呢?
說到計算廣告,或者個性化推薦,甚至一般的互聯(lián)網(wǎng)產(chǎn)品,無論是運營、產(chǎn)品還是技術(shù),最為關(guān)注的指標(biāo),就是點擊率。業(yè)界也經(jīng)常流傳著一些故事,某某科學(xué)家通過建立更好的點擊率預(yù)測模型,為公司帶來了上億的增量收入。點擊率這樣一個簡單直接的統(tǒng)計量,為什么要用復(fù)雜的數(shù)學(xué)模型來刻畫呢?這樣的模型又是如何建立與評估的呢?我們這一期就來談?wù)勥@個問題。
一、為什么要建立一個點擊率模型?
無論是人工運營還是機器決策,我們都希望對某條廣告或內(nèi)容可能的點擊率有一個預(yù)判,以便判斷哪些條目應(yīng)該被放在更重要的位置上。這件事兒看起來并不難,比如說我有十條內(nèi)容,在歷史上呈現(xiàn)出來的點擊率各個不同,那么只需要根據(jù)歷史點擊率的統(tǒng)計做決策即可,似乎并沒有什么困難。
然并卵。直接統(tǒng)計歷史點擊率的方法,雖然簡單易操作,卻會碰到一個非常棘手的問題。首先,大家要建立一個概念:不考慮位置、時間等一系列環(huán)境因素,絕對的點擊率水平是沒有什么太大意義的。比方說,下面的一個廣告,分別被放在圖中的兩個位置上,統(tǒng)計得到前者的點擊率是2%,后者的點擊率是1%,究竟哪個廣告好一些呢?其實我們得不出任何結(jié)論。
于是,聰明的運營想到一個辦法,干脆我在不同的位置上分別統(tǒng)計點擊率,然后分別排序。這個思路從道理上來說無懈可擊,相當(dāng)于直接求解聯(lián)合分布;不過,其實用價值并不高:在每個位置上分別統(tǒng)計,大多數(shù)廣告或內(nèi)容條目的數(shù)據(jù)都太少,比如說100次展示,產(chǎn)生了一次點擊,這難道能得出1%點擊率的結(jié)論么?
那能不能再換一個思路,找到一些影響點擊率的一些關(guān)健因素,對這些因素分別統(tǒng)計?這實際上已經(jīng)產(chǎn)生了“特征”這樣的建模思路了。比如說,廣告位是一個因素,廣告本身是一個因素,用戶的性別是一個因素,在每個因素上分別統(tǒng)計點擊率,從數(shù)據(jù)充分性上是可行的。不過這又產(chǎn)生了一個新的問題:我知道了男性用戶的平均點擊率、廣告位S平均點擊率、某廣告A的平均點擊率,那么如何評估某男性用戶在廣告位S上看到廣告A的點擊率呢?直覺的方法,是求上面三個點擊率的幾何平均。不過這里面有一個隱含的假設(shè):即這三個因素是相互獨立的。然而當(dāng)特征多起來以后,這樣的獨立性假設(shè)是很難保證的。
特征之間獨立性,經(jīng)常對我們的結(jié)論影響很大。比如說,中國的癌癥發(fā)病率上升,到底是“中國”這個因素的原因呢?還是“平均壽命”這個因素的原因呢?顯然這兩個因素有一些相關(guān)性,因此簡單的分別統(tǒng)計,往往也是行不通的。
那么怎么辦呢?這就要統(tǒng)計學(xué)家和計算機科學(xué)家出馬,建立一個綜合考慮各種特征,并根據(jù)歷史數(shù)據(jù)調(diào)整出來的點擊率模型,這個模型既要考慮各種特征的相關(guān)性,又要解決每個特征數(shù)據(jù)充分性的問題,并且還要能在大量的數(shù)據(jù)上自動訓(xùn)練優(yōu)化。這就是點擊率模型的意義,這是一項偉大的、光榮的、正確的、有著極大實用價值和戰(zhàn)略意義的互聯(lián)網(wǎng)+和大數(shù)據(jù)時代的重要工作。那位說了,有必要抬得這么高么?當(dāng)然有必要!因為這門手藝我也粗通一點兒,不吹哪行。
二、怎樣建立一個點擊率模型?
這個問題比較簡單,我們就不多談了。(想罵街的讀者,請稍安勿躁,繼續(xù)往下看。)
三、如何評估一個點擊率模型?
評估點擊率模型的好壞,有各種定性的或定量的、線上的或線下的方法。但是不論什么樣的評測方法,其本質(zhì)都是一樣,就是要看這個模型區(qū)別被點擊的展示與沒被點擊的展示之間的區(qū)別。當(dāng)然,如果能找到一個離線可以計算的量化指標(biāo),是再好不過了。
這樣的指標(biāo)是有一個,就是如下圖所示的ROC曲線下的面積,術(shù)語上稱為AUC。(關(guān)于ROC和AUC的詳細(xì)介紹,請大家參考《計算廣告》第*章。)AUC這個數(shù)值越大,對應(yīng)的模型區(qū)別能力就越強。
好了,為了讓大家深入理解點擊率模型評測的關(guān)鍵,我們要談到一個常見的口水仗:有一天,有兩位工程師在閑談,一位叫小優(yōu),一位叫小度。他們分別負(fù)責(zé)某視頻網(wǎng)站和某網(wǎng)盟廣告的點擊率建模。小優(yōu)說:最近可把我忙壞了,上線了個全新的點擊率模型,把AUC從0.62提高到0.67,效果真不錯!哪知道小度聽了哈哈大笑:這數(shù)據(jù)你也好意思拿出來說,我們的AUC早就到0.9以上了!
那么,是不是小度的模型比小優(yōu)真的好那么多呢?當(dāng)然不是,我們看看該視頻網(wǎng)站和網(wǎng)盟的廣告位分布,就一目了然了。
什么?你還沒有明白,那么我建議你自己好好把這個問題想清楚。不論你是運營還是產(chǎn)品,經(jīng)過了這樣的思考,你的數(shù)據(jù)解讀能力會上一個臺階。
好了,三個關(guān)鍵點說完了,我知道有的讀者還會對第二點表示沒看懂,那干脆我們就再多說一點兒,將2015年11月15日王超在計算廣告讀者微信群里所做的題為“點擊率預(yù)估趨勢淺析”的分享內(nèi)容整理發(fā)布在下面。沒有堅持到這里就把文章關(guān)掉的碼農(nóng)們,讓他們后悔一輩子去吧!
今天分享一下點擊率預(yù)估近年來的一些趨勢。主要結(jié)合劉鵬老師的一些指導(dǎo),以及自身工作的一些經(jīng)驗,有偏頗的地方請大家多多指正。
在計算廣告第一版的書里,主要講到了經(jīng)典的點擊率預(yù)估模型邏輯回歸,特征工程,模型的評估等,相信對大多數(shù)場景來說這一步是必做的基線版本。后續(xù)可以在此基礎(chǔ)上做一些更細(xì)致的特征工程和模型工作??紤]到群里的朋友都已經(jīng)拿到了這本書,今天先跳過書里覆蓋的內(nèi)容,講一些目前書里沒有提及的部分。如果對書里內(nèi)容還不夠了解的朋友,建議第一步還是把書中基礎(chǔ)性的內(nèi)容仔細(xì)掌握。
LR+人工特征工程風(fēng)光不再
講近年來點擊率預(yù)估的發(fā)展趨勢,我想先從近年來一次最具參考意義和號召力的criteo舉辦的點擊率預(yù)估比賽作為切入點說起。
為什么要拿這次比賽來說?首先criteo是全球一家專注在效果廣告的公司,在業(yè)界很有影響力,計算廣告書中對其也有介紹,比賽的數(shù)據(jù)質(zhì)量不錯。其次前三名有10w美金的激勵,繼KDD cup 2012 track2之后,算是點擊率預(yù)估問題上最知名的一次比賽,很多kdd cup的往屆冠軍都前來參加。最后呢這次比賽都是脫敏過的特征,沒有具體的特征含義,使得難以結(jié)合領(lǐng)域知識做更細(xì)致的特征工程,更多考量模型的工作,比較適合我們今天討論的話題,另外比賽時間是從去年6月到9月三個月的時間,參賽者們的方案相對也會比較細(xì)致。
從leadboard中可以看到在700多支team里,Kdd 2012年起的各屆冠軍,這些比賽型的選手,基本占據(jù)了前十的位置,我是第7。其次,從使用的模型上,基本以fm和gbdt,還有神經(jīng)網(wǎng)絡(luò)這些非線性模型為主。可以這么說,在比賽里,邏輯回歸加大量的人工特征工程的方案已經(jīng)很難排到比賽前列,靠邏輯回歸一個模型包打天下,已經(jīng)成為過去時。
特征,特征
在接下來講具體模型之前,先來回顧一下我們?yōu)槭裁匆龃罅康奶卣鞴こ?。點擊率預(yù)估的主要場景,是在各種長尾的流量上,對一個給定的<用戶,廣告,上下文>三元組做出精準(zhǔn)估計。在這種long tail的場景下,用戶或上下文對廣告的偏好,基本都是一些相對weak的signal,我們需要把這些弱信號package在一起,才能去更好的發(fā)現(xiàn)當(dāng)前場景下用戶感興趣的廣告。
特征工程是各個公司相對模型來說更看重保密的部分,因為從其中會大致了解到該公司的數(shù)據(jù)分布,這方面的公開資料不會太多。大體來說,有這么倆部分工作:
首先了解行業(yè)的領(lǐng)域知識,去尋找和設(shè)計強信號依然重要,比如搜索廣告里query和廣告創(chuàng)意的相關(guān)性是強信號,電商領(lǐng)域圖片和價格特征是強信號等。這部分工作是和各家公司業(yè)務(wù)緊密相關(guān)的。
其次如果采用的是邏輯回歸這種廣義線性模型,需要手動構(gòu)造特征變換,才能更好處理非線性問題。常見的特征變換方法比如特征組合,特征選擇,特征離散化歸一化等,多數(shù)時候通過eyeballing和統(tǒng)計學(xué)的方法來完成。工程師自然是希望能將更多的精力放在設(shè)計業(yè)務(wù)上的強信號特征上面,而特征變換自動的由模型來完成。出于這樣的考慮,非線性模型逐漸在取代LR,比如通過FM,GBDT去自動挖掘組合特征,通過GBDT去做特征選擇,離散化等,正如上述比賽中看到的。
最后基于一些深度學(xué)習(xí)的方法,也能夠做一些特征發(fā)現(xiàn)的事情,舉個典型的例子就是語音識別里,dnn已經(jīng)把MFCC這種人工特征取代了,wer有顯著的降低。而在廣告領(lǐng)域,DNN目前基本在百度等大公司也正在探索中,發(fā)展比較快,這部分今天簡單提一下。
模型選擇
點擊率預(yù)估的模型,如果包括各個模型的變種,可能不下數(shù)十種。根據(jù)自己的業(yè)務(wù)如何選擇相關(guān)的模型,我想從三個維度說下個人選擇模型時候的觀點,偏頗之處請大家多多指正。
第一,線性模型還是非線性模型。一般在模型的初期線性模型會作為首選方法采用,有經(jīng)驗的工程師對業(yè)務(wù)領(lǐng)域中的強信號比較熟悉,能夠快速rush完幾個版本的特征工程后達(dá)到一個不錯的基線水平。而當(dāng)從業(yè)務(wù)中抽象出強信號越來越困難時,往往就會伴隨著比較暴力的特征工程去捕捉業(yè)務(wù)里的弱信號。隨著這一過程的深入,模型訓(xùn)練的代價在快速增長,而收益卻逐漸逼近上限。而非線性模型的長期優(yōu)勢則比較明顯,模型泛化能力強,調(diào)參成本相對較小,能在訓(xùn)練代價和模型精度上達(dá)到更好的tradeoff,百度等大公司都已經(jīng)從LR過渡到了DNN。
第二,基于Sparse的特征(靜態(tài)特征)建模,還是Dense的特征(動態(tài)特征)建模。這一點可能沒有細(xì)看書的朋友不太熟悉,簡單說就是當(dāng)某個特征被觸發(fā)時,不再用1,而是用這個特征歷史上一段時間(或者多個時間窗口)的點擊率作為其特征取值。當(dāng)特征動起來以后,通過特征側(cè)捕捉動態(tài)信號,模型就不用快速更新了,可以說dense建模的方案相對更加簡單優(yōu)雅。曾經(jīng)做過這樣的實驗,當(dāng)采用動態(tài)特征加Offline模型,和靜態(tài)特征加Online模型,倆者收益是相當(dāng)?shù)摹?/p>
這里補充重點說明一點,如果基于sparse特征建模的話,knowledge完全存儲在模型處,而基于dense特征建模,知識存放在模型和特征(點擊率)倆處,喂給模型的點擊率特征是否置信,直接決定了這個方案的魯棒性。這里有倆個問題,一個是在某些場景下,點擊率是有bias的,比如展示廣告里,頭部流量上點擊率被高估,點擊率高是因為其廣告位置比較好,如果不消去bias,則會產(chǎn)生強者愈強的馬太效應(yīng)。另一個問題是長尾流量上,對于某個特征值的pv較少,ctr不再置信,也需要去平滑。計算廣告書中針對這倆個問題介紹了相關(guān)的方案COEC+平滑可供參考。
第三,應(yīng)用Online的更新方式去更新模型,還是batch的方式。Online的方式對應(yīng)的最優(yōu)化算法主要是minibatch sgd,Offline的方式可以應(yīng)用計算廣告書里說的LBFGS,Trust region這些。按我個人經(jīng)驗,minibatch sgd的更新方式對頭部的數(shù)據(jù)學(xué)習(xí)的會更快更充分,因此更善于fine tuning the head part。而Offline的方式全局優(yōu)化歷史數(shù)據(jù),對于長尾稀疏特征,就比sgd的方式要精細(xì)些了。如果業(yè)務(wù)場景時效性較強,更關(guān)注頭部,用一個Online keep更新的模型就足夠了,比如新聞推薦的場景。但是如果業(yè)務(wù)場景有很多長尾流量,需要精細(xì)的預(yù)估,一個batch的Offline model是必要的,為了業(yè)務(wù)的時效性考慮,可以用batch的模型結(jié)果去初始化Online的模型更新,定期的batch結(jié)合Online的delta更新,比如搜索廣告的場景。
模型演進(jìn)概述
上述的模型選擇都是結(jié)合業(yè)務(wù)場景做出的選擇,這里按我個人理解給出一個連貫一些的點擊率預(yù)估模型演進(jìn)的過程:
之前提及過,一般會以高維sparse特征的LR模型作為基線模型,也有用dense特征直接結(jié)合LR來建模的。由于LR是線性分類器,后者需要對dense特征手工加各種非線性變換,遇到瓶頸后會轉(zhuǎn)向前者,或者改成使用GBDT,NN等非線性模型。而高維sparse特征結(jié)合LR的方案,人工在特征工程遇到一定瓶頸后,會采用FM等方案自動做特征發(fā)現(xiàn),為了解決時效性的問題,會結(jié)合batch的訓(xùn)練加上Online的更新方式,或者直接轉(zhuǎn)向完全Online的方案如ftrl。還有一個方向是會結(jié)合自身的業(yè)務(wù)場景,對模型的損失函數(shù)做一些創(chuàng)新,比如yahoo的laser,阿里的coupled group lasso,比賽里的field aware的ffm等等。
在比賽里為了提升效果,很常見的一個策略是把各個模型融合在一起,最簡單的有把各個模型的結(jié)果做線性加權(quán),也有把各個模型進(jìn)行stacking的方案,比如Facebook的gbdt+lr,再有把各個模型的信息喂給dnn去學(xué)習(xí)的。對這三種方案來說,效果最好的,我個人比較相信,是用dnn去做模型的blending(融合)。注意這里說的DNN不是指具體的某個模型dbn,cnn,而是指將各種淺層模型的中間權(quán)重,預(yù)估結(jié)果,原始的靜態(tài),動態(tài)特征等作為DNN的輸入,使用dnn后饋的輸入梯度來聯(lián)合更新這些結(jié)構(gòu)的參數(shù)。對DNN大家可能比較詬病的是其訓(xùn)練效率,但我覺得在大公司可能還好,聽在百度的朋友說DNN的開發(fā)代價和訓(xùn)練開銷隨著探索在逐步降低,不一定比gbdt等非線性模型代價高很多。
當(dāng)然,對小公司來說,直接走到DNN有點用力過猛,我在這里簡要介紹一下FM+gbdt去融合的方案:第一步當(dāng)然也是基于大規(guī)模稀疏特征LR。第二步,為了更好的刻畫長尾,自動發(fā)現(xiàn)組合特征,采用了FM。在同樣的訓(xùn)練時間下,AUC提升,模型泛化性能可控。第三步:為了更好的fine tuning頭部和提升時效性,采用了用gbdt加動態(tài)特征的模型。最后呢,把這兩個模型簡單的做線性融合,由于倆個模型的特征和模型差異性較大,融合后auc也有顯著的提升。
對于gbdt,開源的實現(xiàn)有很多,但效果差別比較大,這里推薦一個開源實現(xiàn)xgboost,很多kaggle上的比賽借助這個工具都拿到了好名次。之前我寫過一篇叫做xgboost導(dǎo)讀和實戰(zhàn)的文章,對原始paper中的公式給出了一些推導(dǎo)細(xì)節(jié),這里不再詳述。簡單的說原始paper里是在函數(shù)空間上梯度下降求解,在求解步長時一般都是固定學(xué)習(xí)率。而xgboost對損失函數(shù)做了二階的泰勒展開,考慮了損失函數(shù)的二階梯度信息,并加入了正則項整體求最優(yōu)解,有比較好的泛化性能。另外在具體建樹的分裂節(jié)點過程也不是大多數(shù)實現(xiàn)里基于信息增益等,而是結(jié)合具體目標(biāo)函數(shù)的真實下降量。有人做過各實現(xiàn)的評測,xgboost在性能和效果上都是相當(dāng)不錯的。
BSP->SSP
幾個典型的模型基本就簡要講到這里,最后講一下模型求解的優(yōu)化算法,計算廣告書里給出了不少經(jīng)典的優(yōu)化凸優(yōu)化算法的原理和實現(xiàn)代碼,LBFGS,trust region等,這些凸優(yōu)化算法基本上都是掃一遍樣本,迭代的更新一次模型參數(shù),想要提升模型訓(xùn)練收斂的效率,主要思路是降低掃樣本的成本,比如把樣本cache在內(nèi)存里,另外就是降低迭代輪數(shù),比如書里提到的admm。
這樣的batch做迭代的優(yōu)化方法現(xiàn)在被稱為一種叫做BSP(Bulk Synchronous Parallel)的方式,與之相對應(yīng)的叫做SSP(StalenessSynchronous Parallel),主要是基于異步的minibatch sgd的優(yōu)化算法來更新,加上了一個bounded的一致性協(xié)議來保證收斂。補充一點的是,很多實現(xiàn)中其實是完全異步來實現(xiàn)的,更為簡單一些。SSP的方式雖然單輪迭代的網(wǎng)絡(luò)開銷不小,但是掃一遍樣本,minibatch sgd可以更新很多次模型,迭代的次數(shù)相對LBFGS會降低很多,所以整體的時間開銷相對也會少很多,另外可以結(jié)合online更新進(jìn)一步降低訓(xùn)練時間。從底層消息通訊的工程架構(gòu)上來說,ssp的方式主要是異步的push pull,基于消息隊列如zeromq等去實現(xiàn),相對bsp的這樣的同步原語,實現(xiàn)起來相對簡單優(yōu)雅些,也有一些不錯的開源實現(xiàn)比如李沐的dmlc。
ssp方式的缺點是數(shù)據(jù)量少的時候minibatch sgd的優(yōu)勢相對不明顯,需要多調(diào)調(diào)參數(shù),沒有batch算法省事。總體說來,趨勢是在從bsp的架構(gòu)往ssp的架構(gòu)在轉(zhuǎn),包括一些dnn的實現(xiàn),基于SSP的方式加Online更新后訓(xùn)練模型的開銷相對已經(jīng)較小了。
總結(jié)
以上是生活随笔為你收集整理的关于点击率模型,你知道这三点就够的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FM 模型介绍
- 下一篇: 海量数据处理 - 10亿个数中找出最大的