天池金融风控-贷款违约挑战赛 Task3 特征工程
-
- 1. 学习目标
- 2. 整体思维导图
- 3. 数据处理
-
- 3.1 缺失值处理
- 3.2 时间格式处理
- 3.3 对象类型装换为数值类型
- 这几天学校课程作业ddl,未完待续........
1. 学习目标
- 处理缺失、异常值,数据预处理以及数据分桶特征处理
- 学习特征交互、编码、选择的相应方法
2. 整体思维导图
3. 数据处理
3.1 缺失值处理
# 按照平均数填充数值型特征
data_train[numerical_fea] = data_train[numerical_fea].fillna(data_train[numerical_fea].median())
data_test_a[numerical_fea] = data_test_a[numerical_fea].fillna(data_train[numerical_fea].median())#按照众数填充类别型特征
data_train[category_fea] = data_train[category_fea].fillna(data_train[category_fea].mode())
data_test_a[category_fea] = data_test_a[category_fea].fillna(data_train[category_fea].mode())
3.2 时间格式处理
此处为了避免使用时间序列的格式问题,故要把train set 和 test set的时间装换为pandas里的pd.to_datetime
#转化成时间格式
for data in [data_train, data_test_a]: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
3.3 对象类型装换为数值类型
在我们的模型中,所有的数据都要进行量化后才能被我们的模型使用。
def employmentLength_to_int(s): if pd.isnull(s):return selse: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)