论文复现-基于决策树算法构建银行贷款审批预测模型(金融风控场景)

作者Toby,来源公众号:Python风控模型,基于决策树算法构建银行贷款审批预测模型

目录

1.金融风控论文复现

2.项目背景介绍

3.决策树介绍

4.数据集介绍

5.合规风险提醒

6.技术工具

7.实验过程

7.1导入数据

7.2数据预处理 

7.3数据可视化

7.4特征工程

7.5构建模型

7.6模型评估

8.总结 

1.金融风控论文复现

今天发现有篇经典期刊下载量非常大,有5000多条。Toby老师尝试简单复现一下。

图片

图片

图片

2.项目背景介绍

银行贷款审批预测模型是一种基于机器学习算法的应用,旨在帮助银行提高贷款审批的效率和准确性。该模型利用客户的个人信息、财务状况和贷款申请信息等数据,预测客户的贷款审批结果,即是否批准该客户的贷款申请。

背景介绍:在传统的银行贷款审批流程中,工作人员需要手动审核客户提交的贷款申请资料,这一过程既费时又容易出错。为了提高审批效率、降低风险,许多银行开始引入机器学习模型来辅助贷款审批决策。这些模型可以根据历史数据和客户信息,快速而准确地预测贷款的批准结果,帮助银行更好地管理风险,提高贷款审批的效率和客户体验。

银行贷款审批预测模型的建立需要一定数量的历史贷款数据和客户信息作为训练集,以便模型学习客户的贷款偿还行为和审批决策规律。通过合理地处理和分析这些数据,建立起贷款审批预测模型,银行可以实现更智能化、高效化的贷款审批流程,为客户提供更优质的金融服务。

图片

3.决策树算法介绍

决策树是一种常用的机器学习算法,在分类和回归问题中都有广泛的应用。它通过一系列的规则和条件对数据进行划分,最终形成一棵树状的结构,每个节点表示一个特征属性的判断条件,每个叶子节点表示一个分类结果或回归数值。

下面是决策树算法的主要特点和工作流程:

特点:

  1. 简单直观:决策树易于解释和理解,可以帮助人们了解数据特征之间的关系。

  2. 非参数方法:决策树在建模过程中不需要假设数据的分布,适用于各种类型的数据。

  3. 可处理多类别问题:决策树可以处理多类别分类问题,也可以用于回归问题。

工作流程:

  1. 特征选择:根据不同的特征属性选择一个最优的特征进行数据划分。

  2. 数据划分:根据特征的取值将数据集划分成不同的子集。

  3. 递归构建:对每个子集递归地重复上述过程,直到满足停止条件(如节点中的样本都属于同一类别)。

  4. 剪枝:为了避免过拟合,可以通过剪枝手段对决策树进行优化。

决策树算法通过树状结构直观地描述了数据特征之间的关系,可以有效地处理分类和回归问题。然而,决策树算法也存在容易过拟合的问题,因此在实际应用中常常需要进行适当的调参和优化以提高模型的泛化能力。

图片

4.数据集介绍

"Property Loan"(房屋贷款)数据集通常用于贷款审批预测模型的训练和测试。该数据集包含了一些客户的个人信息和贷款申请信息,以及最终的贷款批准结果,是一个典型的二分类问题数据集。

通常,"Property Loan"数据集可能包含以下类型的特征信息:

  1. Gender(性别):客户的性别,可以是男性或女性。

  2. Marital Status(婚姻状况):客户的婚姻状况,如已婚、未婚、离异等。

  3. Applicant Income(申请人收入):申请人的收入水平。

  4. Loan Amount(贷款金额):客户申请的贷款金额。

  5. Credit History(信用历史):客户的信用历史记录,通常是二分类特征,表示有或没有信用记录。

  6. Property Area(房产所在区域):房产所在的区域,如城市、郊区等。

同时,数据集中的标签(Label)通常是 Loan Approval Status(贷款批准状态),即客户的贷款申请是否最终被批准。

通过"Property Loan"数据集,银行可以利用客户的个人信息和贷款申请信息,训练贷款审批预测模型,实现快速有效地预测客户的贷款审批结果。这有助于提高银行的运营效率,降低风险,并为客户提供更高效的金融服务体验。

5.合规风险提醒

根据巴塞尔协议和国内金融办法规。各位建模人员请注意,对于敏感的金融数据和贷款审批模型的构建,需要遵守相关的法律和规定,并确保数据隐私和安全。建议在实际操作中谨慎处理和使用这些数据,以保护客户的隐私和信息安全。

6.技术工具

Python版本:4

代码编辑器:jupyter notebook/spyder/miniconda

具体安装流程,请参考Toby老师之前文章《Anaconda下载和安装指南》

