【數(shù)據(jù)競(jìng)賽】可能是全網(wǎng)特征工程實(shí)操最通透的...
不過這篇文章最大的問題是太過于側(cè)重于是什么,和為什么了,至于怎么辦埋了一個(gè)很大的伏筆。
可能是全網(wǎng)特征工程實(shí)操最通透的...
背景
目前網(wǎng)上能搜到的講特征工程方法基本都是教材里的那一套:缺失值填充,歸一化,category特征one-hot,降維等等。但是指望靠這些提升模型性能是遠(yuǎn)遠(yuǎn)不夠的,特別是對(duì)強(qiáng)大的xgb/lgb上述方法幾乎是毫無意義。也有一些文章總結(jié)了特定業(yè)務(wù)的特征工程,但是對(duì)其他任務(wù)也沒有泛化能力。
包大人插一嘴,這個(gè)評(píng)論很有水平,很多回答扯那些老掉牙的預(yù)處理。這篇文章基本就是從基礎(chǔ)特征出發(fā),衍生到高階的實(shí)操方法論。這個(gè)評(píng)論的人可能是量化或者金融從業(yè)者,他們?cè)诨A(chǔ)因子庫+啟發(fā)式人力搜索上走了挺遠(yuǎn)了~

畫導(dǎo)圖抄書唬人,但是真的沒什么水平~
砍手豪:本文探討和介紹一下我的特征工程方法論:1.類automl的暴力特征字典思路 2.基于業(yè)務(wù)理解的特征工程思路 3.基于特征重要性的特征工程思路;然后是上述三者的反復(fù)迭代螺旋上升。
要點(diǎn)一
1.類automl的暴力詞典搜索
暴力特征字典指的是當(dāng)給定數(shù)據(jù),能在想象力范圍能組合出盡可能多的特征,并形成Pipline,加快特征嘗試和迭代的速度,就像automl一樣。打個(gè)比方,當(dāng)給你兩個(gè)類別特征A 和B,你能制造出多少個(gè)特征用于迭代?簡單寫十個(gè):
count:A_COUNT、B_COUNT、A_B_COUNT
nunique:?A_nunqiue_B??(按B對(duì)稱的下文省略)
ratio:?A_B_COUNT/A_COUNT?在A里各個(gè)B類所占的比例
average:A_COUNT/A_nunqiue_B?A里各個(gè)B類的平均數(shù)
most:?A_most_B?在A類里出現(xiàn)最高的B是哪個(gè)
pivot:?A_B1_count、A_B2_count?A和B類里特定的B1、B2的聯(lián)合統(tǒng)計(jì)
pivot2:?A_B1_count-A_B2_count?A的B1行為和B2行為的加減乘除
stat1:?A_stat_A_B_COUNT?基于A_B_COUNT對(duì)A的描述,
stat2 :A_stat_B_COUNT 基于B_COUNT對(duì)A的描述,
序列化:初步LDA,NMF,SVD,進(jìn)一步Word2Vec,doc2vec 再進(jìn)一步?圖神經(jīng)網(wǎng)絡(luò)deepwalk,pPRoNE
如果再加上numeric、time、target特征,幾乎可以組合成無窮無盡的特征
提升方法:可以看各個(gè)數(shù)據(jù)挖掘的比賽獲勝solution,我最初(17年)就是反復(fù)看當(dāng)時(shí)幾個(gè)kaggle GM plantgo&pipiu、Eureka&weiwei、Little Boat&jiwei liu的獲勝方案開源,拓寬自己對(duì)特征工程的想象力。
缺陷:這類會(huì)產(chǎn)生大量特征,比如給五個(gè)category特征,就能組成(2**5-1)共31個(gè)count特征 ,自然也有大量無用特征,會(huì)降低模型質(zhì)量和速度。
2.基于業(yè)務(wù)理解的特征工程思路
要點(diǎn)二
2.基于業(yè)務(wù)理解做特征
通過內(nèi)在的業(yè)務(wù)邏輯去分做特征,可以先想業(yè)務(wù)邏輯,然后數(shù)據(jù)分析驗(yàn)證,也可以數(shù)據(jù)分析驗(yàn)證,然后得到業(yè)務(wù)邏輯,最大的好處是可解釋性強(qiáng),在此基礎(chǔ)上泛化能力更強(qiáng),而且模型規(guī)模小。舉幾個(gè)例子:
在Instacart Market Basket Analysis比賽,預(yù)測(cè)美國用戶在線上商店的購物,我想我平時(shí)上班,買水果零食這種可買可不買的都放在周末,然后對(duì)這個(gè)數(shù)據(jù)里進(jìn)行分析,發(fā)現(xiàn)在Instacart里,酒類商品的銷量也集中在周末,因此做了很多item 和 time 交叉的特征,對(duì)模型提升較大。
在TalkingData AdTracking Fraud Detection Challenge比賽里,任務(wù)是判斷虛假點(diǎn)擊,通過數(shù)據(jù)分析發(fā)現(xiàn)低頻IP容易是Fraud樣本,仔細(xì)想這些Fraud點(diǎn)擊都是自動(dòng)化程序每次隨機(jī)生成的ip,因此容易是低頻ip,而正常的ip因?yàn)槭沁\(yùn)營商動(dòng)態(tài)分配共享的,因此普遍頻率高。因此做了對(duì)channel,ad和ip頻次的交叉特征,對(duì)模型提升較大。
提升方法:通過努力的數(shù)據(jù)分析,以及多交流獲取業(yè)務(wù)的內(nèi)在邏輯形式。在實(shí)際中就是多加幾個(gè)行業(yè)群,多看論文多交流,在比賽中就是多逛論壇,看其他人的討論。
缺陷:憑借業(yè)務(wù)邏輯做特征,容易遺漏掉強(qiáng)特征。很多時(shí)候并不能琢磨出全部的內(nèi)在業(yè)務(wù)邏輯,甚至?xí)鲃?dòng)的篩掉一些實(shí)際有價(jià)值的特征。
要點(diǎn)三
3.基于特征重要性表的特征工程思路
xgb/lgb可以輸出特征重要性表,比起相關(guān)性分析,通過特征重要性表我們可以迅速在大量特征中獲取強(qiáng)特征。在此基礎(chǔ)上我們可以對(duì)強(qiáng)特征做更深層次的挖掘。
在Two sigma Rental-Listing-Inquireies里,GM little boat提到,既然manager id是強(qiáng)特征,那我們就可以用各種category,numeric特征去描述它。這里涉及到一個(gè)問題,很多人說FM,深度學(xué)習(xí)因?yàn)閑mbedding的存在而具有了向新id泛化的能力,而樹模型只會(huì)記憶。其實(shí)在我看來,特征工程就是一個(gè)人工embedding的過程,讓高維度的類別特征數(shù)值向量化,因此也提升了樹模型的泛化能力?;氐竭@個(gè)比賽,就是特征重要性表為我們指明了特征工程努力的方向。在IJCAI2018 的比賽里,top2 solution 就是采用將特征重要性表靠前的數(shù)值特征暴力交叉,期望通過這種方法提高模型獲取更多有價(jià)值的特征。
類似的,如果看到一個(gè)數(shù)值特征特征重要性很強(qiáng),我們也可以用類別特征和其交叉。如果一個(gè)統(tǒng)計(jì)特征很重要,我們可以增加一個(gè)時(shí)區(qū)維度,比如最近一周,最近一個(gè)月的相應(yīng)統(tǒng)計(jì)特征。如果距離上次時(shí)間很重要,我們可以增加距離上兩次,上次三次的時(shí)間特征。等等。
進(jìn)一步,特征重要性表也可以知道深度學(xué)習(xí)模型子結(jié)構(gòu)的選擇,序列特征對(duì)應(yīng)rnn類,交叉特征對(duì)應(yīng)fm類,文本特征對(duì)應(yīng)nlp類,如果特征不重要,就不用上相應(yīng)的結(jié)構(gòu)了,如果重要,就可以對(duì)將特定的特征輸入對(duì)應(yīng)的子結(jié)構(gòu)了。
提升方法:經(jīng)驗(yàn)的積累,如何將一個(gè)特征發(fā)散開來。
缺陷:首先得做出強(qiáng)特征,然后才能在強(qiáng)特征基礎(chǔ)上發(fā)散,因此依賴一個(gè)好的特征重要性表
上文講了三個(gè)我所認(rèn)為最主要的特征工程思路,但是他們各有各的缺陷,因此
如何將其結(jié)合起來互補(bǔ),螺旋迭代提升就是接下來能做的了。
要點(diǎn)四
4.類automl的暴力特征字典思路對(duì)基于業(yè)務(wù)理解的特征工程思路的協(xié)助
前文說到,基于業(yè)務(wù)理解的特征工程容易遺漏特征,不能挖掘全部可能存在的業(yè)務(wù)邏輯。那么我們可以先暴力特征字典全部羅列起來,然后在賦予其業(yè)務(wù)邏輯,看其在當(dāng)前業(yè)務(wù)下是否有效。再回到第一項(xiàng)的暴力特征字典。我們把category A和B替換成user ,item
count:user_COUNT(用戶活躍度)、item_COUNT(商品熱度)、user_item_COUNT(用戶對(duì)特定商品的喜愛)
nunique:?user_nunqiue_item??(一個(gè)用戶購買多少種商品)?item?nunique_user?(一個(gè)商品被多少個(gè)不同用戶購買)
ratio:?user_item_COUNT/user_COUNT?(某個(gè)商品在user購買中的比例,喜愛程度)
average:user_COUNT/user_nunqiue_item?(平均每類商品的購買量)
most:?user_most_item?(用戶最喜愛的品類)
pivot:?user_item1_count、user_item2_count?(用戶和特定商品的交互)
pivot2:?user_item1_count-user_item2_count?(用戶不同行為的差值,比如生活用品和娛樂用品的比例)
stat1: user_stat_user_item_COUNT (max:買的最多的商品的數(shù)量,std:不同商品的分散度,是專寵還是偏愛)
stat2 :user_stat_item_COUNT (mean:用戶是喜歡熱門商品還是冷門商品)
序列化:初步LDA,NMF,SVD(用商品描述用戶畫像)
進(jìn)一步Word2Vec,doc2vec 再進(jìn)一步?圖神經(jīng)網(wǎng)絡(luò)deepwalk,pPRoNE(刻畫商品和用戶的共現(xiàn)性和相似性)
要點(diǎn)五
5.類automl的暴力特征字典思路對(duì)基于特征重要性表的特征工程思路的協(xié)助
首先我們?cè)?data去跑特征重要性表,知道某個(gè)category特征或numeric很重要,要進(jìn)一步挖掘這個(gè)特征的時(shí)候,比如前文說的“在Two sigma Rental-Listing-Inquireies里,GM little boat提到,既然manager id是強(qiáng)特征,那我們就可以用各種category,numeric特征去描述它。”我們就可以基于暴力特征字典去強(qiáng)化這個(gè)特征,看看如何去拓展這個(gè)強(qiáng)特征的維度。
要點(diǎn)六
6.基于業(yè)務(wù)理解的特征工程思路 和 基于特征重要性表的特征工程思路 對(duì) ?類automl的暴力特征字典思路的協(xié)助
類automl的暴力特征字典思路最大的問題是可以產(chǎn)生無數(shù)的特征,比如五個(gè)類別特征就能產(chǎn)生31種count特征,這時(shí)候我們可以基于特征重要性表,把特征重要性低的類別特征從組合中刪去,也可以基于業(yè)務(wù)理解,把一些明顯無相關(guān)性的category交叉移除。這樣就不會(huì)產(chǎn)生過多無用的特征變成噪音降低模型速度和精度。
要點(diǎn)七
7.基于業(yè)務(wù)理解的特征工程思路 和 基于特征重要性表的特征工程思路 的相互迭代
其實(shí)比起數(shù)據(jù)分析,特征重要性表是一個(gè)可以更快的理解業(yè)務(wù)邏輯的方法
如果一個(gè)特征重要性表里存在一個(gè)我們?cè)菊J(rèn)為應(yīng)該無關(guān)緊要的特征卻有很高的重要性,其實(shí)就可以增強(qiáng)我們對(duì)業(yè)務(wù)的理解,我們需要從業(yè)務(wù)角度思考為什么這個(gè)特征有好的效果,然后從業(yè)務(wù)角度上去做一個(gè)更好的特征。
比如特征重要性表里category A 和 numeric B特征都很重要,雖然無論樹模型還是深度學(xué)習(xí)模型都已經(jīng)有很強(qiáng)的特征交叉能力了,但經(jīng)過業(yè)務(wù)分析,其實(shí)是 A_mean_B特征影響結(jié)果,原始的A和B還是不如我們直接把A_mean_B做出來效果好。
因此,通過觀察特征重要性表,思考背后真正的業(yè)務(wù)邏輯,找出真正和target直接相關(guān)的特征,既能提升對(duì)業(yè)務(wù)的理解,也能夠提升模型的性能。
在Avito Demand Prediction Challenge(類似閑魚的一個(gè)app轉(zhuǎn)化預(yù)測(cè))里,大家發(fā)現(xiàn)各種category_mean_price - price有很高的特征重要性,因此冠軍little boat思考出這不就是合理價(jià)格和賣家出價(jià)的差影響轉(zhuǎn)化率嘛,于是干脆先建了一個(gè)子模型,先預(yù)測(cè)出pred_price,然后用pred_price-price用于轉(zhuǎn)化率模型,取得了更好的效果,這就是基于特征重要性來理解業(yè)務(wù),深挖特征的一個(gè)好的案例。
總之,就是三種特征工程思路相互補(bǔ)充,反復(fù)迭代,最后通過驗(yàn)證集取得一個(gè)好的特征組合。
小結(jié)
本文從方法論角度探討和總結(jié)了我的特征工程方法,基本上毫無保留。但是要反思的就是,使用這一套方法論是無法和最好的特征工程大師(比如國內(nèi)的江離、otto數(shù)據(jù)挖掘俱樂部)還是有很大差距,我猜測(cè)一下可能用以下兩種原因:
高手們還有其他角度的特征工程構(gòu)造邏輯
現(xiàn)有的特征工程邏輯我做的還不夠好,比如即便我觀察特征重要性表知道某些特征很重要后,也經(jīng)常無法真正挖掘出反應(yīng)業(yè)務(wù)邏輯的深層特征,需要后續(xù)看其他人的開源才能煥然大悟。
在這里拋磚引玉,供大家參考。
往期精彩回顧
適合初學(xué)者入門人工智能的路線及資料下載 (圖文+視頻)機(jī)器學(xué)習(xí)入門系列下載 中國大學(xué)慕課《機(jī)器學(xué)習(xí)》(黃海廣主講) 機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印 《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載 機(jī)器學(xué)習(xí)交流qq群955171419,加入微信群請(qǐng)掃碼:
