OGeek算法挑戰(zhàn)賽是天池平臺(tái)上的一個(gè)大賽,主要內(nèi)容是基于百萬(wàn)最新真實(shí)用戶搜索數(shù)據(jù)的實(shí)時(shí)搜索場(chǎng)景下搜索結(jié)果ctr預(yù)估。給定用戶輸入prefix(用戶輸入,查詢(xún)?cè)~前綴)以及文章標(biāo)題、文章類(lèi)型等數(shù)據(jù),預(yù)測(cè)用戶是否點(diǎn)擊,評(píng)價(jià)標(biāo)準(zhǔn)采用F1 score 指標(biāo)。
最終排名:初賽:17 / 2888;復(fù)賽:26 / 2888
附:github地址
比賽簡(jiǎn)介
在搜索業(yè)務(wù)下有一個(gè)場(chǎng)景叫實(shí)時(shí)搜索(Instance Search),就是在用戶不斷輸入過(guò)程中,實(shí)時(shí)返回查詢(xún)結(jié)果。此次賽題來(lái)自O(shè)PPO手機(jī)搜索排序優(yōu)化的一個(gè)子場(chǎng)景,并做了相應(yīng)的簡(jiǎn)化,意在解決query-title語(yǔ)義匹配的問(wèn)題。簡(jiǎn)化后,本次題目?jī)?nèi)容主要為一個(gè)實(shí)時(shí)搜索場(chǎng)景下query-title的ctr預(yù)估問(wèn)題。給定用戶輸入prefix(用戶輸入,查詢(xún)?cè)~前綴)以及文章標(biāo)題、文章類(lèi)型等數(shù)據(jù),預(yù)測(cè)用戶是否點(diǎn)擊,評(píng)價(jià)標(biāo)準(zhǔn)采用F1 score 指標(biāo)。
問(wèn)題分析
通過(guò)分析問(wèn)題,我們嘗試將本次比賽分解成兩個(gè)子問(wèn)題,第一個(gè)是從傳統(tǒng)CTR角度思考,根據(jù)出現(xiàn)過(guò)的搜索前綴prefix和標(biāo)題title等數(shù)據(jù)提取相關(guān)特征預(yù)測(cè)當(dāng)今樣本的點(diǎn)擊率,可以嘗試提取相關(guān)的點(diǎn)擊率特征來(lái)解決;第二個(gè)是從搜索前綴prefix和標(biāo)題title的語(yǔ)義相似度判斷用戶點(diǎn)擊的概率,相似度越高代表用戶點(diǎn)擊的概率越大,可以嘗試從文本語(yǔ)義匹配特征或者是神經(jīng)網(wǎng)絡(luò)的角度來(lái)解決。
數(shù)據(jù)分析與數(shù)據(jù)清洗
由于本次比賽的字段比較少,而且每個(gè)字段都有特定的含義,在初步分析過(guò)后發(fā)現(xiàn)數(shù)據(jù)中明顯的噪聲并不多,所以沒(méi)有做比較特別的數(shù)據(jù)清洗。在從傳統(tǒng)CTR角度做了一個(gè)baseline模型后,在線下驗(yàn)證時(shí)發(fā)現(xiàn)驗(yàn)證集中新prefix的預(yù)測(cè)值偏低,因此開(kāi)始研究整個(gè)比賽的數(shù)據(jù)分布。
(1)訓(xùn)練集,驗(yàn)證集和測(cè)試集的數(shù)據(jù)分布(初賽)
思考:驗(yàn)證集中新prefix樣本預(yù)測(cè)值偏低原因:統(tǒng)計(jì)特征是針對(duì)整個(gè)訓(xùn)練集的統(tǒng)計(jì),也就是訓(xùn)練集中的數(shù)據(jù)都有其對(duì)應(yīng)的歷史統(tǒng)計(jì)特征。然而驗(yàn)證集中卻有一部分?jǐn)?shù)據(jù)在訓(xùn)練集中從未出現(xiàn)過(guò),但模型在訓(xùn)練時(shí)卻并沒(méi)有碰到過(guò)帶有缺失值的統(tǒng)計(jì)數(shù)據(jù),因此在驗(yàn)證集的新數(shù)據(jù)上的預(yù)測(cè)自然會(huì)出現(xiàn)偏差。因此我們開(kāi)始進(jìn)行EDA發(fā)現(xiàn)以下:
1、對(duì)于prefix來(lái)說(shuō),無(wú)論新舊數(shù)據(jù),點(diǎn)擊率的均值都是0.37+;而對(duì)于title,舊數(shù)據(jù)的點(diǎn)擊率是0.37,但新數(shù)據(jù)的點(diǎn)擊率是0.32,有一定的區(qū)別;
2、有些統(tǒng)計(jì)特征是只缺失prefix,有些是只缺失title,有些則是prefix跟title都缺失。具體分布情況如下(后期主要關(guān)注prefix和title的新樣本率):
3、猜想出題方構(gòu)造數(shù)據(jù)集的場(chǎng)景,這三個(gè)測(cè)試集應(yīng)該是從一個(gè)全集的數(shù)據(jù)庫(kù)中隨機(jī)抽樣出來(lái)的。比如訓(xùn)練集抽200w,再抽5w訓(xùn)練集,這5w訓(xùn)練集自然而然會(huì)有一些樣本是原先訓(xùn)練集沒(méi)有的。之后再抽5w的測(cè)試集,同樣也會(huì)有之前兩個(gè)數(shù)據(jù)集沒(méi)有的。而在分布特性上還有個(gè)最直觀的的數(shù)據(jù)就是新舊prefix和title的平均樣本量。
新數(shù)據(jù)的平均樣本量要明顯低于整個(gè)數(shù)據(jù)集的均值,正好符合抽樣時(shí)小概率樣本容易缺失的規(guī)律。(從一個(gè)數(shù)據(jù)集中抽取數(shù)據(jù)時(shí),樣本量少的,即小概率樣本,被抽到的概率相對(duì)來(lái)說(shuō)就會(huì)比較小,所以在驗(yàn)證集和測(cè)試集中新prefix和title的平均樣本量就會(huì)低)
(2)訓(xùn)練集、驗(yàn)證集和測(cè)試集的數(shù)據(jù)生成猜想
從訓(xùn)練集的樣本記錄中,我們發(fā)現(xiàn)了很多prefix是扎堆出現(xiàn)的:要不就是直接連著好幾個(gè)prefix都一樣,要不就是中間穿插著一些其他的prefix,還有些是臨近的prefix內(nèi)容比較接近。感覺(jué)這樣的數(shù)據(jù)分布有點(diǎn)像是后端的日志記錄。根據(jù)比賽最開(kāi)始對(duì)數(shù)據(jù)場(chǎng)景的分析理解,用戶的一次搜索行為應(yīng)該會(huì)產(chǎn)生多條記錄。比如推薦給用戶的title有3個(gè),那么就會(huì)對(duì)應(yīng)產(chǎn)生3條樣本數(shù)據(jù),這三條樣本數(shù)據(jù)要不只有一個(gè)被點(diǎn)擊(標(biāo)簽是1),要不就全部都沒(méi)被點(diǎn)擊。如果這個(gè)樣本數(shù)據(jù)真的是日志記錄,那么就有時(shí)序性的關(guān)系在里面,也就不難理解為什么總是有多條相同prefix的記錄相鄰出現(xiàn)。
訓(xùn)練樣本構(gòu)造
本次比賽,其實(shí)構(gòu)造出跟測(cè)試集接近的訓(xùn)練樣本是關(guān)鍵點(diǎn),因此研究數(shù)據(jù)分布,構(gòu)造合適的訓(xùn)練樣本基本貫穿了我們這次比賽,接下來(lái)詳細(xì)說(shuō)一下我們研究數(shù)據(jù)分布的幾個(gè)階段,以及每個(gè)階段我們是如何構(gòu)造訓(xùn)練樣本的:
(1)初賽
在初賽初期,我們基于傳統(tǒng)ctr的做法構(gòu)造了一個(gè)baseline,直接將訓(xùn)練集基于全局提取點(diǎn)擊率等特征(還沒(méi)有考慮數(shù)據(jù)穿越的問(wèn)題),結(jié)果發(fā)現(xiàn)驗(yàn)證集中新prefix樣本預(yù)測(cè)出來(lái)的概率偏低,而實(shí)際新舊prefix對(duì)應(yīng)的樣本點(diǎn)擊率都是0.37左右,因此我們開(kāi)始研究如何構(gòu)造出跟驗(yàn)證集和測(cè)試集分布接近的數(shù)據(jù)用以訓(xùn)練,從而“教會(huì)模型”如何預(yù)測(cè)有缺失值特征的樣本。
在訓(xùn)練集中模擬出新數(shù)據(jù)的樣本(隊(duì)友研究的)
通過(guò)設(shè)定一定比例的只缺失prefix,只缺失title,同時(shí)缺失prefix和title樣本,提取轉(zhuǎn)化率,擬合具有缺失值的樣本,具體做法如下:
1、同樣是對(duì)訓(xùn)練集復(fù)制一份“copy”數(shù)據(jù)集用來(lái)構(gòu)造缺失特征;
2、將樣本打亂后,根據(jù)驗(yàn)證集統(tǒng)計(jì)的三種情況的比例,將42.33%的樣本的prefix設(shè)置為空,11.7%的樣本的title設(shè)置為空,剩下的樣本prefix和title都設(shè)置為空;
3、用訓(xùn)練集統(tǒng)計(jì)數(shù)據(jù),構(gòu)造copy數(shù)據(jù)集的樣本特征;
4、模型訓(xùn)練時(shí)根據(jù)缺失樣本比例從copy中抽樣并入訓(xùn)練集中,線下為30%,線上為15%;
發(fā)現(xiàn)全局提取特征存在數(shù)據(jù)穿越問(wèn)題,參考騰訊賽中無(wú)時(shí)間信息數(shù)據(jù)點(diǎn)擊率特征的提取方法,進(jìn)行五折交叉提特征,發(fā)現(xiàn)較好擬合了數(shù)據(jù)分布
1、五折交叉提特征的具體做法:將訓(xùn)練集劃分成五份,每一份的點(diǎn)擊率特征是基于其他四份數(shù)據(jù)提取的,與全局提特征不同;
2、五折交叉提特征避免穿越:五折交叉提特征時(shí),每一折的數(shù)據(jù)的點(diǎn)擊率特征都是基于其他四折數(shù)據(jù)提取的,跟本折數(shù)據(jù)沒(méi)有關(guān)系,不會(huì)把自己算進(jìn)去,這樣就不會(huì)有穿越問(wèn)題,不會(huì)利用到未來(lái)信息;
3、五折交叉提特征擬合分布:前面在數(shù)據(jù)分析說(shuō)過(guò),很有可能主辦方是先抽取200w訓(xùn)練集,再抽取5w驗(yàn)證集,最后抽取5w測(cè)試集。我們?cè)谔崛↑c(diǎn)擊率特征時(shí),驗(yàn)證集是基于訓(xùn)練集來(lái)提的,測(cè)試集是基于訓(xùn)練集和驗(yàn)證集來(lái)提的,自然會(huì)有新的prefix和title樣本出現(xiàn)。而當(dāng)我們進(jìn)行五折交叉提特征時(shí),每一折是基于其他四折來(lái)提取的,這樣也會(huì)產(chǎn)生新的prefix和title樣本,過(guò)程一致,合理;
4、五折相對(duì)于其他折數(shù)要好:為什么5折是最好的?嘗試過(guò)40折,但是發(fā)現(xiàn)結(jié)果爆跌,3折和10折的成績(jī)也都不如5折的好,我們猜測(cè)這個(gè)跟分布比較相關(guān),但是分析過(guò)后沒(méi)發(fā)現(xiàn)什么規(guī)律
我們對(duì)比了從訓(xùn)練集模擬新樣本和五折交叉提特征兩種方法,發(fā)現(xiàn)五折交叉提特征的方法相對(duì)來(lái)說(shuō)要好一點(diǎn),因此初賽一直沿用這種方法,最后構(gòu)造訓(xùn)練樣本的過(guò)程:訓(xùn)練集中的統(tǒng)計(jì)特征采用五折交叉提取的方法來(lái)做,驗(yàn)證集中的統(tǒng)計(jì)特征基于訓(xùn)練集來(lái)提取,測(cè)試集中的統(tǒng)計(jì)特征基于訓(xùn)練集和驗(yàn)證集來(lái)提取。
(2)復(fù)賽
復(fù)賽一開(kāi)始拿到數(shù)據(jù),我們就對(duì)數(shù)據(jù)分布進(jìn)行了分析,好消息是復(fù)賽的驗(yàn)證集跟測(cè)試集同分布了,意味著線下用驗(yàn)證集驗(yàn)證會(huì)比初賽更準(zhǔn)確。壞消息是測(cè)試集的新樣本率暴增,訓(xùn)練集五折抽樣的新樣本率與驗(yàn)證集和測(cè)試集相去甚遠(yuǎn),基本不再適用。
我們發(fā)現(xiàn),新prefix的平均樣本量竟然和舊數(shù)據(jù)差不多,甚至還更高,這根本就不是普通樣本抽樣應(yīng)該會(huì)產(chǎn)生的數(shù)據(jù)分布。我們猜想,這近40%的新prefix數(shù)據(jù),怕是出題方硬塞進(jìn)去的。而由于樣本的prefix跟title之間有很強(qiáng)的相關(guān)性,所以間接帶動(dòng)了title的新樣本量的上升,至少?gòu)男屡ftitle的平均樣本量來(lái)看,title還有比較明顯的抽樣稀釋的規(guī)律。后來(lái)又發(fā)現(xiàn)了在驗(yàn)證集和測(cè)試集中,有一條很明顯的60%的新舊數(shù)據(jù)交界線,也證明了這一點(diǎn)。
針對(duì)這一點(diǎn),我們開(kāi)始進(jìn)行分工,一部分人進(jìn)行模型的特征融合(因?yàn)檫@個(gè)比賽限制了只能使用兩個(gè)模型),之前研究新樣本擬合的隊(duì)友進(jìn)行數(shù)據(jù)分布擬合,結(jié)果如下:
仿造官方從訓(xùn)練集里拿出一整份的新prefix來(lái)做特征:
1、復(fù)制一份train數(shù)據(jù)集;
2、對(duì)復(fù)制出來(lái)的數(shù)據(jù)集按prefix進(jìn)行分組歸類(lèi),然后再對(duì)prefix進(jìn)行五折交叉統(tǒng)計(jì)特征,此時(shí)相同prefix的樣本只會(huì)被分配到同一折中;
3、上一步誕生出來(lái)的只是200w的“新prefix”數(shù)據(jù)集。對(duì)原本的train數(shù)據(jù)集,還是采用原來(lái)的五折交叉統(tǒng)計(jì),為了避免這里五折產(chǎn)生的數(shù)據(jù)集影響到后邊的新舊數(shù)據(jù)比例計(jì)算,因此對(duì)數(shù)據(jù)集中空缺了prefix或title的數(shù)據(jù)進(jìn)行剔除,因此得到的是約170w的“舊prefix”數(shù)據(jù)集;
4、按照40%的prefix新舊數(shù)據(jù)比例,從新prefix數(shù)據(jù)集中隨機(jī)抽樣一部分?jǐn)?shù)據(jù),并入上一步產(chǎn)生的“舊prefix”數(shù)據(jù)集中,使得最終數(shù)據(jù)集中的prefix新舊比例為4:6。由此得到的大約是290w的訓(xùn)練集數(shù)據(jù);
發(fā)現(xiàn)隨機(jī)與不隨機(jī)的5折有著重大區(qū)別
在做特征融合到主模型的時(shí)候,我們發(fā)現(xiàn)主模型(師兄的模型初賽成績(jī)較好,我們用來(lái)當(dāng)做復(fù)賽lgb的主模型)在做五折交叉時(shí),用的不是StratifiedKFold,也沒(méi)有shuffle,直接就是KFold,一開(kāi)始也并沒(méi)有覺(jué)得打亂跟不打亂有什么區(qū)別,只是覺(jué)得不打亂也可以,就沒(méi)有去改過(guò)。后面留意到了訓(xùn)練集中prefix經(jīng)常扎堆出現(xiàn)的情況,所以當(dāng)看到kfold時(shí),就開(kāi)始懷疑打亂跟不打亂的kfold到底等不等價(jià),結(jié)果發(fā)現(xiàn)不打亂的5折竟然也很接近測(cè)試集的分布:
線上數(shù)據(jù)訓(xùn)練模型分布抽樣方案
我們之前做EDA一直都知道在線下不打亂5折的訓(xùn)練集跟測(cè)試集分布比較接近,那么對(duì)于線上的訓(xùn)練集與驗(yàn)證集合并后的數(shù)據(jù),是不是對(duì)它們進(jìn)行不打亂的5折依舊能保持這種比較接近的分布?結(jié)果我們通過(guò)EDA發(fā)現(xiàn),新樣本率已經(jīng)不一致了,其他一些特征的均值對(duì)比以前也出現(xiàn)了稍大點(diǎn)的偏差。
最后我們采用的方案是,對(duì)訓(xùn)練集進(jìn)行五折交叉統(tǒng)計(jì),用訓(xùn)練集統(tǒng)計(jì)驗(yàn)證集,再把訓(xùn)練集跟驗(yàn)證集合并起來(lái)。這樣構(gòu)造出來(lái)的線上訓(xùn)練集依舊保持了與測(cè)試集接近的分布,而且由于完整保留了同分布的驗(yàn)證集,使得合并后數(shù)據(jù)集的相比單純五折的訓(xùn)練集的分布要更加接近測(cè)試集。
特征工程
本次比賽由于限制了模型的數(shù)量,因此我們隊(duì)只保留了一個(gè)lgb主模型,通過(guò)特征融合的方式,把我們初賽每個(gè)人所做的lgb模型的想法融合進(jìn)來(lái)。我們本次比賽的最終主模型特征可以分為以下幾個(gè)部分:
(1)點(diǎn)擊率相關(guān)特征(沒(méi)有做貝葉斯平滑):
prefix title query_prediction tag的五折點(diǎn)擊率;
prefix title tag兩兩之間交叉的五折點(diǎn)擊率;
思考:點(diǎn)擊率相關(guān)的特征其實(shí)反映了某個(gè)維度的數(shù)據(jù)在過(guò)去一段時(shí)間的表現(xiàn)規(guī)律,所以在本時(shí)段他很有可能也有這個(gè)規(guī)律,因此提取點(diǎn)擊率特征會(huì)有效果。
(2)語(yǔ)義相似度特征:
prefix和title的編輯距離,jaccard相似度,word2vec出來(lái)向量的余弦距離等;
prefix和query_prediction各個(gè)key的編輯距離,jaccard相似度,word2vvec出來(lái)向量的余弦距離之和(這里針對(duì)每個(gè)key都乘上了對(duì)應(yīng)的概率值);
title是否存在于query_prediction的key中;
prefix是否是title的子字符串;
思考:依據(jù)業(yè)務(wù)場(chǎng)景,prefix是用戶的輸入,title是推薦的內(nèi)容,通常來(lái)說(shuō),title的內(nèi)容和prefix內(nèi)容(語(yǔ)義)越接近,用戶點(diǎn)擊的概率越大。
(3)文本特征:
title的長(zhǎng)度;
prefix的長(zhǎng)度;
query_prediction的長(zhǎng)度;
title的長(zhǎng)度減去prefix的長(zhǎng)度;
prefix的長(zhǎng)度與title的長(zhǎng)度比值;
query_prediction各個(gè)key長(zhǎng)度的均值減去prefix的長(zhǎng)度;
query_prediction各個(gè)key長(zhǎng)度的均值與title的長(zhǎng)度比值;
prefix在title中的位置,比如prefix為‘騰訊’,title為‘歐普大戰(zhàn)騰訊’,那么返回的值為4,即prefix在title中的第四個(gè)字符位出現(xiàn);
prefix、title和query_prediction出來(lái)的50維word2vec表征特征;
(4)統(tǒng)計(jì)特征:
title和query_prediction中各個(gè)key的編輯距離的sum,最大值,最小值,均值,方差;
title和query_prediction中各個(gè)key的余弦距離的sum,最大值,最小值,均值,方差;
query_prediction預(yù)測(cè)概率值的最大、最小、均值、方差;
(5)占比特征:
prefix+title的出現(xiàn)次數(shù)/prefix的出現(xiàn)次數(shù);
(6)rank特征:
tag_ctr在title下的排名;
title_ctr在tag下的排名;
附:幾種距離的具體意義
編輯距離:又稱(chēng)Levenshtein距離,是指兩個(gè)字串之間,由一個(gè)轉(zhuǎn)成另一個(gè)所需的最少編輯操作次數(shù)。許可的編輯操作包括將一個(gè)字符替換成另一個(gè)字符,插入一個(gè)字符,刪除一個(gè)字符。一般來(lái)說(shuō),編輯距離越小,兩個(gè)串的相似度越大。
Jaccard相似度:兩個(gè)集合的交集除以?xún)蓚€(gè)集合的并集,所得的就是兩個(gè)集合的相似度。
余弦距離:余弦相似度用向量空間中兩個(gè)向量夾角的余弦值作為衡量?jī)蓚€(gè)個(gè)體間差異的大小。相比距離度量,余弦相似度更加注重兩個(gè)向量在方向上的差異,而非距離或長(zhǎng)度上。
模型選擇
本次比賽最主流的模型還是lgb,鑒于主辦方限制了模型的使用個(gè)數(shù)(不能超過(guò)兩個(gè)),因此很多隊(duì)伍都是做了一個(gè)lgb模型,然后再做一個(gè)nn模型用于匹配prefix和title的語(yǔ)義相似度。我們隊(duì)伍也是做了一個(gè)lgb主模型和一個(gè)nn模型,由于我們nn模型是最后一天才融合進(jìn)來(lái),所以無(wú)法得知它的效果,接下來(lái)就先主要介紹我們的lgb模型,nn模型由于是隊(duì)友做的,目前還不是特別清楚其具體的技術(shù)實(shí)現(xiàn)細(xì)節(jié),這部分就等了解清楚后再補(bǔ)充。
(1)lgb主模型
訓(xùn)練方式
我們本次比賽主模型lgb在線下驗(yàn)證時(shí),采用訓(xùn)練集訓(xùn)練,驗(yàn)證集作為模型early_stopping的驗(yàn)證條件,通過(guò)驗(yàn)證集的表現(xiàn)來(lái)衡量特征/模型的好壞。而在線上的時(shí)候,我們是將訓(xùn)練集和驗(yàn)證集同時(shí)作為訓(xùn)練數(shù)據(jù),至于模型的迭代次數(shù),則根據(jù)線下最佳模型的迭代次數(shù)來(lái)設(shè)定。
我們嘗試過(guò)模型訓(xùn)練時(shí)不用驗(yàn)證集作為早停,而是從訓(xùn)練集中抽一部分?jǐn)?shù)據(jù)作為早停的valid,再用迭代出的次數(shù)訓(xùn)練全部訓(xùn)練集來(lái)預(yù)測(cè)驗(yàn)證集,線下訓(xùn)練時(shí)很快就發(fā)現(xiàn)這種訓(xùn)練方案的迭代次數(shù)從原來(lái)的200多暴漲到了1000多,線上成績(jī)也不例外的降了2個(gè)千。于是便意識(shí)到,抽樣后的訓(xùn)練集分布到底并非跟驗(yàn)證集和測(cè)試集完全一致,因此官方才會(huì)提供了驗(yàn)證集以便我們用來(lái)驗(yàn)證模型在不同分布的數(shù)據(jù)上的魯棒性。
通過(guò)對(duì)驗(yàn)證集加權(quán)來(lái)擬合分布
鑒于我們分析過(guò),其實(shí)驗(yàn)證集與測(cè)試集的分布是最一致的,我們嘗試過(guò)通過(guò)加大驗(yàn)證集的樣本權(quán)重,使得線上模型的分布更偏向于驗(yàn)證集的分布(驗(yàn)證集與測(cè)試集同分布)。由于我們當(dāng)時(shí)是同時(shí)加了幾個(gè)元素進(jìn)去(同時(shí)加了特征和改了驗(yàn)證集提取特征的方式),無(wú)法知道具體的提升,當(dāng)時(shí)目測(cè)有兩個(gè)千。
對(duì)f1評(píng)價(jià)函數(shù)的探討
初賽我的模型采用的是AUC,之所以選擇AUC而不是logloss,是因?yàn)橄氲紽1指標(biāo)是基于混淆矩陣的統(tǒng)計(jì),AUC也是基于混淆矩陣的指標(biāo)(只不過(guò)無(wú)視了閾值的影響),auc和f1其實(shí)都關(guān)注樣本概率的相對(duì)大小,而不關(guān)心預(yù)測(cè)概率的均值,而logloss還比較關(guān)心預(yù)測(cè)概率均值,所以直覺(jué)上AUC會(huì)比logloss更適合。初賽閾值的確定,主要是根據(jù)驗(yàn)證集搜索遍歷出來(lái)五個(gè)比較好的閾值來(lái)確定的,其實(shí)很明顯可以看出是有兩個(gè)峰值,一個(gè)是在0.37附近,一個(gè)是在0.4附近,我通常會(huì)選擇第二個(gè)峰值作為閾值。
復(fù)賽我們是以師兄的模型為主模型,師兄的模型采用的是logloss,我們有對(duì)比過(guò)auc和logloss的效果,下面的表格中每種評(píng)價(jià)指標(biāo)都分別用不同隨機(jī)種子測(cè)了三組結(jié)果:
迭代次數(shù)上AUC普遍比logloss要少幾十次。模型早停的評(píng)分上,AUC與logloss的抖動(dòng)都是0.001左右,從模型迭代過(guò)程的輸出來(lái)看,兩個(gè)指標(biāo)的迭代都是比較穩(wěn)定的,沒(méi)有抖動(dòng)很厲害的情況。最佳F1評(píng)分,線下測(cè)出來(lái)logloss的成績(jī)似乎還要好一點(diǎn)點(diǎn),最佳閾值的均值其實(shí)也差不太多。
賽后我們打聽(tīng)了其他隊(duì)伍自定義f1評(píng)價(jià)指標(biāo)的做法,關(guān)于評(píng)價(jià)指標(biāo)中閾值的選擇,主要有兩種思路:一種是將閾值當(dāng)做模型的超參數(shù),整個(gè)模型迭代過(guò)程都使用這一個(gè)閾值進(jìn)行F1分?jǐn)?shù)的計(jì)算,最佳閾值查找就跟搜索模型最優(yōu)參數(shù)一樣;另一種思路則是每一步迭代時(shí),都去尋找最佳閾值的位置,把閾值對(duì)應(yīng)的最佳F1評(píng)分作為本次迭代的分?jǐn)?shù)。
數(shù)據(jù)后處理
在數(shù)據(jù)分析中我們?cè)?jīng)提到,我們發(fā)現(xiàn)了prefix扎堆出現(xiàn)的情況,具有時(shí)序性,用戶的一次搜索行為應(yīng)該會(huì)產(chǎn)生多條記錄。比如推薦給用戶的title有3個(gè),那么就會(huì)對(duì)應(yīng)產(chǎn)生3條樣本數(shù)據(jù),這三條樣本數(shù)據(jù)要不只有一個(gè)被點(diǎn)擊(標(biāo)簽是1),要不就全部都沒(méi)被點(diǎn)擊。于是,我們將連續(xù)的相同prefix且不同title_tag的記錄判定為用戶的一次搜索行為,在一組記錄中,若模型預(yù)測(cè)有多個(gè)記錄為1,則只保留模型預(yù)測(cè)概率最大的記錄為1,其他記錄更改為0。
在線下的5w驗(yàn)證集上,這個(gè)后處理規(guī)則總共修改了13條預(yù)測(cè)記錄,全部修改正確!因此這個(gè)假設(shè)很可能是成立的。這條后處理規(guī)則最后被我們用到了B榜最后一次模型提交上,在20w測(cè)試集上總共修改了117個(gè)數(shù)據(jù),但由于最后一次提交變量太多,不確定效果究竟如何。假設(shè)這117個(gè)數(shù)據(jù)全部修改正確的話,大約是5個(gè)萬(wàn)的提升。
(2)nn模型
待補(bǔ)充?。?!
賽后總結(jié)
本次比賽跟CTR和文本都有關(guān)聯(lián),因此我們都比較感興趣。但由于開(kāi)始時(shí)間跟神策杯的時(shí)間有一點(diǎn)沖突,我在北京答辯完回到學(xué)校才開(kāi)始做,從開(kāi)始到初賽結(jié)束時(shí)間跨度大概是一個(gè)星期左右,所以初賽用的時(shí)間和精力并不多。初賽主要花時(shí)間在研究分布和數(shù)據(jù)集構(gòu)造上面,還有就是做特征工程,提取比較有用的特征,所以沒(méi)有時(shí)間去研究nn那塊。到了復(fù)賽組好隊(duì),我們隊(duì)出現(xiàn)了一個(gè)問(wèn)題,就是關(guān)于word2vec的隨機(jī)性問(wèn)題,我們發(fā)現(xiàn)我們復(fù)現(xiàn)不了線上最好的模型對(duì)應(yīng)的word2vec特征。由于我們隊(duì)直接加入了跟word2vec相關(guān)的150維特征,這樣每次word2vec的結(jié)果對(duì)我們模型的精度影響很大,很容易產(chǎn)生波動(dòng),所以我們?cè)趶?fù)賽還在研究怎么保證word2vec特征的復(fù)現(xiàn),以及復(fù)現(xiàn)一下跟最好成績(jī)比較接近的word2vec模型。此外,復(fù)賽我的精力還在做特征融合那塊,而且有隊(duì)友對(duì)nn比較熟悉,所以沒(méi)有特別多時(shí)間做nn,這是比較可惜的。由于現(xiàn)在比賽還沒(méi)答辯,所以我們也拿不到特別好的方案,只是在一些大佬那里打聽(tīng)到一些本次比賽的關(guān)鍵點(diǎn),如下:
(1)關(guān)于點(diǎn)擊率的平滑問(wèn)題:據(jù)說(shuō),到了復(fù)賽,做了貝葉斯平滑和沒(méi)做貝葉斯平滑成績(jī)差了大概4到5個(gè)千。我們隊(duì)在復(fù)賽沒(méi)做貝葉斯平滑,我在初賽的時(shí)候是做了貝葉斯平滑的,但是當(dāng)時(shí)沒(méi)什么效果,做和沒(méi)做差別不大,到了復(fù)賽就沒(méi)想著把主模型的點(diǎn)擊率特征做一下貝葉斯平滑,這實(shí)在可惜;
(2)關(guān)于數(shù)據(jù)分布的問(wèn)題:其實(shí)前排都知道數(shù)據(jù)分布很關(guān)鍵,每個(gè)隊(duì)伍都有自己的方案,據(jù)說(shuō),因?yàn)轵?yàn)證集分布跟測(cè)試集最接近,第一名植物他們是直接拿驗(yàn)證集5w數(shù)據(jù)來(lái)訓(xùn)練,而訓(xùn)練集的數(shù)據(jù)只是拿來(lái)提取特征,很大膽,不過(guò)確實(shí)很有效果,這就是冠軍方案吧。我們也想過(guò),但是沒(méi)去做,發(fā)現(xiàn)了問(wèn)題,卻沒(méi)有用了最好的方法解決。
附:
保證word2vec模型能復(fù)現(xiàn)的方法:設(shè)定word2vec運(yùn)行的核數(shù)是1,在運(yùn)行word2vec模型是時(shí),需要保證當(dāng)時(shí)系統(tǒng)的環(huán)境變量PYTHONHASHSEED是同一個(gè)數(shù),也可以通過(guò)設(shè)定系統(tǒng)臨時(shí)變量來(lái)做,例:echo PYTHONSEED = 2018