决策树系列目录(文末有惊喜彩蛋!):
决策树①——信息熵&信息增益&基尼系数
决策树②——决策树算法原理(ID3,C4.5,CART)
决策树③——决策树参数介绍(分类和回归)
决策树④——决策树Sklearn调参(GridSearchCV调参及过程做图)
决策树⑤——Python代码实现决策树
决策树应用实例①——泰坦尼克号分类
决策树应用实例②——用户流失预测模型
决策树应用实例④——淘宝&京东白条金额(回归&均方差&随机森林)


银行借贷是基于分析历史按时还款、逾期或不还的用户群体的各自特征建立模型,未来借款用户只要符合符合借款要求,就给予借贷,如果不符合,则拒绝。

本文将根据自建的一份包含借款人信息及银行是否借贷的数据集,创建一棵决策树,并进行预测。

一、数据集

文末有下载方式,方便您实操一遍

二、字段介绍

name_id: 姓名
profession: 职业,1-企业工作者,2-个体经营户,3-自由工作者,4-事业单位,5-体力劳动者
education: 教育程度,1-博士及以上,2-硕士,3-本科,4-专科,5-高中及以下
house_loan: 是否有房贷,1-有,0-没有
car_loan:是否有车贷,1-有,0-没有
married: 是否结婚,1-是,0-否
child:是否有小孩,1-有,0-没有
revenue:月收入
approve:是否予以贷款,1-贷款,2-不贷款

三、导入数据

# 导入库
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import metrics
from IPython.display import Image
import pydotplus
from sklearn import tree
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import GridSearchCV# 导入数据
data = pd.read_csv('loan_data.txt',sep='\s+',encoding='utf-8',index_col='nameid')
print(data)
x = data.drop(['approve'],axis=1).values
print(x)
y = data['approve'].values
print(x.shape,y.shape)

四、划分训练集、验证集和测试集

# 划分训练集和测试集
x1 = x[:900]
y1 = y[:900]
x2 = x[900:]
y2 = y[900:]# 在训练集中再划分出训练集和验证集
x_train,x_test,y_train,y_test = train_test_split(x1,y1,test_size=0.2)

五、建立模型

# 生成决策树
clf = DecisionTreeClassifier()
clf.fit(x_train,y_train)
y_pred = clf.predict(x_test)
print('训练集评分:', clf.score(x_train,y_train))
print('验证集评分:', clf.score(x_test,y_test))
print('测试集评分', clf.score(x2,y2))
print("查准率:", metrics.precision_score(y_test,y_pred))
print('召回率:',metrics.recall_score(y_test,y_pred))
print('f1分数:', metrics.f1_score(y_test,y_pred))


训练集评分为1,验证集和测试集均偏低,说明模型已经过拟合了,再通过混淆矩阵及分类报告查看更细节的信息

# 混淆矩阵查看分类结果
print(confusion_matrix(y_true=y_test,y_pred=y_pred,labels=list(set(y))))
# 分类报告查看各类的评分
print(metrics.classification_report(y_test,y_pred,labels=list(set(y))))



可以看到FP和FN都非常高,三项评分也都较低。此时可以通过GridSearchCV进行调参,减少过拟合

param = {'max_depth': [5,10,20],'min_samples_leaf': np.arange(3,10,1),'min_impurity_split':np.linspace(0.1,0.6,10),}
clf = GridSearchCV(DecisionTreeClassifier(),param_grid=param,cv=8)
clf.fit(x_train,y_train)
print(clf.best_params_,clf.best_score_)


通过上述调参,获得最佳的参数为 max_depth=5,min_impurity_split=0.378,min_sample_leaf=3 ,带入模型拟合可得

clf = DecisionTreeClassifier(max_depth=5,min_samples_split=5,min_impurity_split=0.37)
clf.fit(x_train,y_train)
y_pred = clf.predict(x_test)
print('训练集评分:', clf.score(x_train,y_train))
print('验证集评分:', clf.score(x_test,y_test))
print('测试集评分', clf.score(x2,y2))
print("查准率:", metrics.precision_score(y_test,y_pred))
print('召回率:',metrics.recall_score(y_test,y_pred))
print('f1分数:', metrics.f1_score(y_test,y_pred))

 print(confusion_matrix(y_true=y_test,y_pred=y_pred,labels=list(set(y))))print(metrics.classification_report(y_test,y_pred,labels=list(set(y))))


各项评分有了很大的提升,说明调参后确实在一定程度上减少了过拟合,提高了模型的泛化能力,对决策树进行可视化

