银行信用卡流失预测模型_基于ANN神经网络_金融培训_论文科研_毕业设计

news2024/11/23 19:55:02

业务背景

根据央行公布的数据显示,全国性银行信用卡和借贷合一卡的发卡量增速从2017年同比增速26.35%的高点逐年下降,截至2020年同比增速降至4.26%。银行信用卡发卡增速明显放缓的背景下,预防老客户流失的问题变得愈发重要。

假设一家消费信用卡银行的业务经理正面临客户流失的问题。经理希望分析数据,找出背后的原因,并利用这些数据来预测可能会流失的客户。经理还试图找到流失客户的主要特征,提出降低客户流失的建议。

描述性统计

在这个项目中,我们将建立一个预测信用卡流失的人工神经网络模型。

此业务问题的首要任务是确定正在流失的客户。

即使我们将非流失客户预测为流失,也不会损害我们的业务。

但是,将流失客户预测为非流失客户就可以了。

所以召回率(TP/TP+FN)需要更高。

该数据集由 10,000 个客户(条目)组成,

他们提到了他们的年龄、薪水、婚姻状况、信用卡限额、信用卡类别等。

因此,这 19 个属性(特征)将是我们对神经网络的输入。

下图为变量相关性分析

下图为变量的直方图可视化

这是对单变量一年合同总数的KDE绘图。

由于数据集具有多种格式的特征;主要是字符串和整数,它需要准备。

我们只有 16.07% 的客户放弃了信用卡服务。

因此,我们有一个不平衡的数据集。

为了处理这种不平衡,我们将为两类目标变量分配权重以使其平衡。

我们通过将特征列中的字符串变量替换为整数来为 ANN 准备数据集,

我们还删除了“CLIENTNUM”列,因为它不是会影响目标变量的特征。

#%% Importing Libraries
import matplotlib.pyplot as pltimport pandas as pdimport numpy as npimport seaborn as snsfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScaler, RobustScaler,MinMaxScalerfrom sklearn.metrics import accuracy_score,confusion_matrix,f1_score,matthews_corrcoef,precision_score,recall_scorefrom tensorflow.keras.layers import Densefrom tensorflow.keras.models import Sequentialfrom sklearn.utils import class_weight
#%% Loading the Dataset
df = pd.read_csv('C:/Users/Sahil Bagwe/Desktop/Python/dataset/Bank/BankChurners.csv')df = df.drop(df.columns[21:23],axis=1)df=df.drop('CLIENTNUM',axis=1)  
#%% Preparing the Dataset
df['Gender'].replace('M',1,inplace = True)df['Gender'].replace('F',0,inplace = True) df['Education_Level'].replace('Unknown',0,inplace = True)df['Education_Level'].replace('Uneducated',1,inplace = True)df['Education_Level'].replace('High School',2,inplace = True)df['Education_Level'].replace('College',3,inplace = True)df['Education_Level'].replace('Graduate',4,inplace = True)df['Education_Level'].replace('Post-Graduate',5,inplace = True)df['Education_Level'].replace('Doctorate',6,inplace = True)
df['Marital_Status'].replace('Unknown',0,inplace = True)df['Marital_Status'].replace('Single',1,inplace = True)df['Marital_Status'].replace('Married',2,inplace = True)df['Marital_Status'].replace('Divorced',3,inplace = True)
df['Card_Category'].replace('Blue',0,inplace = True)df['Card_Category'].replace('Gold',1,inplace = True)df['Card_Category'].replace('Silver',2,inplace = True)df['Card_Category'].replace('Platinum',3,inplace = True)

df['Income_Category'].replace('Unknown',0,inplace = True)df['Income_Category'].replace('Less than $40K',1,inplace = True)df['Income_Category'].replace('$40K - $60K',2,inplace = True)df['Income_Category'].replace('$60K - $80K',3,inplace = True)df['Income_Category'].replace('$80K - $120K',4,inplace = True)df['Income_Category'].replace('$120K +',5,inplace = True)
df['Attrition_Flag'].replace('Existing Customer',0,inplace = True)df['Attrition_Flag'].replace('Attrited Customer',1,inplace = True)

预处理数据集

我们通过将数据集拆分为特征矩阵(x)和目标变量(y)来开始这个阶段。由于数据的值变化很大,因此有必要对这些值进行缩放以标准化这些值的范围。Robust Scaler 移除中位数并根据分位数范围(默认为 IQR:Interquartile Range)缩放数据。IQR 是第一个四分位数(第 25 个分位数)和第三个四分位数(第 75 个分位数)之间的范围。

构建人工神经网络

由于数据集是不平衡的,我们需要为其分配类别权重。

这是通过计算流失客户与客户总数的比率来完成的。

接下来,我们构建一个 3 层神经网络。

