1、数据导入
import pandas as pd
import numpy as np
import warnings
from imblearn import under_sampling, over_sampling
from imblearn.over_sampling import SMOTE
warnings.filterwarnings('ignore')
pd.options.display.max_columns = None #显示所有列
pd.set_option('display.float_format', lambda x: '%.2f' % x) #取消科学计数法
train_data = pd.read_csv('Training.csv')
test_data = pd.read_csv('Test.csv')
2、数据清洗
#合并数据
total_data = pd.concat([train_data, test_data])
#替换.和?
total_data = total_data.replace('.', np.nan)
total_data = total_data.replace('?', np.nan)
print(total_data[['area']].info())

根据数据字典可以知道几点:
1)、area是一个字符串,区域代码第1码为大分类, 第1+2码为中分类, 依此类推。所以理论上应该是3位的,我们需要将异常数据转为空值,并且分别提取出前三位;
2)、黄色部分的字段是有相关性的,比如ck-saveall = ck-savetime ×ck-saveavg,所以可以通过计算填充;
3)、ck这个字段和后面带ck字样的字段都有关系,理论上应该后面字段中只要有一个值>0,ck就是1;
4)、其它字段应该也有内在联系,但是因为对银行业不了解,所以也不敢动。
5)、不建议用均值替换缺失值,因为我后续用的是LightGBM算法,所以可以不填充;如果使用RandomForest,则建议把缺失值填充为-1
total_data['area'].where(total_data['area'].str.len()>=3, inplace=True)
print(total_data[['area']].info())

# 将一些object变量转为数值变量
total_data.rename(columns={
'depsaveavg':'dep-saveavg', 'depdrawavg': 'dep-drawavg'}, inplace=True)
num_features = list(set(total_data.columns) - set(['ID', 'area', 'ck', 'comp', 'VV']))
for col in num_features:
total_data[col] = pd.to_numeric(total_data[col])
total_data.info()

def cap(x, quantile=[0.05, 0.95]):
"""盖帽法处理异常值
Args:
x:pd.Series列,连续变量
quantile:指定盖帽法的上下分位数范围
"""
# 生成分位数
Q05, Q95=x.quantile(quantile).values.tolist()
# 替换异常值为指定的分位数
if Q05 > x.min():
x = x.copy()
x.loc[x<Q05] = Q05
if Q95 < x.max():
x = x.copy()
x.loc[x>Q95] = Q95
return(x)
columns = total_data.columns.tolist()
#对训练集进行盖帽法
total_data_1 = total_data[num_features]
total_data_2 = total_data_1.apply(cap)
new_total_data = pd.concat([total_data[['ID', 'area', 'ck', 'comp', 'VV']], total_data_2], axis=1)
total_data = new_total_data[columns]
total_data.head()

#根据规则,把'ck'和'dep'相关字段的数据补充
for way in ['ck-save', 'ck-draw', 'dep-save', 'dep-draw']:
total_data['new_{}all'.format(way)] = total_data['{}time'.format(way)] * total_data['{}avg'.format(

该文详细阐述了数据预处理的步骤,包括数据导入、数据清洗(如处理缺失值、异常值),特征工程(如创建新特征),以及通过SMOTE进行上采样以解决不平衡数据问题。接着,文章展示了如何使用LightGBM和RandomForest进行建模和预测,最后提到了5折交叉验证优化模型性能。
最低0.47元/天 解锁文章
1546

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



