日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

广告点击率预测 [离线部分]

發(fā)布時(shí)間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 广告点击率预测 [离线部分] 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

廣告點(diǎn)擊率預(yù)測(cè) [離線部分]??

2014-05-08 23:08:45|??分類(lèi):?計(jì)算廣告學(xué)?|??標(biāo)簽:計(jì)算廣告學(xué)??rtb??dsp??|舉報(bào)|字號(hào)?訂閱

????

下載LOFTER我的照片書(shū)??|

廣告點(diǎn)擊率預(yù)測(cè)

屈偉?/ Koala++

?????????先聲明一下,本文所提到的所有的點(diǎn)擊率預(yù)測(cè)的技術(shù)不是我在的團(tuán)隊(duì)使用的,因?yàn)槲覀儓F(tuán)隊(duì)使用的技術(shù)是保密的,所以我也不知道他們是怎么做的。事實(shí)上我不知道廣告點(diǎn)擊率怎么預(yù)測(cè)的,認(rèn)識(shí)我的人都知道,我就是最喜歡舞那開(kāi)始三板斧的人,然后我就想扔了板斧投降了。也希望各位能指正我所寫(xiě)的內(nèi)容中的錯(cuò)誤之處,給我一下學(xué)習(xí)第四斧的機(jī)會(huì)。

?????????強(qiáng)調(diào)一下,按本文的方法來(lái)一天就能實(shí)現(xiàn)pCTR的功能。

Introduction

?????????我所寫(xiě)的這一篇,從技術(shù)和算法上講,比不上網(wǎng)上幾個(gè)公司的pCTRPPT,那幾篇比較偏重理論,而且一般講幾種算法,讓新接觸pCTR的人很茫然,不知道如何開(kāi)始實(shí)現(xiàn)。這就是我寫(xiě)這一篇文章的原因。如果你在一兩天之內(nèi)完成pCTR最粗糙的版本,這是真的可以做到的。Andrew Ng說(shuō)過(guò):你應(yīng)該最短的時(shí)候,比如一天的時(shí)候,完全一個(gè)粗糙的版本,看它有什么問(wèn)題,再去解決。不要擔(dān)心太粗糙太快速。

?????????廣告點(diǎn)擊率預(yù)測(cè)(pCTR Predict Click-Through Rate)是廣告算法中最核心的技術(shù)了。pCTR要解決的問(wèn)題是預(yù)測(cè)特定用戶(hù)在特定廣告位對(duì)特定廣告當(dāng)特定環(huán)境下的點(diǎn)擊概率。為什么pCTR如此重要,因?yàn)閺V告排序的核心是eCPM = pCTR * CPCCPC是廣告主對(duì)點(diǎn)擊的出價(jià),是個(gè)已知量,所以只有一個(gè)pCTR變量。當(dāng)然在實(shí)際中不可能是如此簡(jiǎn)單的排序公式,比如還有質(zhì)量得分(Quality Score),比如Google的質(zhì)量得分因素

?????????pCTR一般是從離線數(shù)據(jù)中學(xué)習(xí)得到的,離線數(shù)據(jù)是保存到類(lèi)似Hive的分布式數(shù)據(jù)庫(kù)中,通過(guò)機(jī)器學(xué)習(xí)的算法將Hive中的數(shù)據(jù)進(jìn)行分析,得到一個(gè)pCTR模型,這個(gè)模型就可以預(yù)測(cè)pCTR了,大致流程就是這樣。

?

?

?????????下圖中有淡綠色和綠色兩塊背景,分別表示離線部分和在線部分。看起來(lái)離線部分的工作很多,在線部分似乎沒(méi)什么工作。其實(shí)要實(shí)現(xiàn)一個(gè)通過(guò)配置把模型加載進(jìn)去的在線部分,的確沒(méi)什么工作量,幾行代碼就完了。但想實(shí)現(xiàn)一個(gè)比這強(qiáng)一點(diǎn)的在線部分,都要用一周以上的時(shí)候來(lái)完成。

