数据挖掘实战-基于决策树算法构建银行贷款审批预测模型

 

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


目录

1.项目背景

2.数据集介绍

3.技术工具

4.实验过程

4.1导入数据

4.2数据预处理 

4.3数据可视化

4.4特征工程

4.5构建模型

4.6模型评估

5.总结 

源代码


1.项目背景

        随着金融科技的快速发展,银行贷款审批过程正经历着前所未有的变革。传统的贷款审批流程往往依赖于人工审查,这种方式不仅效率低下,而且容易受到人为因素的影响,导致信贷风险增加。为了应对这一挑战,金融机构开始寻求利用先进的数据分析技术和机器学习算法来优化贷款审批过程。

        决策树算法作为一种简单易懂、易于实现的机器学习算法,在分类和预测领域具有广泛的应用。其基于树状图的形式,通过递归地将数据集划分为更小、更纯的子集来构建模型。决策树算法能够很好地处理具有多种特征和分类的数据集,因此在金融领域,特别是贷款审批预测中,具有巨大的应用潜力。

        本研究旨在利用决策树算法构建一个银行贷款审批预测模型。通过对借款人的个人信息、财务状况、信用记录等多维度数据进行分析,模型能够预测借款人的还款能力和违约风险,从而为银行提供科学、客观的贷款审批决策依据。通过自动化和智能化的审批流程,银行可以提高审批效率,降低信贷风险,同时优化客户体验,实现可持续发展。

        研究不仅有助于推动银行贷款审批流程的数字化转型,还可为其他金融领域的风险管理提供有益的参考和借鉴。随着数据科学和人工智能技术的不断发展,未来贷款审批预测模型将更加精准、高效,为金融业的稳定发展提供有力支持。

2.数据集介绍

        本数据集来源于Kaggle,在这个贷款状态预测数据集中,我们有以前根据property Loan的属性申请贷款的申请人的数据。银行将根据申请人的收入、贷款金额、以前的信用记录、共同申请人的收入等因素来决定是否向申请人提供贷款。我们的目标是建立一个机器学习模型来预测申请人的贷款被批准或被拒绝。原始数据集共有381条,13个变量。各变量含义如下:

Loan_ID:唯一的贷款ID。

Gender:男性或女性。

Married:天气结婚(是)或不结婚(否)。

Dependents:依赖于客户端的人数。

Education   :申请人学历(研究生或本科)。

Self_Employed:自雇(是/否)。

ApplicantIncome:申请人收入。

CoapplicantIncome:共同申请人收入。

LoanAmount:以千为单位的贷款金额。

Loan_Amount_Term:以月为单位的贷款期限。

Credit_History:信用记录符合指导原则。

Property_Area:申请人居住在城市、半城市或农村。

Loan_Status:贷款批准(Y/N)。

3.技术工具

Python版本:3.9

代码编辑器:jupyter notebook

4.实验过程

4.1导入数据

首先导入本次实验用到的第三方库并加载数据

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")df = pd.read_csv("loan_data.csv")
df.head()

查看数据大小 

查看数据基本信息

查看数值型变量的描述性统计

查看非数值型变量的描述性统计

4.2数据预处理 

统计缺失值情况 

发现个别变量存在缺失值,需要进行处理

# 缺失值处理
df['Gender'] = df['Gender'].fillna(df['Gender'].mode().iloc[0])
df['Self_Employed'] = df['Self_Employed'].fillna(df['Self_Employed'].mode().iloc[0])
df['Loan_Amount_Term'] = df['Loan_Amount_Term'].fillna(df['Loan_Amount_Term'].mode().iloc[0]).astype(int)
df['Credit_History'] = df['Credit_History'].fillna(df['Credit_History'].mode().iloc[0]).astype(int)
df['Dependents'] = df['Dependents'].replace(['0', '1', '2', '3+'], [0,1,2,3,])
df['Dependents'] = df['Dependents'].fillna(df['Dependents'].mode().iloc[0])
df['CoapplicantIncome'] = df['CoapplicantIncome'].astype(int)
df['LoanAmount'] = df['LoanAmount'].astype(int)df.isnull().sum()

将类别型变量转换为数值型变量

# 将类别型变量转换为数值型变量
def cat_to_num(df, c_var):for i in c_var:uniques_value = df[i].unique()df[i].replace(uniques_value, [0, 1], inplace=True)for i in ['Property_Area']:uniques_value = df[i].unique()df[i].replace(uniques_value, [0, 1, 3], inplace=True)c_variables = ['Gender', 'Married', 'Education', 'Education','Self_Employed', 'Loan_Status']
cat_to_num(df, c_variables)
df.head()

