Bagging算法预测银行客户流失率

news2024/9/30 19:26:07

Bagging算法预测银行客户流失率

描述

为了防止银行的客户流失,通过数据分析,识别并可视化哪些因素导致了客户流失,并通过建立一个预测模型,识别客户是否会流失,流失的概率有多大。以便银行的客户服务部门更加有针对性的去挽留这些流失的客户。

本任务的实践内容包括:

1、学习并熟悉Bagging算法原理。

2、使用决策树的聚合,创建预测银行客户流失率模型,并训练评估。

源码下载

环境

  • 操作系统:Windows 10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    scikit-learn	1.0.2
    numpy           1.19.3
    pandas          1.3.5
    

分析

本任务涉及以下环节:

A)熟悉Bagging算法原理

B)加载并观察银行客户

C)创建决策树模型,进行训练,评估其准确率和F1分数

D)使用决策树聚合模型,进行训练,评估其准确率和F1分数

E)对比分析使用单个决策树和决策树聚合算法的模型效果

实施

1、Bagging(套袋法)原理

通过自助采样的方法生成众多并行的分类器,通过少数服从多数的原则确定最终结果。从同一样本、同一指标集里抽样,每次抽样都生成一棵简单树,可以并行建立。

典型算法:随机森林

随机森林基于bagging思想,解决决策树泛化的问题,决策树是一棵树,只有一个决策权,随机森林是多棵树,每棵树都有一个决策权,这样把所有树的结果综合起来,这样的分类能力,自然比单棵树的结果好。所以随机森林是基于这样的思想去分类的。随机森林的随机主要体现在两个方面,一个是随机选取样本,一个是随机选取特征。随机森林是根据特征构造多棵决策树,那每棵树是怎么构造的呢?它从训练样本中随机选取固定数量的样本集,然后随机选取固定数量的特征,来构造决策树,相当于样本集和特征集都是总样本和总特征中的子集。而且这个随机选取是有放回地抽取过程。这样每个决策树都有一个分类结果,根据少数服从多数的原则,得到最后的结果。这就是随机森林算法的核心内容。

请添加图片描述

2、加载分析银行客户数据集

import numpy as np # 基础线性代数扩展包
import pandas as pd # 数据处理工具箱
df_bank = pd.read_csv("../dataset/BankCustomer.csv") # 读取文件
df_bank.head() # 显示文件前5行

结果如下:

请添加图片描述

数据集特征说明:

  • name:客户姓名

  • Gender:客户性别

  • Age:客户年龄

  • City:城市

  • Tenure:用户时长

  • ProductsNo:使用产品数量

  • HasCard:是否拥有信用卡

  • ActiveMember:是否为活跃会员

  • Credit:信用评分

  • AccountBal:账户余额

  • Salary:薪资

  • Exited(标签):是否流失,1代表流失,0代表没有流失

3、数据处理

将二元数据文本化,创建数据集。

# 把二元类别文本数字化
df_bank['Gender'].replace("Female",0,inplace = True)
df_bank['Gender'].replace("Male",1,inplace=True)

# 显示数字类别
print("Gender unique values",df_bank['Gender'].unique())

# 把多元类别转换成多个二元哑变量,然后贴回原始数据集
d_city = pd.get_dummies(df_bank['City'], prefix = "City")
df_bank = [df_bank, d_city]
df_bank = pd.concat(df_bank, axis = 1)

# 构建特征和标签集合
y = df_bank['Exited']
X = df_bank.drop(['Name', 'Exited', 'City'], axis=1)
X.head() #显示新的特征集

结果如下:

请添加图片描述

4、拆分数据集

使用sklearn.model_selection.train_test_split()方法将数据集划分为训练集和测试集。

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)

5、创建模型,训练并评估准确率

创建单棵决策树模型和多棵决策树聚合模型,用相同的数据集进行训练和预测,比较两种模型的准确率。

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import (accuracy_score, f1_score, confusion_matrix)

dt = DecisionTreeClassifier()  # 只使用一棵决策树
dt.fit(X_train, y_train)  # 拟合模型
y_pred = dt.predict(X_test)  # 进行预测
print("决策树测试准确率: {:.2f}%".format(dt.score(X_test, y_test) * 100))
print("决策树测试F1分数: {:.2f}%".format(f1_score(y_test, y_pred) * 100))


bdt = BaggingClassifier(DecisionTreeClassifier())  # 树的Bagging
bdt.fit(X_train, y_train)  # 拟合模型
y_pred = bdt.predict(X_test)  # 进行预测
print("决策树Bagging测试准确率: {:.2f}%".format(bdt.score(X_test, y_test) * 100))
print("决策树Bagging测试F1分数: {:.2f}%".format(f1_score(y_test, y_pred) * 100))

结果如下:

决策树测试准确率: 79.20%
决策树测试F1分数: 50.71%
决策树Bagging测试准确率: 85.20%
决策树Bagging测试F1分数: 56.98%

在这里比较了只使用一棵决策树和经过Bagging之后的树这两种算法的预测效果,可以看到决策树Bagging的准确率及F1分数明显占优势。当然,因为Bagging过程的随机性,每次测试的分数都稍有不同。

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

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

相关文章

【CSS】使用 CSS 实现三角形 ( 宽高设置为 0 | 设置四个边框宽度 / 样式 / 颜色值 | 兼容低版本浏览器 | 基本示例 | 对话框示例 )

文章目录一、使用 CSS 实现三角形二、使用 CSS 实现三角形代码示例三、使用 CSS 实现 对话框 代码示例一、使用 CSS 实现三角形 使用 CSS 实现三角形步骤 : 首先 , 宽度 / 高度 设置为 0 ; /* 宽高设置为 0 像素 */width: 0;height: 0;然后 , 设置 4 个边框 , 每个边框都要设置…

【软考备战·希赛网每日一练】2023年4月14日

文章目录一、今日成绩二、错题总结第一题第二题第三题第四题三、知识查缺题目及解析来源:2023年04月14日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 具有 最优子结构 特点的问题可以使用 动态规划法 进行求解。计算m数组中每项的值&am…

日撸 Java 三百行day28-30

文章目录说明day28-30 Huffman 编码 (节点定义与文件读取)1.建树过程(以图为例)2.哈夫曼树特点3.分析代码过程3.1 抽象成员变量3.2结合文章梳理思路1.读文本2.解析文本内容:3.建树4.生成哈夫曼编码5.编码6.解码4.其他4.1 java 类型强转4.2 ja…

网络安全相关的知识

一、 什么是IDS? IDS是英文"Intrusion Detection Systems"的缩写,中文意思是"入侵检测系统"。专业上讲就是依照一定的安全策略,通过软、硬件,对网络、系统的运行状况进行监视,尽可能发现各种攻击…

TexMaker(Latex编辑器)软件的“文献引用”操作:Xelatex方式运行的操作方法

一、说明 1. 针对问题 本文主要讲解使用TexMaker进行**.bib的方法**的文献引用时,如何使用Xelatexpdf的方式完成文献引用。某些文章强调使用PDFlatex进行编译,但有时候会因为论文模板不同,无法运行padflatexPDF。所以,这里给出xe…

常用模块和模板引擎

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

Android---导致OOM的常见原因

目录 内存溢出OOM 单应用可用的最大内存 导致 OOM 的常见原因 内存实时监控 内存溢出OOM 单应用可用的最大内存 dalvik.vm.heapstartsize,它表示堆分配的初始大小。 dalvik.vm.heapgrowthlimit,它表示单个进程内存限定值。 dalvik.vm.heapsize&#…

LeetCode每日一题 1023. 驼峰式匹配 --双指针

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

Vue UI组件库(Element UI库)

1 移动端常用 UI 组件库 1. Vant Vant 4 - 轻量、可定制的移动端组件库 (vant-ui.github.io) 2. Cube UI cube-ui Document (didi.github.io) 3. Mint UI Mint UI (mint-ui.github.io) 2.PC 端常用 UI 组件库 1.Element UI Element - 网站快速成型工具 2.IView UI iView / Vi…

SpringBoot集成WebSocket实现及时通讯聊天功能!!!

1&#xff1a;在SpringBoot的pom.xml文件里添加依赖: <!-- websocket --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 2&#xff1a;在配置中…

C++简单工厂模式

目录 什么是简单工厂模式 简单工厂模式的实现 总结 什么是简单工厂模式 简单工厂模式是一种创建型设计模式&#xff0c;它提供了一种创建对象的最佳方式。在软件开发中&#xff0c;我们经常需要创建各种各样的对象&#xff0c;但是直接使用 new 关键字来创建对象会使代码变得…

Node http模块

文章目录Node http模块概述创建http服务获取请求报文练习搭建http服务url模块解析url操作url设置响应报文练习搭建网页Node http模块 概述 http模块提供了创建 HTTP 服务器和客户端的功能。 创建http服务 // 导入http模块 const http require("http");// 创建服…

React | React的JSX语法

✨ 个人主页&#xff1a;CoderHing &#x1f5a5;️ Node.js专栏&#xff1a;Node.js 初级知识 &#x1f64b;‍♂️ 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; &#x1f4ab; 系列专栏&#xff1a;吊打面试官系列 16天学会Vue 11天学会React Node专栏 &#…

商医通项目总结

一、项目概述 简介 尚医通即为网上预约挂号系统&#xff0c;网上预约挂号是近年开展的一项便民就医服务&#xff0c;旨在缓解看病难、挂号难的就医难题。网上预约挂号全面提供的预约挂号业务从根本上解决了这一就医难题。随时随地轻松挂号&#xff0c;不用排长队 微服务项目…

【数据结构】-归并排序你真正学会了吗??

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee&#xff1a;gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; 文章目录前言一、递归版本二、非递归版本三、总结前言 今天我们再来将一个…

亮剑「驾舱」产品矩阵,百度要做智能化「卷王」

2023年&#xff0c;汽车智能化开启新一轮加速度。 伴随着汽车行业变革从“电动化”的上半场进入“智能化”的下半场&#xff0c;中国正成为智能驾驶技术领域的引领者和汽车智能化的核心战场。 据高工智能汽车研究院发布的《2023-2025年中国智能汽车产业链市场数据预测报告》预…

用机器学习sklearn+opencv-python过计算型验证码

目录 生成计算型验证码图片 用opencv-python处理图片 制作训练数据集 训练模型 识别验证码 总结与提高 源码下载 在本节我们将使用sklearn和opencv-python这两个库过掉计算型验证码&#xff0c;图片示例如下。 生成计算型验证码图片 要识别验证码&#xff0c;我们就需要…

【计算机图形学】裁剪算法(Cohen-Sutherland算法 中值分割算法 Liang-Barsky算法)

一 实验目的 编写直线段、多边形裁剪算法熟悉Cohen-Sutherland算法、中值分割算法和Liang-Barsky算法的裁剪二 实验算法理论分析Cohen-Sutherland算法&#xff1a; 中值分割算法&#xff1a; 与CS算法一样&#xff0c;首先对直线段端点进行编码&#xff0c;并把线段与窗口的关…

java创建线程的方法

线程是程序的一种操作单元&#xff0c;在程序中&#xff0c;一个线程和另一个线程是同时存在的。它是一个程序的一部分&#xff0c;但是他又是独立的&#xff0c;它不会影响到另一个线程的执行。但是多个线程同时运行时&#xff0c;会对系统资源造成一定的消耗。 线程之间的竞争…

[Linux] 基础IO

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【LINUX】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文…