針對二分類任務的特徵工程——詳細步驟解析

1、數據的探索分析EDA

數據的探索分析EDA,是對數據進行初步的統計分析,統計數據的分佈、異常、相互關係,目標是讓我們瞭解這些數據能告訴我們什麼。可以用來指導我們進行模型的選擇,比如說幫助我們初步的決定哪些特徵需要被使用,哪些特徵需要被剔除。

準備好樣本、特徵、label
查看樣本集中樣本總個數、特徵總個數
查看正負樣本個數,如果正負樣本相差不多,則屬於樣本均衡的建模問題,如果其中一類明顯高於另外一類,則屬於樣本不均衡的建模問題
查看一下每個特徵的類型:離散型、連續型。按照不同的類型進行分組,分別進行處理
按照上面的分組,進行單個特徵評估

1.1、單個特徵評估

分析過程按照以下順序依次進行,沒有出現的情況就跳過
分析方法是推薦使用,如有其他方式達到相同效果也可行
分析工具自由選擇

1.1.1 連續型特徵

1、查看變量的缺失值(missing value,空值)個數以及佔比

1) 如果“缺失”包含了業務含義,保留該變量,並且直接將缺失值填充爲區別於其他正常值的默認值,比如-1。
2)如果“缺失”沒有業務含義:剔除掉缺失率>90%並且未來依然會高缺失的變量
a)連續型變量:偏正態分佈,用均值填充,可以保持數據的均值;偏長尾分佈,使用中值填充,避免受異常值的影響。
編程上可以用sklearn.preprocessing中的Imputer實現;
b)若缺失量比較大,不適合使用平均值填補。一般通過使用其它變量預測或者直接將缺失值設置爲默認值的方法填補;

2、畫特徵頻數佔比分佈圖_distribution圖,查看樣本在該特徵值上的分佈

  1. 根據該連續變量的值,對其等頻分箱或者等寬分箱,箱數可自由選擇,將空值單獨分一箱;
  2. 統計每一箱內樣本的頻數佔比:該箱內樣本個數/總樣本個數。然後將每一箱的頻數佔比畫出來。

3、畫“好壞樣本比”曲線_odds圖,也叫比率曲線

  1. 根據該連續變量的值,對其等頻分箱或者等寬分箱,箱數可自由選擇,;
  2. 統計每一箱內的兩類樣本的比值:該箱內label=1的樣本個數 / 該箱內label=0的樣本個數;
  3. 可以看出該特徵對兩類樣本的區分度。ps:在實際畫圖的時候,注意不要讓分母=0,可以將分母加上一個極小值來避免這種情況。

一般缺失值佔比,distribution圖、odds圖三者結合在一起查看,單獨看不全面。下面的例子中缺失值佔比沒有畫出來。
在這裏插入圖片描述

上圖左一:頻數佔比分佈圖

1)X軸:分箱區間
2)Y軸:頻數佔比:落在該分箱內的樣本個數 / 總樣本個數
3)可以看出:樣本在該特徵值上的分佈:大部分樣本集中在哪個範圍內?
4)上圖中是兩組樣本集,一種顏色代表一組,畫在同一個圖裏面,可以看出兩組樣本【在特徵分佈上】有哪些不同

上圖中間:odds圖

1)X軸:分箱區間
2)Y軸:兩類樣本的比率:該箱內label=1的樣本個數 / 該箱內label=0的樣本個數
3)比較縱座標的值(不要只看曲線走勢,一定要看縱座標的值!因爲有的時候因爲畫圖的原因,曲線很陡峭,但是實際縱座標的值並沒有差很多),各分箱區間內差別很大的話,說明該特徵對兩類樣本有一定區分度;如果差別不大,則說明該特徵對於兩類樣本沒有區分能力。各箱之間的【odds差值】越大,該特徵區分能力就越好。
4)上圖中是兩組樣本集,一種顏色代表一組,畫在同一個圖裏面,可以看出兩組樣本【在特徵的區分度上】有哪些不同,這在比較樣本構成的時候會用到。