4.3数据可视化

分析类别型变量

# 分析类别型变量
fig, ax = plt.subplots(3, 2, figsize=(12,15))for index, cat_col in enumerate(c_variables):row, col = index//2, index%2sns.countplot(x=cat_col, data=df, hue='Loan_Status', ax=ax[row, col])plt.subplots_adjust(hspace=1)

分析数值型变量

# 分析数值型变量
numerical_columns = ['ApplicantIncome', 'CoapplicantIncome', 'LoanAmount']
fig,axes = plt.subplots(1,3,figsize=(17,5))
for idx,cat_col in enumerate(numerical_columns):sns.boxplot(y=cat_col,data=df,x='Loan_Status',ax=axes[idx])print(df[numerical_columns].describe())
plt.subplots_adjust(hspace=1)

4.4特征工程

准备建模数据并拆分数据集

# 准备建模数据
X = df.drop(['Loan_Status','Loan_ID'], axis=1)
y = df['Loan_Status']
# 拆分数据集为训练集和测试集
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=42)
X_train.shape, y_train.shape, X_test.shape, y_test.shape

数据标准化处理

# 标准化处理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.fit_transform(X_test)

4.5构建模型

构建决策树模型

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score,roc_auc_score,classification_report
# 构建决策树模型
model = DecisionTreeClassifier(max_depth=3,min_samples_leaf = 35)
model.fit(X_train,y_train)
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
roc_score = roc_auc_score(y_test, y_pred)print(f'Accuracy Score: {accuracy*100:0.2f}%')
print(f'Roc Score: {roc_score*100:0.2f}%')

4.6模型评估

from sklearn.metrics import accuracy_score,confusion_matrix,classification_report,auc,roc_curve
# 模型评估
y_pred = model.predict(X_test)
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))
# 画出ROC曲线
y_prob = model.predict_proba(X_test)[:,1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_prob) 
roc = auc(false_positive_rate, true_positive_rate)
plt.title('ROC')
plt.plot(false_positive_rate,true_positive_rate, color='red',label = 'AUC = %0.2f' % roc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],linestyle='--')
plt.axis('tight')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()

5.总结 

        本研究利用决策树算法成功构建了一个银行贷款审批预测模型,并通过实验验证了其有效性和实用性。首先,该模型能够基于借款人的个人信息、财务状况、信用记录等多维度数据,有效地预测借款人的还款能力和违约风险。通过对比传统的人工审批方式,该模型显著提高了审批的准确性和效率,降低了信贷风险。其次,决策树算法在实验过程中表现出了良好的分类和预测性能。模型在训练集上具有较高的准确率,同时在测试集上也表现出稳定的预测能力,证明了其泛化性能。最后,该模型为银行的贷款审批流程带来了显著的优化。通过自动化和智能化的审批方式,银行不仅提高了审批效率,还优化了客户体验,实现了可持续发展。综上所述,本研究构建的基于决策树算法的银行贷款审批预测模型具有广泛的应用前景和实用价值。未来,随着数据科学和人工智能技术的进一步发展,该模型有望为银行业的风险管理提供更加精准、高效的解决方案。

