天池-第三屆Apache Flink極客挑戰(zhàn)賽第2名方案和代碼

原文發(fā)表于:天池-第三屆Apache Flink極客挑戰(zhàn)賽第2名方案和代碼
歡迎關(guān)注微信公眾號(hào):YueTan

image

背景

參賽動(dòng)機(jī):

  • 不喜歡996拿著955極低的工資,突然發(fā)現(xiàn)自己的時(shí)間變成了每天刷劇,心有愧疚。
  • 想了解大數(shù)據(jù),F(xiàn)link作為當(dāng)紅的實(shí)時(shí)計(jì)算引擎,比賽還有官方大佬幫忙解答問題,是很難得的學(xué)習(xí)機(jī)會(huì)。

結(jié)果:

  • 拿到第2超出預(yù)期。工程加算法賽,其實(shí)每個(gè)人都是在工程能力的枷鎖下進(jìn)行探索,我屬于枷鎖極重的那個(gè),只能在極小范圍里輾轉(zhuǎn)騰挪優(yōu)化,運(yùn)氣流選手。
  • 注:文章發(fā)表時(shí)還沒有答辯,最終成績(jī)也沒確定。之前寫過(guò)答辯的攻略,我對(duì)答辯雖擅長(zhǎng)卻越發(fā)無(wú)感,這種態(tài)度就容易降名次,甚至答辯前就公開了這篇文章。標(biāo)題說(shuō)自己是第2的方案,萬(wàn)一答辯完后只有第5不要覺得我沽名釣譽(yù)了。真正好的方案是接受時(shí)間檢驗(yàn)的,為了創(chuàng)新而創(chuàng)新是不對(duì)的,為了讓自己顯得創(chuàng)新而硬說(shuō)自己創(chuàng)新是更不對(duì)的。平心而論,我覺得此次的方案平平無(wú)奇,若要找出什么出彩的地方,我比較喜歡數(shù)據(jù)增強(qiáng)那一環(huán)節(jié)。

任務(wù)背景:

  • 部分商家通過(guò)刻意點(diǎn)擊熱門和自家東西來(lái)讓推薦系統(tǒng)誤以為二者是高度相關(guān),從而蹭到了熱點(diǎn)。感興趣可以搜索co-visit attck of recommentation system,很多論文還介紹了其他攻擊方法,挺有意思。
image

框架

整體涉及到的框架較多,參賽完讓我獨(dú)立開發(fā)還是做不到,但至少有個(gè)模糊的概念。本次使用的組件主要有:flink AI flow,occlum,cluster serving,kafka等,下面是我畫的一個(gè)結(jié)構(gòu)圖:

image

數(shù)據(jù)

很多特征和模型的改進(jìn),需要匹配以相應(yīng)的工程改進(jìn)。但是數(shù)據(jù)處理,是可以直接提現(xiàn)的,所以我做了一些樣本選擇、數(shù)據(jù)增強(qiáng)的工作。在那之前,我可以說(shuō)一下我對(duì)業(yè)務(wù)的理解。我的設(shè)想是某些用戶其實(shí)才是檢測(cè)的重點(diǎn),因?yàn)橄裎乙粯犹熨Y愚鈍,根本想不到這種抱大腿的攻擊方法。為了讓系統(tǒng)推薦自家商品,能想到連續(xù)點(diǎn)擊熱門商品和自家商品的人,了不得。所以一開始,我就把重點(diǎn)放在了用戶特征上。

image

初賽線上有100萬(wàn)訓(xùn)練數(shù)據(jù)、10萬(wàn)測(cè)試數(shù)據(jù),可以下載的有50萬(wàn)訓(xùn)練數(shù)據(jù)和5萬(wàn)測(cè)試數(shù)據(jù)。作為一個(gè)分類任務(wù),首先查看其類別分布:

  • 50萬(wàn)訓(xùn)練集:負(fù)樣本450000,正樣本50000
  • 5萬(wàn)測(cè)試集:負(fù)樣本45000,正樣本5000

證明測(cè)試集是經(jīng)過(guò)精確采樣的,所以正負(fù)樣本比例完全一致。然后就是查看ID類,物品ID分布如下圖??芍蠖鄶?shù)測(cè)試集都是新的item。

image

用戶ID分布如下圖,大多數(shù)測(cè)試集中也都是新的測(cè)試集。同時(shí),業(yè)務(wù)中其實(shí)對(duì)用戶ID可以建立黑名單和白名單制,因此針對(duì)user ID可以有更多的操作。建立特征時(shí),也可以考慮id的歷史成績(jī),畢竟一些ID可能都是種子選手了。

image

ID的時(shí)間關(guān)系。去掉visit time為負(fù)數(shù)的訓(xùn)練樣本后,可知大多數(shù)時(shí)間都在1-10萬(wàn)左右,最大時(shí)間409599,總樣本50萬(wàn),可知很多樣本是同一時(shí)間的。

image

而測(cè)試集時(shí)間,大多都在90萬(wàn)以上,證明中間還是間隔了不少時(shí)間的。最小時(shí)間:114054 最大時(shí)間:950485。因此可以部分得出結(jié)論:測(cè)試集幾乎都是新的樣本與物品,在一段新的時(shí)間,對(duì)模型泛化能力要求較高。

image

同時(shí)初賽提供了75個(gè)匿名特征,復(fù)賽152。其中前m個(gè)是商品特征,后面的是用戶特征。所以如何確定這個(gè)m呢?根據(jù)其獨(dú)特個(gè)數(shù)來(lái)判斷即可,如下代碼所示。同時(shí)可以看出即使是同為商品特征,也可以分為大概兩組。一組的nunique大概是20左右,另一組大概是70左右。大概可以想象提供的數(shù)據(jù)大概是embedding數(shù)據(jù)和count。nunique大概就是類別個(gè)數(shù)。在embedding中,同一個(gè)類別還是對(duì)應(yīng)著同一個(gè)embedding數(shù)據(jù),其中embedding維度就是70對(duì)應(yīng)的維度個(gè)數(shù),肉眼可見大概embed_size是15,而類別個(gè)數(shù)則是70。同理,另一組對(duì)應(yīng)的embed_size也是15,類別個(gè)數(shù)則是20。

image

而對(duì)測(cè)試集而言,同樣可知embed_size當(dāng)然是沒有變的15,而類別則不同。測(cè)試集中一個(gè)類別數(shù)量為50,一個(gè)為8。至于這50和8與訓(xùn)練集是子集或非集,需要向數(shù)據(jù)挖掘中的frenquency encoding一樣,把訓(xùn)練集和測(cè)試集合在一起再計(jì)算一次。

image

同時(shí),后半部分為用戶特征,同理可以畫出用戶特征的nunique。

image

比較奇怪的地方出現(xiàn)了,在測(cè)試集中用戶的類別比訓(xùn)練集中還要多。

image

因此首先區(qū)分用戶特征和商品特征。畢竟感覺賽題方提供的是半匿名數(shù)據(jù),告訴了籠統(tǒng),但是如何進(jìn)一步區(qū)分則需要對(duì)數(shù)據(jù)進(jìn)一步深挖才可以。這道題目既然給了user特征和item特征,可以參考的方法就有點(diǎn)擊率預(yù)估、文本匹配等大方向。點(diǎn)擊率預(yù)估中最重要的特征可以有類別count特征、目標(biāo)編碼特征和embedding特征。

我覺得自己做的比較有意思的部分就是數(shù)據(jù)增強(qiáng)了。主要借鑒了推薦系統(tǒng)和對(duì)比學(xué)習(xí)中,對(duì)正樣本和負(fù)樣本的重視,嘗試了一些操作。

image

模型

模型比較簡(jiǎn)單,我最終用的就是常規(guī)的雙塔模型。雖然也嘗試了各種優(yōu)化,但還是最開始的簡(jiǎn)單模型效果最好。詳情可以參考我的十月比賽流水,里面詳細(xì)記錄了我每天的想法和操作,應(yīng)當(dāng)是這些特征本身已經(jīng)比較強(qiáng)。

image

我的第一部分優(yōu)化是細(xì)節(jié)優(yōu)化。增加交互特征F1確實(shí)提分了,但是導(dǎo)致延時(shí)多了不少,因此得不償失。SE沒起作用,反而是加個(gè)BatchNorm和Dropout好用的不得了。

image

第二部分優(yōu)化是增加多任務(wù),自編碼任務(wù)優(yōu)化。自編碼部分使用100萬(wàn)數(shù)據(jù),分類部分使用10萬(wàn)數(shù)據(jù)。本以為這個(gè)AE-DNN可以有所作為的,但其實(shí)沒啥效果。

image

訓(xùn)練細(xì)節(jié)和上分路徑如下。分層學(xué)習(xí)率,label smoothing都是起作用的。

image

結(jié)論部分,當(dāng)然是自夸一波,自己人就不多說(shuō)了。

image

開源代碼

開源代碼地址:https://github.com/LongxingTan/Data-competitions/tree/master/tianchi-flink-aaig

謝謝關(guān)注,我是YueTan。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容