日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

关于点击率模型,你知道这三点就够

發布時間:2025/3/21 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于点击率模型,你知道这三点就够 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于點擊率模型,你知道這三點就夠 說到廣告,或者運營,關注的最多的就是點擊率了。我們經常能聽說某某科學家通過建立更好的點擊率預測模型,為公司帶來上億的增量收入。點擊率這么簡單直接的統計量,為什么要用復雜的數學模型來刻畫呢?

說到計算廣告,或者個性化推薦,甚至一般的互聯網產品,無論是運營、產品還是技術,最為關注的指標,就是點擊率。業界也經常流傳著一些故事,某某科學家通過建立更好的點擊率預測模型,為公司帶來了上億的增量收入。點擊率這樣一個簡單直接的統計量,為什么要用復雜的數學模型來刻畫呢?這樣的模型又是如何建立與評估的呢?我們這一期就來談談這個問題。

一、為什么要建立一個點擊率模型?

無論是人工運營還是機器決策,我們都希望對某條廣告或內容可能的點擊率有一個預判,以便判斷哪些條目應該被放在更重要的位置上。這件事兒看起來并不難,比如說我有十條內容,在歷史上呈現出來的點擊率各個不同,那么只需要根據歷史點擊率的統計做決策即可,似乎并沒有什么困難。

然并卵。直接統計歷史點擊率的方法,雖然簡單易操作,卻會碰到一個非常棘手的問題。首先,大家要建立一個概念:不考慮位置、時間等一系列環境因素,絕對的點擊率水平是沒有什么太大意義的。比方說,下面的一個廣告,分別被放在圖中的兩個位置上,統計得到前者的點擊率是2%,后者的點擊率是1%,究竟哪個廣告好一些呢?其實我們得不出任何結論。

于是,聰明的運營想到一個辦法,干脆我在不同的位置上分別統計點擊率,然后分別排序。這個思路從道理上來說無懈可擊,相當于直接求解聯合分布;不過,其實用價值并不高:在每個位置上分別統計,大多數廣告或內容條目的數據都太少,比如說100次展示,產生了一次點擊,這難道能得出1%點擊率的結論么?

那能不能再換一個思路,找到一些影響點擊率的一些關健因素,對這些因素分別統計?這實際上已經產生了“特征”這樣的建模思路了。比如說,廣告位是一個因素,廣告本身是一個因素,用戶的性別是一個因素,在每個因素上分別統計點擊率,從數據充分性上是可行的。不過這又產生了一個新的問題:我知道了男性用戶的平均點擊率、廣告位S平均點擊率、某廣告A的平均點擊率,那么如何評估某男性用戶在廣告位S上看到廣告A的點擊率呢?直覺的方法,是求上面三個點擊率的幾何平均。不過這里面有一個隱含的假設:即這三個因素是相互獨立的。然而當特征多起來以后,這樣的獨立性假設是很難保證的。

特征之間獨立性,經常對我們的結論影響很大。比如說,中國的癌癥發病率上升,到底是“中國”這個因素的原因呢?還是“平均壽命”這個因素的原因呢?顯然這兩個因素有一些相關性,因此簡單的分別統計,往往也是行不通的。

那么怎么辦呢?這就要統計學家和計算機科學家出馬,建立一個綜合考慮各種特征,并根據歷史數據調整出來的點擊率模型,這個模型既要考慮各種特征的相關性,又要解決每個特征數據充分性的問題,并且還要能在大量的數據上自動訓練優化。這就是點擊率模型的意義,這是一項偉大的、光榮的、正確的、有著極大實用價值和戰略意義的互聯網+和大數據時代的重要工作。那位說了,有必要抬得這么高么?當然有必要!因為這門手藝我也粗通一點兒,不吹哪行。

二、怎樣建立一個點擊率模型?

這個問題比較簡單,我們就不多談了。(想罵街的讀者,請稍安勿躁,繼續往下看。)

三、如何評估一個點擊率模型?

評估點擊率模型的好壞,有各種定性的或定量的、線上的或線下的方法。但是不論什么樣的評測方法,其本質都是一樣,就是要看這個模型區別被點擊的展示與沒被點擊的展示之間的區別。當然,如果能找到一個離線可以計算的量化指標,是再好不過了。