源代码

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")df = pd.read_csv("loan_data.csv")
df.head()
df.shape
df.info()
df.describe()
df.describe(include='O')
df.isnull().sum()
# 缺失值处理
df['Gender'] = df['Gender'].fillna(df['Gender'].mode().iloc[0])
df['Self_Employed'] = df['Self_Employed'].fillna(df['Self_Employed'].mode().iloc[0])
df['Loan_Amount_Term'] = df['Loan_Amount_Term'].fillna(df['Loan_Amount_Term'].mode().iloc[0]).astype(int)
df['Credit_History'] = df['Credit_History'].fillna(df['Credit_History'].mode().iloc[0]).astype(int)
df['Dependents'] = df['Dependents'].replace(['0', '1', '2', '3+'], [0,1,2,3,])
df['Dependents'] = df['Dependents'].fillna(df['Dependents'].mode().iloc[0])
df['CoapplicantIncome'] = df['CoapplicantIncome'].astype(int)
df['LoanAmount'] = df['LoanAmount'].astype(int)df.isnull().sum()
# 将类别型变量转换为数值型变量
def cat_to_num(df, c_var):for i in c_var:uniques_value = df[i].unique()df[i].replace(uniques_value, [0, 1], inplace=True)for i in ['Property_Area']:uniques_value = df[i].unique()df[i].replace(uniques_value, [0, 1, 3], inplace=True)c_variables = ['Gender', 'Married', 'Education', 'Education','Self_Employed', 'Loan_Status']
cat_to_num(df, c_variables)
df.head()
# 分析类别型变量
fig, ax = plt.subplots(3, 2, figsize=(12,15))for index, cat_col in enumerate(c_variables):row, col = index//2, index%2sns.countplot(x=cat_col, data=df, hue='Loan_Status', ax=ax[row, col])plt.subplots_adjust(hspace=1)
# 分析数值型变量
numerical_columns = ['ApplicantIncome', 'CoapplicantIncome', 'LoanAmount']
fig,axes = plt.subplots(1,3,figsize=(17,5))
for idx,cat_col in enumerate(numerical_columns):sns.boxplot(y=cat_col,data=df,x='Loan_Status',ax=axes[idx])print(df[numerical_columns].describe())
plt.subplots_adjust(hspace=1)
# 准备建模数据
X = df.drop(['Loan_Status','Loan_ID'], axis=1)
y = df['Loan_Status']
# 拆分数据集为训练集和测试集
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=42)
X_train.shape, y_train.shape, X_test.shape, y_test.shape
# 标准化处理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.fit_transform(X_test)
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score,roc_auc_score,classification_report
# 构建决策树模型
model = DecisionTreeClassifier(max_depth=3,min_samples_leaf = 35)
model.fit(X_train,y_train)
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
roc_score = roc_auc_score(y_test, y_pred)print(f'Accuracy Score: {accuracy*100:0.2f}%')
print(f'Roc Score: {roc_score*100:0.2f}%')
from sklearn.metrics import accuracy_score,confusion_matrix,classification_report,auc,roc_curve
# 模型评估
y_pred = model.predict(X_test)
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))
# 画出ROC曲线
y_prob = model.predict_proba(X_test)[:,1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_prob) 
roc = auc(false_positive_rate, true_positive_rate)
plt.title('ROC')
plt.plot(false_positive_rate,true_positive_rate, color='red',label = 'AUC = %0.2f' % roc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],linestyle='--')
plt.axis('tight')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()

资料获取,更多粉丝福利,关注下方公众号获取

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/11266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6818Linux内核--Bootloader应用分析

Bootloader应用分析 一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 引导加载程序。包括固化在固件( firmware )中的 boot 代码(可选),和 Boot Loader 两大部分。 Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 文件系统…

一分钟把小程序音频保存到手机上

在这个快节奏的时代,每一分钟都显得格外珍贵。你是否曾在小程序中偶遇一段旋律,它如同清晨的露珠,晶莹剔透,却又转瞬即逝?是否曾在某个瞬间,渴望将那段旋律永久地镌刻在心间,让它成为你私人时光…

【微信小程序开发】flex布局在小程序开发项目中的应用详解

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

温情母亲节,李良济中医课堂,用爱呵护妈妈的健康与美丽

这个世界上,有这么一个人,你听过她最美的年华,她见证你最美的长大,这个人就是妈妈。 知恩于心,感恩于行!母亲节,李良济中医课堂助健康,滋养好物养身心,与您一起用爱守护…

2024最新单身经济新模式,低客单量高转换率,长期项目,新手快速上手

在今年,”搭子”这个词汇异常火爆,主要通过搭子流量进行线下推广以实现高品质群的盈利。有一句流行语说,年轻人可以不想谈恋爱,但不能没有搭子,这显示了搭子的需求量很大。 只要有需求,就会有创业的机会。…

第二证券今日投资参考:VA、VE景气上行 猪价步入慢涨趋势

上周五,沪指午后在地产、金融等板块的带动下震荡上升,创业板指等弱势下探。到收盘,沪指微涨0.01%报3154.55点,深证成指跌0.58%报9731.24点,创业板指跌1.15%报1878.17点,科创50指数跌1.5%;两市算…

【解决】:git clone项目报错fatal: fetch-pack: invalid index-pack output

象:之前一直使用gitee将个人学习和工作相关记录上传到个人gitee仓库,一直没出现过问题。直到有一天换电脑重新拉取代码发现出了问题,具体如下图: 原因分析: 经过查询发现主要原因是因为git clone的远程仓库的项目过大…

