, , ,
(浙江理工大學(xué)信息學(xué)院,杭州 310018)
計(jì)算廣告學(xué)是一門新興的綜合性學(xué)科,涉及統(tǒng)計(jì)學(xué)、信息科學(xué)、計(jì)算機(jī)科學(xué)和微觀經(jīng)濟(jì)等相關(guān)領(lǐng)域。點(diǎn)擊率(Click through rate, CTR)預(yù)估是計(jì)算廣告技術(shù)的核心之一[1]。廣告點(diǎn)擊率預(yù)估通常根據(jù)歷史廣告點(diǎn)擊數(shù)據(jù),通過機(jī)器學(xué)習(xí)模型,預(yù)測特定用戶在特定廣告位對特定廣告的點(diǎn)擊概率。常見的互聯(lián)網(wǎng)廣告商業(yè)計(jì)費(fèi)模式[2]有四種:按展現(xiàn)付費(fèi) (Cost per mille, CPM)、按點(diǎn)擊付費(fèi) (Cost per click, CPC)、按轉(zhuǎn)化付費(fèi) (Cost per action, CPA)和按投資收益率付費(fèi)(Return on investment, ROI)。市場上的付費(fèi)模式大多采用CPC,即廣告被用戶每點(diǎn)擊一次,廣告主應(yīng)給媒體付的價(jià)格,媒體網(wǎng)站的收入是點(diǎn)擊價(jià)格和點(diǎn)擊總數(shù)的乘積。在點(diǎn)擊價(jià)格不變的情況下,提高點(diǎn)擊次數(shù),即提高點(diǎn)擊廣告的概率是提高廣告收益的關(guān)鍵因素。
廣告點(diǎn)擊率預(yù)估主要分為四個(gè)步驟:數(shù)據(jù)清洗、特征工程、模型選擇和訓(xùn)練、模型評估。Dave等[3]提出了基于梯度提升決策樹(Gradient boosting decision tree, GBDT)的預(yù)估方法,主要思想是通過弱決策器迭代生成強(qiáng)決策器,并自動選擇和生成特征。但是該方法在大規(guī)模稀疏的數(shù)據(jù)集情況下,準(zhǔn)確率難以得到保證且訓(xùn)練時(shí)間成本過高。Oentaryo等[4]提出了利用因式分解機(jī)(Factorization machine, FM)模型挖掘非線性特征的方法。該方法通過對二項(xiàng)式矩陣做矩陣分解,將高維稀疏的特征向量映射到低維連續(xù)向量空間,能夠有效地解決大規(guī)模數(shù)據(jù)稀疏型的問題,然而該方法由于需要特征矩陣作分解和特征高低維映射的原因,導(dǎo)致處理特征的工作量巨大。Zhu等[5]提出了一種基于模型融合最大化的方法,該方法只考慮對點(diǎn)擊率有關(guān)鍵作用的特征進(jìn)行哈希變換,一定程度上忽視了特征的整體性和多樣性。Chapelle等[6]提出一種基于貝葉斯網(wǎng)絡(luò)(Naive bayes networks,NB)模型的方法,通過模擬登陸頁面的相關(guān)性以及搜索結(jié)果頁面可感知的相關(guān)性進(jìn)行廣告點(diǎn)擊率預(yù)估,但是貝葉斯網(wǎng)絡(luò)模型必須先驗(yàn)概率且屬性之間必須是相互獨(dú)立的。Zhang等[7]提出了利用循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent neural networks, RNN)模型進(jìn)行點(diǎn)擊率預(yù)估的方法,利用按時(shí)間反向傳播(Back propagation through time, BPTT)算法來訓(xùn)練RNN,其實(shí)驗(yàn)結(jié)果表明,相比于GBDT、FM以及傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型,RNN在準(zhǔn)確率上有一定的提升。然而RNN在使用梯度下降優(yōu)化算法時(shí),造成梯度爆炸問題[8],影響模型的準(zhǔn)確度。
為了解決循環(huán)神經(jīng)網(wǎng)絡(luò)梯度爆炸的問題,本文采用基于門控單元(Gated recurrent unit, GRU)改進(jìn)的循環(huán)神經(jīng)網(wǎng)絡(luò),即門控循環(huán)單元神經(jīng)網(wǎng)絡(luò)(Gated recurrent unit neural networks, GRUs)。該方法利用GRUs特殊的門控單元結(jié)構(gòu),通過對當(dāng)前隱藏層狀態(tài)的影響因子不同作加權(quán)處理,同時(shí)對模型訓(xùn)練產(chǎn)生的誤差進(jìn)行更新,避免在學(xué)習(xí)輪數(shù)增加的情況下發(fā)生梯度爆炸的問題,進(jìn)而提高模型的準(zhǔn)確性。本文進(jìn)一步對該模型的訓(xùn)練算法進(jìn)行改進(jìn),提出一種步長改進(jìn)算法,通過步長改進(jìn)算法可使得訓(xùn)練迭代次數(shù)更少,預(yù)估結(jié)果更加精確,以提高廣告點(diǎn)擊率的預(yù)估能力。
圖1 GRUs原理
基于GRUs模型預(yù)估廣告點(diǎn)擊率,目的是準(zhǔn)確地對廣告特征輸入序列進(jìn)行分類,依靠誤差反向傳播和梯度下降來實(shí)現(xiàn)[12]。GRUs訓(xùn)練比較困難,主要是因?yàn)殡[藏層參數(shù)W,無論在前向傳播過程還是在反向傳播過程中都會乘上多次,這樣就會導(dǎo)致前向傳播某個(gè)小于1的值乘上多次,對輸出影響變小,使得反向傳播時(shí)出現(xiàn)梯度爆炸的問題。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)中,大都采用反向傳播 (Back propagation, BP) 算法來訓(xùn)練,RNN以及改進(jìn)網(wǎng)絡(luò)中使用按時(shí)間反向傳播BPTT算法[13]。按時(shí)間傳播表示一系列完全定義的有序計(jì)算,根據(jù)時(shí)間依次連接,其參數(shù)在所有的層之間共享,因此當(dāng)前層的梯度值除了要基于當(dāng)前的這一步計(jì)算,還有依賴于之前的時(shí)間步。BPTT采用鏈?zhǔn)椒▌t求解參數(shù)梯度。
圖2描述了BPTT算法在一個(gè)t時(shí)間的存儲和處理操作。歷史緩存每經(jīng)過一個(gè)t時(shí)間,就會增加一層的數(shù)據(jù)(包括該t時(shí)間所有的輸入和輸出值)。
圖2 按時(shí)間反向傳播操作
圖2中x表示當(dāng)前時(shí)間的特征輸入,O表示當(dāng)前時(shí)間的特征輸出,S表示激活函數(shù)。圖2中的實(shí)線箭頭表示當(dāng)前隱藏層節(jié)點(diǎn)的輸出值是由上一刻的輸入輸出值確定,虛線表示反向傳播,計(jì)算t+1到t-1時(shí)間的誤差。每一個(gè)時(shí)間都產(chǎn)生一個(gè)輸出,節(jié)點(diǎn)輸出每經(jīng)過一個(gè)時(shí)間t,就會增加之前所有時(shí)間的信息狀態(tài)值。GRUs的結(jié)構(gòu)在時(shí)間t的隱藏層輸入可以用公式表示為:
其中:whk為隱藏層與輸出層之間的權(quán)重,gk為輸出層的激勵(lì)函數(shù)。
t時(shí)間的隱藏狀態(tài)的梯度函數(shù)用公式表示為:
至此,由梯度下降法求出權(quán)重的更新函數(shù)用公式表示為:
對GRUs采用梯度下降法來訓(xùn)練時(shí),需要提前設(shè)置步長和迭代輪次。本文提出一種改進(jìn)步長的梯度下降方法來訓(xùn)練GRUs,改進(jìn)步長算法的流程為:先設(shè)置一個(gè)大的步長快速尋找全局近似最優(yōu)點(diǎn),再利用較小的步長通過指數(shù)迭代衰減,進(jìn)而找到局部最優(yōu)。
本文模型算法改進(jìn)具體計(jì)算用公式表示為:
其中:l表示每一輪優(yōu)化時(shí)使用的步長,m表示最小步長,n表示最大步長,p表示迭代輪次,q表示在給定的步數(shù)下達(dá)到n。步長參數(shù)設(shè)置過大,會導(dǎo)致參數(shù)在極優(yōu)值點(diǎn)的兩側(cè)來回移動,很難收斂到一個(gè)極值點(diǎn);相反,如果步長參數(shù)過小,雖然可以保證收斂到一個(gè)近似極值點(diǎn),但會大大降低優(yōu)化速度,需要更多的迭代次數(shù)才能達(dá)到一個(gè)理想的優(yōu)化效果。具體參數(shù)設(shè)置見表1。
表1 模型算法改進(jìn)前后參數(shù)
由于本文的廣告點(diǎn)擊率預(yù)估問題是一個(gè)典型的二分類問題,所以采用ROC(Receiver operating characteristic)曲線和AUC值來評價(jià)模型的標(biāo)準(zhǔn)以及預(yù)測的準(zhǔn)確率[14]。ROC和AUC常被用來評價(jià)一個(gè)二值分類器(binary classifier)的優(yōu)劣,在廣告投放中,被點(diǎn)擊的候選廣告根據(jù)廣告點(diǎn)擊率值的大小,按概率由高到低排序,生成ROC曲線,AUC代表ROC曲線下的面積,值越大,表示被點(diǎn)擊的廣告排序越靠前,即廣告投放的效果越好,也就是廣告點(diǎn)擊率預(yù)測越準(zhǔn)確。ROC曲線橫軸為假正率(False positive rate,FPR),表示劃分實(shí)例中所有負(fù)例占所有負(fù)例的比例;縱軸為真正率(True positive rate,TPR),表示正類覆蓋率。AUC的值vAUC用公式表示為:
其中:M表示正類樣本的數(shù)目,即點(diǎn)擊廣告數(shù)據(jù)的數(shù)目;N表示負(fù)類樣本的數(shù)目,即廣告數(shù)據(jù)未點(diǎn)擊的數(shù)目。AUC計(jì)算思想是統(tǒng)計(jì)總的正負(fù)樣本對中,正樣本的score大于負(fù)樣本的score。在廣告點(diǎn)擊率預(yù)估場景下,通常屬于不平衡問題,AUC對樣本的數(shù)據(jù)比例有著良好的容忍性,在測試集的正負(fù)樣本分布變化時(shí),ROC曲線能夠保持不變,所以實(shí)驗(yàn)采用AUC值評價(jià)模型指標(biāo)。
本文實(shí)驗(yàn)中使用的數(shù)據(jù)集是Kaggle平臺上的10天日志,該日志由移動廣告dsp公司Avazu提供。由于涉及到用戶隱私等問題,數(shù)據(jù)字段全部采用加密的形式給出。訓(xùn)練數(shù)據(jù)共四千多萬條,24個(gè)字段特征,其中14個(gè)為分類特征,10個(gè)為數(shù)量特征。實(shí)驗(yàn)數(shù)據(jù)字段見表2。
表2 實(shí)驗(yàn)數(shù)據(jù)字段介紹
首先劃分訓(xùn)練集和測試集。由于作為原始數(shù)據(jù)中測試集的后兩天數(shù)據(jù)沒有類別標(biāo)簽,所以本實(shí)驗(yàn)只采用8天的訓(xùn)練集作為實(shí)驗(yàn)數(shù)據(jù)。把前7天的數(shù)據(jù)作為訓(xùn)練集,第8天的數(shù)據(jù)作為測試集。數(shù)據(jù)的日點(diǎn)擊率情況見表3。
表3 數(shù)據(jù)的日點(diǎn)擊率情況
從表3可以看出,各天的點(diǎn)擊率基本維持在0.17上下,正負(fù)樣本均衡,不需要進(jìn)行采樣處理。
針對時(shí)間“hour”特征,抽取增加出“day”和“hour”兩個(gè)新特征。對特征缺失值進(jìn)行處理。對不同類型特征的缺失值進(jìn)行補(bǔ)全處理,其中缺失值為連續(xù)型的特征用該類別特征的均值代替,缺失值為離散型的特征用該類別特征的眾數(shù)代替。進(jìn)行頻次轉(zhuǎn)化,去除“id”、“day”和“hour”,其余特征強(qiáng)制轉(zhuǎn)成“int”型整數(shù)格式作頻次轉(zhuǎn)化。進(jìn)行頻次轉(zhuǎn)化的原因在于一條廣告展示的次數(shù)過多會降低相同廣告出現(xiàn)的概率,其次則為了數(shù)據(jù)類型的統(tǒng)一性。幾個(gè)重要特征的轉(zhuǎn)化情況見表4。
表4 幾個(gè)重要特征的轉(zhuǎn)化情況
分類處理某一個(gè)或某幾個(gè)特征如“banner_position”特征,此特征共有7個(gè)特征類別值,分別為0、1、2、3、4、5、7,在廣告點(diǎn)擊率預(yù)估中代表一條廣告所處不同廣告banner位置。此特征單個(gè)類別值的廣告點(diǎn)擊率大小如圖 3所示。
圖3 單特征類別點(diǎn)擊率
對特征進(jìn)行One-Hot Encoding編碼。雖然基于決策樹的隨機(jī)森林不需要進(jìn)行One-Hot Encoding,但是本文實(shí)驗(yàn)中采用相同的特征,以此保證對比實(shí)驗(yàn)的客觀性。One-Hot Encoding編碼方式調(diào)用sklearn里面的接口One-Hot Encoder。對于取值數(shù)目較多的分類特征如“device_ip”和“device_id”等進(jìn)行特征降維,之后作One-Hot Encoding編碼。對出現(xiàn)頻率很少的特征值都?xì)w為同一類特征,避免產(chǎn)生巨大的矩陣向量維度,降低計(jì)算復(fù)雜度,提高資源利用率。
特征工程的工作均是通過以上步驟完成。本文對比實(shí)驗(yàn)中所用到的數(shù)據(jù)完全一致,只有特征工程相同,才能更好地比較模型自身的優(yōu)勢。
本文實(shí)驗(yàn)中分別使用邏輯回歸 (Logistic regression,LR) 模型、NB模型、隨機(jī)森林 (Random forest ,RF) 模型等淺層模型以及 RNN作為GRUs及其本文算法改進(jìn)模型對比實(shí)驗(yàn)。以上所有模型均采用相同輸入特征,其中3種神經(jīng)網(wǎng)絡(luò)模型在層數(shù)以及每層的節(jié)點(diǎn)數(shù)保持一致,優(yōu)化算法全都采用梯度下降算法,激勵(lì)函數(shù)為tanh。
在廣告點(diǎn)擊率預(yù)估實(shí)驗(yàn)中,不同模型有著不同的預(yù)估效果,取所有模型各自最好的AUC值作為實(shí)驗(yàn)對比,AUC值大小如圖4所示。
圖4 不同模型下的最高AUC值
從圖4可以看出,在3種使用淺層模型預(yù)估廣告點(diǎn)擊率實(shí)驗(yàn)中,基于RF的廣告點(diǎn)擊率預(yù)估效果最好,AUC值為0.696,主要在于RF采用bootstrap方法有放回地隨機(jī)抽取新的廣告樣本集作為訓(xùn)練樣本,通過構(gòu)建多棵分類回歸樹,達(dá)到較好的預(yù)估效果。同時(shí),基于RF模型的AUC值明顯要低于基于RNN模型的實(shí)驗(yàn)結(jié)果。這是因?yàn)闇\層模型中沒有充分挖掘廣告特征間的非線性關(guān)系,隨著樣本量的增加,模型的泛化能力也相對減弱。而在基于循環(huán)神經(jīng)模型的點(diǎn)擊率預(yù)估實(shí)驗(yàn)中,基于門控循環(huán)單元的神經(jīng)網(wǎng)絡(luò)模型以及步長改進(jìn)的模型效果最好,AUC值分別為0.785和0.789。
3種基于循環(huán)神經(jīng)網(wǎng)絡(luò)模型在不同迭代次數(shù)下的AUC變化如圖5所示。
圖5 不同神經(jīng)網(wǎng)絡(luò)模型在迭代次數(shù)下的AUC變化
RNN和GRUs用相同固定的步長0.001,隱藏層為3層,節(jié)點(diǎn)個(gè)數(shù)為256。從圖5中可以看出,在相同的激勵(lì)函數(shù)tanh下,隨著迭代輪次的增加,RNN的AUC值提升相比GRUs和本文模型都更加緩慢,而且最佳的AUC值比本文模型降低了將近0.05。這是因?yàn)镽NN在隨著樣本量和迭代輪次增加,使得當(dāng)前的模型輸出與前面很長的一段廣告序列信息產(chǎn)生遺漏,造成梯度消失或爆炸的原因。而GRUs和本文模型在迭代輪次的增加下,AUC值上升趨勢快,這是因?yàn)橄鄬τ赗NN,GRUs在隱藏層的計(jì)算方法上引入了門單元結(jié)構(gòu),利用門單元特殊的門控機(jī)制來控制梯度傳播,在廣告特征計(jì)算的歷史信息中將重要特征保留,從而避免了梯度消失或爆炸,提高了模型預(yù)估效果。但是本文模型在迭代140次左右的時(shí)候達(dá)到了最大AUC值,而GRUs要在160次左右到達(dá)最大的AUC值。本文模型要比GRUs在更少的迭代次數(shù)下達(dá)到最優(yōu)點(diǎn),最佳AUC值比GRUs下大0.005左右。這是因?yàn)楸疚哪P驮贕RUs的基礎(chǔ)之上改變了步長優(yōu)化算法,使得步長在每次迭代都更新幅度大小,使得訓(xùn)練時(shí)間更少,模型更加精確。本實(shí)驗(yàn)說明,基于步長改進(jìn)算法的本文模型在廣告點(diǎn)擊率預(yù)估中效果要更好,證明了步長改進(jìn)算法的可行性和有效性。
本文采用基于GRUs模型的方法預(yù)估廣告點(diǎn)擊率問題,利用GRUs中特有的門控機(jī)制來加強(qiáng)廣告特征在時(shí)間上的聯(lián)系,進(jìn)而增強(qiáng)廣告特征之間的非線性關(guān)系。基于GRUs模型,在優(yōu)化方法上提出一種步長改進(jìn)算法,使得梯度下降在訓(xùn)練優(yōu)化模型時(shí),每輪迭代的步長發(fā)生更新。實(shí)驗(yàn)結(jié)果表明,利用步長改進(jìn)算法后的梯度下降法優(yōu)化的模型對比其他模型,在廣告點(diǎn)擊率預(yù)估上使用的訓(xùn)練時(shí)間更短,預(yù)估效果更好,為媒體網(wǎng)站和廣告主在投放廣告的類別篩選、位置排版等提供參考價(jià)值,提高廣告收益。
本文實(shí)驗(yàn)只選取了梯度下降這一種優(yōu)化算法,在后續(xù)工作中,可以在步長控制算法的基礎(chǔ)之上尋找更有效的優(yōu)化算法,嘗試對GRUs的隱藏層節(jié)點(diǎn)進(jìn)行改變。