银行分控模型的建立

银行分控模型的建立

一、Logistic回归模型:

(一)Logistic回归建模步骤

1. 根据分析目的设置指标变量(因变量和自变量),根据收集到的数据进行筛选

2. 用ln(p/1-p)和自变量x1...xp列出线性回归方程,估计出模型中的回归系数

3. 进行模型检验。模型有效性检验的函数有很多,比如正确率、混淆矩阵、ROC曲线、KS值

4. 模型应用。

(二)对某银行在降低贷款拖欠率的数据进行建模

代码:

#银行分控模型的建立
# 逻辑回归 自动建模
import pandas as pd  
# 参数初始化
filename=r'data\bankloan.xls' 
data=pd.read_excel(filename)
x=data.iloc[:,:8].values  #将数据的0-8列生成数组形式,用于后期进行训练模型(数据仅有8列)
y=data.iloc[:,8].values #将数据的第8列生成数组形式,用于后期进行训练模型
from sklearn.linear_model import LogisticRegression as LR #导入逻辑回归模型
print(u'通过逻辑回归模型筛选特征结束。')
data2=data.drop(u'违约',1)
lr=LR() # 建立逻辑回归模型
lr.fit(x,y) # 用筛选后的特征数据来训练模型
print(u'逻辑回归模型训练结束')
print(u'模型的平均正确率:%s'%lr.score(x,y))  # 给出模型的平均正确率为80.6%

运行结果:

 逻辑回归本质上还是一种线性模型。筛选出来的特征并不一定就跟结果没有关系,只是它们之间有可能是非线性关系。在真实应用中,还是要根据问题的实际背景对筛选结果进行分析。对于非线性关系的特征筛选方法有决策树、神经网络等

 

二、神经网络建模

人工神经网络(Artificial Neural Networks, ANN),是模拟生物神经网络进行信息处 理的一种数学模型。它以对大脑的生理研究成果为基础,其目的在于模拟大脑的某些机理与 机制,实现一些特定的功能。

人工神经网络的学习也称为训练,指的是神经网络在受到外部环境的刺激下调整神经网 络的参数,使神经网络以一种新的方式对外部环境作出反应的一个过程。在分类与预测中, 人工神将网络主要使用有指导的学习方式,即根据给定的训练样本,调整人工神经网络的参 数以使网络输出接近于已知的样本类标记或其他形式的因变量。

 

代码:

#神经网络预测
import pandas as pd  
import numpy as np
# 参数初始化
filename=r'data\bankloan.xls' 
data=pd.read_excel(filename)
x=data.iloc[:,:8].values
y=data.iloc[:,8].values # 获取二分类数据
from keras.models import Sequential
from keras.layers.core import Dense, Activation

model = Sequential()  # 建立模型
model.add(Dense(input_dim = 8, units = 10))
model.add(Activation('relu'))  # 用relu函数作为激活函数,能够大幅提供准确度
model.add(Dense(input_dim = 18, units = 1))
model.add(Activation('sigmoid'))  # 由于是0-1输出,用sigmoid函数作为激活函数
model.compile(loss = 'binary_crossentropy', optimizer = 'adam')
# 编译模型。由于我们做的是二元分类,所以我们指定损失函数为binary_crossentropy,以及模式为binary
# 另外常见的损失函数还有mean_squared_error、categorical_crossentropy等,请阅读帮助文件。
# 求解方法我们指定用adam,还有sgd、rmsprop等可选

model.fit(x, y, epochs = 1000, batch_size = 10)  # 训练模型,学习一千次

predict_x=model.predict(x)
classes_x=np.argmax(predict_x,axis=1)

score  = model.evaluate(x,y,batch_size=10)  # 模型评估
print(score)

from cm_plot import * #导入自行编写的混淆矩阵可视化函数
cm_plot(y,classes_x).show() #显示混淆矩阵可视化结果

运行结果:

 

 

 

 

 

 三、聚类分析算法

 聚类分析仅根据样本数据本身将样本分组。其目标是实现组内的对象相互之间是相似的 (相关的),而不同组中的对象是不同的(不相关的)。组内的相似性越大,组间差别越大,聚类效果就越好。

(一)聚类结果可视化的工具——TSNE

TSNE 是 Laurens van der Maaten 和 Geoffrey Hintton 在 2008 年提出的,它的定位是高维 数据的可视化。我们总喜欢能够直观地展示研究结果,聚类也不例外。然而,通常来说输入 的特征数是高维的(大于3维),一般难以直接以原特征对聚类结果进行展示。而TSNE提供 了一种有效的数据降维方式,让我们可以在2维或者3维的空间中展示聚类结果。

代码:

#用TSNE进行数据降维并展示聚类结果
import pandas as pd

#参数初始化
inputfile = r'data\bankloan.xls' #销量及其他属性数据
outputfile = 'data_type.xls' #保存结果的文件名
k = 3 #聚类的类别
iteration = 500 #聚类最大循环次数
data = pd.read_excel(inputfile, index_col = '年龄') #读取数据
data_zs = 1.0*(data - data.mean())/data.std() #数据标准化


if __name__ == '__main__':
    from sklearn.cluster import KMeans
    model = KMeans(n_clusters = k, n_jobs = 4, max_iter = iteration) #分为k类,并发数4
    model.fit(data_zs) #开始聚类

    #简单打印结果
    r1 = pd.Series(model.labels_).value_counts() #统计各个类别的数目
    r2 = pd.DataFrame(model.cluster_centers_) #找出聚类中心
    r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向),得到聚类中心对应的类别下的数目
    r.columns = list(data.columns) + [u'类别数目'] #重命名表头
    print(r)

    #详细输出原始数据及其类别
    r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1)  #详细输出每个样本对应的类别
    r.columns = list(data.columns) + [u'聚类类别'] #重命名表头
    r.to_excel(outputfile) #保存结果

    # 用TSNE进行数据降维并展示聚类结果
    from sklearn.manifold import TSNE

    tsne = TSNE()
    tsne.fit_transform(data_zs) #进行数据降维
    tsne = pd.DataFrame(tsne.embedding_, index = data_zs.index) #转换数据格式

    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

    #不同类别用不同颜色和样式绘图
    d = tsne[r[u'聚类类别'] == 0]
    plt.plot(d[0], d[1], 'r.')
    d = tsne[r[u'聚类类别'] == 1]
    plt.plot(d[0], d[1], 'go')
    d = tsne[r[u'聚类类别'] == 2]
    plt.plot(d[0], d[1], 'b*')
    plt.show()

运行结果:

 

posted on 2022-03-27 19:17  Noraa  阅读(171)  评论(0编辑  收藏  举报