這樣的指標是有一個,就是如下圖所示的ROC曲線下的面積,術語上稱為AUC。(關于ROC和AUC的詳細介紹,請大家參考《計算廣告》第*章。)AUC這個數值越大,對應的模型區別能力就越強。

好了,為了讓大家深入理解點擊率模型評測的關鍵,我們要談到一個常見的口水仗:有一天,有兩位工程師在閑談,一位叫小優,一位叫小度。他們分別負責某視頻網站和某網盟廣告的點擊率建模。小優說:最近可把我忙壞了,上線了個全新的點擊率模型,把AUC從0.62提高到0.67,效果真不錯!哪知道小度聽了哈哈大笑:這數據你也好意思拿出來說,我們的AUC早就到0.9以上了!

那么,是不是小度的模型比小優真的好那么多呢?當然不是,我們看看該視頻網站和網盟的廣告位分布,就一目了然了。

什么?你還沒有明白,那么我建議你自己好好把這個問題想清楚。不論你是運營還是產品,經過了這樣的思考,你的數據解讀能力會上一個臺階。

好了,三個關鍵點說完了,我知道有的讀者還會對第二點表示沒看懂,那干脆我們就再多說一點兒,將2015年11月15日王超在計算廣告讀者微信群里所做的題為“點擊率預估趨勢淺析”的分享內容整理發布在下面。沒有堅持到這里就把文章關掉的碼農們,讓他們后悔一輩子去吧!


今天分享一下點擊率預估近年來的一些趨勢。主要結合劉鵬老師的一些指導,以及自身工作的一些經驗,有偏頗的地方請大家多多指正。

在計算廣告第一版的書里,主要講到了經典的點擊率預估模型邏輯回歸,特征工程,模型的評估等,相信對大多數場景來說這一步是必做的基線版本。后續可以在此基礎上做一些更細致的特征工程和模型工作。考慮到群里的朋友都已經拿到了這本書,今天先跳過書里覆蓋的內容,講一些目前書里沒有提及的部分。如果對書里內容還不夠了解的朋友,建議第一步還是把書中基礎性的內容仔細掌握。

LR+人工特征工程風光不再

講近年來點擊率預估的發展趨勢,我想先從近年來一次最具參考意義和號召力的criteo舉辦的點擊率預估比賽作為切入點說起。

為什么要拿這次比賽來說?首先criteo是全球一家專注在效果廣告的公司,在業界很有影響力,計算廣告書中對其也有介紹,比賽的數據質量不錯。其次前三名有10w美金的激勵,繼KDD cup 2012 track2之后,算是點擊率預估問題上最知名的一次比賽,很多kdd cup的往屆冠軍都前來參加。最后呢這次比賽都是脫敏過的特征,沒有具體的特征含義,使得難以結合領域知識做更細致的特征工程,更多考量模型的工作,比較適合我們今天討論的話題,另外比賽時間是從去年6月到9月三個月的時間,參賽者們的方案相對也會比較細致。

從leadboard中可以看到在700多支team里,Kdd 2012年起的各屆冠軍,這些比賽型的選手,基本占據了前十的位置,我是第7。其次,從使用的模型上,基本以fm和gbdt,還有神經網絡這些非線性模型為主。可以這么說,在比賽里,邏輯回歸加大量的人工特征工程的方案已經很難排到比賽前列,靠邏輯回歸一個模型包打天下,已經成為過去時。

特征,特征


在接下來講具體模型之前,先來回顧一下我們為什么要做大量的特征工程。點擊率預估的主要場景,是在各種長尾的流量上,對一個給定的<用戶,廣告,上下文>三元組做出精準估計。在這種long tail的場景下,用戶或上下文對廣告的偏好,基本都是一些相對weak的signal,我們需要把這些弱信號package在一起,才能去更好的發現當前場景下用戶感興趣的廣告。

特征工程是各個公司相對模型來說更看重保密的部分,因為從其中會大致了解到該公司的數據分布,這方面的公開資料不會太多。大體來說,有這么倆部分工作:

首先了解行業的領域知識,去尋找和設計強信號依然重要,比如搜索廣告里query和廣告創意的相關性是強信號,電商領域圖片和價格特征是強信號等。這部分工作是和各家公司業務緊密相關的。

