Datawhale第17期组队学习(零基础入门金融风控)Task03:特征工程

在特征工程的工作中,以task02的EDA为基础,对数据特征的缺失值异常值要进行处理,然后再进一步的进行特征交互、特征编码、特征选择。

  • 特征工程的步骤主要分为部分:

1.数据预处理:缺失值、异常值、错误值的处理

1.1对部分对象特征需要转换到数值量表示

将‘employmentLength’字段的数据,转化为数值表示

 

2.特征提取:

def employmentLength_to_int(s):
    if pd.isnull(s):
        return s
    else:
        return np.int8(s.split()[0])
for data in [data_train, data_test_a]:
    data['employmentLength'].replace(to_replace='10+ years', value='10 years', inplace=True)
    data['employmentLength'].replace('< 1 year', '0 years', inplace=True)
    data['employmentLength'] = data['employmentLength'].apply(employmentLength_to_int)

data['employmentLength'].value_counts(dropna=False).sort_index()

自此将字段中所有带year的数值转换为了只表示年份长短的数值量。

 

2.1类别特征

2.1.1对于特征维度较低的类别特征可以采用onehot编码等方式转化。

data = pd.get_dummies(data, columns=['grade', 'subGrade', 'homeOwnership', 'verificationStatus', 'purpose', 'regionCode'], drop_first=True)

2.1.2对于特征维度高的类别特征,通常可以使用一系列降维的方式,比如PCA降维、聚类、提取统计特征值等方法,降到较小的维度再分析。

for f in ['employmentTitle', 'postCode', 'title']:
    data[f+'_cnts'] = data.groupby([f])['id'].transform('count')
    data[f+'_rank'] = data.groupby([f])['id'].rank(ascending=False).astype(int)
    del data[f]

也可以用特征编码的方式来处理高维特征

for col in tqdm(['employmentTitle', 'postCode', 'title','subGrade']):
    le = LabelEncoder()
    le.fit(list(data_train[col].astype(str).values) +
list(data_test_a[col].astype(str).values))
    data_train[col] = le.transform(list(data_train[col].astype(str).values))
    data_test_a[col] = le.transform(list(data_test_a[col].astype(str).values))
print('Label Encoding 完成')

3.特征选择

特征选择可以去掉一些无用的特征,以降低最终模型的复杂性,它的最终目的是得到一个简约模型,在不降低预测准确率或对预测准确率影响不大的情况下提高计算速度。

特征选择的方法一般有:

1、Filter:方差选择、相关系数、卡方检验(需要矩阵正定)、互信息法

2、Wrapper(RFE)

3、Embedded:基于惩罚项的、基于树模型的

一般来说使用卡方检验和Embedded类的特征选择方法就能得出比较好的分数了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值