互聯網廣告系統綜述八機器學習與數據

互聯網廣告系統綜述八機器學習與數據

聲明:

1)該博文是整理自網上很大牛和專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本聲明也參考原文獻

2)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應,更有些部分本來就是直接從其他博客複製過來的。如果某部分不小心侵犯了大家的利益,還望海涵,並聯系老衲刪除或修改,直到相關人士滿意爲止。

3)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝。

4)閱讀本文需要互聯網廣告業的基礎(如果沒有也沒關係了,沒有就看看,當做跟同學們吹牛的本錢)。

5)此屬於第一版本,若有錯誤,還需繼續修正與增刪。還望大家多多指點。請直接回帖,本人來想辦法處理。


寫好標題,卻遲遲不知道怎麼動手,最近機器學習的一個分支——深度學習,真是火得沒朋友啊,過去十幾年的最熱門的核方法,被成功的放到一邊去了,整個工業界開始重新聚焦到神經網絡這邊來了。

方法萬能論總是那麼讓人熱血沸騰的。

可惜經過一段時間的摸爬滾打,腦子總算清醒了一點,也從一個廣告算法工程師的角度去看看這個問題吧。

也不謙虛了,就打個比方吧,把角色分一下好說話。類別互聯網廣告(或者說數據挖掘領域),拿餐館做比喻的話,那麼數據就是食材,算法工程師就是廚師,算法就是配料。一道菜要好吃,就得要求食材好,廚師好,配料好而且用得好。

所以一道菜好不好吃,不是在一個點完全決定的,而是綜合的作用的。

下面就分別論述一下吧。 

1.1數據是王道

上面說過了,數據是食材,食材的質量本質上決定的一道菜能做到多好。食材不好,配再好的廚師,用再好的配料,都是爛泥扶不上牆的。

那麼就要求有很好的數據了,那麼問題就來了——什麼樣的數據纔是好的數據?

這個問題就及其難以回答了,如果從互聯網廣告方面看,還算有經驗。下面就班門弄斧自問自答了。

用戶的profile,如年齡,性別,職業,地域(細化到某區會更好),教育水平,婚戀狀態,登陸的平臺(手機型號或者PC),社交好友圈,關注的名人,平時瀏覽的網頁,平時泡的論壇,經常使用的應用等等。

爲啥呢?

因爲廣告主都是賣東西的,一個人的年齡,性別,職業等等因素,很大程度上影響了這個人的興趣點所在。而婚戀狀態,很好說明的這個人在某些東西上面的需求;登陸的平臺,一定程度上反應了一個人的消費水平甚至消費觀念;職業,能說明一個人的財富水準;社交好友圈,也能反映一個人的財富水準以及興趣圈子;關注的名人,平時瀏覽的網頁,平時泡的論壇,經常使用的應用等,都能準確反應一個人的興趣,不同的名人,網頁,論壇,應用,可以認爲是不同的興趣的體現。

用戶對廣告的歷史點擊行爲序列,也可以認爲是比較有效的數據,只是會是一個瞬時發送的興趣,瞬間消失,那是需要實時捕捉的,大部分廣告平臺都能得到這樣的數據。

有些廣告平臺就沒有這麼好的數據了,一個人的profile數據就是非常難以獲取的,相當多的DSP,其實連識別一個人都有難度,更別提用戶的profile了。

如果沒有profile,就依賴很多方法去估算或者去一些平臺去爬,當然也可以去向DMP請求。

由這裏,其實就誕生了很多工作——數據收集,清洗。這個也可以比喻成採購食材。在這一步,就可以使用一些數據挖掘的算法了,比如在清洗階段,有些統計知識如均值,方差,數據挖掘方法如異常點檢測,都能用上了。如先把數據擬合一下正態分佈,把離分佈中心很遠的樣本捨棄掉。

有些不知道年齡的用戶,就用一些分類方法或者聚類去估計,這是就有決策樹或者svm,kmeans的上場的機會了。

用戶的職業的估計方法也很複雜,一些基本的入手思路就是從好友圈傳遞過來,比如好友圈裏面大部分都是程序員,這個人也認爲是程序員。

關注的名人、瀏覽的網頁、使用的應用、泡的論壇,這幾個都有興趣傾向的。就需要使用LDA等等建模方法,把一個名人,網頁,應用,論壇變成一個個興趣的向量,再根據一個人在各個來源方面的傾向,給一個人分配一個興趣向量。然後就可以根據興趣來進行商業上面的對廣告主的匹配程度了,如一個人經常關注科比,逛籃球論壇,看籃球新聞,那麼這個人對籃球的相關廣告也會有比較大的好感。這裏,topic model啊,分詞方法啊,甚至分類、迴歸方法都能用上;如果炫一點,還能用上深度學習算法。