其次如果采用的是邏輯回歸這種廣義線性模型,需要手動構造特征變換,才能更好處理非線性問題。常見的特征變換方法比如特征組合,特征選擇,特征離散化歸一化等,多數時候通過eyeballing和統計學的方法來完成。工程師自然是希望能將更多的精力放在設計業務上的強信號特征上面,而特征變換自動的由模型來完成。出于這樣的考慮,非線性模型逐漸在取代LR,比如通過FM,GBDT去自動挖掘組合特征,通過GBDT去做特征選擇,離散化等,正如上述比賽中看到的。

最后基于一些深度學習的方法,也能夠做一些特征發現的事情,舉個典型的例子就是語音識別里,dnn已經把MFCC這種人工特征取代了,wer有顯著的降低。而在廣告領域,DNN目前基本在百度等大公司也正在探索中,發展比較快,這部分今天簡單提一下。

模型選擇


點擊率預估的模型,如果包括各個模型的變種,可能不下數十種。根據自己的業務如何選擇相關的模型,我想從三個維度說下個人選擇模型時候的觀點,偏頗之處請大家多多指正。

第一,線性模型還是非線性模型。一般在模型的初期線性模型會作為首選方法采用,有經驗的工程師對業務領域中的強信號比較熟悉,能夠快速rush完幾個版本的特征工程后達到一個不錯的基線水平。而當從業務中抽象出強信號越來越困難時,往往就會伴隨著比較暴力的特征工程去捕捉業務里的弱信號。隨著這一過程的深入,模型訓練的代價在快速增長,而收益卻逐漸逼近上限。而非線性模型的長期優勢則比較明顯,模型泛化能力強,調參成本相對較小,能在訓練代價和模型精度上達到更好的tradeoff,百度等大公司都已經從LR過渡到了DNN。

第二,基于Sparse的特征(靜態特征)建模,還是Dense的特征(動態特征)建模。這一點可能沒有細看書的朋友不太熟悉,簡單說就是當某個特征被觸發時,不再用1,而是用這個特征歷史上一段時間(或者多個時間窗口)的點擊率作為其特征取值。當特征動起來以后,通過特征側捕捉動態信號,模型就不用快速更新了,可以說dense建模的方案相對更加簡單優雅。曾經做過這樣的實驗,當采用動態特征加Offline模型,和靜態特征加Online模型,倆者收益是相當的。

這里補充重點說明一點,如果基于sparse特征建模的話,knowledge完全存儲在模型處,而基于dense特征建模,知識存放在模型和特征(點擊率)倆處,喂給模型的點擊率特征是否置信,直接決定了這個方案的魯棒性。這里有倆個問題,一個是在某些場景下,點擊率是有bias的,比如展示廣告里,頭部流量上點擊率被高估,點擊率高是因為其廣告位置比較好,如果不消去bias,則會產生強者愈強的馬太效應。另一個問題是長尾流量上,對于某個特征值的pv較少,ctr不再置信,也需要去平滑。計算廣告書中針對這倆個問題介紹了相關的方案COEC+平滑可供參考。

第三,應用Online的更新方式去更新模型,還是batch的方式。Online的方式對應的最優化算法主要是minibatch sgd,Offline的方式可以應用計算廣告書里說的LBFGS,Trust region這些。按我個人經驗,minibatch sgd的更新方式對頭部的數據學習的會更快更充分,因此更善于fine tuning the head part。而Offline的方式全局優化歷史數據,對于長尾稀疏特征,就比sgd的方式要精細些了。如果業務場景時效性較強,更關注頭部,用一個Online keep更新的模型就足夠了,比如新聞推薦的場景。但是如果業務場景有很多長尾流量,需要精細的預估,一個batch的Offline model是必要的,為了業務的時效性考慮,可以用batch的模型結果去初始化Online的模型更新,定期的batch結合Online的delta更新,比如搜索廣告的場景。

模型演進概述

上述的模型選擇都是結合業務場景做出的選擇,這里按我個人理解給出一個連貫一些的點擊率預估模型演進的過程:

之前提及過,一般會以高維sparse特征的LR模型作為基線模型,也有用dense特征直接結合LR來建模的。由于LR是線性分類器,后者需要對dense特征手工加各種非線性變換,遇到瓶頸后會轉向前者,或者改成使用GBDT,NN等非線性模型。而高維sparse特征結合LR的方案,人工在特征工程遇到一定瓶頸后,會采用FM等方案自動做特征發現,為了解決時效性的問題,會結合batch的訓練加上Online的更新方式,或者直接轉向完全Online的方案如ftrl。還有一個方向是會結合自身的業務場景,對模型的損失函數做一些創新,比如yahoo的laser,阿里的coupled group lasso,比賽里的field aware的ffm等等。

