银行贷款客户拉新活动分析——数据分析项目实战
1、案例背景
Thera Bank是一家拥有不断增长客户群的银行。这银行中大多数客户的存款规模都是不一样的。由于贷款业务的客户数量很少,所以银行希望有效地将存款用户转化为贷款用户以此扩大贷款业务量的基础,以带来更多的贷款业务,并在此过程中,通过贷款利息赚取更多。
因此,该银行去年为存款用户但未办理个人贷款业务的客户开展了一项推广活动来促使其办理个人贷款业务,有部分客户通过此活动已经办理了相关服务。这时的零售营销部门希望制定更好的策略去定位营销,以最小的预算提高成功率。该部门希望识别出更有可能购买贷款的潜在客户,提高转化的成功率,降低营销的费用。
#导入相关模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns#连接mysql
import pymysql
pymysql.install_as_MySQLdb()
from sqlalchemy import create_engine
engine=create_engine('mysql://frogdata:******@localhost:3306/frogdata?charset=gbk')#读取数据
Bank_Personal_Loan=pd.read_sql_query('select * from Personal_Loan',con=engine)
2、理解数据
数据集共包含5000条记录,14个字段,对应字段含义如下:
- ID - 客户
- Age - 客户年龄
- Experience - 客户工作经验
- Income - 客户年收入(单位:千美元)
- ZIPCode - 家庭地址邮政编码
- Family - 客户的家庭规模
- CCAvg - 每月信用卡消费额(单位:千美元)
- Education - 教育水平 (1: 本科; 2: 研究生; 3: 高级)
- Mortgage - 房屋抵押价值(如有)(单位:千美元)
- Personal Loan - 此客户是否接受上一次活动中提供的个人贷款?(1:是 0:否)
- Securities Account - 是否有证券账户?(1:是 0:否)
- CD Account - 是否有存款证明(CD)帐户吗(1:是 0:否)
- Online - 是否开通网上银行?(1:是 0:否)
- CreditCard - 是否有信用卡?(1:是 0:否)
Bank_Personal_Loan.head()
#观察数据整体情况
Bank_Personal_Loan.info()
观察各字段基础信息,数据并无重复,缺失情况;对于一些数值型的字段则需要做一些数据类型的转化
#更改变量类型,方便后续做统计分析
Bank_Personal_Loan['Age']=Bank_Personal_Loan['Age'].astype('int')
Bank_Personal_Loan['Experience']=Bank_Personal_Loan['Experience'].astype('int')
Bank_Personal_Loan['Family']=Bank_Personal_Loan['Family'].astype('int')
Bank_Personal_Loan['Education']=Bank_Personal_Loan['Education'].astype('int')
Bank_Personal_Loan['ZIP Code']=Bank_Personal_Loan['ZIP Code'].astype('int')
Bank_Personal_Loan['Personal Loan']=Bank_Personal_Loan['Personal Loan'].astype('int')
Bank_Personal_Loan['CD Account']=Bank_Personal_Loan['CD Account'].astype('int')
Bank_Personal_Loan['Securities Account']=Bank_Personal_Loan['Securities Account'].astype('int')
Bank_Personal_Loan['Online']=Bank_Personal_Loan['Online'].astype('int')
Bank_Personal_Loan['CreditCard']=Bank_Personal_Loan['CreditCard'].astype('int')
Bank_Personal_Loan['Income']=Bank_Personal_Loan['Income'].astype('float')
Bank_Personal_Loan['CCAvg']=Bank_Personal_Loan['CCAvg'].astype('float')
Bank_Personal_Loan['Mortgage']=Bank_Personal_Loan['Mortgage'].astype('float')
#观察数据的一个描述性信息
Bank_Personal_Loan.describe()
发现Experience出现负值,有异常数据
#考虑将Experience的负值改为0
Bank_Personal_Loan.loc[Bank_Personal_Loan['Experience']< 0,'Experience']=0
Bank_Personal_Loan['Experience'].describe()
3、数据分析
整体思路:
一、去年银行举办的推广活动的效果如何?
二、什么类型的存款用户成为银行贷款业务的潜在客户可能性更大?
三、随着客户年收入的增长,贷款情况是如何变化?
四、随着客户年龄的增长,贷款情况如何变化?
#活动推广结果分析
Bank_Personal_Loan.groupby(['Personal Loan']).size()
通过这次推广活动以后,5000名客户中,有480个客户开通了个人贷款业务。由于该活动是针对未办理个人贷款业务的客户开展的,对比从以往数据来看,个人贷款业务增长了近10%,说明此次推广活动的效果还是不错的.
#探索其他变量与Personal Loan变量的关系
print(Bank_Personal_Loan.corr()['Personal Loan'])
#fig代表绘图窗口(Figure);axis代表这个绘图窗口上的坐标系(axis)
fig,axis=plt.subplots(figsize=(12,12))
#绘制热力图,颜色越深,相关性越强
ax=sns.heatmap(Bank_Personal_Loan.corr(),annot=True,cmap="YlGnBu")
#bottom代表y轴下限,top表示y轴上限(有些matplotlib版本画热力图上下边框只显示一半)
bottom, top = ax.get_ylim()
ax.set_ylim(bottom + 0.5, top - 0.5)
可以看出:
1、和开通信贷强相关的变量有:收入,信用卡还款额及是否有该银行存单账户;
2、和开通信贷弱相关的变量有:受教育程度,房屋抵押贷款数,家庭人数;
3、邮编、是否是证券账户,是否开通网上银行及是否有信用卡,关系都不大;
4、年龄、工作经验虽然关系也不大,但它们属于连续的数值变量,所以需要分箱后再做观察,看看是否有某一段存在特殊值。
#先剔除无关的变量,对其余相关变量进行分析
#1、定性变量与开通贷款的关系(对定性变量中是否有该银行存单账户、受教育程度、家庭人数与是否开通贷款的关系进行探究)
#1.1、是否有该银行存单账户
print(Bank_Personal_Loan.groupby('CD Account')['Personal Loan'].agg([np.mean]))
sns.countplot(x="CD Account",data=Bank_Personal_Loan,hue='Personal Loan')
开通了银行存单账户的客户,其申请贷款的可能性是没有开通的6倍多,说明开通了银行账户的客户是一个主要的目标客户;找到方法让客户开通该银行存款账单也是一个提高申请贷款率的可能选项。
#1.2、教育水平
print(Bank_Personal_Loan.groupby('Education').agg([np.mean,'count'])['Personal Loan'])
sns.catplot('Education',hue='Personal Loan',data=Bank_Personal_Loan,kind='count')
学历越高,贷款意愿的比率越多,说明教育水平越高,越能接受超前消费观念,其贷款意愿越高。学历层次越高的用户的存款用户成为银行贷款业务的潜在客户可能性会更大.
#1.3家庭人数
print(Bank_Personal_Loan.groupby('Family')['Personal Loan'].agg([np.mean]))
sns.catplot('Family',hue='Personal Loan',data=Bank_Personal_Loan,kind='count')
单身人士与没有孩子的家庭的贷款率都比较低,有孩子的家庭用户相对而言更有意愿转化为贷款用户,特别是独生子女家庭.
#2、定量变量与开通贷款的关系(对定量变量中的年领、收入、信用卡还款额和房屋抵押贷款与是否开通贷款的关系进行探究)
#2.1、年龄
print(Bank_Personal_Loan.groupby('Personal Loan')['Age'].agg([np.mean,'count']))
sns.boxenplot(x='Personal Loan',y='Age',data=Bank_Personal_Loan)
#对年龄分层
Bank_Personal_Loan['Income Bins'] = pd.qcut(Bank_Personal_Loan.Age,6)
print(Bank_Personal_Loan.groupby('Income Bins')['Personal Loan'].agg([np.mean,'count']))
Bank_Personal_Loan.groupby('Income Bins')['Personal Loan'].agg({'Loan rate':np.mean}).plot()
综合来看,各阶段的年龄的贷款意愿都相差不大,相对来说区间在(32.0, 39.0]的客户意愿较强。
#2.1、收入
print(Bank_Personal_Loan.groupby('Personal Loan')['Income'].agg([np.mean,'count']))
sns.boxenplot(x='Personal Loan',y='Income',data=Bank_Personal_Loan)
取平均来看,高收入的人群会比低收入的人群更愿意申请贷款。
#对收入分层
Bank_Personal_Loan['Income Bins'] = pd.qcut(Bank_Personal_Loan.Income,20)
print(Bank_Personal_Loan.groupby('Income Bins')['Personal Loan'].agg([np.mean,'count']))
Bank_Personal_Loan.groupby('Income Bins')['Personal Loan'].agg({'Loan rate':np.mean}).plot()
mean count
Income Bins
(7.999, 18.0] 0.000000 278
(18.0, 22.0] 0.000000 229
(22.0, 29.0] 0.000000 295
(29.0, 33.0] 0.000000 227
(33.0, 39.0] 0.000000 283
(39.0, 42.0] 0.000000 237
(42.0, 45.0] 0.000000 224
(45.0, 52.0] 0.000000 229
(52.0, 59.0] 0.000000 278
(59.0, 64.0] 0.007407 270
(64.0, 71.0] 0.012987 231
(71.0, 78.0] 0.008403 238
(78.0, 82.0] 0.007905 253
(82.0, 88.3] 0.043860 228
(88.3, 98.0] 0.066929 254
(98.0, 113.0] 0.179775 267
(113.0, 128.0] 0.275862 232
(128.0, 145.0] 0.395437 263
(145.0, 170.0] 0.412766 235
(170.0, 224.0] 0.526104 249
当年收入超过82万时,贷款意愿会有5倍以上的上升,超过98万时,贷款意愿达到17%以上,超过170万时,贷款意愿达到一半,相对收入越高,贷款的意愿越强烈。
#2.3、房屋抵押值
print(Bank_Personal_Loan.groupby('Personal Loan')['Mortgage'].agg([np.mean,'count']))
sns.catplot('Personal Loan','Mortgage',data=Bank_Personal_Loan,kind='boxen')
#对抵押值分层
Bank_Personal_Loan['Mortgage_Bins']=pd.cut(Bank_Personal_Loan.Mortgage,10)
print(Bank_Personal_Loan.groupby('Mortgage_Bins')['Personal Loan'].agg({np.mean,'count'}))
Bank_Personal_Loan.groupby('Mortgage_Bins')['Personal Loan'].agg({'Loan_rate':np.mean}).plot()
mean count
Personal Loan
0 51.789381 4520
1 100.845833 480
count mean
Mortgage_Bins
(-0.635, 63.5] 3462 0.090121
(63.5, 127.0] 573 0.043630
(127.0, 190.5] 421 0.052257
(190.5, 254.0] 254 0.114173
(254.0, 317.5] 127 0.228346
(317.5, 381.0] 74 0.324324
(381.0, 444.5] 45 0.355556
(444.5, 508.0] 21 0.333333
(508.0, 571.5] 13 0.615385
(571.5, 635.0] 10 0.800000
当房屋抵押值大于190.5千美元时,贷款申请的意愿有明显的提升,总体来看,抵押值越高,贷款意愿越强烈
#2.4、每月信用卡消费额
print(Bank_Personal_Loan.groupby('Personal Loan')['CCAvg'].agg([np.mean,'count']))
sns.boxenplot(x='Personal Loan',y='CCAvg',data=Bank_Personal_Loan)
mean count
Personal Loan
0 1.728982 4520
1 3.905347 480
<matplotlib.axes._subplots.AxesSubplot at 0x7f6f0fe8e710>
大部分没有申请贷款的,信用卡消费额的均值在1.7K美元左右,而申请贷款的客户信用款消费额均值达到3.9K美元,是其2倍有多。
#对每月消费额进行分层
Bank_Personal_Loan['CCAvg Bins']=pd.qcut(Bank_Personal_Loan.CCAvg,20)
print(Bank_Personal_Loan.groupby('CCAvg Bins')['Personal Loan'].agg({'mean','count'}))
Bank_Personal_Loan.groupby('CCAvg Bins')['Personal Loan'].agg({'Loan rate':np.mean}).plot()
count mean
CCAvg Bins
(-0.001, 0.1] 289 0.010381
(0.1, 0.3] 445 0.031461
(0.3, 0.4] 179 0.022346
(0.4, 0.5] 163 0.049080
(0.5, 0.7] 305 0.032787
(0.7, 0.8] 196 0.025510
(0.8, 1.0] 337 0.014837
(1.0, 1.2] 150 0.086667
(1.2, 1.4] 273 0.043956
(1.4, 1.5] 178 0.022472
(1.5, 1.7] 277 0.025271
(1.7, 1.9] 267 0.026217
(1.9, 2.1] 288 0.024306
(2.1, 2.3] 188 0.063830
(2.3, 2.5] 217 0.032258
(2.5, 2.8] 292 0.071918
(2.8, 3.4] 235 0.297872
(3.4, 4.3] 232 0.362069
(4.3, 6.0] 248 0.447581
(6.0, 10.0] 241 0.315353
大概在每月消费额为2.8千美元时,申请贷款率会增大将近4倍,超过6千美元时,申请申请贷款率会有所回落到31%左右,但这个贷款意愿相对还是很强烈的,可对每月消费额在2.8千美元以上的客户加大力度去营销。
4、结论
通过这次活动,个人贷款业务增长了近10%,说明此次推广活动的效果还是不错的
对于开通了银行账户的用户需要加强营销力度,他们的贷款意愿相对于没有开通银行账户更强
教育水平越高的客户越容易接受贷款
家庭人口较多的家庭贷款意愿较强,尤其是独生子女的家庭
年龄区间在30-40岁的客户相对贷款意愿更强
相对收入越高,贷款的意愿越强烈, 当年收入超过82时,贷款意愿会有5倍以上的上升,超过98时,贷款意愿达到17%以上,超过170时,贷款意愿达到一半
当房屋抵押值大于190.5千美元时,贷款申请的意愿有明显的提升
每月消费额在2.8千美元以上的客户,贷款申请的意愿有明显的提升
银行贷款客户拉新活动分析——数据分析项目实战相关推荐
- 【数据分析项目实战】Python爬取BOSS直聘岗位和数据分析
说明:这是一个数据分析项目全流程(附带项目实例),本篇教程来源于网络,胖哥对此进行了完整的梳理,并把用到的数据+代码完全奉上.如需数据+完整代码可以直接到文章最后获取. 这里面的数据,我只爬取了部分, ...
- 福布斯系列之数据采集 | Python数据分析项目实战
1 数据采集概述 开始一个数据分析项目,首先需要做的就是get到原始数据,获得原始数据的方法有多种途径.比如: 获取数据集(dataset)文件 使用爬虫采集数据 直接获得excel.csv及其他数据 ...
- 数据分析项目实战项目二:入驻商用户画像体系
第一章:电商平台入驻商数据分析思路与亚马逊相关信息介绍 1.1 互联网电商平台入驻商数据分析的一般思路 互联网电商平台入驻商数据分析的一般思路一般分为以下三步:获得数据,分析业务需求,产生数据成果.其 ...
- app拉新充场项目去哪里接
拉新工作室如何接项目?拉新工作室其实就是做地推的,通过老客户之间的相互介绍,直接找工作室来做代理.拉新项目多,注册一个账号就能去接项目了.如果自己有新人的话就可以自己做代理了,告诉你的团队如何去做,需 ...
- 【项目实战】Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取. 1.项目背景 在衍生产品定价和风险管理中,对当前波动率是很感兴趣的,这是因为需 ...
- B.图算法:图学习之项目实践(UniMP算法实现论文节点分类、新冠疫苗项目实战,助力疫情)[系列九]
图学习图神经网络算法专栏简介:主要实现图游走模型(DeepWalk.node2vec):图神经网络算法(GCN.GAT.GraphSage),部分进阶 GNN 模型(UniMP标签传播.ERNIESa ...
- 数据分析案例-银行拉新活动分析
项目背景:Thera Bank银行的主要盈利业务靠的是贷款,这些客户中的大多数是存款大小不等的责任客户(存款人).同时也是借款人的客户(资产客户)数量很少,银行有兴趣迅速扩大这一基础,以开展更多的贷款 ...
- 数据分析项目实战之淘宝女装店铺销售分析(二)excel数据分析篇
淘宝的XX店铺女装信息已经都放到数据库里了,这篇主要是记录一下把得到的数据合理整合分析. 读完本文可以了解到: 店铺的的销售额在哪个价位相对稳定的,如果有不稳定的有改进的方式吗? 不同商品的价格区间的 ...
- 数据分析项目实战项目一:CPC广告优化以及bilibili订单分析(下)
第一章:电商平台数据分析思路与bilibili会员购介绍 1.1互联网电商平台数据分析的一般思路 互联网电商平台数据分析的一般思路一般分为以下三步:找出问题,分析问题,解决问题.其中,找出问题包括描述 ...
最新文章
- 入职体检体检错了_我们如何更新入职体验并获得更多用户
- 循环前增加和后增加之间的区别?
- PCB常见的拓扑结构 (转)
- 广东发展银行系统分析师面试问题
- 10.23cron10.24chkconfig工具10.25systemd管理服务10.26unit
- 机器学习理论《统计学习方法》学习笔记:第十一章 条件随机场(CRF)
- angular项目打包发布流程
- 计算机专业小三门要求,最新小三门选科要求有啥变化?附对比表
- python 内置模块-re
- eddystone_超级计算机上的Linux,Google的Eddystone和更多新闻
- ORACLE 中ROWNUM用法总结(转载)
- 重定向linux编译,linux重定向 - 悟性的个人页面 - OSCHINA - 中文开源技术交流社区...
- Trick(十一)—— list of lists 每一个属性列的获取
- Excel不好吗?为什么非要用Python做数据分析
- 做创业公司长期价值的共建者,高榕资本完成5亿美元新基金募资
- Linux下的定时任务Cron
- [精简版]CNN巻积层输出size计算公式
- 三星手机投屏电脑教程 手机和电脑同屏
- Milet谷仓:区块链电商先行者
- 无人机与卡车联合配送 - README