有了這些用戶的profile,才能把特徵工程做起來,不然特徵工程就巧婦難爲無米之炊了。看前面的博文,各種交叉組合特徵,都是建立在這個profile已經建立的情況下的,如果沒有這些profile,特徵工程就黃了。

對於挖掘用戶profile的工程師來說,食材就是那些從各個地方收集過來的數據,他們自己是廚師(往往也是那個洗菜的),利用各種工藝和配料生成了數據。他們的產出,一部分直接端給客人了(廣告主做定向),一部分作爲二級食材,讓大師傅(競價排序的負責人)再加工,加配料,做出了一道大菜(廣告業務),也端出去給大客人了(老闆與董事會)。

 

1.2選擇合適的算法

所謂算法是配料,就是對相同的食材,用不同的配料,得到的菜味道是不一樣的。就像荔枝蘸鹽蘸醋吃,味道是不一樣的。

如ctr預估模型,有logisticregression,也有gbdt,也有阿里蓋坤的分片線性模型,甚至有random forest,這幾種預估方法,在相同的數據上面,會出現不一樣的效果,有些估得會更準,有些估得不準。

又如估年齡的方法,可以利用用戶的各種行爲,各種關注的名人、瀏覽的網頁、使用的應用、泡的論壇作爲特徵,用svm去估,能得到一個結果;用kmeans來估,又是一個結果;當然也可以根據他好友圈的年齡的平均,或者中位數,也能得到一個結果;根據他的職業和婚戀狀態,利用logistic regression來估,也有一個結果。這各種結果基本都不一樣,有些準,有些不準。

又如挖掘用戶興趣,利用topicmodel先把一個名人,網頁,應用,論壇變成一個個興趣的向量,再根據一個人在各個來源方面的傾向,給一個人分配一個興趣向量,能得到一個結果;直接根據運營指定一些論壇,或者頻道,網頁的興趣,然後再加權分配給每個人,也能得到一個結果;把每個廣告主指定興趣向量,根據用戶的歷史行爲數據,每點擊一個廣告主,就把這個廣告主的興趣向量分給這個用戶,也能得到一個結果;根據用戶的各種行爲,各種關注的名人、瀏覽的網頁、使用的應用、泡的論壇作爲特徵,利用kmeans進行聚類,對每個類別,用相似計算的方法,或者人工指定一個興趣向量,也能得到一個結果;把用戶所有的數據一起拿過來,利用word2vec和一些深度學習的方法,得到一個用戶的表徵的向量,也得到了每個廣告主,或者興趣類目的表徵的向量,相關的向量做相似度計算,也能得到用戶興趣向量。

綜上,算法可以各種挑着用(配料嘛),出來的結果不一樣,有些好,有些不好。這就很依賴人工或者線上效果去驗證,評估哪個好了,好的結果纔拿出去見客人,差的就不能用了。

到這,不知道大家明白了沒有,說這麼多,也沒有說哪個算法好,而是要根據食材不同,去優選最合適的。這個跟找配偶一樣的,沒有最好的,只有最合適的。

 

1.3算法工程師的工藝

所謂看工藝,就看算法工程師的理論功底和經驗了。

每個配料生產廠家都會大肆宣揚他們家的配料好,算法工程師不能每家都相信,但也不能每家都不相信,只好都試試看,選擇最適合自家食材的就行。

算法工程師同樣也是,選擇最合適的算法來完成任務就可以了。

同樣的數據,同樣的可供選擇的算法,在不同的算法工程師手裏,依然會出現不一樣的結果,如當年某公司做ctr預估的時候用的很多是連續型特徵,後來某大牛過來負責後,替換成了離散型的特徵,效果就好了。對於各個公司來說,找到不同的算法工程師,也能決定一個業務的能做成什麼樣子。

對於算法工程師來說,確實沒有一勞永逸的方法,成長也沒有什麼捷徑,摸爬滾打地成長似乎免不了,有些聰明的人,可能會快一點。以下算是一些成長經驗吧。

首先算法工程師也要成長爲產品經理,要加強業務功底,根據業務需求決定優化的一個限度。要注意的是,比如預估年齡這樣的一個任務,可以有很多種做法,各種做法難度不一樣,投入產出比不一樣,投入人力也不一樣,算法工程師需要了解業務對這個年齡的需要程度(是否絕對的決定收入?),還需要瞭解當前團隊的實力以及資源(機器,可用工具),再選擇一兩個合適的算法去試,同時還要決定,當哪些條件滿足的時候,任務就可以告一段落了。