输入层包含的神经元数量与特征矩阵中的列数相同。

输出层由一个预测输出的层组成,即 1 表示流失客户,0 表示现有客户。

隐藏层的神经元数通常是介于输入层和输出层神经元数之间的一个值。

将隐藏层中的神经元数取为输入层和输出层中神经元的平均值被认为是安全的。

#%% Assigning weights to classescw = class_weight.compute_class_weight('balanced', np.unique(Y_train), Y_train)a = y.value_counts()ratio = a[1]/(a[1]+a[0])weights = [ratio, 1-ratio]
#%% Building the Model
model = Sequential()model.add(Dense(19,activation="sigmoid"))model.add(Dense(10,activation="sigmoid"))model.add(Dense(1))model.compile(optimizer='rmsprop',loss = "binary_crossentropy",metrics=["BinaryAccuracy"],loss_weights=weights)

预测客户流失

由于数据集是不平衡的,我们需要为其分配类别权重。

这是通过计算流失客户与客户总数的比率来完成的。

接下来,我们构建一个 3 层神经网络。

输入层包含的神经元数量与特征矩阵中的列数相同。

输出层由一个预测输出的层组成,即 1 表示流失客户,0 表示现有客户。

隐藏层的神经元数通常是介于输入层和输出层神经元数之间的一个值。

将隐藏层中的神经元数取为输入层和输出层中神经元的平均值被认为是安全的。

#%% Predicting history = model.fit(x=X_train,y=Y_train,epochs=100, class_weight = {0:cw[0], 1:cw[1]})predictions = model.predict_classes(X_test)

通过模型验证,accuracy准确率达到0.89,召回率达到0.9,这是非常不错模型性能。

预测银行信用卡流失模型就为大家介绍到这里,《python金融风控评分卡模型和数据分析(加强版)》更多实战案例会定期更新,用于银行培训,大家扫一扫下面二维码,记得收藏课程。我们公司提供一对一机器学习模型定制服务,如果你需要建模项目定制服务,可留言。

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

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

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

相关文章

前端开发中有哪些鲜为人知的技巧?

下面分享一些前端开发鲜为人知的HTML/CSS/JS技巧&#xff0c;希望大家可以有所收获。 一、Datalist元素 不知道为什么&#xff0c;这个元素不太被人所使用。<datalist>标签被用于为<input>元素提供一个“自动补全”的功能。 例如&#xff1a; <input list&qu…

MMPose安装记录

参考&#xff1a;GitHub - open-mmlab/mmpose: OpenMMLab Pose Estimation Toolbox and Benchmark. 一、依赖环境 MMPose 适用于 Linux、Windows 和 macOS。它需要 Python 3.7、CUDA 9.2 和 PyTorch 1.6。我的环境&#xff1a; Windows 11 Python 3.9 CUDA 11.6 PyTorch 1.13 …

影响客户管理系统的因素有哪些?能买断吗?

客户管理系统是企业数字化转型的必由之路&#xff0c;对于没有部署CRM客户管理系统的企业来说除了关注软件功能还要关注价格&#xff0c;客户管理软件系统多少钱&#xff1f;是否需要买断&#xff0c;今天我们就来说一说。 一、什么是客户管理系统 客户管理系统是帮助企业建立…

经典基于外观的SLAM框架-RTABMAP(RGBD视觉输入方案)

经典基于外观的SLAM框架-RTABMAP 文章目录 经典基于外观的SLAM框架-RTABMAP1. RTABMAP整体框架2.RTABMAP的内存管理机制3. 视觉里程计4. 局部地图5. 回环检测与图优化6. 代码工程实践 1. RTABMAP整体框架 RTABMAP是采用优化算法的方式求解SLAM问题的SLAM框架&#xff0c;本赛题…

Linux---虚拟机配置固定IP

1. IP地址 每一台联网的电脑都会有一个地址&#xff0c;用于和其它计算机进行通讯 IP地址主要有2个版本&#xff0c;V4版本和V6版本&#xff08;V6很少用&#xff0c;课程暂不涉及&#xff09; IPv4版本的地址格式是&#xff1a;a.b.c.d&#xff0c;其中abcd表示0~255的数字…

深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

免费的Outlook邮箱备份的方法!

关于Outlook邮箱备份 Outlook是Microsoft Office微软办公软件套装的组件之一&#xff0c;利用一套Microsoft应用程序和服务&#xff0c;与Office工具共享与协作&#xff0c;和各种设备时刻保持联系。用户可以通过登录邮箱首页申请Outlook为域名后缀的邮箱。 长时间使用Outl…

使用海外社交媒体的九种方法(和五个专业提示!)