图片

7.建模实验过程

以下是一个简单的示例代码,展示了如何使用Python中的scikit-learn库构建决策树模型进行银行贷款审批预测:

7.1导入数据

# 导入必要的库import pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.metrics import accuracy_score
# 读取包含客户信息和贷款审批结果的数据集data = pd.read_csv('loan_data.csv')

7.2描述性统计

通过以上代码,您可以轻松地获取"Property Loan"数据集的基本描述性统计信息,包括各个数值型特征的统计指标(如均值、方差、最大值、最小值等)以及类别型特征的频数统计。

import pandas as pd
# 假设数据集已加载到名为 property_loan_data 的 DataFrame 中
# 显示数据集的基本统计信息print(property_loan_data.describe())
# 计算每个类别型特征的频数categorical_features = ['Gender', 'Marital Status', 'Credit History', 'Property Area']for feature in categorical_features:    print(property_loan_data[feature].value_counts())

7.3数据预处理

对于"Property Loan"数据集的数据预处理,常见的步骤包括缺失值处理、特征编码、数据标准化等。以下是一个简单的数据预处理示例代码,假设您已经加载了"Property Loan"数据集到名为property_loan_data的DataFrame中:

import pandas as pdfrom sklearn.preprocessing import LabelEncoderfrom sklearn.impute import SimpleImputerfrom sklearn.preprocessing import StandardScaler
# 假设数据集已加载到名为 property_loan_data 的 DataFrame 中
# 处理缺失值imputer = SimpleImputer(strategy='mean')  # 使用均值填充缺失值property_loan_data['Loan Amount'] = imputer.fit_transform(property_loan_data[['Loan Amount']])
# 特征编码label_encoder = LabelEncoder()property_loan_data['Gender'] = label_encoder.fit_transform(property_loan_data['Gender'])property_loan_data['Marital Status'] = label_encoder.fit_transform(property_loan_data['Marital Status'])property_loan_data['Property Area'] = label_encoder.fit_transform(property_loan_data['Property Area'])
# 数据标准化scaler = StandardScaler()property_loan_data[['Applicant Income', 'Loan Amount']] = scaler.fit_transform(property_loan_data[['Applicant Income', 'Loan Amount']])
# 打印处理后的数据集print(property_loan_data.head())

在这段代码中,我们演示了如何使用SimpleImputer处理缺失值、使用LabelEncoder进行特征编码、以及使用StandardScaler进行数据标准化。这些步骤有助于准备数据用于机器学习模型的训练。

7.4数据可视化

以下是一个简单的用于可视化"Property Loan"(房屋贷款)数据集的Python代码示例,借助matplotlib和seaborn库来实现数据可视化:

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns
# 假设数据集已加载到名为 property_loan_data 的 DataFrame 中
# 柱状图示例:显示贷款批准状态的分布sns.countplot(x='Loan Approval Status', data=property_loan_data)plt.title('Loan Approval Status Distribution')plt.show()
# 散点图示例:显示申请人收入与贷款金额之间的关系plt.figure(figsize=(8, 6))sns.scatterplot(x='Applicant Income', y='Loan Amount', hue='Loan Approval Status', data=property_loan_data)plt.title('Applicant Income vs. Loan Amount')plt.xlabel('Applicant Income')plt.ylabel('Loan Amount')plt.show()
# 箱线图示例:显示贷款金额在不同贷款批准状态下的分布plt.figure(figsize=(8, 6))sns.boxplot(x='Loan Approval Status', y='Loan Amount', data=property_loan_data)plt.title('Loan Amount Distribution by Loan Approval Status')plt.xlabel('Loan Approval Status')plt.ylabel('Loan Amount')plt.show()

这些示例代码将帮助您快速可视化"Property Loan"数据集中的一些重要特征和关系,有助于更好地理解数据和可能的模式。

图片

图片

图片

7.5数据划分

# 提取特征和目标变量X = data.drop('Loan_Status', axis=1)y = data['Loan_Status']
# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

7.6建模

# 构建决策树分类器模型clf = DecisionTreeClassifier()clf.fit(X_train, y_train)

7.7预测

# 在测试集上进行预测y_pred = clf.predict(X_test)

7.8模型验证

# 评估模型准确率accuracy = accuracy_score(y_test, y_pred)print('模型准确率: {:.2f}%'.format(accuracy * 100))

在这段代码中,首先我们导入了需要的库,并读取包含客户信息和贷款审批结果的数据集。然后提取特征和目标变量,并进行训练集和测试集的划分。接着我们构建了决策树分类器模型,并在测试集上进行预测,最后通过准确率评估模型的性能。

图片

混淆矩阵结果