上面對“算法工程師需要”後面的那些話,說起來好像非常清楚,只是,真有這種感覺的人才是站着說話不腰疼。

這個“瞭解業務對年齡的需要程度”,也是一個不容易的任務,產品經理需要的肯定是越準確越好,運營也是這麼覺得的,覺得錯一兩個都不行,但是能做到嗎?那麼能做到多少是正確的?90%?80%?70%?年齡在整個業務裏面佔什麼樣的地位?定向那裏算一個,ctr預估那裏算一個,還有算法的其他一些挖掘算一個,整個業務的全景都瞭解了,才能具備“瞭解業務對年齡的需要程度”這個條件。

“瞭解當前團隊的實力以及資源”,這話也是知易行難啊,瞭解團隊的實力這個事情靠跟同事合作得來的,還得了解自己有幾斤幾兩,這個往往有人不容易做到了;另外團隊有多少機器和工具都清楚,但是這些機器也不是全部用來弄年齡這個事情的,還有其他任務要做的;團隊裏誰來做這個任務,或者自己做需要多少時間,其他任務怎麼安排,都是問題的。老闆不會專門找個挖掘年齡的人來放着的。

而“選擇一兩個合適的算法去試”這句話倒不簡單,首先算法工程師得了解多個算法的優缺點,還得了解它們的實現難度,還需要知道當前團隊有了什麼樣的工具可以加快速度,然後再選的算法。而瞭解多個算法的優缺點,還真是一件巨無霸的難事,人的精力有限,可能一直在瞭解着各種算法呢,要好好了解一個算法都是很需要精力的,必要的時候還得做寫實驗才能瞭解;這事也沒有很好的捷徑,好好加強數學功底,學會解釋模型,積累對各種算法的使用經驗,慢慢成長,纔有能更好地選擇算法。

工作後,公司不是學校,業務是最好的推動力。作業可以抄,工作卻不是那麼容易抄的,各個公司具有的條件不一樣,很難抄得來。有的算法工程師開始工作的時候,有一個經驗豐富的大哥帶着,手辦眼見,在打下手的同時積累了相當的經驗,成長成爲一個合格的算法工程師,這個途徑算是比較順利的;有時候情況是,一開始大家都不懂,一起摸爬滾打,在經過各種挫折和打擊之後,慢慢成長成爲一個優秀的算法工程師,這是另一種途徑。無論走哪個途徑,都沒有一步登天的路,加強理論功底,積累實戰經驗,是最有成效的方式了。

 

 

1.4後話

曾經也是熱血青年,也曾爲某個算法牛不牛逼糾結很久,讀研的時候還覺得對某個算法做了一點點事情就多牛逼了。沒想過工作後被現實狠狠打臉了。工作的前面很長的時間內,其實都是一個收菜、驗菜、洗菜的小夥計,偶爾還要修水龍頭,修洗菜池,好久才能自己挽起袖子去加工一下食材,做成二級食材供大師傅使用,也經常遇到滿心希望能做好的菜做砸了。

如果上面的話不清楚,就用術語來說,就是工作後一段時間內,都在看數據排查數據,清洗處理數據,說好聽點的就是評估特徵。然後還經常導數據,還包括搭建一些基礎服務,如線上存儲器,實時流系統等。後面有了經驗後,才慢慢自己去想一些特徵,去生成特徵,評估,加入模型上線等等一套流程走完。

在這段時間裏面,看了一些paper,也瞭解了其他同行怎麼做的,也開始用新的視角去看待各個算法,也開始有了對一些算法的實戰經驗,瞭解了一些工具,會使用一些工具。對業務也越來越熟悉了,纔有了一些算法工程師的樣子。

目前的狀態還是——衣帶漸寬終不悔,爲伊消得人憔悴吧。

沒覺得輕鬆,但是也不知道說什麼苦好。

“沉舟側畔千帆過,病樹前頭萬木春”,互聯網時代一切都在發展,需要努力跟上。這幾篇博文都是經驗之談,希望能幫助一些人吧。

 

致謝

多位互聯網廣告同行如@林昭等。

多位同事一起鼓勵與提攜。

參考文獻

[1] 大數據時代的互聯網行爲定向廣告技術 品友互動@林昭的PPT

[2] 廣告數據上的大規模機器學習 百度技術沙龍@夏粉的PPT


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章