?????????離線部分,真正能用的當(dāng)然全要用MapReduce來(lái)寫(xiě),粗糙版本就用python單機(jī)運(yùn)行就行了,看起來(lái)有JoinNormBinarizeTrain四個(gè)步驟,其實(shí)都是比較簡(jiǎn)單的。

Join步驟就是將多個(gè)數(shù)據(jù)源的數(shù)據(jù)通過(guò)Key進(jìn)行Join,和Sql里的Join是一個(gè)意思。

NormBinarize是對(duì)數(shù)據(jù)進(jìn)行一定的變換,這是由我們將要使用的Logistic Regression算法決定的,其實(shí)很多算法都逃不了這兩步的,所以不用擔(dān)心會(huì)做無(wú)用功。

Train這一步就是真正訓(xùn)練模型的工作了。我介紹的時(shí)候會(huì)用liblinear

?

Offline

Join

?

?

?????????這一步是將多個(gè)數(shù)據(jù)源的數(shù)據(jù),通過(guò)類(lèi)似SQL中的Left Join將多個(gè)數(shù)據(jù)源合并起來(lái),要合并起來(lái)是因?yàn)槲覀兊挠?xùn)練數(shù)據(jù)是最終要是一個(gè)向量,所以離線的時(shí)候一定要先將數(shù)據(jù)合并成一行。

?????????上圖的例子解釋一下:左圖是Hive中的Log,左圖是User Info。左圖中有一些字段,比如:廣告ID,用戶(hù)ID,廣告位ID,時(shí)間,等等,右圖中有用戶(hù)ID,性別,年齡等等。通過(guò)UserID將兩個(gè)數(shù)據(jù)Join后,就得到了下面的數(shù)據(jù)。

?????????Note1.?上圖只是舉個(gè)例子,實(shí)現(xiàn)的時(shí)候,最好不要把User Info中的User ID在合并的時(shí)候去掉,否則在你的字段配置文件會(huì)有困難。2.?Hadoop實(shí)現(xiàn)的時(shí)候,一定要考慮key skew的問(wèn)題,否則會(huì)出現(xiàn)out of memory的問(wèn)題。3.?要考慮Join的時(shí)候有多個(gè)Key的情況。4.?數(shù)據(jù)格式最好要求嚴(yán)一些,因?yàn)樘幚頂?shù)據(jù)一些就是腳本來(lái)寫(xiě),而如果把工作都放到了Join里,那就是Hadoop Java了。5.?如果是要實(shí)現(xiàn)粗糙版本,這一步應(yīng)該是可以跳過(guò)的,因?yàn)橐话銇?lái)講,對(duì)pCTR重要的特征都是已經(jīng)上報(bào)了的。6. Left Join的時(shí)候,要設(shè)置Null值,設(shè)置的時(shí)候注意點(diǎn),不要設(shè)置0之類(lèi)的,Norm的時(shí)候又忘了。

?????????另一個(gè)問(wèn)題:為什么有Join這個(gè)問(wèn)題呢?直接讓工程組的人把我要的字段都寫(xiě)到Log里,我一句select就完了呀!其實(shí)這個(gè)問(wèn)題有很多答案,比較合理的答案是:有多少pCTR模型,比如有電商的廣告的pCTR,游戲廣告的pCTR等等,每個(gè)pCTR都用不同的特征,如果都上報(bào),會(huì)很浪費(fèi),問(wèn)題又來(lái)了:那你不能pb上報(bào)?答:在線部分我還沒(méi)想出來(lái)如何能完全不修改在線部分的代碼,完成特征的增減。如果你不停的讓工程組的人添加特征相關(guān)代碼,刪除特征相關(guān)代碼,我相信他們會(huì)找你拼命的。

?

?