在比賽里為了提升效果,很常見的一個策略是把各個模型融合在一起,最簡單的有把各個模型的結果做線性加權,也有把各個模型進行stacking的方案,比如Facebook的gbdt+lr,再有把各個模型的信息喂給dnn去學習的。對這三種方案來說,效果最好的,我個人比較相信,是用dnn去做模型的blending(融合)。注意這里說的DNN不是指具體的某個模型dbn,cnn,而是指將各種淺層模型的中間權重,預估結果,原始的靜態,動態特征等作為DNN的輸入,使用dnn后饋的輸入梯度來聯合更新這些結構的參數。對DNN大家可能比較詬病的是其訓練效率,但我覺得在大公司可能還好,聽在百度的朋友說DNN的開發代價和訓練開銷隨著探索在逐步降低,不一定比gbdt等非線性模型代價高很多。

當然,對小公司來說,直接走到DNN有點用力過猛,我在這里簡要介紹一下FM+gbdt去融合的方案:第一步當然也是基于大規模稀疏特征LR。第二步,為了更好的刻畫長尾,自動發現組合特征,采用了FM。在同樣的訓練時間下,AUC提升,模型泛化性能可控。第三步:為了更好的fine tuning頭部和提升時效性,采用了用gbdt加動態特征的模型。最后呢,把這兩個模型簡單的做線性融合,由于倆個模型的特征和模型差異性較大,融合后auc也有顯著的提升。

對于gbdt,開源的實現有很多,但效果差別比較大,這里推薦一個開源實現xgboost,很多kaggle上的比賽借助這個工具都拿到了好名次。之前我寫過一篇叫做xgboost導讀和實戰的文章,對原始paper中的公式給出了一些推導細節,這里不再詳述。簡單的說原始paper里是在函數空間上梯度下降求解,在求解步長時一般都是固定學習率。而xgboost對損失函數做了二階的泰勒展開,考慮了損失函數的二階梯度信息,并加入了正則項整體求最優解,有比較好的泛化性能。另外在具體建樹的分裂節點過程也不是大多數實現里基于信息增益等,而是結合具體目標函數的真實下降量。有人做過各實現的評測,xgboost在性能和效果上都是相當不錯的。

BSP->SSP

幾個典型的模型基本就簡要講到這里,最后講一下模型求解的優化算法,計算廣告書里給出了不少經典的優化凸優化算法的原理和實現代碼,LBFGS,trust region等,這些凸優化算法基本上都是掃一遍樣本,迭代的更新一次模型參數,想要提升模型訓練收斂的效率,主要思路是降低掃樣本的成本,比如把樣本cache在內存里,另外就是降低迭代輪數,比如書里提到的admm。

這樣的batch做迭代的優化方法現在被稱為一種叫做BSP(Bulk Synchronous Parallel)的方式,與之相對應的叫做SSP(StalenessSynchronous Parallel),主要是基于異步的minibatch sgd的優化算法來更新,加上了一個bounded的一致性協議來保證收斂。補充一點的是,很多實現中其實是完全異步來實現的,更為簡單一些。SSP的方式雖然單輪迭代的網絡開銷不小,但是掃一遍樣本,minibatch sgd可以更新很多次模型,迭代的次數相對LBFGS會降低很多,所以整體的時間開銷相對也會少很多,另外可以結合online更新進一步降低訓練時間。從底層消息通訊的工程架構上來說,ssp的方式主要是異步的push pull,基于消息隊列如zeromq等去實現,相對bsp的這樣的同步原語,實現起來相對簡單優雅些,也有一些不錯的開源實現比如李沐的dmlc。

ssp方式的缺點是數據量少的時候minibatch sgd的優勢相對不明顯,需要多調調參數,沒有batch算法省事。總體說來,趨勢是在從bsp的架構往ssp的架構在轉,包括一些dnn的實現,基于SSP的方式加Online更新后訓練模型的開銷相對已經較小了。


總結

以上是生活随笔為你收集整理的关于点击率模型,你知道这三点就够的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。