在数据维度”泛滥”成灾的现代,如果不对特征进行筛选直接来建模的话不但会造成模型复杂度的提升,增加计算压力,同时也会因为数据的冗余浪费没有必要的数据费用支出。特别是在金融领域内,因为要求对模型的复杂度和可解释性都有很高的要求,所以在建模前的特征选择是及其重要的。因为每个人在建模时的习惯和方式有差别,所以在选择特征筛选方法的时候也会略有差异,以下会列举使用比较多的方法,你可以根据自己的需求进行使用。需特别说明一下特征选择没有固定的标准和尺度,这一部分需要读者根据自己的实际情况进行设计,但是总的宗旨是”降冗余”。
目录:
1.缺失值删除
2.独值删除
3.相关性
4.多重共线性
5.P_value
6.系数法
6.不相关特征
8.特征重要性
9.PCA
10.方差筛选
11.过滤法(Filter)
12.包裹法(Wrapper)
13.嵌入法(Embedding)
一,缺失值删除
这部分对金融风控模型至关重要,我们不但要排查缺失值问题,而且还要解释缺失值问题。对于缺失不严重的数据,在金融风控建模的过程中基本上就是根据缺失的含义进行处理,或者填充一个特殊值。但是对于缺失比较严重(80%以上)的特征一般是不进入模型,但是这个特征如果效果很好,可以用作策略规则。
data_select.isnull().sum()/data_select.shape[0]
二,独值删除
这部分主要是查看一个特征里面单个值占比最大值,如0值占比99%等这类值。一个特征里面如果一个值的占比过大,这个特征可能产生的增益较小,但是也存在非最大独值那一部分区分度较好的情况,这部分变量如何取舍要根据自己的平台情况而定。一般情况下阈值大于一定值 的且有区分度的变量会拿过来做规则使用。
all_shape = data_select.shape[0]
for i in new_cols:
max_num = data_select[i].value_counts().max()
print("变量"+i+"最大独值率为:",max_num/all_shape)
三,相关性删除
这部分主要是剔除变量之间相关性比较高的变量,如果两个变量之间相关性比较大,一般会造成数据上的冗余,以及模型的可解释性变差,增加计算复杂度,甚至是模型的过拟合。所以在建模前要剔除相关性比较高的变量。
import seaborn as sns
sns.set(rc={'figure.figsize':(16,10)})
sns.heatmap(data_select[new_cols[2:12]].corr(),
annot=True,
linewidths=.5,
center=0,
cbar=False,
cmap="PiYG")
四,多重共线性删除
这部分变量是类似于相关性变量筛除的,相关性是两两之间的关系,多重共线性是多个变量之间的关系。通常使用方差膨胀因子 (VIF)进行表示。一般经验值(不是绝对的根据自己模型性质和数据情况而定)如下:
1.VIF = 1 表示无相关性
2.VIF = 1-5 中等相关性
3.VIF >5 高相关
from statsmodels.stats.outliers_influence import variance_inflation_factor
vif = pd.Series([variance_inflation_factor(data_select[new_cols].values, i) for i in range(data_select[new_cols].shape[1])],
index=data_select[new_cols].columns)
index = data_select[new_cols].columns.tolist()
vif_df = pd.DataFrame(vif, index = index, columns = ['vif']).sort_values(by = 'vif', ascending=False)
vif_df[vif_df['vif']<5]
var_name | vif |
cols_48 | 3.577764 |
cols_55 | 3.153996 |