欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-01-25 16:51:15
基于逻辑回归预测贷款违约 摘要金融机构审批贷款时会收集客户个人信息,包括年龄、收入、学历、职业、家庭情况、借贷历史等信息,在对各项信息综合考虑的基础上决定是否审批贷款。过去该项工作主要依靠人工审核,随着人工智能技术的发展,数据分析和机器学习成为金融风控领域的重要工具。本文利用数据竞赛平台Kaggl......

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

                                                                            摘要

金融机构审批贷款时会收集客户个人信息,包括年龄、收入、学历、职业、家庭情况、借贷历史等信息,在对各项信息综合考虑的基础上决定是否审批贷款。过去该项工作主要依靠人工审核,随着人工智能技术的发展,数据分析和机器学习成为金融风控领域的重要工具。本文利用数据竞赛平台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