0
本文作者: 汪思穎 | 2018-06-22 14:51 |
雷鋒網(wǎng) AI 研習(xí)社按,本文為 IJCAI-18 阿里媽媽搜索廣告算法大賽亞軍解決方案。本文由作者發(fā)在其 GitHub 主頁(yè),雷鋒網(wǎng) AI 研習(xí)社獲其授權(quán)轉(zhuǎn)載。(阿里媽媽?xiě){借舉辦 IJCAI-18 比賽,在雷鋒網(wǎng)學(xué)術(shù)頻道 AI 科技評(píng)論旗下數(shù)據(jù)庫(kù)項(xiàng)目「AI 影響因子」中增加 8 分。)
一、 隊(duì)員介紹
隊(duì)長(zhǎng):BRYAN
數(shù)據(jù)挖掘從業(yè)者,國(guó)內(nèi)數(shù)據(jù)挖掘競(jìng)賽名將,天池?cái)?shù)據(jù)科學(xué)家,IJCAI-17 冠軍獲得者。曾多次在國(guó)內(nèi)外著名賽事中取得名次。
隊(duì)員:桑楡
數(shù)據(jù)挖掘從業(yè)者,國(guó)內(nèi)數(shù)據(jù)挖掘競(jìng)賽名將,天池?cái)?shù)據(jù)大師,IJCAI-17 冠軍獲得者。曾多次在國(guó)內(nèi)外著名賽事中取得名次。
隊(duì)員:李困困
數(shù)據(jù)挖掘從業(yè)者,國(guó)內(nèi)數(shù)據(jù)挖掘競(jìng)賽名將。曾取得 CCF-螞蟻金服-商場(chǎng)定位賽冠軍等多項(xiàng)國(guó)內(nèi)外著名賽事的名次。
二、 賽題背景分析及理解
本賽題為搜索廣告轉(zhuǎn)化預(yù)估問(wèn)題,一條樣本包含廣告點(diǎn)擊相關(guān)的用戶(hù)(user)、廣告商品(ad)、檢索詞(query)、上下文內(nèi)容(context)、商店(shop)等信息的條件下預(yù)測(cè)廣告產(chǎn)生購(gòu)買(mǎi)行為的概率(pCVR),形式化定義為:pCVR=P(conversion=1 | query, user, ad, context, shop)??梢詫?wèn)題抽象為二分類(lèi)問(wèn)題,重點(diǎn)對(duì)用戶(hù),商品,檢索詞,上下文,商店進(jìn)行特征刻畫(huà),來(lái)訓(xùn)練模型。
三、 核心思路
(1) 數(shù)據(jù)分析
通過(guò)數(shù)據(jù)分析我們發(fā)現(xiàn),訓(xùn)練數(shù)據(jù)的前 7 天轉(zhuǎn)化率維持在 1% 左右,但是在 6 號(hào)轉(zhuǎn)化率偏低,在預(yù)測(cè)當(dāng)天 7 號(hào)的上午轉(zhuǎn)化率超過(guò) 4%,所以這是一個(gè)對(duì)特定促銷(xiāo)日進(jìn)行預(yù)測(cè)的問(wèn)題。重點(diǎn)需要刻畫(huà)用戶(hù),商品,店鋪,檢索詞等關(guān)鍵信息在預(yù)測(cè)日前面 7 天的行為,預(yù)測(cè)日前一天的行為,預(yù)測(cè)日當(dāng)天的行為。
另外 7 號(hào)的樣本量遠(yuǎn)遠(yuǎn)超過(guò)前面每天的樣本量均值,是我們重點(diǎn)需要關(guān)注的時(shí)間區(qū)間。主模型是基于 7 號(hào)上午的樣本進(jìn)行訓(xùn)練,前面 7 天的數(shù)據(jù)輔助訓(xùn)練。由于預(yù)估時(shí)間為 7 號(hào)下午,時(shí)間相關(guān)的特征沒(méi)法在上午訓(xùn)練,為了彌補(bǔ) 7 號(hào)上午訓(xùn)練帶來(lái)是數(shù)據(jù)和信息損失,我們隊(duì)伍采用了兩種方式:,一種采用前面 7 天訓(xùn)練模型預(yù)估 7 號(hào)得到概率作為新的特征,一種是訓(xùn)練 7 號(hào)之前以及 7 號(hào)上午訓(xùn)練全量模型進(jìn)行加權(quán)。
(2) 用戶(hù)分析
從下圖可以看到大部分用戶(hù)的點(diǎn)擊次數(shù)集中在 5 次以下,8 天的時(shí)間內(nèi)點(diǎn)擊 5 次,說(shuō)明這是一個(gè)低頻訴求的場(chǎng)景。
在下圖中可以看到,大部分用戶(hù)都沒(méi)有購(gòu)買(mǎi)行為,少量用戶(hù)購(gòu)買(mǎi)了一次,本次競(jìng)賽的目標(biāo)預(yù)測(cè)用戶(hù)是否購(gòu)買(mǎi),少量的購(gòu)買(mǎi)行為構(gòu)成了數(shù)據(jù)的長(zhǎng)尾分布形勢(shì)。
下圖是用戶(hù)點(diǎn)擊次數(shù)和購(gòu)買(mǎi)次數(shù)的關(guān)系,橫軸點(diǎn)擊數(shù),縱軸購(gòu)買(mǎi)數(shù)。可以看到數(shù)據(jù)是呈左下角分布的趨勢(shì),也就是說(shuō)購(gòu)買(mǎi)行為發(fā)生在少量點(diǎn)擊次數(shù)的情況下,說(shuō)明這是一個(gè)即時(shí)興趣,目標(biāo)明確的場(chǎng)景。我們需要重點(diǎn)刻畫(huà)用戶(hù)當(dāng)前狀態(tài)。
從用戶(hù)分析中,我們發(fā)現(xiàn),點(diǎn)擊一次的用戶(hù)占據(jù)較大的比例,這部分無(wú)法通過(guò)歷史行為的特征刻畫(huà)表征,因此提供的 query 信息是表征這部分用戶(hù)的關(guān)鍵;同時(shí),絕大部分用戶(hù)沒(méi)有發(fā)生購(gòu)買(mǎi)行為,因此,負(fù)樣本中包含了大量的信息,另外評(píng)估指標(biāo)是 logloss,需要精確預(yù)測(cè)購(gòu)買(mǎi)概率,所以并未對(duì)負(fù)樣本進(jìn)行采樣,避免破壞正負(fù)樣本分布。
(3) 預(yù)處理
缺失值填充:id 類(lèi)特征使用眾值填充,數(shù)值特征均值填充
挖掘隱藏信息:針對(duì) item_property_list 列,統(tǒng)計(jì) property 出現(xiàn)次數(shù),保留出現(xiàn)次數(shù)的 top1~top10 作為新的 id 特征;針對(duì)predict_category_property 列,直接按順序保留 top1~top10 的類(lèi)別作為新的 id 特征。針對(duì) item_category_list 列,因?yàn)榈谝粋€(gè)大類(lèi)都相同,取第二個(gè)類(lèi)別作為新的 id 類(lèi)特征。
(4) 線下劃分
由于線上提交的次數(shù)有限,因此,建立穩(wěn)定的線下是取勝的關(guān)鍵。為提升我們優(yōu)化算法的效率,減少線上成績(jī)的運(yùn)氣性成分,同時(shí)避免我們的算法過(guò)度依賴(lài)于線上數(shù)據(jù)集,我們認(rèn)真地進(jìn)行了線下測(cè)試,分別采取 7 日上午最后兩個(gè)小時(shí),7 日上午隨機(jī) 15%的數(shù)據(jù)進(jìn)行驗(yàn)證,只有兩者在線下均有提升,我們才進(jìn)行線上提交。因此,我們始終確保我們?cè)诰€上驗(yàn)證的優(yōu)化在線下均有顯著的提升。
(5) 模型設(shè)計(jì)
我們采用了 3 種數(shù)據(jù)劃分方式訓(xùn)練模型,主模型使用 7 號(hào)上午的數(shù)據(jù)作為訓(xùn)練樣本,對(duì) 31-5 號(hào),6 號(hào),7 號(hào)的數(shù)據(jù)提取特征。全局?jǐn)?shù)據(jù)模型使用全部帶標(biāo)簽的樣本作為訓(xùn)練樣本,使用全部數(shù)據(jù)提取特征。時(shí)間信息模型使用 31-6 號(hào)的數(shù)據(jù)作為訓(xùn)練樣本,對(duì) 31-6 數(shù)據(jù)提取特征。訓(xùn)練的時(shí)間信息模型對(duì) 7 號(hào)全天的樣本進(jìn)行預(yù)測(cè),將預(yù)測(cè)結(jié)果(攜帶了時(shí)間信息)作為新的特征添加到前面的模型中,來(lái)彌補(bǔ)前面模型對(duì)時(shí)間刻畫(huà)的缺失。
(6) 特征工程
特征工程是模型提分的關(guān)鍵,我們從簡(jiǎn)單到復(fù)雜建立了基礎(chǔ)特征群,轉(zhuǎn)化率特征群,排名特征群,比例特征群,類(lèi)特征群,競(jìng)爭(zhēng)特征群,業(yè)務(wù)特征群等多種特征群,對(duì)用戶(hù)及行為進(jìn)行了細(xì)致的刻畫(huà)。
在原始特征的基礎(chǔ)上的一些簡(jiǎn)單擴(kuò)充與統(tǒng)計(jì),由于用戶(hù)的行為過(guò)于稀疏,提取用戶(hù)轉(zhuǎn)化率的時(shí)候做了平滑,另外對(duì)用戶(hù)購(gòu)買(mǎi)點(diǎn)擊行為做編碼。在 query 交互,用戶(hù)交互,競(jìng)爭(zhēng)特征群中,計(jì)算量較大,采用并行的方式提取,提升效率。
為了提高效率,我們采用分批測(cè)試特征群的方式進(jìn)行線下驗(yàn)證。其中紫色特征群是過(guò)擬合的特征群,線下表現(xiàn)突出,在線上表現(xiàn)平平。究其原因是因?yàn)椋@些特征都是對(duì)當(dāng)天上午的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),即使我們使用交叉的方式提取,盡量避免數(shù)據(jù)穿越,由于上午下午數(shù)據(jù)分布有差異,所以依然沒(méi)能很好的克服過(guò)擬合。
(7) 模型融合
不同模型好而不同是融合提升的關(guān)鍵,我們隊(duì)伍隊(duì)員分別做了三個(gè)高分模型,每個(gè)模型在樣本與特征上均有差異,因此,通過(guò)融合進(jìn)一步提升了成績(jī)。最好的單模型依然能保持 top2 的成績(jī)。
四、 工程優(yōu)化
為了使模型更具業(yè)務(wù)實(shí)用性,我們對(duì)代碼進(jìn)行了優(yōu)化,主要包括下面四個(gè)方面:
1)id 類(lèi)特征重編碼,直接當(dāng)作特征,樹(shù)模型深度設(shè)置-1,避免了onehot 大量占用內(nèi)存空間,實(shí)際效果和 onehot 相當(dāng)。
2)數(shù)據(jù)并行,主模型 2 小時(shí)提取完全部特征。由于 python 的多進(jìn)程中,子進(jìn)程會(huì)拷貝父進(jìn)程狀態(tài),如果直接把數(shù)據(jù)分塊然后使用多進(jìn)程會(huì)導(dǎo)致內(nèi)存暴漲,所以我們的解決方案是先將數(shù)據(jù)分塊存為磁盤(pán)文件,然后在多進(jìn)程任務(wù)中分別讀取各自數(shù)據(jù)提取特征,最后合并特征,有效的減少了內(nèi)存占用。
3)數(shù)據(jù)合并,訓(xùn)練預(yù)測(cè)數(shù)據(jù)一起提取特征。直接使用 day,hour 等字段在提取特征完畢之后劃分訓(xùn)練,驗(yàn)證,測(cè)試集。提高了特征提取,線下測(cè)試,線上預(yù)測(cè)的流程效率。
4)特征分批測(cè)試,提高效率。由于復(fù)賽數(shù)據(jù)量比較大,如果使用warper類(lèi)的特征選擇方法會(huì)浪費(fèi)大量時(shí)間,所以我們直接按特征群分批測(cè)試,使用原始特征+測(cè)試特征群的方式進(jìn)行線下驗(yàn)證,少量的特征得以快速迭代驗(yàn)證。
5)并行特征提取的關(guān)鍵代碼
數(shù)據(jù)分塊存儲(chǔ)
特征提取
特征合并
五、 比賽經(jīng)驗(yàn)總結(jié)
(1)深刻的賽題理解
對(duì)賽題進(jìn)行認(rèn)真而理性的分析和全面而深入的思考,對(duì)不了解之處做相應(yīng)的調(diào)研。
(2)細(xì)致的數(shù)據(jù)分析
從各個(gè)維度對(duì)數(shù)據(jù)進(jìn)行細(xì)致的觀察和分析,從中挖掘出重要的規(guī)律。
(3)海量的特征
多角度地提取有效特征,構(gòu)造廣闊而高質(zhì)量的特征海洋,確保沒(méi)有遺漏有用的信息。
(4)強(qiáng)力的模型
訓(xùn)練多組不同采樣方式、不同特征的強(qiáng)力模型,并將它們?nèi)诤铣赏薮蟮慕K極模型。
(5)未完成的思考
賽題背景是搜索轉(zhuǎn)化預(yù)估,可以直接使用的數(shù)據(jù)是用戶(hù)已經(jīng)點(diǎn)擊過(guò)的數(shù)據(jù),實(shí)際上我們還可以拿到用戶(hù)看到過(guò),但是沒(méi)點(diǎn)擊的數(shù)據(jù)來(lái)輔助訓(xùn)練。一個(gè) query 會(huì)出多個(gè)商品,用戶(hù)可能只點(diǎn)擊了其中一個(gè),如何獲取用戶(hù)看到的其他商品呢?關(guān)鍵還是在 query 上,如果有其他用戶(hù)用同樣的 query 進(jìn)行了搜索并且點(diǎn)擊了不同的商品,那么這個(gè)商品可能就是被其他沒(méi)有點(diǎn)擊的用戶(hù)看到過(guò)的。
(6)比賽與實(shí)際業(yè)務(wù)的差距
在本次比賽中,我們使用了大量的特征以及模型融合,其中存在兩個(gè)需要討論的問(wèn)題。首先是特征,我們使用了部分用戶(hù)當(dāng)前狀態(tài)的特征,比如距離上一次點(diǎn)擊時(shí)間間隔,距離下一次點(diǎn)擊時(shí)間間隔。第一個(gè)特征在實(shí)際業(yè)務(wù)中,需要實(shí)時(shí)提取,如何設(shè)計(jì)實(shí)時(shí)特征的計(jì)算框架,性能能否跟上都是需要考慮的問(wèn)題。第二個(gè)特征距離下一次點(diǎn)擊時(shí)間間隔,這個(gè)特征甚至在實(shí)際業(yè)務(wù)中根本提取不到,屬于未來(lái)的信息,但是在比賽中卻可以利用到。如果把預(yù)測(cè)時(shí)間段的用戶(hù)數(shù)據(jù)調(diào)整為一個(gè)用戶(hù)只出現(xiàn)一次,那么這個(gè)問(wèn)題就可以得到很好的解決。
隨之而來(lái)的另一個(gè)問(wèn)題是,用戶(hù)只出現(xiàn)一次,就無(wú)法統(tǒng)計(jì)到用戶(hù)當(dāng)前狀態(tài)的其他未利用到未來(lái)信息的特征,像商品店鋪的統(tǒng)計(jì)信息也不完全,會(huì)引起一個(gè)信息缺失的問(wèn)題。所以如何在比賽與實(shí)際業(yè)務(wù)中平衡數(shù)據(jù)的利用程度是一個(gè)需要考慮到的問(wèn)題。另外一個(gè)是模型設(shè)計(jì)的問(wèn)題,實(shí)際業(yè)務(wù)中幾乎不太可能會(huì)用到 stack 之類(lèi)的模型融合方案,模型復(fù)雜度帶來(lái)的計(jì)算代價(jià)和線上預(yù)估時(shí)間的代價(jià)可能會(huì)超過(guò)模型融合性能提升帶來(lái)的收益,實(shí)際業(yè)務(wù)簡(jiǎn)單加權(quán)融合可能會(huì)成為多數(shù)時(shí)候的選擇。
本次比賽我們選擇了 LightGBM 模型,因?yàn)閿?shù)據(jù)量少,訓(xùn)練快,可以在線下快速迭代。在實(shí)際業(yè)務(wù)中,使用的更多的模型可能是 LR,F(xiàn)FM,DNN 之類(lèi)的模型,實(shí)際業(yè)務(wù)的數(shù)據(jù)是海量的,這些模型更能學(xué)習(xí)到穩(wěn)定魯棒的參數(shù),并且預(yù)估速度更快。由于正負(fù)樣本比例懸殊,如果考慮訓(xùn)練效率的話,其實(shí)也可以對(duì)負(fù)樣本進(jìn)行采樣后訓(xùn)練,比如 LR 模型訓(xùn)練之后通過(guò)對(duì)截距項(xiàng)的修正,依然可以保持預(yù)估的數(shù)據(jù)符合實(shí)際分布。
六、 團(tuán)隊(duì)亮點(diǎn)
(1)強(qiáng)大的陣容
聚集三位優(yōu)秀的數(shù)據(jù)挖掘競(jìng)賽選手。
(2)一致的目標(biāo)
隊(duì)員們對(duì)本次比賽的目標(biāo)一致而明確(雖然最終并未達(dá)成)。
(3)良好的溝通
隊(duì)員們頻繁地對(duì)賽題進(jìn)行討論,及時(shí)地同步各自的進(jìn)展。
(4)完美的配合
隊(duì)員們分別訓(xùn)練不同的模型,彼此的模型差異極大,特別適合進(jìn)行
融合。
(完)
GitHub 地址:https://github.com/YouChouNoBB/ijcai-18-top2-single-mole-solution
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。