模型准确率整体还不错,有0.82,对逾期的f1分数达到0.89,非常高。当然这是前期快速预测模型的实验结论。Toby老师通过后期模型调优可以显著提升模型性能。

图片

confusionMatrix混淆矩阵是统计学里比较难懂概念。混淆矩阵包含accuracy,recall,precision,f-measure四个指标。

为了让各位学员不再混淆,我用一图读懂混淆矩阵包含accuracy,recall(也叫sensitivity),precision,f-measure四个指标。

图片

更多相关知识请参考Toby老师之前写的文章《confusion matrix混淆矩阵图谱

8.总结

银行贷款审批预测模型项目总结如下:

  1. 项目背景: 该项目旨在开发一个贷款审批预测模型,以帮助银行更高效地评估贷款申请,并降低坏账率。

  2. 数据收集与清洗: 数据集包括贷款申请人的个人信息、财务信息等。在收集数据后,进行数据清洗工作,处理缺失值和异常值。

  3. 特征工程: 对数据进行特征工程处理,包括特征选择、特征变换等,以提取对预测目标最有影响的特征。

  4. 模型选择与训练: 选择合适的机器学习模型,如逻辑回归、随机森林等,进行模型训练,并通过交叉验证进行参数调优。

  5. 模型评估与调优: 使用评价指标如准确率、精确率、召回率、F1值等对模型进行评估,根据评估结果进行模型调优。

  6. 部署与监控: 将训练好的模型部署至实际环境中,与银行的贷款系统进行集成,并建立监控机制,定期检查模型性能。

  7. 结果展示与总结: 展示模型的预测结果,对模型的准确性和稳定性进行总结,并提出后续优化建议和改进方向。

通过以上步骤,银行可以借助贷款审批预测模型提升审批效率,降低风险,提高客户体验。Toby老师利用Property Loan数据集为大家演示了一下大致流程。以后有时间再继续优化丰富此文章。

版权声明:文章来自公众号(python风控模型),未经许可,不得抄袭。遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

隔离级别-隔离级别中的锁协议、隔离级别类型、隔离级别的设置、隔离级别应用

一、引言 1、DBMS除了采用严格的两阶段封锁协议来保证并发事务的可串行化,实现事务的隔离性,也可允许用户选择一个可以保证应用程序正确执行并且能够使并发度最大的隔离性等级 2、通常用隔离级别来描述隔离性等级,以下将主要介绍ANSI 92标准…

LaTeX教程(014)-LaTeX文档结构(14)

LaTeX教程(014)- LaTeX \LaTeX LATE​X文档结构(14) 2.3.3 multitoc - 将目录设置为多栏 multitoc包的使用方法相当简单,只需要调用这个包,并将要设置为多栏(默认是双栏)的目录指定到包选项中即可。如\usepackage[toc]{multitoc},设置的就是…

GIT 使用相关技巧记录

目录 1、commit 用户信息变更 全局用户信息(没有特殊配置的情况下默认直接用全局信息) 特定仓库用户信息(只针对于当前项目) 方法一:修改config文件 方法二:命令方式 2、idea同一代码推向多个远端仓库…

如何在应用运行时定期监控内存使用情况

如何在应用运行时定期监控内存使用情况 在 iOS 应用开发中,实时监控内存使用情况对于优化性能和排查内存泄漏等问题非常重要。本文将介绍如何在应用运行时定期监控内存使用情况,使用 Swift 编写代码并结合必要的工具和库。 1. 创建桥接头文件 首先&…

k8s 部署 springboot 项目内存持续增长问题分析解决

写在前面 工作中遇到,请教公司前辈解决,简单整理记忆博文内容涉及一次 GC 问题的分析以及解决理解不足小伙伴帮忙指正 😃,生活加油 99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完…

STM32-USART

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. 串口通信协议1.1 通信接口1.2 串口通信1.3 硬件电路1.4 电平标准1.5 串口参数及时序1.6 串口时序 2. USART串口通信2.1 USART简介2.2 USART框图2.3 USART基本结构2.4 数据帧2.5 数据帧-配置停止位2.6 起始位侦测2.…

大连外贸建站公司wordpress主题模板

Robonaut萝卜纳特WP外贸站模板 适合用于工业机器人公司出口做外贸搭建公司官方网站使用的WordPress模板。 https://www.jianzhanpress.com/?p7091 优衣裳WordPress外贸建站模板 简洁的wordpress外贸独立站模板,适合服装、衣服、制衣外贸公司搭建公司官方网站使用…

ByteTrack论文阅读笔记

