银行风投模型

所谓风投,是指多银行贷款资金的风险把控,是对风险的一个评估

一、用神经网络序贯模型搭建模型构架,且经过多次调参

运行代码如下:banklodan.py

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
datafile = 'C:/code_python/bankloan2.xls'
data = pd.read_excel(datafile)
x = data.iloc[:,:8]
y = data.iloc[:,8]
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=100)
from keras.models import Sequential
from keras.layers import Dense,Dropout
from keras.metrics import BinaryAccuracy
import time
start_time = time.time()
model = Sequential()
model.add(Dense(input_dim=8,units=800,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(input_dim=800,units=400,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(input_dim=400,units=1,activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam',metrics=[BinaryAccuracy()])
model.fit(x_train,y_train,epochs=500,batch_size=128)
loss,binary_accuracy = model.evaluate(x,y,batch_size=128)
end_time = time.time()
run_time = end_time-start_time
print('模型运行时间:{}'.format(run_time))
print('模型损失值:{}'.format(loss))
print('模型精度:{}'.format(binary_accuracy))

yp = model.predict(x).reshape(len(y))
yp = np.around(yp,0).astype(int) #转换为整型
from cm_plot import *  # 导入自行编写的混淆矩阵可视化函数

cm_plot(y,yp).show()  # 显示混淆矩阵可视化结果

混淆矩阵cm_plot.py

def cm_plot(y, yp):
  
  from sklearn.metrics import confusion_matrix

  cm = confusion_matrix(y, yp) 
  
  import matplotlib.pyplot as plt 
  plt.matshow(cm, cmap=plt.cm.Greens) 
  plt.colorbar() 
  
  for x in range(len(cm)): 
    for y in range(len(cm)):
      plt.annotate(cm[x,y], xy=(x, y), horizontalalignment='center', verticalalignment='center')
  
  plt.ylabel('True label') 
  plt.xlabel('Predicted label') 
  return plt

运行结果如下:

 

 

 

 由结果可知:在数据量不大的情况下,综合考虑运行时间、精确度、损失值因素,精确度为0.82

 

二、用机器学习算法搭建模型构架

算法:决策树

运行代码如下:


# -*- coding: utf-8 -*-
"""
Created on Tue Mar 29 22:21:01 2022


@author: PINcnn52012
"""


import pandas as pd
# 参数初始化
filename = r'bankloan2.xls'
data = pd.read_excel(filename) # 导入数据


# 数据是类别标签,要将它转换为数据
# 用1来表示“好”“是”“高”这三个属性,用-1来表示“坏”“否”“低”


x = data.iloc[:,:8].astype(int)
y = data.iloc[:,8].astype(int)



from sklearn.tree import DecisionTreeClassifier as DTC
dtc = DTC(criterion='entropy') # 建立决策树模型,基于信息熵
dtc.fit(x, y) # 训练模型


# 导入相关函数,可视化决策树。
# 导出的结果是一个dot文件,需要安装Graphviz才能将它转换为pdf或png等格式。
from sklearn.tree import export_graphviz
x = pd.DataFrame(x)


"""
string1 = '''
edge [fontname="NSimSun"];
node [ fontname="NSimSun" size="15,15"];
{
'''
string2 = '}'
"""


with open("banklodan_tree.dot", 'w') as f:
export_graphviz(dtc, feature_names = x.columns, out_file = f)
f.close()



from IPython.display import Image
from sklearn import tree
import pydotplus


dot_data = tree.export_graphviz(dtc, out_file=None, #regr_1 是对应分类器
feature_names=data.columns[:8], #对应特征的名字
class_names=data.columns[8], #对应类别的名字
filled=True, rounded=True,
special_characters=True)


graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_png('banklodan_tree.png') #保存图像
Image(graph.create_png())

 

得出结果如下:

 

显然,决策树的效果最好

posted @ 2022-03-29 16:35  可乐配牛奶  阅读(147)  评论(0编辑  收藏  举报