一、选题的背景
银行贷款在我们生中面临巨大经济压力时,可以有效的暂时解决方案之一,主要分析用户的还款状态、应还本金、应还利息、剩余本金、还款日期等情况,
此数据集为银行贷款情况训练集进行数据分析。
二、大数据分析设计方案
1.本数据集的数据内容与数据特征分析
1.1 数据集内容如下:
1.2 数据分析的课程设计方案概述
(1)先对数据集的数据进行预处理和清洗,并计算数据集中各种数据与相关性数据分析和特征分布绘制。
三、数据分析步骤
1.数据源
本次课程设计的数据集来源于和鲸社区平台。
附上网址:https://www.heywhale.com/mw/dataset/61b31105ccc1f6001729dc78/content
2.数据清洗
#导入数据集
df=pd.read_csv('D:\ludashi\LP.csv',encoding='UTF-8')
#查看数据前5行情况
print(df.head())
#查看数据大小
print("银行贷款数据集大小",df.shape)
显示结果如下:
ListingId Number of periods ... recorddate sex
0 126541 1 ... 2017/2/22 man
1 126541 2 ... 2017/2/22 man
2 126541 3 ... 2017/2/22 man
3 126541 4 ... 2017/2/22 man
4 126541 5 ... 2017/2/22 man[5 rows x 11 columns]
银行贷款数据集大小 (1048575, 11)
3、数据预处理
#查看数据大小
print("银行贷款数据集大小",df.shape)
#查看总体数据
print("银行贷款数据集字段",df.info())
#修改字段名
print("修改前的字段名:",df.columns)
df.columns = ['ID','期数','还款状态','应还本金',
'应还利息','剩余本金','剩余利息','到期日期',
'还款日期','记录日期','性别']
print("修改后的字段名:",df.columns)
# 查看各字段类型
df.info()
显示结果如下:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1048575 entries, 0 to 1048574
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ListingId 1048575 non-null int64
1 Number of periods 1048575 non-null int64
2 Repayment status 1048575 non-null int64
3 principal 1048575 non-null float64
4 Interest is repaid 1048575 non-null float64
5 Remaining principal 1048575 non-null float64
6 Residual interest 1048575 non-null float64
7 Expiration date 1048575 non-null object
8 Repayment date 1048575 non-null object
9 recorddate 1048575 non-null object
10 sex 193 non-null object
dtypes: float64(4), int64(3), object(4)
memory usage: 88.0+ MB
银行贷款数据集字段 None
修改前的字段名: Index(['ListingId', 'Number of periods', 'Repayment status', 'principal',
'Interest is repaid', 'Remaining principal', 'Residual interest',
'Expiration date', 'Repayment date', 'recorddate', 'sex'],
dtype='object')
修改后的字段名: Index(['ID', '期数', '还款状态', '应还本金', '应还利息', '剩余本金', '剩余利息', '到期日期', '还款日期',
'记录日期', '性别'],
dtype='object')
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1048575 entries, 0 to 1048574
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ID 1048575 non-null int64
1 期数 1048575 non-null int64
2 还款状态 1048575 non-null int64
3 应还本金 1048575 non-null float64
4 应还利息 1048575 non-null float64
5 剩余本金 1048575 non-null float64
6 剩余利息 1048575 non-null float64
7 到期日期 1048575 non-null object
8 还款日期 1048575 non-null object
9 记录日期 1048575 non-null object
10 性别 193 non-null object
dtypes: float64(4), int64(3), object(4)
memory usage: 88.0+ MB
# 查看各字段的缺失值数量
print('各字段的缺失值数量\n',df.isna().sum())
# 统计重复值
print('统计重复值\n',df.duplicated().sum())
# 删除重复值
df.drop_duplicates(inplace=True)
显示结果如下:
各字段的缺失值数量
ID 0
期数 0
还款状态 0
应还本金 0
应还利息 0
剩余本金 0
剩余利息 0
到期日期 0
还款日期 0
记录日期 0
性别 1048382
dtype: int64
统计重复值
0
print('查看各字段\n',df.columns)
# 查看数据类型
print('查看数据类型\n',df.dtypes)
# 描述性统计
print('描述性统计\n',df.describe())
显示结果如下:
查看各字段
Index(['ID', '期数', '还款状态', '应还本金', '应还利息', '剩余本金', '剩余利息', '到期日期', '还款日期',
'记录日期', '性别'],
dtype='object')
查看数据类型
ID int64
期数 int64
还款状态 int64
应还本金 float64
应还利息 float64
剩余本金 float64
剩余利息 float64
到期日期 object
还款日期 object
记录日期 object
性别 object
dtype: object
描述性统计
ID 期数 ... 剩余本金 剩余利息
count 1.048575e+06 1.048575e+06 ... 1.048575e+06 1.048575e+06
mean 9.503385e+06 5.843962e+00 ... 5.574482e+01 3.073355e+00
std 3.279341e+06 3.506679e+00 ... 2.917230e+02 1.731609e+01
min 1.265410e+05 1.000000e+00 ... 0.000000e+00 0.000000e+00
25% 7.111431e+06 3.000000e+00 ... 0.000000e+00 0.000000e+00
50% 9.948971e+06 5.000000e+00 ... 0.000000e+00 0.000000e+00
75% 1.210059e+07 9.000000e+00 ... 0.000000e+00 0.000000e+00
max 1.490577e+07 2.400000e+01 ... 7.734837e+04 3.199990e+03[8 rows x 7 columns]
#修改ID字段类型
df['ID'] = df['ID'].astype('object')
df.info()
print('查看ID是否有重复值\n',df[df.duplicated()].ID.count())
print('描述性统计,并查看异常值\n',df.describe())
显示结果如下:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1048575 entries, 0 to 1048574
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ID 1048575 non-null object
1 期数 1048575 non-null int64
2 还款状态 1048575 non-null int64
3 应还本金 1048575 non-null float64
4 应还利息 1048575 non-null float64
5 剩余本金 1048575 non-null float64
6 剩余利息 1048575 non-null float64
7 到期日期 1048575 non-null object
8 还款日期 1048575 non-null object
9 记录日期 1048575 non-null object
10 性别 193 non-null object
dtypes: float64(4), int64(2), object(5)
memory usage: 96.0+ MB
查看ID是否有重复值
0
描述性统计,并查看异常值
期数 还款状态 ... 剩余本金 剩余利息
count 1.048575e+06 1.048575e+06 ... 1.048575e+06 1.048575e+06
mean 5.843962e+00 1.049221e+00 ... 5.574482e+01 3.073355e+00
std 3.506679e+00 5.974522e-01 ... 2.917230e+02 1.731609e+01
min 1.000000e+00 0.000000e+00 ... 0.000000e+00 0.000000e+00
25% 3.000000e+00 1.000000e+00 ... 0.000000e+00 0.000000e+00
50% 5.000000e+00 1.000000e+00 ... 0.000000e+00 0.000000e+00
75% 9.000000e+00 1.000000e+00 ... 0.000000e+00 0.000000e+00
max 2.400000e+01 4.000000e+00 ... 7.734837e+04 3.199990e+03
4.大数据分析过程及采用的算法
利用统计分析、数据挖掘,对数据进行分析处理,获得分析结果,是数据分析处理流程的重要步骤。
●常规的统计方法
●通过使用机器学习的方法,处理采集到的数据。
●使用的第三方库
如 sklearn 等,或其它
数据可视化
数据可视化借助于图形化手段,将数据分析结果直观、清晰、有效地展现出来。使得用户可以从不同的维度观察数据,对数据有更深入地理解。说明每个可视化图形表示的意义
4.1 特征分布图
def plot_distribution(dataset,
cols=10,
width=25,
height=30,
hspace=0.2,
wspace=0.5):
fg = plt.figure(figsize=(width,height))
fg.subplots_adjust(left=None,
right=None,
top=None,
bottom=None,
wspace=wspace,
hspace=hspace)
rows = math.ceil(float(df.shape[1]))
for i,column in enumerate(dataset.columns):
ax = fg.add_subplot(rows, cols, i + 1)
ax.set_title(column)
g = sns.displot(dataset[column])
plt.xticks(rotation=25)
plot_distribution(df, cols=5,
width=30,
height=60,
hspace=0.5,
wspace=0.5)
plt.show()
4.2还款情况分布柱形图
plt.figure(figsize=(5, 5))
plt.bar(['欠款'], df['还款状态'].value_counts()[1], width=0.4)
plt.bar(['归还'], df['还款状态'].value_counts()[0], width=0.4)
plt.title('剩余本金', fontsize=11)
plt.ylabel('应还本金', fontsize=11)
plt.grid()
plt.show()
4.3 期数与其他交易统计情况
df3 = df[['剩余本金', '还款状态', '应还利息']].groupby(['还款状态', '剩余本金']).count()
df3.reset_index(inplace=True)
x = df3[df3['还款状态'] == 0]
plt.figure(figsize=(20,8))
plt.bar(range(len(x)), x['应还利息'], tick_label=x['剩余本金'], width=0.5)
plt.xlabel('期数', fontsize=10) # 设置x轴
plt.ylabel('应还本金', fontsize=10) # 设置y轴
plt.title('统计情况', fontsize=18)
plt.xticks(fontsize=10) # 设置x轴大小
plt.yticks(fontsize=10) # 设置y轴大小
plt.grid()
plt.show()
4.4 矩阵散点图
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.pairplot(df.loc[:,['应还本金','应还利息','剩余本金','剩余利息','到期日期']],
diag_kind='kde',aspect=1.8)
plt.show()
4.2.1 进行分箱分析
def cutbar(data1,data2,num,xlabel,ylabel,data1label,data2label):
plt.rcParams['font.sans-serif'] =['SimHei']
plt.rc('font',size=13)
fig,axes=plt.subplots(1,1,sharey=True,figsize=(10,6))
axes.set_xlabel('应还利息区间')
axes.set_ylabel('人数')
width=0.4
x=np.arange(num)
axes.set_xticks(x)
axes.bar(x-width/2,data1,width=width,label=data1label)
axes.bar(x+width/2,data2,width=width,label=data2label)
axes.legend(loc='best')
axes.set_xticklabels(data1.index.values,rotation=30)
for a,b in zip(x-width/2,data1):
axes.text(a,b,b,ha='center',va='bottom',color='k')
for a,b in zip(x+width/2,data2):
axes.text(a,b,b,ha='center',va='bottom',color='k')
# 对应还利息进行分箱分析
a=sorted(list(set(np.concatenate([np.linspace(0,60,6),
np.linspace(60,df.应还利息.max(),6)],
axis=0))))
df['应还利息分箱']=pd.cut(df.应还利息,bins=a,right=False,precision=0)
bardata_cdmor=df[df.应还本金==1].groupby('应还利息分箱').ID.count()
bardata_notcdmor=df[df.应还本金==0].groupby('应还利息分箱').ID.count()
cutbar(bardata_notcdmor,bardata_cdmor,10,'应还利息区间','人数','非存款客户','存款客户')
plt.show()
# 对剩余利息进行分箱分析
a=sorted(list(set(np.concatenate([np.linspace(0,60,6),np.linspace(60,df.剩余利息.max(),6)],axis=0))))
df['剩余利息分箱']=pd.cut(df.应还本金,bins=a,right=False,precision=0)
bardata_cdmor=df[df.剩余本金==1].groupby('剩余利息分箱').ID.count()
bardata_notcdmor=df[df.剩余本金==0].groupby('剩余利息分箱').ID.count()
cutbar(bardata_notcdmor,bardata_cdmor,10,'剩余利息区间','人数','非个贷客户','个贷客户')
plt.show()
5、特征工程
df= pd.concat([df,df],ignore_index=True,sort=False)
print(df.head())
df['应还利息小于等于9.8'] = np.where(df.应还利息<=9.8,1,0).astype('int')
df['剩余大于等于2.8'] = np.where(df.剩余利息>=2.8,1,0).astype('int')
df['应还本金大于等于102'] = np.where(df.应还本金>=102,1,0).astype('int')
df['剩余本金大于等于3'] = np.where(df.剩余本金>=3,1,0).astype('int')
df['存款到个贷的转化'] = df['应还本金大于等于102'] + df['剩余本金大于等于3'] + df['期数']
5.1、改善特征分布
fg,axes = plt.subplots(1,3,figsize=(10,6))
for i,index in zip(np.arange(3),['应还本金','应还利息','剩余利息']):
df[index].plot(kind='box',ax=axes[i])
plt.show()
5.2、统计非数值数据
print(df['期数'].unique())
print(df['还款状态'].unique())
print(df['应还本金'].unique())
print(df['应还利息'].nunique())
print(df['剩余本金'].nunique())
print(df['剩余利息'].nunique())
显示结果如下:
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[1 2 3 0 4]
[1380.23 1400.94 1421.95 ... 785.78 798.88 825.73]
20266
29065
7619
5.3、对数转换 创建新的一列
df['应还本金2'] = np.log1p(df['应还本金'])
df['应还利息2'] = np.log1p(df['应还利息'])
df['剩余利息2'] = np.log1p(df['剩余利息'])
5.4、标准化处理
from sklearn.preprocessing import StandardScaler
std = StandardScaler()
for i in ['应还本金2','应还利息2','剩余利息2']:
std.fit_transform(df[i].values.reshape(-1,1)6、)
5.5、划分输入特征和预测特征,并拆分训练集和测试集
from sklearn.model_selection import train_test_split
X = np.array(df.loc[:,['应还本金2','应还利息2','剩余本金','剩余利息','到期日期',
'还款日期','记录日期']])
y = np.array(df['期数'])
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1)
print('训练集样本量为:',X_train.shape[0],'个')
print('测试集样本量为:',X_test.shape[0],'个')
print('上采样前训练集中正例有%d个,反例有%d个'%((y_train==1).sum(),(y_train==0).sum()))
显示结果如下:
训练集样本量为: 1468005 个
测试集样本量为: 629145 个
上采样前训练集中正例有156973个,反例有0个
6、完整代码
1 # 导入第三方相关库
2 import pandas as pd
3 import numpy as np
4 import matplotlib.pyplot as plt
5 import matplotlib.style as ms
6 from sklearn.preprocessing import StandardScaler
7 from sklearn.metrics import mean_squared_error
8 import math
9 import seaborn as sns
10 import warnings
11
12 warnings.filterwarnings("ignore")
13
14 # 切换绘图风格
15 ms.use("seaborn-dark")
16 # 显示负号
17 plt.rcParams['axes.unicode_minus'] = False
18
19 # 显示中文
20 plt.rcParams['font.sans-serif'] = ['SimHei']
21
22 #导入数据集
23 df=pd.read_csv('D:\ludashi\LP.csv',encoding='UTF-8')
24
25 #查看数据前5行情况
26 print(df.head())
27
28 #查看数据大小
29 print("银行贷款数据集大小",df.shape)
30
31 #查看总体数据
32 print("银行贷款数据集字段",df.info())
33
34 #修改字段名
35 print("修改前的字段名:",df.columns)
36 df.columns = ['ID','期数','还款状态','应还本金',
37 '应还利息','剩余本金','剩余利息','到期日期',
38 '还款日期','记录日期','性别']
39
40 print("修改后的字段名:",df.columns)
41
42 # 查看各字段类型
43 df.info()
44
45 # 查看各字段的缺失值数量
46 print('各字段的缺失值数量\n',df.isna().sum())
47
48 # 统计重复值
49 print('统计重复值\n',df.duplicated().sum())
50 # 删除重复值
51 df.drop_duplicates(inplace=True)
52
53 print('查看各字段\n',df.columns)
54 # 查看数据类型
55 print('查看数据类型\n',df.dtypes)
56
57 # 描述性统计
58 print('描述性统计\n',df.describe())
59
60 #修改ID字段类型
61 df['ID'] = df['ID'].astype('object')
62 df.info()
63
64 print('查看ID是否有重复值\n',df[df.duplicated()].ID.count())
65 print('描述性统计,并查看异常值\n',df.describe())
66
67 #绘制每个特征的分布
68 def plot_distribution(dataset,
69 cols=10,
70 width=25,
71 height=30,
72 hspace=0.2,
73 wspace=0.5):
74
75 fg = plt.figure(figsize=(width,height))
76 fg.subplots_adjust(left=None,
77 right=None,
78 top=None,
79 bottom=None,
80 wspace=wspace,
81 hspace=hspace)
82 rows = math.ceil(float(df.shape[1]))
83 for i,column in enumerate(dataset.columns):
84 ax = fg.add_subplot(rows, cols, i + 1)
85 ax.set_title(column)
86
87 g = sns.displot(dataset[column])
88 plt.xticks(rotation=25)
89
90 plot_distribution(df, cols=5,
91 width=30,
92 height=60,
93 hspace=0.5,
94 wspace=0.5)
95 plt.show()
96
97 # 还款情况分布柱形图
98 plt.figure(figsize=(5, 5))
99 plt.bar(['欠款'], df['还款状态'].value_counts()[1], width=0.4)
100 plt.bar(['归还'], df['还款状态'].value_counts()[0], width=0.4)
101
102 plt.title('剩余本金', fontsize=11)
103 plt.ylabel('应还本金', fontsize=11)
104 plt.grid()
105 plt.show()
106
107 #期数与其他交易统计情况
108 df3 = df[['剩余本金', '还款状态', '应还利息']].groupby(['还款状态', '剩余本金']).count()
109 df3.reset_index(inplace=True)
110
111 x = df3[df3['还款状态'] == 0]
112 plt.figure(figsize=(20,8))
113 plt.bar(range(len(x)), x['应还利息'], tick_label=x['剩余本金'], width=0.5)
114
115 plt.xlabel('期数', fontsize=10) # 设置x轴
116 plt.ylabel('应还本金', fontsize=10) # 设置y轴
117 plt.title('统计情况', fontsize=18)
118
119 plt.xticks(fontsize=10) # 设置x轴大小
120 plt.yticks(fontsize=10) # 设置y轴大小
121
122 plt.grid()
123 plt.show()
124
125 #矩阵散点图
126 plt.rcParams['font.sans-serif'] = ['SimHei']
127 plt.rcParams['axes.unicode_minus'] = False
128
129 sns.pairplot(df.loc[:,['应还本金','应还利息','剩余本金','剩余利息','到期日期']],
130 diag_kind='kde',aspect=1.8)
131 plt.show()
132
133 # 进行分箱分析
134 def cutbar(data1,data2,num,xlabel,ylabel,data1label,data2label):
135
136 plt.rcParams['font.sans-serif'] =['SimHei']
137 plt.rc('font',size=13)
138 fig,axes=plt.subplots(1,1,sharey=True,figsize=(10,6))
139
140 axes.set_xlabel('应还利息区间')
141 axes.set_ylabel('人数')
142 width=0.4
143
144 x=np.arange(num)
145 axes.set_xticks(x)
146
147 axes.bar(x-width/2,data1,width=width,label=data1label)
148 axes.bar(x+width/2,data2,width=width,label=data2label)
149 axes.legend(loc='best')
150 axes.set_xticklabels(data1.index.values,rotation=30)
151
152 for a,b in zip(x-width/2,data1):
153 axes.text(a,b,b,ha='center',va='bottom',color='k')
154 for a,b in zip(x+width/2,data2):
155 axes.text(a,b,b,ha='center',va='bottom',color='k')
156
157 # 对应还利息进行分箱分析
158 a=sorted(list(set(np.concatenate([np.linspace(0,60,6),
159 np.linspace(60,df.应还利息.max(),6)],
160 axis=0))))
161 df['应还利息分箱']=pd.cut(df.应还利息,bins=a,right=False,precision=0)
162 bardata_cdmor=df[df.应还本金==1].groupby('应还利息分箱').ID.count()
163 bardata_notcdmor=df[df.应还本金==0].groupby('应还利息分箱').ID.count()
164 cutbar(bardata_notcdmor,bardata_cdmor,10,'应还利息区间','人数','非存款客户','存款客户')
165 plt.show()
166 #
167 # # # 对剩余利息进行分箱分析
168 a=sorted(list(set(np.concatenate([np.linspace(0,60,6),np.linspace(60,df.剩余利息.max(),6)],axis=0))))
169 df['剩余利息分箱']=pd.cut(df.应还本金,bins=a,right=False,precision=0)
170 bardata_cdmor=df[df.剩余本金==1].groupby('剩余利息分箱').ID.count()
171 bardata_notcdmor=df[df.剩余本金==0].groupby('剩余利息分箱').ID.count()
172 cutbar(bardata_notcdmor,bardata_cdmor,10,'剩余利息区间','人数','非个贷客户','个贷客户')
173 plt.show()
174
175 def multi_kde(data,pointsnum,unit):
176 plt.rcParams['font.sans-serif'] = ['SimHei']
177 plt.rcParams['axes.unicode_minus'] = False
178 plt.rc('font',size=13)
179 i = data.shape[1]
180 a = data.columns.values[1]
181 fig,axes = plt.subplots(1,i-1,figsize=(20,5))
182 for j,k in zip(np.arange(1,i),np.arange(i-1)):
183 b = data[data[a] == 0]
184 c = data[data[a] == 1]
185 d = data.iloc[:,j]
186 e = np.array(unit)
187 plt.xticks(np.arange(d.min(),
188 d.max(),
189 int((d.max()-d.min())/pointsnum)))
190
191 axes[k].set_xlabel(data.columns.values[j]+e[k])
192 b.iloc[:,j].plot.kde(ax=axes[k])
193 c.iloc[:,j].plot.kde(ax=axes[k])
194 axes[k].legend(labels=['非'+a,a],
195 loc='best',fontsize=10)
196
197 plt.subplots_adjust(wspace=0.3)
198 multi_kde(df.loc[:,['期数','还款状态','应还本金','应还利息','剩余本金']])
199 plt.show()
200
201 df= pd.concat([df,df],ignore_index=True,sort=False)
202 print(df.head())
203
204 df['应还利息小于等于9.8'] = np.where(df.应还利息<=9.8,1,0).astype('int')
205
206 df['剩余大于等于2.8'] = np.where(df.剩余利息>=2.8,1,0).astype('int')
207
208 df['应还本金大于等于102'] = np.where(df.应还本金>=102,1,0).astype('int')
209
210 df['剩余本金大于等于3'] = np.where(df.剩余本金>=3,1,0).astype('int')
211
212 df['存款到个贷的转化'] = df['应还本金大于等于102'] + df['剩余本金大于等于3'] + df['期数']
213
214 # 改善特征分布
215 fg,axes = plt.subplots(1,3,figsize=(10,6))
216 for i,index in zip(np.arange(3),['应还本金','应还利息','剩余利息']):
217 df[index].plot(kind='box',ax=axes[i])
218 plt.show()
219
220 # 统计非数值数据
221 print(df['期数'].unique())
222 print(df['还款状态'].unique())
223 print(df['应还本金'].unique())
224
225 print(df['应还利息'].nunique())
226 print(df['剩余本金'].nunique())
227 print(df['剩余利息'].nunique())
228
229 # 对数转换 创建新的一列
230 df['应还本金2'] = np.log1p(df['应还本金'])
231 df['应还利息2'] = np.log1p(df['应还利息'])
232 df['剩余利息2'] = np.log1p(df['剩余利息'])
233
234 # 标准化处理
235 from sklearn.preprocessing import StandardScaler
236 std = StandardScaler()
237 for i in ['应还本金2','应还利息2','剩余利息2']:
238 std.fit_transform(df[i].values.reshape(-1,1))
239
240
241 # 划分输入特征和预测特征,并拆分训练集和测试集
242 from sklearn.model_selection import train_test_split
243 X = np.array(df.loc[:,['应还本金2',
244 '应还利息2',
245 '剩余本金',
246 '剩余利息',
247 '到期日期',
248 '还款日期',
249 '记录日期']])
250
251 y = np.array(df['期数'])
252 X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1)
253
254 print('训练集样本量为:',X_train.shape[0],'个')
255 print('测试集样本量为:',X_test.shape[0],'个')
256 print('上采样前训练集中正例有%d个,反例有%d个'%((y_train==1).sum(),(y_train==0).sum()))
四、总结
对于本课程设计的整体完成情况做一个总结,包括内容如下:
通过本次银行贷款测试集,进行了数据处理和预处理、分析图绘制、分箱分析和特征工程进行数据分析,在分析过程当中最困难还是特征工程的训练和分析图,我还得之后继续努力学习这类的数据分析技术。