dot_data = tree.export_graphviz(clf, out_file=None,feature_names=data.columns[:-1],class_names=data.columns[-1],filled=True, rounded=True,special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("银行借贷模型.pdf")


可以看出,经过剪枝后决策树变得非常简单,逻辑很清晰

① 如果用户没有房贷,则给予贷款
② 如果用户有房贷,但没有车贷,且月收入在7970元以上,就给予贷款
③ 如果用户有房贷也有车贷,但是没有孩子,也给予贷款


本人互联网数据分析师,目前已出Excel,SQL,Pandas,Matplotlib,Seaborn,机器学习,统计学,个性推荐,关联算法,工作总结系列。


微信搜索并关注 " 数据小斑马" 公众号
1、回复“loan”就可以领取文中数据集
2、回复“数据分析”可以免费获取下方15本数据分析师必备学习书籍一套

决策树应用实例③——银行借贷模型相关推荐

  1. 决策树应用实例①——泰坦尼克号分类

    决策树系列目录(文末有大礼相送): 决策树①--信息熵&信息增益&基尼系数 决策树②--决策树算法原理(ID3,C4.5,CART) 决策树③--决策树参数介绍(分类和回归) 决策树④ ...

  2. 贝叶斯⑥——银行借贷模型(贝叶斯与决策树对比)

    贝叶斯机器学习系列: 贝叶斯①--贝叶斯原理篇(联合概率&条件概率&贝叶斯定理&拉普拉斯平滑) 贝叶斯②--贝叶斯3种分类模型及Sklearn使用(高斯&多项式& ...

  3. 机器学习应用篇(五)——决策树分类实例

    机器学习应用篇(五)--决策树分类实例 文章目录 机器学习应用篇(五)--决策树分类实例 一.数据集 二.实现过程 1 数据特征分析 2 利用决策树模型在二分类上进行训练和预测 3 利用决策树模型在多 ...

  4. 【图像分割模型】实例分割模型—DeepMask

    这是专栏<图像分割模型>的第11篇文章.在这里,我们将共同探索解决分割问题的主流网络结构和设计思想. 本文介绍了用于实例分割任务的模型结构--DeepMask. 作者 | 孙叔桥 编辑 | ...

  5. 线性插值改变图像尺寸_【图像分割模型】实例分割模型—DeepMask

    这是专栏<图像分割模型>的第11篇文章.在这里,我们将共同探索解决分割问题的主流网络结构和设计思想. 本文介绍了用于实例分割任务的模型结构--DeepMask. 作者 | 孙叔桥 编辑 | ...

  6. 在英特尔独立显卡上部署YOLOv5 v7.0版实时实例分割模型

    作者:贾志刚 英特尔物联网创新大使 目录 1.1 YOLOv5实时实例分割模型简介 1.2 英特尔®消费级锐炫™ A 系列显卡简介 1.3  在英特尔独立显卡上部署YOLOv5-seg模型的完整流程 ...

  7. pascal行人voc_在一个很小的Pascal VOC数据集上训练一个实例分割模型

    只使用1349张图像训练Mask-RCNN,有代码. 代码:https://github.com/kayoyin/tiny-inst-segmentation 介绍 计算机视觉的进步带来了许多有前途的 ...

  8. sklearn使用实践之对moons数据集进行决策树训练并优化模型

    对moons数据集进行决策树训练并优化模型 生成数据集 拆分数据集 使用带交叉验证的网格搜索寻找最优参数 用得到的最优参数评估模型对测试集的性能 生成数据集 拆分数据集 使用带交叉验证的网格搜索寻找最 ...

  9. 基于决策树的贷款审批模型

    基于决策树的贷款审批模型 一.背景描述 银行信贷业务是银行最基本.最重要的资产业务,通过发放银行贷款收回本金和利息,扣除成本后获得利润.银行为了获得更大的利润,对每一位顾客的信息进行分类,然后针对不同 ...

  10. 基于yolov7开发实践实例分割模型超详细教程

    在我前面的博文中写过基于yolov5-v7.0模型开发的实例分割模型的超详细教程,即使是零基础入门的新手也都是可以按照教程步骤一步一步开发构建自己的应用.文章在下面,感兴趣的话可以自行移步阅读即可: ...

最新文章

  1. BCH热门应用SLP发币系统逐渐走向成熟
  2. Aasp.net前台调用后台cs变量
  3. 中秋我用CSS写了个嫦娥奔月
  4. 输入10个整数,计算它们的平均值(输出保留1位小数)。
  5. 快速实现移动端短视频功能?没你想得那么难!
  6. 透明度百分比换算十六进制
  7. 核密度估计Kernel Density Estimation(KDE)-代码详细解释
  8. 只用一套解决方案,就可解决80%的交通物流行业信息难题
  9. QQ注册时间查询非常准确源码程序
  10. mysql count 排序_MySQL什么时候会使用内部临时表?
  11. 1423 poj Big Number 公式题
  12. php自定义表单程序,自定义流程gooflow2.0+自定义表单
  13. 完整的网络安全解决方案
  14. 贪心算法适用条件_贪心算法问题
  15. R语言使用ltm包计算cronbach‘s alpha(克朗巴哈系数法)实战:cronbach alpha(克朗巴哈系数法)是一种测量问卷或调查内部一致性的方法、cronbach‘s alpha解读
  16. Linux常用命令-详细1
  17. dr优先级默认_OSPF路由器不能成为DR/BDR唯一的方法:DR优先级=0
  18. redis简单分布式锁实现 超简单的那种
  19. Cadence创建异形焊盘教程(详细操作)
  20. JSX语法学习(三)

热门文章

  1. 优麒麟19.1安装HP扫描仪驱动
  2. Linux进程间通信-消息队列
  3. 基于Struts+Hibernate开发公文流转系统
  4. JVM内存结构(1.8)
  5. 第二代支付系统专题之报文篇(一)小额支付报文完整版(含二代新增功能业务说明)...
  6. CTF—古典密码(凯撒密码、维吉尼亚密码、培根密码等)
  7. drozer报错解决
  8. 获取微信所有聊天记录数据并通过Python制作词云图
  9. Android中热更新实现--Sophix方案
  10. 系统架构设计笔记(30)—— 可行性研究与效益分析