当前位置: 移动技术网 > IT编程>脚本编程>Python > 荐 基于逻辑回归预测贷款违约

荐 基于逻辑回归预测贷款违约

2020年07月26日  | 移动技术网IT编程  | 我要评论

                            基于逻辑回归预测贷款违约

                                                                            摘要

金融机构审批贷款时会收集客户个人信息,包括年龄、收入、学历、职业、家庭情况、借贷历史等信息,在对各项信息综合考虑的基础上决定是否审批贷款。过去该项工作主要依靠人工审核,随着人工智能技术的发展,数据分析和机器学习成为金融风控领域的重要工具。本文利用数据竞赛平台Kaggle提供的贷款历史数据,对数据进行预处理后,使用python构建逻辑回归模型,利用模型预测贷款人的违约情况。

关键词:数据分析,逻辑回归,预测

本文尝试使用python构建模型,利用模型预测贷款人的违约情况。通过贷款数据(如用户个人信息、贷款状态等)来训练模型,通过模型分析贷款人的偿还能力,预测贷款申请人是否会发生违约。因为已知贷款状态是否违约以及各特征变量的值,判定贷款申请人会不会违约是一个二分类问题,是一个监督学习的场景,可以通过分类算法来处理。

本文采用kaggle提供的数据,包含大于284807条用户贷款数据。具体如图1。Class是因变量,0表示没有违约,1表示发生了违约,其他的是自变量。

 

                                                                      图1

 

  1. 数据处理

1.1数据读取与分析

data=pd.read_csv('creditcard.csv'),读入数据,使用describe()查看数据基本信息,包括每个特征值的均值、各分位数等。结果见图2

                                                        图2

 

Class的均值是0.001727,说明违约率是0.1727%,说明数据不均衡,违约的数据量远远小于正常的数据量,需要进行样本均衡化;Amount变量范围较大,远远大于V1-V28,需要进行标准化处理。Time变量无实际意义,丢弃即可。

1.2.特征标准化

特征标准化就是将数据处理后在一个小范围内波动,公式如下:

 

 

Z为标准化后的数据,X为原始数据,Xmean为原始数据的均值,std(X)为原始数据的标准差。Python中提供了StandardScaler模块可以进行特征标准化。

1.3样本均衡化

图3是Class=0和Class=1的数据对比,可以发现正常数据远远超过异常数据,样本存在不均衡现象。

 

                                                       图3

 

样本不均衡的解决方法分为下采样和过采样,下采样会误杀样本数量,使用过采样解决样本不均衡,使用SMOTE算法生成数据,python中提供了imblearn包可以实现该算法。

oversampler=SMOTE(random_state=0)

X_train,y_train=oversampler.fit_sample(X_train,y_train)

 

2.建立逻辑回归模型

按照80%是比例,把数据分为训练集和测试集。

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)

logic_clf=LogisticRegression()  #生成一个逻辑回归模型

logic_clf.fit(X_train,y_train.values.ravel()) #用训练集进行拟合,获得模型

score=logic_clf.score(X_test,y_test) 使用模型对X_test数据进行测试,并与y_test比较,获得准确率

使用confusion_matrix方法获得混淆矩阵
y_pred=logic_clf.predict(X_test)

cnf_matrix=confusion_matrix(y_test,y_pred)

准确率和混淆矩阵如下:

0.9450257636776112

[[55300  1424]

 [ 4828 52174]]

3.结论

使用逻辑回归模型,得到的预测准确率94.5%,具有很高的使用价值,在后续的工作中,将尝试采用其他算法例如贝叶斯模型、神经网络的方法构建模型,进一步提高模型准确度。

 

 

代码:

import pandas as pd
data=pd.read_csv('creditcard.csv')
print(data)

#查看数据概述
print(data.describe())

# #查看样本数据是否均衡
# import matplotlib.pyplot as plt
# count_class=pd.value_counts(data['Class'],sort=True).sort_index()
# count_class.plot(kind='bar')
# plt.title('class histogram')
# plt.xlabel('Class')
# plt.ylabel('Frequency')
# plt.show()


#特征标准化
from sklearn.preprocessing import StandardScaler
data['normAmount']=StandardScaler().fit_transform(data['Amount'].values.reshape(-1,1))
data=data.drop(['Time','Amount'],axis=1)
print(data)

#切分数据
#数据
X=data.loc[:,data.columns!='Class']
#标签
y=data.loc[:,data.columns=='Class']

#过采样
from imblearn.over_sampling import SMOTE
oversampler=SMOTE(random_state=0)
X,y=oversampler.fit_sample(X,y)
print("过采样")
print(X)

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)
print(X_train)

# #过采样方案
# from imblearn.over_sampling import SMOTE
# oversampler=SMOTE(random_state=0)
# X_train,y_train=oversampler.fit_sample(X_train,y_train)
# print(X_train)

from sklearn.linear_model import LogisticRegression
logic_clf=LogisticRegression()  #生成一个逻辑回归模型
logic_clf.fit(X_train,y_train.values.ravel()) #训练
y_pred=logic_clf.predict(X_test)
#计算准确率
score=logic_clf.score(X_test,y_test)
print(score)

#计算混淆矩阵
from sklearn.metrics import confusion_matrix
cnf_matrix=confusion_matrix(y_test,y_pred)
print(cnf_matrix)

 

本文地址:https://blog.csdn.net/MATLAB_matlab/article/details/107574723

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网