4、特徵的時序性分析

有些時候,特別是在金融領域,特徵是有時間屬性的,特徵在不同時間段內的分佈很可能不一致,這時候就需要對特徵進行時序性分析,我們希望特徵是時序穩定的,這樣建出來的模型纔會在時間上具有平穩性。主要看三點:**該特徵在不同時間窗口內的分位數、odds、覆蓋度,三者結合在一起查看,單獨看不全面。**例如,下圖中,左一顯示該特徵在201812月份、201901月份、201902月份的分位數發生了較大波動,是該特徵出了什麼問題嗎?結合右一圖,我們發現剛好這3個月份的實際樣本逾期率odds是偏高的,所以可以得出結論,不是特徵有問題,而是實際樣本分佈發生了偏移,導致特徵分佈發生了變化。
時序穩定:該特徵在不同的時間窗口內,分佈穩定。時間窗口可以是月、周、日,看具體業務需求,下面以月爲例。

在這裏插入圖片描述
上圖左一:分位數跨月分佈圖_quantile

1)X軸:每一個月份
2)Y軸:該特徵的分位數值,不同顏色的曲線代表不同的分位數。
3)可以看出:該特徵的跨月穩定性

上圖中間:覆蓋率跨月分佈圖_coverage

1)X軸:每一個月份
2)Y軸:該特徵在該月份的覆蓋率
3)可以看出:該特徵的跨月穩定性

上圖右一:odds跨月分佈圖_odds

1)X軸:每一個月份
2)Y軸:該特徵在該月份的兩類樣本的比率:該箱內label=1的樣本個數 / 該箱內label=0的樣本個數。金融中,可以看成是逾期率
3)可以看出:該特徵的跨月穩定性

結合上面三張圖,可以看出特徵的跨月穩定性,並且當特徵跨月不穩定的時候,結合odds圖,可以看出是不是因爲樣本實際逾期發生了變化,而導致特徵跨月不穩定。

5、極端值分析

1)可以通過畫箱圖,觀察有無極端值;
2)除非是計算或者人爲錯誤,極端值需要從業務層面進行分析
a) 分別計算“擁有極端值的那些樣本中,label=1樣本的佔比R1” 和“擁有非極端值的那些樣本中,label=0樣本的佔比R2”
b) 如果R1和R2相差很多,則說明極端值有業務意義,建議保留,特別是從反欺詐的角度來分析一下
3)如果是計算或者人爲錯誤,極端值的影響可以通過分箱被中和,對模型訓練沒有影響;
也可以將極端值設置成缺失值/空值,然後用處理缺失值的方法進行處理

6、計算變量的方差

如果方差接近於0,也就是該特徵的特徵值之間基本上沒有差異,這個特徵對於樣本的區分並沒有什麼用,剔除

7、查看變量與label之間的相關性

皮爾遜係數/斯皮爾曼係數:衡量2個變量之間的線性相關性。
.00-.19 “very weak”
.20-.39 “weak”
.40-.59 “moderate”
.60-.79 “strong”
.80-1.0 “very strong”

8、查看變量之間的相關性

1)目的:去除冗餘變量,並結合業務含義取捨
2)皮爾遜係數/斯皮爾曼係數:衡量2個變量之間的線性相關性。
3)如果>0.9,說明2個變量有明顯線性關係,只保留一個,保留與label的皮爾遜係數較大的那個變量,或者保留lightgbm AUC最大的那個;

9、計算變量IV值(也可以考慮Gini係數)

目的:篩選變量,IV值低的變量根據業務分析決定是否剔除,一般<0.02的變量可剔除
<0.02 unpredictive
0.02 – 0.1 weak (maybe acceptable)
– 0.3 medium
0.3 strong

10、 計算AUC

計算單變量的AUC:該變量經過lightgbm之後的AUC,AUC>0.53可以考慮留下

11、 計算importance

將上面步驟篩選出來的特徵,全部輸送到lightgbm算法中訓練,得到每一個特徵的importance,過濾掉importance=0的變量。