?????????整個(gè)Join過(guò)程的示意圖如上,我畫(huà)的還是比較仔細(xì)的,在Join Ad Info的時(shí)候,用的是多個(gè)Key Join,而下面的幾個(gè)矩形的大小是不同的,因?yàn)樗鼈?/span>Key的個(gè)數(shù)肯定是不同的。

Cross Feature

?????????有時(shí)候和別人交流的時(shí)候說(shuō)LR模型是線性模型,別人很疑惑的說(shuō)sigmoid函數(shù)明顯不是線性函數(shù)呀?我給一下圖就明白了,圖中的decision boundary是一條直線。為什么是直線?因?yàn)?/span>weight向量和特征向量x線性關(guān)系。

?????????那如果我就這兩個(gè)特征,我想得到不是直線的decision boundary怎么搞呢?兩個(gè)方法:1.?讓算法支持,比如用神經(jīng)網(wǎng)絡(luò),2.?自己把高維特征給造出來(lái)。說(shuō)一下神經(jīng)網(wǎng)絡(luò)算法,神經(jīng)網(wǎng)絡(luò)上次實(shí)踐時(shí)發(fā)現(xiàn)也不是完全不靠交叉特征就能hold住的。再下面一張圖就是引入高維特征后的decision boundary(另一個(gè)數(shù)據(jù)集,我懶得找圖了):

?????????交叉特征幾乎沒(méi)什么工作,就是兩個(gè)字段值拼到一起。舉個(gè)例子:比如User Info里有個(gè)性別字段,Ad Info里有個(gè)字段是廣告ID,現(xiàn)在我想產(chǎn)生一個(gè)性別和廣告ID的交叉字段,再假設(shè)有個(gè)樣本里性別為男,廣告ID1234,交叉特征就是男_1234

?????????注:1.?產(chǎn)生交叉特征的時(shí)候一定要搞分隔符,不然121交叉和121交叉出來(lái)結(jié)果一樣。2.?交叉哪些特征呢?自己把握了,當(dāng)然不能一下子交叉五六個(gè)特征,這樣特征特別稀疏,而且詞典很大,給線上代碼編寫(xiě)再來(lái)不必要的壓力。3.?如果實(shí)現(xiàn)這粗糙版本,這一步跳過(guò),畢竟你不想搞了半天就得到一個(gè)過(guò)擬合的效果。

?

?

?

?

Norm

?????????需要Norm的原因是因?yàn)槲覀円?/span>LR算法,相信大家也知道不是所有的算法都有這個(gè)過(guò)程,比如Normal Equation。大概解釋一下要Norm的原因,可能大家都見(jiàn)過(guò)下面的圖:

?

?

?????????上圖是梯度下降的軌跡。為什么是個(gè)橢圓,而不是圓,是因?yàn)樘卣鞯闹涤虿煌?#xff0c;如果值域相差,這個(gè)橢圓會(huì)變的非常扁。

?

?

?

?????????舉個(gè)例子,左圖是兩個(gè)特征值域在[-10, 10],右邊的兩個(gè)特征分別是[-10, 10], [-30, 30],可以看出下面的函數(shù)等高線一下圓,一個(gè)扁。那么圓和扁的后果是什么呢?想象爬山的時(shí)候,有兩座山,一座山是類(lèi)似半球形的,另一座山是把前一座山沿一個(gè)方向拉長(zhǎng)幾十倍,爬這兩座山的時(shí)間上的區(qū)別。

?????????雖然背后的道理是需要點(diǎn)時(shí)間去理解,但Norm的過(guò)程卻是異常簡(jiǎn)單,最常用的兩種方法,max-minstandard-score,推薦standard-score,因?yàn)?/span>max-min可能一兩個(gè)孤異點(diǎn),把特征的作用給抹殺了。

Max-Min方法:

?

?

Standard-Score方法:

?

?

?????????為什么我計(jì)算方差要用上面的公式,不是常用的方差公式,是因?yàn)檫@種計(jì)算廣告只用一次Map/Reduce,而標(biāo)準(zhǔn)計(jì)算公式需要兩次Map/Reduce,一次計(jì)算均值,一次計(jì)算方差。