目录 ByteTrack: Multi-Object Tracking by Associating Every Detection Box摘要INTRODUCTION — 简介BYTE算法BYTE算法用Python代码实现实验评测指标轻量模型的跟踪性能 总结SORT算法简介ByteTrack算法和SORT算法的区别 ByteTrack: Multi-Object Tracking by Associating Eve…

location匹配和rewrite重定向

目录 location 匹配 location匹配的分类和优先级 优先级细分 实际网站中的使用规则 1.用精确匹配来实现网站的首页 访问网站的首页 ( /) 2.用正则匹配来实现静态请求的页面和图片 匹配静态页面 访问图片或者指定的后缀名 3.用一般匹配转发.php…

【qt】TCP的监听 (设置服务器IP地址和端口号)

TCP监听是在自己的IP地址上进行的。 当一个TCP服务器程序启动时,它会绑定到一个特定的IP地址和一个端口号上,以便可以接收来自该IP地址和端口号的传入连接请求. 所以我们要先来获取主机的IP地址和设置端口号. 注意: 服务器程序无法任意设置IP地址&…

数据结构学生信息顺序表

主程序 #include "fun.h" int main(int argc, const char *argv[]) { seq_p Screate_seq(); stu data; printf("请问要输入几个学生的数据:"); int n; scanf("%d",&n); while(n--) { prin…

cloudflare tunnels tcp

这里是官网的说明Cloudflare Tunnel Cloudflare Zero Trust docs 根据实际情况安装环境 tunnels除了http,https协议是直接暴露公网,tcp是类似ssh端口转发。 在需要内网穿透的局域网找一条机子部署代理 我这边是window cloudflared tunnel login #生成一个身份校…

防火墙概述

1、防火墙 防火墙顾名思义就是防止火灾发生时,火势烧到其它区域,使用由防火材料砌的墙。在网络安全中,防火墙的作用就是保护本地网络不受到外部网络或恶意程序的伤害。 防火墙的核心任务是控制和防护,即通过安全策略识别流量并做…

【周末闲谈】AI“抢饭碗”?绝对不是危言耸听

AI是在帮助开发者还是取代他们? 在软件开发领域,生成式人工智能(AIGC)正在改变开发者的工作方式。无论是代码生成、错误检测还是自动化测试,AI工具正在成为开发者的得力助手。然而,这也引发了对开发者职业前景和技能需求变化的讨论。AI究竟是在帮助开发者还是取代他们?…

【论文阅读】-- Visual Analytics for Model Selection in Time Series Analysis

时间序列分析中模型选择的可视化分析 摘要1 引言2 相关工作3 问题表征3.1 Box-Jenkins 方法论3.2 ARIMA 和季节性 ARIMA 模型3.3 模型规范3.4 模型拟合3.5 模型诊断 4 需求分析5 VA 用于时间序列分析中的模型选择5.1 VA选型流程说明5.2 TiMoVA 原型5.2.1 实施选择5.2.2 图形用户…

【JavaSE复习】数据结构、集合

JavaSE 复习 1.数据结构1.1 查找1.1.1 基本查找1.1.2 二分查找1.1.3 插值查找1.1.4 斐波那契查找1.1.5 分块查找1.1.6 分块查找的扩展(无规律数据) 1.2 排序1.2.1 冒泡排序1.2.2 选择排序1.2.3 插入排序1.2.4 快速排序 2. 集合2.1 基础集合2.1.1 集合和数…

MyBatis中二级缓存的配置与实现原理

大家好,我是王有志,一个分享硬核 Java 技术的金融摸鱼侠,欢迎大家加入 Java 人自己的交流群“共同富裕的 Java 人”。 上一篇文章《MyBatis中一级缓存的配置与实现原理》中,我们已经掌握了 MyBatis 一级缓存的配置(虽然…

使用AOP思想实现开闭原则下的流水日志输出

主要实现思想: 通过实现Convert接口来抽取公共组件,获取想要的标准模型。 现在有两个订单场景,一个保存订单,一个为更新订单。构造如下的服务类: import org.springframework.stereotype.Service;Service public clas…

pwm 呼吸灯(如果灯一直亮或者一直灭)

(这个文章收藏在我的csdn keil文件夹下面) 如果这样设置预分频和计数周期,那么算出来的pwm频率如下 人眼看起来就只能是一直亮或者灭,因为pwm的频率太高了,但是必须是频率够高,才能实现呼吸灯的缓慢亮缓慢…

Django之项目开发(一)

一、项目的生命周期介绍 传统Web 项目的生命周期指的是从开始构建一个网站到该网站完成并维护的整个过程。通常情况下,Web 项目的生命周期包括以下几个阶段 需求分析阶段:在这个阶段,项目组会与客户进行沟通,确定网站的功能、内容和设计。 主要由产品经理参与产出思路与方案…