天天看點

特征工程的坑要怎麼樣預防?ADVANCE.AI公司的方法值得借鑒

資料和特征決定了機器學習的上限,而模型和算法則是逼近這個上限。由此可見,特征工程在模型中的重要程度。換句話說,隻要是做機器學習的項目,就無法避開特征工程。本文帶來了advance.ai公司項目中關于特征工程遇到的問題和處理方法。

常見的特征工程方法與步驟如下,認識它有便于定位項目中出現的問題。

advance.ai認為,模型出現問題,大多是方法不夠完善引起的。是以在介紹問題之前,先介紹一下項目中關于特征工程,處理的方法以及這樣處理的原因。

特征工程的坑要怎麼樣預防?ADVANCE.AI公司的方法值得借鑒

一、資料預處理。

1.缺失值處理

處理原因:模型的本質是通過模拟真實資料分布情況,給出相應預測結果。資料缺失會影響模型對資料的了解,是以需要處理。

常見案例:各種原因造成系統丢失大量有用資訊,可能會影響模型對資料的了解,輸出的結果會不太準确。

處理方法:

連續型:選擇該特征值的均值或中位數來填充。

類别型:選擇該特征值中,最頻繁出現的類别值來填充。

2.連續特征離散化

處理原因:有效的離散化能提高系統對樣本的分類聚類能力和抗噪能力。

常見案例:對于“年齡”這個特征,大于30是1,否則為0。若特征沒有離散化,異常資料“300歲”會給模型造成很大幹擾。離散化之後,直接歸為1,降低了幹擾。

項目中使用的是等寬法,等頻法和聚類法也可用于離散連續型特征。

3.類别型特征處理

處理原因:将離散特征的取值擴充到歐式空間,因為距離或相似度的計算都是在歐式空間,離散化之後,距離的計算變得更加合理。

常見案例:“工作類型”這個特征,對應三個值:x1=1,x2=2,x3=3。

處理前,距離表示:d(x1,x2)=1,d(x2,x3)=1,d(x1,x3)=2。

難道第一種工作與第三種工作之間的相似度就更差一些嗎?顯然這樣的結果是不合理的。

one-hot編碼後:x1=(1,0,0),x2=(0,1,0),x3=(0,0,1)。距離表示為:d(x1,x2)=d(x2,x3)=d(x1,x3)=sqrt(2)。即:每兩個工作之間的相似度是一樣的,更符合實際情況。

處理方法:将一維特征轉化為多元特征。例如:“工作類型”這個特征,我們可以建立一個取值為0或者1的三維特征。将該特征對應的三個值,分别編碼為(1,0,0),(0,1,0)和(0,0,1)。

特征工程的坑要怎麼樣預防?ADVANCE.AI公司的方法值得借鑒

二、特征篩選。

1.時間分布篩選法:畫出特征值随時間變化的分布情況,若特征值随着時間變化很小,說明特征穩定性很強,模型首選這樣的特征。反之,如若特征值随時間波動很大,很不穩定,則棄之。

2.樣本分布篩選法:畫出特征值在正負樣本中的分布情況,如果特征值在正負樣本中分布差異很大,說明特征對于模型分類有明顯的效果,首選這樣的特征。

反之,如若特征值在正負樣本中,分布完全一樣,說明此特征對模型最終結果影響不大,這樣的特征棄之。

3.相關系數篩選法:計算訓練集中各個特征之間的相關系數,相關系數大于設定門檻值的,訓練時隻用其中一個,避免特征備援。

比如:“使用者通路次數”與“使用者日均通路次數”這倆特征相關性很強。訓練模型時,取其一,即可表示出“通路次數”對結果的影響,不必兩個都用。

4.樹模型特征選擇法:樹模型中,gbdt也可用來作為基模型進行特征選擇,使用gbdt模型去訓練樣本,最終給出特征值的得分排序,選出比較重要的特征,去掉無用特征。

以上是advance.ai公司在項目中涉及的特征工程方法,具體使用視情況而定。資料量級不一樣時,我們的處理方式便會有所不同。下面介紹一下項目中遇到的問題。

特征工程的坑要怎麼樣預防?ADVANCE.AI公司的方法值得借鑒

三、資料洩漏。

1.項目表現:訓練集模型隻用了個别特征,便可精确區分樣本類型,但是測試集表現效果就很差。

2.出錯原因:特征不規範,引入了目标變量的間接表示,作為訓練集上的特征。

3.常見案例:預測潛在顧客是否會在銀行開賬戶時,有“賬号數量”這個特征。

4.解決方案:避免使用跟label值含義相同的特征。

advance.ai認為特征工程的好壞會直接影響模型效果,特征工程做的好,後期的模型調參更容易甚至不用調參,模型的穩定性,可解釋性也會很好。

反之,模型很難調到理想效果,需要消耗大量時間去做特征處理、特征篩選這些工作。

特征工程雖然比較繁瑣卻很重要,我們需要以提升模型的性能和可解釋性為目标,認真地去做。