?????????注:1. Norm的時(shí)候注意缺失值的處理,特別是把缺失值設(shè)置成0-1這種問(wèn)題。2. NormBinarize顯然只會(huì)走其中一個(gè)邏輯的。

Binarize

?????????二值化一樣是因?yàn)橐?/span>LR算法的原因,如果用決策樹(shù)那就沒(méi)這問(wèn)題了。LR需要二值化是因?yàn)橐恍╇x散值是不可比的。比如性別的男和女,無(wú)法比較大小。而一些看起來(lái)可比的值,其實(shí)邏輯上也不可比了,比如年齡,29歲并不比23歲大。可比的例子,比如:已經(jīng)曝光的次數(shù),出價(jià)。

?????????我下面舉個(gè)例子來(lái)說(shuō)明Binarize的過(guò)程:

性別 [男,女],學(xué)歷?[小學(xué),初中,高中,本科,碩士,博士]

性別詞典?[,?],學(xué)歷詞典?[小學(xué),初中,高中,本科,碩士,博士]

全局詞典?[,?,小學(xué),初中,高中,本科,碩士,博士]

用戶(hù)A(,?本科),二值化結(jié)果?[1, 0, 0, 0, 0, 1, 0, 0]

用戶(hù)B(,?碩士),二值化結(jié)果?[0, 1, 0, 0, 0, 0, 1, 0]

?????????我發(fā)現(xiàn)我給別人解釋邏輯的時(shí)候,最常被問(wèn)到的就是如果是我事先不知道詞典是什么怎么辦?事實(shí)上,實(shí)現(xiàn)的時(shí)候和文本分類(lèi)一樣,是要掃兩次數(shù)據(jù)的,第一次產(chǎn)生詞典,第二次將樣本轉(zhuǎn)化1, 0向量,當(dāng)然一般用稀疏矩陣的表示方法,0就不寫(xiě)了。

Training

?????????已經(jīng)說(shuō)了是要一天做完pCTR,那顯然自己寫(xiě)就有點(diǎn)不現(xiàn)實(shí)了,下載一下liblinear,然后就可以開(kāi)始訓(xùn)練了,當(dāng)然一般點(diǎn)擊率都很低的,Feeds,搜索廣告高一些x%,展示廣告一般就0.x%,我做的產(chǎn)品點(diǎn)擊率就低的沒(méi)臉提了。按一切從簡(jiǎn)一切從暴的原則,正例全保留,負(fù)例按正例的倍數(shù)抽吧。

?????????我一般是按Andrew Ng說(shuō)的,先把Bias-Variance的圖畫(huà)出來(lái),看一下指標(biāo)不好的可能是什么原因。

?

?

?

?????????我還喜歡的一個(gè)圖是把特征一個(gè)個(gè)加入后,指標(biāo)的變化曲線,還是因?yàn)楣颈C艿脑?#xff0c;我就不帖圖了,可能有人會(huì)問(wèn)為什么不直接用特征選擇看一下就行了,或是L1看,是因?yàn)?/span>Binarize之后,特征和原始特征對(duì)應(yīng)是可以對(duì)應(yīng),但這樣還是不行我的方法來(lái)的直觀。

?????????還有一個(gè)問(wèn)題,抽樣了要還原吧,哎,就負(fù)例抽了多少比例,再除回去吧。你是不是已經(jīng)憤怒了,到了最后一步你就這樣耍我的?其實(shí)我真的認(rèn)為除回去也是勉強(qiáng)能自圓其說(shuō)的。想知道下不那么山寨的做法?看下google的論文:Ad Click Prediction: a View from the Trenches,里面的Subsampling Training DataCALIBRATING PREDICTIONS

總結(jié)

以上是生活随笔為你收集整理的广告点击率预测 [离线部分]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。