基于AIoTedge+ThingsKit物联网平台,实现办公室人员进出AI统计

在AIoT时代,智能办公已成为提升企业效率的关键。本期文章将带你了解如何利用AIoTedge结合ThingsKit物联网平台,实现办公室人员进出的智能统计。这不是简单的技术堆砌,而是一场关于AI与IoT融合的实战演示。🌟 提示:AIoT…

Mysql进阶-sql优化篇

sql优化 sql优化insert优化批量插入手动提交事务主键顺序插入大批量插入数据 主键优化数据组织方式页分裂页合并主键设计原则 order by 优化原则 group by优化limit优化count 优化count的几种用法 update优化 sql优化 insert优化 批量插入 Insert into tb_test values(1,Tom…

算法笔记——数位DP

一、前置知识 1.DP小知识 D P DP DP 是一种算法思想,用递推方程的方式解决问题。但是使用它要满足如下性质: 最优子结构: 子结构优秀,整个就优秀。无后效性:当前决策不会影响后面。 2.DP实现方法 众所周知&#xf…

【Java】Java基础 使用集合实现斗地主分牌

📝个人主页:哈__ 期待您的关注 目录 0.思路 1.创建玩家手牌集合 2.创建牌堆 3. 把牌放入牌堆 4.洗牌 5.进行分牌 6.完整代码 今天使用集合TreeSet来实现一个斗地主的分牌流程。 TreeSet集合的一个特点就是 元素有序,这样就方便…

定期更新与维护:技术与生活的同步律动

在这个数字化时代,科技的温暖之光照进了盲人朋友们的日常生活中,特别是那些辅助出行的应用程序,它们如同贴心的向导,引领着用户穿越城市的喧嚣与宁静。然而,要确保这些应用始终能够高效、安全地服务于盲人用户&#xf…

Seaborn用法大全

原文连接: https://blog.csdn.net/qq_38614074/article/details/138251530 # Seaborn介绍 Seaborn是一个基于Python的数据可视化库,它建立在matplotlib的基础之上,为统计数据的可视化提供了高级接口。Seaborn通过简洁美观的默认样式和绘图类型&#xff…

Java随笔1

1.编程中组件的概念: 在编程中,组件(Component)通常指的是一种可重用的、模块化的代码单元,它封装了特定的功能或用户界面元素,并提供了与其他代码进行交互的接口。组件可以看作是对数据和方法的简单封装&…

锁策略详解:互斥锁、读写锁、乐观锁与悲观锁、轻量级锁与重量级锁、自旋锁、偏向锁、可重入锁与不可重入锁、公平锁与非公平锁

一.锁策略 锁策略指的是在多线程编程中用于管理共享资源访问的规则和技术。它们确保在任何给定时间只有一个线程可以访问共享资源,以防止竞态条件和数据不一致性问题。常见的锁策略包括: 互斥锁(Mutex):最常见的锁类型…

王者营地ip地址怎么隐藏

在数字化快速发展的今天,网络安全和隐私保护成为了每个人都需要面对的重要问题。作为一款备受欢迎的游戏社区应用,王者营地为用户提供了丰富的游戏信息和交流平台。然而,与此同时,用户的IP地址也可能在不经意间被泄露,…

spring框架定时任务(@Scheduled)

内容: 在spring框架中,scheduled注解是用于声明定时任务的,以最简单的方式来创建定时任务。 注意: 要使用scheduled注解,需要确保已下几点: 1.spring应用程序已经开启了定时任务的开启。需要在配置类&am…

博客互动革命:如何打造活跃读者社区并提升参与度

CSDN 的朋友你们好,我是未来,今天给大家带来专栏【程序员博主教程(完全指南)】的第 10 篇文章“与读者互动”。本文揭示了提升技术博客参与度的秘诀。从评论互动到社交媒体策略,本文将指导你如何建立强大的读者社区。掌…

MYSQL数据库-SQL语句

数据库相关概念 名称全称简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准Structured Quer…

win10电脑录屏全攻略,从入门到精通,一篇文章就够了!

在当今科技时代,电脑录屏已经成为人们生活中越来越重要的一部分。无论是工作还是娱乐,我们都可能需要录制电脑屏幕来保存或分享一些内容。在本文中,我们将向您介绍win10电脑录屏的三种方法,并对每种方法进行详细说明,为…