社交媒体是推广您的产品、吸引新客户以及围绕您的业务建立社区的有效方式。您可以使用社交媒体做的事情几乎没有限制&#xff0c;但无限的可能性会带来让自己过于分散的风险。好消息是&#xff0c;通过遵循一些最佳实践&#xff0c;您的在线商店可以取得成功。 目录 使用…

3ds MAX 灯光

简单展示一下3dsMAX中灯光的不同效果&#xff1a; 先简单画一个房间出来&#xff0c;展示效果就不添加材质了 在选项卡中添加灯光&#xff1a; 首先是直接渲染的结果&#xff0c;没有添加光照&#xff0c;可以看出也没有阴影等 采用【目标聚光灯】&#xff0c;这有点类似在摄…

【MySQL新手入门系列二】:手把手教你入门MySQL - 数据库及数据表操作

如果您是一位刚刚开始学习MySQL的新手&#xff0c;本文将为您提供一些实用的入门知识和技巧&#xff0c;帮助您快速上手。 【MySQL新手入门系列一】&#xff1a;手把手教你入门MySQL 前面我们已经大致讲了一下mysql的安装等介绍&#xff0c;本篇文章将以windows为例&#xff0c…

聚类分析(文末送书)

目录 聚类分析是什么 一、 定义和数据类型 聚类应用 聚类分析方法的性能指标 聚类分析中常用数据结构有数据矩阵和相异度矩阵 聚类分析方法分类 二、K-means聚类算法 划分聚类方法对数据集进行聚类时包含三个要点 K-Means算法流程: K-means聚类算法的特点 三、k-med…

【JVM系列】垃圾收集器介绍

文章目录 垃圾收集器Serial收集器ParNew收集器Parallel收集器CMS收集器G1收集器 常用的收集器组合 垃圾收集器 Serial收集器 串行收集器是最古老&#xff0c;最稳定以及效率高的收集器&#xff0c;可能会产生较长的停顿&#xff0c;只使用一个线程去回收。新生代、老年代使用…

不逆向解决5s盾之cloudscraper

一、背景 经常写爬虫的同学&#xff0c;肯定知道 Cloud Flare 的五秒盾。当你没有使用正常的浏览器访问网站的时候&#xff0c;它会返回如下这段文字&#xff1a; Checking your browser before accessing xxx. This process is automatic. Your browser will redirect to your…

020+limou+C语言内存管理

0.在Linux下验证C语言地址空间排布 这里是limou3434的博文系列。接下来&#xff0c;我会带您了解在C语言程序视角下的内存分布&#xff0c;会涉及到一点操作系统的知识&#xff0c;但是不多&#xff0c;您无需担忧。 注意&#xff1a;只能在Linux下验证&#xff0c;因为Windo…

外观模式(十三)

每天都是全新的一天&#xff0c;感谢今日努力的自己。 上一章简单介绍了组合模式(十二), 如果没有看过, 请观看上一章 一. 外观模式 引用 菜鸟教程里面的外观模式介绍: https://www.runoob.com/design-pattern/facade-pattern.html 外观模式&#xff08;Facade Pattern&…

商品编号篡改测试-业务安全测试实操(7)

商品编号篡改测试,邮箱和用户篡改测试 手机号码篡改测试-业务安全测试实操(6)_luozhonghua2000的博客-CSDN博客 邮箱和用户篡改测试 测试原理和方法 在发送邮件或站内消息时,篡改其中的发件人参数,导致攻击者可以伪造发信人进行钓鱼攻击等操作,这也是一种平行权限绕过漏洞…

2023年CPSM-3中级项目管理专业人员认证招生简章

CPSM-3中级项目管理专业人员认证&#xff0c;是中国标准化协会&#xff08;全国项目管理标准化技术委员会秘书处&#xff09;联合中国国际人才交流基金会&#xff0c;面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系&#xff0c;建立健全人才…

软体机器人对工业应用的影响

原创 | 文 BFT机器人 软机器人模仿生物体的运动和动作&#xff0c;使它们具有高度的多功能性和迷人性。 软机器人领域正在迅速发展。它旨在为各种行业创造灵活的设备&#xff0c;包括医疗保健、太空探索、食品生产、地理、物流、康复、国防和家庭应用。 软机器人的独特之处在于…

windows下使用cmake编译c++

好久没有更新博客了 最近在做c相关的&#xff0c;编译起来确实很痛苦。 所以心血来潮&#xff0c;继续更新一下 主要还是一些跨平台的库&#xff0c;比如zlib、libpng、opencv、ffmpeg 编译工具使用mingw作为主要编译环境支持&#xff0c;使用msys进行编译。 一、下载mingw…

Python--输入和输出

Python--输入和输出 <font colorblue>一、输入&#xff1a;input()函数<font colorblue>二、输出&#xff1a;print()函数<font colorblue>1.print函数说明<font colorblue>2.格式化输出<font colorblue>方法一&#xff1a;使用占位符&#xff0…