一.查看變量的缺失值(missing value,空值)個數以及所占比例
二.畫頻數占比分布圖,查看樣本在該特征值上的分布
- 根據連續變量的值域范圍,將該變量分成10箱,就是分成10段,箱數可自由選擇;
- 統計每一箱內樣本的頻數占比:該箱內樣本個數/總樣本個數。然后將每一箱的頻數比例畫出來:
sns.distplot(data,kde=True) # 或 df.hist(bins=10)
三.畫“好壞樣本比”曲線,也叫比率曲線
- 根據連續變量的值域范圍,將該變量分成10箱,就是分成10段,箱數可自由選擇;
- 統計每一箱內的兩類樣本的比值:該箱內label=1的樣本個數 / 該箱內label=0的樣本個數;
- 可以看出該特征對兩類樣本的區分度。
- 問題:在實際畫圖的時候,會出現一個問題,當分母=0的時候,該比值會無窮大,畫不出來;
- 解決辦法:找到該樣本集中總體占比多的那一類,比說label=1的樣本多,那么統計每一箱內label=1樣本個數 / 該箱內總樣本個數,效果也是一樣的,因為就只有兩類。
四.極端值分析
- 在上一步畫圖的時候,就可以看出來有哪些極端值
- 除非是計算或者人為錯誤,極端值需要從業務層面進行分析
- a) 分別計算“擁有極端值的那些樣本中,label=1樣本的占比R1” 和“擁有非極端值的那些樣本中,label=1樣本的占比R2”
- b) 如果R1明顯大於R2,則說明極端值有業務意義,建議保留,特別是從反欺詐的角度來分析一
- 3)如果是計算或者人為錯誤,極端值的影響可以通過分箱被中和,對模型訓練沒有影響;也可以將極端值設置成缺失值/空值,然后用處理缺失值的方法進行處理
五.計算變量的方差
# 計算變量的方差 # 如果方差接近於0,也就是該特征的特征值之間基本上沒有差異,這個特征對於樣本的區分並沒有什么用,剔除 from sklearn.feature_selection import VarianceThreshold selector = VarianceThreshold(threshold=0)#默認threshold=0.0 selector.fit_transform(data[all_used_features]) # 查看各個特征的方差, selector.variances_ ,len(selector.variances_) selector.get_params(deep=True) # {'threshold': 0} all_used_features_dict = dict(zip(all_used_features,selector.variances_ )) #特征和方差的對應
六.查看變量與label之間的相關性
七.查看變量之間的相關性
八.計算變量IV值(也可以考慮Gini系數)
目的:篩選變量,IV值低的變量根據業務分析決定是否剔除,一般情況下,
<0.02的變量可剔除
<0.02 unpredictive 0.02 – 0.1 weak (maybe acceptable) – 0.3 medium >0.3 strong
九.計算AUC
計算單變量的AUC:該變量經過lightgbm之后的AUC,AUC>0.53可以考慮留下
十.計算importance
將上面步驟篩選出來的特征,全部輸送到lightgbm算法中訓練,得到每一個特征的importance,過濾掉importance=0的變量。
十一.其他考慮因素
以上所有特征工程的步驟,都要跟業務結合在一起,綜合考慮,衡量一個變量采用與否。
參考文獻: