用 Python 算法预测银行客户行为实战案例

news2024/12/26 20:54:31

这是一份kaggle上的银行的数据集,研究该数据集可以预测客户是否认购定期存款y。这里包含20个特征。

1. 分析框架

图片

2. 数据读取,数据清洗

# 导入相关包
import numpy as np
import pandas as pd 
# 读取数据
data = pd.read_csv('./1bank-additional-full.csv')
# 查看表的行列数
data.shape

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

相关文件及代码都已上传,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:dkl88194,备注:来自CSDN + 加群
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

输出:

图片
图片

这里只有nr.employed这列有丢失数据,查看下:

data['nr.employed'].value_counts()

图片

这里只有5191.0这个值,没有其他的,且只有7763条数据,这里直接将这列当做异常值,直接将这列直接删除了。

# data.drop('nr.employed', axis=1, inplace=True)

3. 探索性数据分析

3.1查看各年龄段的人数的分布

这里可以看出该银行的主要用户主要集中在23-60岁这个年龄层,其中29-39这个年龄段的人数相对其他年龄段多。

import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.figure(figsize=(20, 8), dpi=256)
sns.countplot(x='age', data=data)
plt.title("各年龄段的人数")

图片

3.2 其他特征的一些分布

plt.figure(figsize=(18, 16), dpi=512)
plt.subplot(221)
sns.countplot(x='contact', data=data)
plt.title("contact分布情况")

plt.subplot(222)
sns.countplot(x='day_of_week', data=data)
plt.title("day_of_week分布情况")

plt.subplot(223)
sns.countplot(x='default', data=data)
plt.title("default分布情况")

plt.subplot(224)
sns.countplot(x='education', data=data)
plt.xticks(rotation=70)
plt.title("education分布情况")

plt.savefig('./1.png')

图片

plt.figure(figsize=(18, 16), dpi=512)
plt.subplot(221)
sns.countplot(x='housing', data=data)
plt.title("housing分布情况")

plt.subplot(222)
sns.countplot(x='job', data=data)
plt.xticks(rotation=70)
plt.title("job分布情况")

plt.subplot(223)
sns.countplot(x='loan', data=data)
plt.title("loan分布情况")

plt.subplot(224)
sns.countplot(x='marital', data=data)
plt.xticks(rotation=70)
plt.title("marital分布情况")

plt.savefig('./2.png')

图片

plt.figure(figsize=(18, 8), dpi=512)
plt.subplot(221)
sns.countplot(x='month', data=data)
plt.xticks(rotation=30)

plt.subplot(222)
sns.countplot(x='poutcome', data=data)
plt.xticks(rotation=30)
plt.savefig('./3.png')

图片

3.3 各特征的相关性

plt.figure(figsize=(10, 8), dpi=256)
plt.rcParams['axes.unicode_minus'] = False
sns.heatmap(data.corr(), annot=True)
plt.savefig('./4.png')

图片

4. 特征规范化

4.1 将自变量的特征值转换成标签类型

# 特征化数据
from sklearn.preprocessing import LabelEncoder
features = ['contact', 'day_of_week', 'default', 'education', 'housing',
           'job','loan', 'marital', 'month', 'poutcome']

le_x = LabelEncoder()
for feature in features:
    data[feature] = le_x.fit_transform(data[feature]) 

4.2 将结果y值转换成0、1

def parse_y(x):
    if (x == 'no'):
        return 0
    else:
        return 1
data['y'] = data['y'].apply(parse_y)
data['y'] = data['y'].astype(int)

4.3 数据规范化

# 数据规范化到正态分布的数据
# 测试数据和训练数据的分割
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
ss = StandardScaler()
train_x, test_x, train_y, test_y = train_test_split(data.iloc[:,:-1], 
                                                   data['y'], 
                                                   test_size=0.3)
train_x = ss.fit_transform(train_x)
test_x = ss.transform(test_x)

5. 模型训练

5.1 AdaBoost分类器

from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score
ada = AdaBoostClassifier()
ada.fit(train_x, train_y)
predict_y = ada.predict(test_x)
print("准确率:", accuracy_score(test_y, predict_y))

图片

5.2 SVC分类器

from sklearn.svm import SVC
svc = SVC()
svc.fit(train_x, train_y)
predict_y = svc.predict(test_x)
print("准确率:", accuracy_score(test_y, predict_y))

图片

5.3 K邻近值分类器

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(train_x, train_y)
predict_y = knn.predict(test_x)
print("准确率:", accuracy_score(test_y, predict_y))

图片

5.4 决策树分类器

from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier()
dtc.fit(train_x, train_y)
predict_y = dtc.predict(test_x)
print("准确率:", accuracy_score(test_y, predict_y))

图片

6 模型评价

6.1 AdaBoost分类器

from sklearn.metrics import roc_curve
from sklearn.metrics import auc
plt.figure(figsize=(8,6))
fpr1, tpr1, threshoulds1 = roc_curve(test_y, ada.predict(test_x))
plt.stackplot(fpr1, tpr1,color='steelblue', alpha = 0.5, edgecolor = 'black')
plt.plot(fpr1, tpr1, linewidth=2, color='black')
plt.plot([0,1], [0,1], ls='-', color='red')
plt.text(0.5, 0.4, auc(fpr1, tpr1))
plt.title('AdaBoost分类器的ROC曲线')

图片

6.2 SVC分类器

plt.figure(figsize=(8,6))
fpr2, tpr2, threshoulds2 = roc_curve(test_y, svc.predict(test_x))
plt.stackplot(fpr2, tpr2, alpha = 0.5)
plt.plot(fpr2, tpr2, linewidth=2, color='black')
plt.plot([0,1], [0,1],ls='-', color='red')
plt.text(0.5, 0.4, auc(fpr2, tpr2))
plt.title('SVD的ROC曲线')

图片

6.3 K邻近值分类器

plt.figure(figsize=(8,6))
fpr3, tpr3, threshoulds3 = roc_curve(test_y, knn.predict(test_x))
plt.stackplot(fpr3, tpr3, alpha = 0.5)
plt.plot(fpr3, tpr3, linewidth=2, color='black')
plt.plot([0,1], [0,1],ls='-', color='red')
plt.text(0.5, 0.4, auc(fpr3, tpr3))
plt.title('K邻近值的ROC曲线')

图片

6.4 决策树分类器

plt.figure(figsize=(8,6))
fpr4, tpr4, threshoulds4 = roc_curve(test_y, dtc.predict(test_x))
plt.stackplot(fpr4, tpr4, alpha = 0.5)
plt.plot(fpr4, tpr4, linewidth=2, color='black')
plt.plot([0,1], [0,1],ls='-', color='red')
plt.text(0.5, 0.4, auc(fpr4, tpr4))
plt.title('决策树的ROC曲线')

图片

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

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

相关文章

谈谈通信工程专业

目录 1.什么是通信工程 2.通信工程学什么 3.通信工程就业方向 4.通信工程发展前景 1.什么是通信工程 通信工程是一门工程学科,它涉及到设计、建设和管理通信系统以及相关设备和技术的应用。通信工程主要关注的是信息的传输、交换和处理,旨在实现可靠…

vue初始化没反应可以换个位置

本来 这个 在最后初始化没反应 ,换到 中间就可以了 created() {this.model Object.assign({}, {});this.loadTreeData();this.initColumnsSetting()},

Postman返回了一个html页面

问题记录 调用公司的测试环境接口,从浏览器控制台接口处cCopy as cURL(cmd),获取完整的请求内容,然后导入postman发起请求 提测时发现返回一个html页面,明显是被请求在网管处被拦截了,网关返回的这个报错html页面 …

第18集丨Vue脚手架的默认配置

目录 一、查看默认配置1.1 在此系统中禁止执行脚本1.2 错误解决方案1.3 执行成功生成的配置项 二、关闭语法检查 一、查看默认配置 Vue脚手架隐藏了所有 webpack 相关的配置,若想查看具体的 webpak 配置,请执行:vue inspect > output.js …

基于javaweb的社区疫情防控系统

摘 要 随着当今网络的发展,时代的进步,各行各业也在发生着变化,于是网络已经逐步进入人们的生活,给我们生活或者工作提供了新的方向新的可能。 本毕业设计的内容是设计实现一个springboot框架的社区疫情防控系统。它是以java语…

使用 HTML、CSS 和 JavaScript 创建实时 Web 编辑器

使用 HTML、CSS 和 JavaScript 创建实时 Web 编辑器 在本文中,我们将创建一个实时网页编辑器。这是一个 Web 应用程序,允许我们在网页上编写 HTML、CSS 和 JavaScript 代码并实时查看结果。这是学习 Web 开发和测试代码片段的绝佳工具。我们将使用ifram…

第十五章:联邦学习攻防实战

代码 联邦学习的后门攻击案例 联邦学习的模型压缩案例 联邦学习的差分隐私案例 联邦学习的同态加密案例 联邦学习的参数稀疏化案例

