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

news2024/12/28 4:51:23

业务背景

根据央行公布的数据显示,全国性银行信用卡和借贷合一卡的发卡量增速从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/650503.html

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

相关文章

pytest+allure

知识点1: 1、测试结果信息阅读 passed表示通过,有个简写. failed表示失败,有个简写F 2、命令行参数 -h:帮助 -version:版本信息 3、测试用例命名规则: 测试函数必须以test开头 测试类必须以Test开头…

我为开放原子全球开源峰会助力:共建开源之梦

我为开放原子全球开源峰会助力:共建开源之梦 6月11日,以“开源赋能,普惠未来”为主题的2023开放原子全球开源峰会开幕式暨高峰论坛在北京成功举办。 开源的力量与魅力 开源是当今软件行业中不可忽视的力量,它为技术的快速发展和…

入职滴滴和字节的2 年里,我感觉忒真实了……

引言 先简单交代一下背景吧,某不知名985的本硕,17年毕业加入滴滴,之后跳槽到了头条,一直从事软件测试相关的工作。之前没有实习经历,算是两年半的工作经验吧。 这两年半之间完成了一次晋升,换了一家公司&…

Ubuntu如何安装vmtools?

虚拟机-安装VMware Tools 然后在Ubuntu中找到设备中的VMware Tools,将这个文件来复制到桌面上去。 选择提取到此处 可以看到桌面上多了一个VMware Tools的文件夹 使用cd命令进入桌面上的这个VMware tools的文件夹 使用sudo ./安装命令 对vmware-tools-distrib文件夹…

政企市场,「观望」AI大模型

数据安全等“刚需”下,私有化成为政企市场的准入门槛,然而私有化下,行业模型局限性尚未可知,加之信创化等因素,厂商仍需取长补短,为政企客户提供全方位的解决方案。 作者|斗斗 编辑|皮爷 出品|产业家 政…

采用UWB定位技术开发的室内定位系统源码

UWB精准定位系统源码 UWB是什么? UWB(Ultra Wideband)超宽带技术是一种全新的、与传统通信技术有极大差异的通信新技术。它不需要使用传统通信体制中的载波,而是通过发送和接收具有纳秒或纳秒级以下的极窄脉冲来传输数据,实现精准定位。 技术…

一名高水平的程序员,为什么面试总是失败?

目录 场景1 场景2 场景3 1 从发现和分析问题方面准备。 2 从linux命令和日志层面分析问题的步骤。 1 事先准备很重要 2 面试开始是自我介绍,这时要表露出,自己解决过redis,dubbo等组件的线上问题 3 一旦开始说第一个组件层面解决过的问题时&…

Django高级扩展之文件上传

文件上传是一个比较常用的网站功能,在服务器端,Django会使用一个叫作request.FILES的对象来处理上传的文件。 目录 存储路径 创建存储目录 配置settings.py 上传单文件 配置url 上传文件模板 视图方法 显示上传页面 上传文件处理 上传效果 1.…

盘点五种最常见加密算法!

大家好,我是Martin。 今天,就给大家来盘点一下最常见的5种加密算法。 大家平时的工作中,可能也在很多地方用到了加密、解密,比如: 用户的密码不能明文存储,要存储加密后的密文 用户的银行卡号、身份证号…

2024年天津农学院专升本专业课参考书目

天津农学院2024年高职升本科拟招生专业参考书目 天津农学院专升本专业课参考教材(我校不提供专业课参考教材) 人力资源管理专业参考教材: 1、《人力资源管理实用教程》 (第2版),吴宝华,北京大学出版社 2、《人力资源…

运维(SRE)成长之路-第3天 文本处理三剑客之 grep

1.命令作用以及参数详解 grep: 全局搜索正则表达式并打印行(Global search REgular expression and Print out the line)作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行模式:由正则表达式字…

GitHub Copilot 最全安装、使用

GitHub Copilot 最全安装、使用教程 一、温馨提示 GitHub Copilot 目前为止可以免费试用一个月,但是试用的前提是必须要绑定银行卡,因为后续会自动扣费,所以请注意试用结束日期,自己定好闹钟关闭订阅。 订阅价格为每月10美刀&a…

【Pinia 状态管理篇】Vite + Vue3 组合式 API 模式下的 Store 数据处理

文章目录 Pinia 状态管理一、 Pinia 安装与使用1.1 安装1.2 注册 pinia 实例到全局1.3 创建一个 Store1.4 组件内使用 Store 二、Pinia 核心概念展开学习Store 的定义和使用2.1 State2.2 Getter2.3 Action 附:1. 什么是魔法字符串? Pinia 状态管理 一、 …

Nacos配置中心使用(Spring Cloud版)

目标 向项目中集成Nacos配置。原项目是一个SpringBoot项目。这里假设我们无法修改原有项目的SpringBoot版本。 注意 在不动SpringBoot版本的前提下,根据SpringBoot的版本,确定Spring Cloud和Nacos版本。Nacos版本其实就是Spring Cloud Alibaba版本。在…

【Linux】网络结构模式

目录 网络结构模式C/S结构B/S结构 MAC地址IP地址端口网络模型OSI七层模型TCP/IP四层模型 通信过程数据包封装协议以太网协议ARP协议IP数据报格式UDP协议格式TCP协议格式封装分用TCP详解TCP和UDPTCP通信流程TCP三次握手 网络结构模式 C/S结构 客户机-服务器(client-server)结构…

uboot读取adc,通过cmdline传给kernel解析数值,不同硬件模块进行处理

uboot读取adc,通过cmdline传给kernel解析数值,不同硬件模块进行处理 uboot开发,要想读取adc在哪个时间点读取以及如何传给cmdline,需要清楚2点, uboot启动得大致流程及相关启动功能,uboot各个硬件模块得接…

主机安全各个方面应该怎么做?

主机安全是指保护主机系统不受恶意攻击和未经授权访问的威胁,以保证系统的稳定性、可用性和数据的安全性。 以下是主机安全涉及的几个方面做法: 1. 操作系统安全:安装操作系统时需要选择合适的版本,及时打补丁更新,配置…

入职Linux驱动工程师后,我才知道的真相…

大家好,我是ST。 做Linux驱动工程师也有一段时间了,今天分享一下我曾经入职才知道的一些事情,算是一个菜鸟的经历吧! 设备树 起初学习Linux驱动,是从最简单的一个.c文件开始。 在.c中实现module_init和module_exit这…

大模型入门(三)—— 大模型的训练方法

参考hugging face的文档介绍:https://huggingface.co/docs/transformers/perf_train_gpu_many#naive-model-parallelism-vertical-and-pipeline-parallelism,以下介绍聚焦在pytorch的实现上。 随着现在的模型越来越大,训练数据越来越多时&…

基于Ubuntu22.10系统安装部署webmin软件

Webmin是一个用于Linux系统管理的开源的基于web的系统管理配置工具。有了这个工具的帮助,我们可以管理内部的系统配置,诸如设置用户账户,磁盘配额,像Apache, DNS, PHP, MySQL,文件共享的服务等。 本文描述在ubuntu22.…