1、案例背景
Thera Bank是一家拥有不断增长客户群的银行,该银行中的大多数客户的存款规模是不一样的。由于贷款业务的客户数量很少,所以银行希望有效地将存款用户转化为贷款用户,以此扩大贷款业务量基础,并在此过程中,通过利息差赚取更多利润。
因此,该银行去年为存款用户但从未办理个人贷款的用户开展了一项推广活动来促使其办理个人贷款业务。已有部分客户通过该活动新办理了个人贷款业务,零售营销部门希望能制定更好的策略来定位营销,以最小预算提升成功率。更准确地说,该部门希望能够识别更有可能进行贷款的潜在用户,提高转化成功率,降低营销费用。
# 导入相关模块
import pandas as pd
import numpy as np
import matplotlib.pypolt as plt
import seaborn as sns
# 连接mysql
import pymysql
pymysql.install_as_MySQLdb()
# create_engine用于初始化数据库连接
from sqlalchemy import create_engine
engine=create_engine('mysql://用户名:密码@localhost:3306/数据库?charset=gbk')
# 读取数据
Bank_Personal_Loan=pd.read_sql_query('select * from Personal_Loan', con=engine)
2、理解数据
数据集共包含14个字段,各字段含义如下所示:
- ID:编号
- Age:年龄
- Experience:工作经验
- Income:客户年收入(单位:千美元)
- ZipCode:家庭地址邮编
- Family:客户家庭规模
- CCAvg:每月信用卡消费额(单位:千美元)
- Education:教育水平(1:本科;2:研究生;3:高级)
- Mortgage:房屋抵押价值(如有)(单位:千美元)
- Personal Loan:此客户是否接受上一次活动中提供的个人贷款(1:是;0:否)
- Securities Account:是否有证券账户(1:是;0:否)
- CD Account:是否有存款证明(1:是;0:否)
- Online:是否开通网上银行(1:是;0:否)
- Credit Card:是否拥有信用卡(1:是;0:否)
Bank_Personal_Loan.head()
Bank_Personal_Loan.info()
数据集包含5000条记录,并无缺失、重复情况;对于某些数值型字段需要做数据类型的转换
# 更改变量类型
Bank_Personal_Loan['Age']=Bank_Personal_Loan['Age'].astype('int')
Bank_Personal_Loan['Experience']=Bank_Personal_Loan['Experience'].astype('int')
Bank_Personal_Loan['Income']=Bank_Personal_Loan['Income'].astype('float')
Bank_Personal_Loan['ZIP Code']=Bank_Personal_Loan['ZIP Code'].astype('int')
Bank_Personal_Loan['Family']=Bank_Personal_Loan['Family'].astype('int')
Bank_Personal_Loan['CCAvg']=Bank_Personal_Loan['CCAvg'].astype('float')
Bank_Personal_Loan['Education']=Bank_Personal_Loan['Education'].astype('int')
Bank_Personal_Loan['Mortgage']=Bank_Personal_Loan['Mortgage'].astype('float')
Bank_Personal_Loan['Personal Loan']=Bank_Personal_Loan['Personal Loan'].astype('int')
Bank_Personal_Loan['Securities Account']=Bank_Personal_Loan['Securities Account'].astype('int')
Bank_Personal_Loan['CD Account']=Bank_Personal_Loan['CD 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.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')['Personal Loan'].agg([np.mean, 'count']))
sns.catplot("Education", data=Bank_Personal_Loan, hue="Personal Loan",kind="count") # 分类估计图,通过控制kind变量参数来设置不同的绘图类型
学历越高,办理贷款业务的人数越多,说明更高教育水平的客户更能够接受超前消费的观念,其贷款的意愿也会更高。因此,高学历层次的客户群体更有可能成为银行贷款业务的潜在客户
1.3 家庭人数
print(Bank_Personal_Loan.groupby('Family')['Personal Loan'].agg([np.mean]))
sns.catplot("Family", data=Bank_Personal_Loan, hue="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['Age Bins'] = pd.qcut(Bank_Personal_Loan.Age, 6)
print(Bank_Personal_Loan.groupby('Age Bins')['Personal Loan'].agg([np.mean, 'count']))
Bank_Personal_Loan.groupby('Age Bins')['Personal Loan'].agg({'Loan Rate':np.mean}).plot()
综合来看,各年龄阶段的客户贷款意愿都差别不大,相对来说在32~39岁之间的客户贷款意愿较强
2.2 收入
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()
收入的单位是千美元。可以发现,当年收入超过8.2万元时,贷款意愿会有5倍以上的上升;超过9.8万元,贷款意愿达到17%以上;超过17万元时,贷款意愿达到一半。这反映了高收入人群具有更高贷款意愿的趋势,同时年收入在8.2万美元以上的客户群体是主要的贷款活动推广对象。
2.3 房屋抵押价值
print(Bank_Personal_Loan.groupby('Personal Loan')['Mortgage'].agg([np.mean, 'count']))
sns.boxenplot(x="Personal Loan", y="Mortgage", data=Bank_Personal_Loan)
# 对房屋抵押价值进行分层
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 print(Bank_Personal_Loan.groupby('Personal Loan')['Mortgage'].agg([np.mean, 'count']))
sns.boxenplot(x="Personal Loan", y="Mortgage", data=Bank_Personal_Loan) Rate':np.mean}).plot(figsize=(14,7))
房屋抵押价值的单位是千美元。当抵押价值大于19.05万美元时,贷款申请意愿有显著提升。总体来看,房屋抵押价值越高,客户的贷款申请意愿会更强烈
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)
大部分没有申请贷款的客户,信用卡消费额的均值在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([np.mean, 'count']))
Bank_Personal_Loan.groupby('CCAvg Bins')['Personal Loan'].agg({'Loan Rate':np.mean}).plot()
大概在每月消费额为2.8千美元时,申请贷款率会增大4倍;超过6千美元时,申请贷款率会回落到31%左右,但整体来看,高消费客户群体的贷款意愿相对还是很强烈的
因此,每月消费额在2.8千美元以上的客户是重点营销客户
4、结论
1、这次推广活动让个人贷款业务增长近10%,说明此次推广活动的效果还是不错的
2、对于开通了银行存款账户的用户需要加强营销力度,他们的贷款意愿相对于没有开通银行存款账户的客户群体要更加强烈
3、高学历层次的客户群体更有可能成为银行贷款业务的潜在客户
4、家庭人口较多的家庭贷款意愿较强,尤其是独生子女家庭
5、年龄区间在30-40岁的客户相对贷款意愿更强
6、高收入人群具有更高的贷款意愿,同时年收入在8.2万美元以上的客户群体是主要的贷款活动推广对象
7、当房屋抵押值大于19.05万美元时,客户申请贷款的意愿有明显的提升
8、每月信用卡消费额在2.8千美元以上的客户,其贷款申请的意愿会有显著的提升