../../ 目录遍历

在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。 在这个过程中,如果后…

无涯教程-PHP - Cookies

Cookies是存储在客户端计算机上的文本文件。 识别用户涉及三个步骤- 服务器脚本将一组cookie发送到浏览器。如姓名,年龄或身份证等。浏览器将此信息存储在本地计算机上,以备将来使用。下次浏览器向Web服务器发送任何请求时,它将向服务器发送…

网盘传文件限速严重,来试试ssh内网穿透创建的公网到本地http服务器吧

title: 网盘传文件限速严重,来试试ssh内网穿透创建的公网到本地http服务器吧 如果你被国内某度网盘的火星传输速度折磨,可以搞一个固定IP的服务器,传输文件会变得简单,通过ssh转发,我们可以让接受者通过浏览器直接下载…

C++ string模拟实现

目录 模拟实现string的结构接口函数的实现构造函数和析构函数迭代器的实现operator[]reserve和resize三种尾插函数insertfinderasesubstr赋值重载拷贝构造比较大小流提取,流插入 完整代码 模拟实现string的结构 前面我们知道了string的结构比较复杂,这里…

将 Pandas 换为交互式表格的 Python 库

Pandas是我们日常处理表格数据最常用的包,但是对于数据分析来说,Pandas的DataFrame还不够直观,所以今天我们将介绍4个Python包,可以将Pandas的DataFrame转换交互式表格,让我们可以直接在上面进行数据分析的操作。 Piv…

阿里云ECS服务器安装PostgreSQL

1. 概述 PostgreSQL是一个功能强大的开源数据库,它支持丰富的数据类型和自定义类型,其提供了丰富的接口,可以自行扩展其功能,支持使用流行的编程语言编写自定义函数 PostgreSQL数据库有如下优势: PostgreSQL数据库时…

浅尝OpenResty

文章目录 1. 写在前面2. 下载安装openresty2.1 下载Openresty2.2 设置nginx启动 3. 嵌入lua脚本4. 实践5. 小结 1. 写在前面 当一个域名中衍生出多个服务的时候,如果想要保持对外服务始终是一个域名,则需要通过nginx反向代理来实现。如果在转发的时候需…

Pixar、Adobe 和苹果等成立 OpenUSD 联盟推行 3D 内容开放标准

导读Pixar、Adobe、Apple、Autodesk 与 NVIDIA 联手 Linux 基金会旗下的联合开发基金会(JDF)宣布建立 OpenUSD 联盟(AOUSD)以推行 Pixar 创建的通用场景描述技术的标准化、开发、进化和发展。 联盟寻求通过推进开放式通用场景描述…

[附源码]计算机毕业设计-JAVA火车票订票管理系统-springboot-论-文-ppt

PPT论文 文章目录 前言一、主要技术javaMysql数据库JSP技术 二、系统设计三、功能截图总结 前言 本论文主要论述了如何使用JAVA语言开发一个火车订票管理系统 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想…

走嵌入式还是纯软件?学长告诉你怎么选

最近有不少理工科的本科生问我,未来是走嵌入式还是纯软件好,究竟什么样的同学适合学习嵌入式呢?在这里我整合一下给他们的回答,根据自己的经验提供一些建议。 嵌入式领域也可以分为单片机方向、Linux方向和安卓方向。如果你的专业…

魏副业而战:闲鱼卖货怎么取得更大的成就

我是魏哥,与其躺平,不如魏副业而战! 社群成员小H又办证了,他想干什么? 这是他办了的第3个证了,这就意味这他有9家闲鱼店铺了。 之前有跟他聊过闲鱼卖货,想要在闲鱼上取得更大的成就&#xff…

【zabbix企业级监控】

目录 Zabbix Zabbix特点 实验环境准备 Server端 agent端 server端 配置阿里云yum源 启动LAMP对应服务 准备java环境 源码安装zabbix Mariadb数据库授权 创建zabbix程序用户并授权防止权限报错 修改zabbix配置文件 配置php与apache web安装zabbix Zabbix页面优化…

YOLOv8+BoT-SORT多目标跟踪(行人车辆计数与越界识别)

课程链接:https://edu.csdn.net/course/detail/38919 BoT-SORT是发表于2022年的先进的多目标跟踪算法,它结合了运动和外观信息、相机运动补偿和更准确的卡尔曼滤波状态向量,并把这些改进集成到ByteTrack,从而在MOTA、IDF1和HOTA性…