1、前言
在重看我的项目的过程中发现自己对于相关知识点理解并不透彻,希望能理论联系实际,加深自己对基础知识的理解。项目来源于阿里天池学习赛——零基础入门金融风控-贷款违约预测,感兴趣的小伙伴可以自己去原文了解。特征工程是数据挖掘过程中至关重要的一块, 因为数据和特征决定了机器学习的上限,而算法和模型只是逼近这个上限而已,所以特征工程的好坏往往决定着最后的结果。特征工程在我看来分为数据清洗过程以及特征降维&交互&选择的过程。 前者通过重复值、异常值、缺失值的去除/填充,更好地表示出潜在问题的特征;后者或通过构造新特征使得数据的表达能力进一步放大,或根据相关性等进行特征的选择和降维以减少“维度灾难”。
这里尽量总结更多的方法,在后续实际应用中再具体模型具体分析。
2、数据清洗
2.0 时间格式处理
2.0.1 ['issueDate']
构造['issueDateDT']代表据最早日期(2007-06-01)的天数,连续型变量
import datatime
#转化成时间格式
for data in [train, testA]:
data['issueDate'] = pd.to_datetime(data['issueDate'],format='%Y-%m-%d')
startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d')
#构造时间特征
data['issueDateDT'] = data['issueDate'].apply(lambda x: x-startdate).dt.days
sns.histplot(data_train['issueDateDT'],kde=True)

构造['issueDateM']代表贷款的月份,可以作为一个离散型变量
for data in [data_train, data_testA]:
data['issueDate'] = pd.to_datetime(data['issueDate'],format='%Y-%m-%d')
data['issueDateM'] = data['issueDate'].dt.month
data_train['issueDateM'].value_counts(dropna=False).sort_index()
1 67280 2 62108 3 74774 4 65147 5 62159 6 59689 7 76969 8 66842 9 54091 10 81035 11 67785 12 62121 Name: issueDateM, dtype: int64
2.0.2 ['employmentLength']保留数字
#定义一个函数:非零值取空格前的数字,且设置为int8格式
def employmentLength_to_int(s):
if pd.isnull(s):
return s
else:
return np.int8(s.split()[0])
for data in [data_train, data_testA]:
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_train['employmentLength'].value_counts(dropna=False).sort_index()
0.0 64237 1.0 52489 2.0 72358 3.0 64152 4.0 47985 5.0 50102 6.0 37254 7.0 35407 8.0 36192 9.0 30272 10.0 262753 NaN 46799 Name: employmentLength, dtype: int64
2.0.3 ['earliesCreditLine']保留年份
#取最后4个数字作为年份
for data in [data_train, data_testA]:
data['earliesCreditLine'] = data['earliesCreditLine'].apply(lambda s: int(s[-4:]))
data['earliesCreditLine'].value_counts(dropna=False).sort_index()
1944 1
1945 1
1949 1
1950 2
1951 2
...
2011 2490
2012 1676
2013 850
2014 388
2015 50
Name: earliesCreditLine, Length: 69, dtype: int64
2.1 缺失值处理
2.1.1 不处理
部分模型可以自动处理缺失值,如xgboost,不用我们对其进行处理。
2.1.2 填充(fillna)
用某个统计量或缺失值前后数据填充
data_train.fillna(0, inplace=True) # 填充 0
data_train.fillna(train_data.mean(),inplace=True) # 填充均值
data_train.f

本文介绍了金融风控中特征工程的重要性和步骤,包括数据清洗、异常值处理、重复值处理、特征分箱、特征编码、特征选择、交互及降维。特征工程在数据挖掘中起到关键作用,良好的特征工程能提升模型性能。文中详细讨论了各种处理方法,如时间格式转换、缺失值填充、异常值检测、分箱策略和多种特征编码技术,并探讨了各种特征选择和降维方法,如Filter、Wrapper、Embedded策略及PCA、LDA和t-SNE等。
最低0.47元/天 解锁文章
4820

被折叠的 条评论
为什么被折叠?