12、其他考慮因素

以上所有特徵工程的步驟,都要跟業務結合在一起,綜合考慮,衡量一個變量採用與否。

1.1.2 離散型特徵

1、查看變量的缺失值(missing value,空值)個數以及佔比

1) 如果“缺失”包含了業務含義,保留該變量,並且直接將缺失值填充爲區別於其他正常值的默認值,比如-1。
2)如果“缺失”沒有業務含義:剔除掉缺失率>90%並且未來依然會高缺失的變量
a)離散型變量,用衆數填充;
b)若缺失量比較大,不適合使用衆數填補。一般通過使用其它變量預測或者直接將缺失值設置爲默認值的方法填補;

2、對離散特徵的值進行編碼
由於離散值有數值型、字符型等,其中字符型沒有辦法直接入模計算,所以要對其進行編碼,全部變成數值型, 將定性數據編碼爲定量數據

1)Label encoding
將變量中的每個unique value指定爲一個整數,編程上可以用sklearn中的LabelEncoder實現。
2)One-hot encoding
將一個變量變成多個變量,例如有4個樣本,原特徵及特徵值是{“戶籍省“:[“北京”,”上海”,”福建”,”四川”]},
{“四川”:[0,0,0,1]}。編程上可以用pd.get_dummies(df)或者sklearn.preprocessing中的OneHotEncoder實現。

3、 畫頻數分佈直方圖_distribution,查看樣本在該特徵值上的分佈

  1. 對該特徵進行分箱,由於是離散變量,值比較少,所以該特徵的每一個值就是一箱;
  2. 統計每一箱內樣本的頻數佔比:該箱內樣本個數/總樣本個數;

4、 畫“好壞樣本比”圖_比率odds

  1. 對該特徵進行分箱,由於是離散變量,值比較少,所以該特徵的每一個值就是一箱,空值單獨分一箱;
  2. 統計每一箱內的兩類樣本的比值:該箱內label=1的樣本個數 / 該箱內label=0的樣本個數;
  3. 可以看出該特徵對兩類樣本的區分度。

具體分析方法與連續特徵一樣。

5、 其他評估方法,類似連續特徵處理方式

2、特徵衍生

以上特徵評估方法,都是在原有特徵的基礎上,進行分析、篩選,並沒有生成新的特徵,下面來介紹特徵工程的另一重頭戲:利用已有特徵,衍生出新的特徵.

2.1 Polynomial features(多項式特徵)

我們在進行分類和迴歸預測的時候,有時需要根據已有的特徵構建更多的特徵,然後對特徵再進行特徵選擇。實驗發現,通過增加一些輸入數據的非線性特徵來增加模型的複雜度,這種做法通常是有效的。一個簡單通用的辦法是使用多項式特徵,可以獲得特徵的更高維度和互相間關係的項。
多項式特徵,是一個簡單的特徵構造方法,該方法是根據已有的特徵產生新的特徵,可以通過sklearn.preprocessing 中的PolynomialFeatures 實現。這些由多個單獨變量組合而成的特徵稱爲交互項。換句話說,雖然兩個變量本身對目標的影響不大,但將它們組合成一個單獨的交互變量可能會顯示出與目標的強關係。

舉一個例子:
1)原特徵是(X_1, X_2),計算原特徵與label的pearson線性相關係數;
2)用PolynomialFeatures(degree=2)構造多項式特徵,構造出來的新特徵就是(1, X_1, X_2, X_1^2, X_1X_2, X_2^2);
3)再計算這些新特徵與label的pearson線性相關係數,查看是否有提高;
4)如果有,可以考慮將這些新生成的多項式特徵合併到原特徵裏;
5)爲了查看這些多項式特徵有無效果,需要進行對比實驗
a) 用原特徵訓練模型,記錄AUC
b) 加入多項式特徵之後,再訓練模型,記錄AUC
c) 查看後者AUC是否較前者AUC有提高,如果有,說明多項式特徵起了作用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章