原文链接:http://tecdat.cn/?p=23518
最近咱们被客户要求撰写对于银行拉新流动的钻研报告,包含一些图形和统计输入。
我的项目背景:银行的次要盈利业务靠的是贷款,这些客户中的大多数是贷款大小不等的责任客户(存款人)。银行领有一直增长的客户
该银行心愿减少借款人(资产客户),发展更多的贷款业务,并通过贷款利息赚取更多利润。因而,银行心愿将负债的客户转换为集体贷款客户。(同时保留他们作为存款人)。该银行去年针对负债客户发展的一项流动显示,胜利实现了 9%以上的胜利转化率。该部门心愿建设一个模型,来帮忙他们确定购买贷款可能性更高的潜在客户。能够减少成功率,同时降低成本。
数据集
上面给出的文件蕴含 5000 个客户的数据 ( 查看文末理解数据获取形式 )。数据包含客户人口统计信息(年龄,支出等),客户与银行的关系(抵押,证券账户等)以及客户对上次集体贷款流动的因变量(集体贷款)。在这 5000 个客户中,只有 480 个(= 9.6%)承受了先前流动中提供给他们的集体贷款
data.head()
data.columns
属性信息
属性能够相应地划分:
- 变量 ID 一个人的客户 ID 与贷款之间没有关联,也无奈为未来的潜在贷款客户提供任何一般性论断。咱们能够疏忽此信息进行模型预测。
二进制类别具备五个变量,如下所示:
- 集体贷款 - 该客户是否承受上一个广告系列提供的集体贷款?这是咱们的指标变量
- 证券帐户 - 客户在银行是否有证券帐户?
- CD 帐户 - 客户在银行是否有贷款证实(CD)帐户?
- 网上银行 - 客户是否应用网上银行?
- 信用卡 - 客户是否应用银行发行的信用卡?
数值变量如下:
- 年龄 - 客户的年龄
- 工作教训
- 支出 - 年收入(元)
- CCAvg- 均匀信用卡生产
- 抵押 - 屋宇抵押价值
有序分类变量是:
- 家庭 - 客户的家庭人数
- 教育水平 - 客户的教育水平
标称变量是:
- ID
- 邮政编码
data.shape
data.info()
# 文件中没有列有空数据
data.apply(lambda x : sum(x.isnull()))
# 对数据进行目测
data.describe().transpose()
# 查看有多少不同数据
data.apply(lambda x: len(x.unique()))
两两变量散点图
- 年龄 特色通常是散布的,大多数客户年龄在 30 岁到 60 岁之间。
- 教训 大多散布在 8 年以上教训的客户。这里的 平均值 等于中 位数。有正数。这可能是数据输出谬误,因为通常无奈掂量正数的工作教训。咱们能够删除这些值,因为样本中有 3 或 4 条记录。
- 支出呈现 正偏斜。大多数客户的支出在 45,000 到 55K 之间。咱们能够通过说平均值 大于 中位数来确认这一点
- CCAvg 也是一个正偏变量,均匀收入在 0K 到 10K 之间,大多数收入不到 2.5K
- 抵押 70%的人的抵押贷款少于 4 万。然而最大值为 635K
- 家庭和教育变量是序数变量。家庭散布平均
有 52 条记录教训为正数。在进一步进行之前,咱们须要对这些记录进行清理
data[data['Experience'] < 0]['Experience'].count()
52
# 清理正数变量
dfExp = data.loc[data['Experience'] >0]
data.loc[negExp]['ID'].tolist() # 失去有正数教训的客户 ID
有 52 条正数教训的记录
以下代码执行以下步骤:
- 对于具备 ID 的记录,获取
Age
column 的值 - 对于具备 ID 的记录,获取
Education
column 的值 - 从具备负数教训的记录的数据框中过滤合乎以上条件的记录,并取中位数
- 将中位数填充本来正数教训的地位
data.loc[np.where(['ID']==id)]["Education"].tolist()[0]
df_filtered['Experience'].median()
# 查看是否有正数教训的记录
data[data['Experience'] < 0]['Experience'].count()
0
支出和教育对集体贷款的影响
boxplot(x='Education',y='Income',data=data)
察看:看来教育水平为 1 的客户支出更高。然而,承受了集体贷款的客户的收入水平雷同
点击题目查阅往期内容
R 语言基于决策树的银行信贷风险预警模型
左右滑动查看更多
01
02
03
04
推论:从上图能够看出,没有集体贷款的客户和领有集体贷款的客户的抵押贷款较高。
察看:大多数没有贷款的客户都有证券账户
察看:家庭人数对集体贷款没有任何影响。然而仿佛 3 岁的家庭更有可能借贷。思考将来的推广流动时,这可能是一个很好的察看后果。
察看:没有 CD 帐户的客户,也没有贷款。这仿佛占多数。然而简直所有领有 CD 帐户的客户也都有贷款
察看:该图显示有集体贷款的人的信用卡均匀费用更高。均匀信用卡生产中位数为 3800 元,表明集体贷款的可能性更高。较低的信用卡收入(中位数为 1400 元)不太可能取得贷款。这可能是有用的信息。
察看 上图显示与教训和年龄呈正相干。随着教训的减少,年龄也会减少。色彩也显示教育水平。四十多岁之间存在差距,大学以下的人也更多
# 与热图的关联性
corr = data.corr()
plt.figure(figsize=(13,7))
# 创立一个掩码,以便咱们只看到一次相干的值
a = sns.heatmap(corr,mask=mask, annot=True, fmt='.2f')
察看
- 支出和 CCAvg 呈中等相干。
- 年龄和工作教训高度相干
sns.boxplot
看上面的图,支出低于 10 万的家庭比高支出的家庭更不可能取得贷款。
利用模型
将数据分为训练集和测试集
train_labels = train_set
test_labels = test_set
决策树分类器
DecisionTreeClassifier(class_weight=None, criterion='entropy', ...)
dt_model.score
0.9773333333333334
dt_model.predict(test_set)
预测
array([0, 0, 0, 0, 0])
查看测试集
test_set.head(5)
奢侈贝叶斯
naive_model.fit(train_set, train_labels)
naive_model.score
0.8866666666666667
随机森林分类器
RandomForestClassifier(max_depth=2, random_state=0)
Importance.sort_values
randomforest_model.score(test_set,test_labels)
0.8993333333333333
KNN(K- 最近街坊)
data.drop(['Experience' ,'ID'] , axis = 1).drop(labels= "PersonalLoan" , axis = 1)
train_set_dep = data["PersonalLoan"]
acc = accuracy_score(Y_Test, predicted)
print(acc)
0.9106070713809206
模型比拟
for name, model in models:
kfold = model_selection.KFold(n_splits=10)
cv_results = model_selection.cross_val_score(model, X, y, cv, scoring)
# 箱线图算法的比拟
plt.figure()
论断
通用银行的目标是将负债客户转变为贷款客户。他们想发动新的营销流动;因而,他们须要无关数据中给出的变量之间的有分割的信息。本钻研应用了四种分类算法。从上图能够看出,随机森林 算法仿佛 具备最高的精度,咱们能够抉择它作为最终模型。
本文选自《Python 决策树、随机森林、奢侈贝叶斯、KNN(K- 最近街坊)分类剖析银行拉新流动开掘潜在贷款客户》。
点击题目查阅往期内容
PYTHON 银行机器学习: 回归、随机森林、KNN 近邻、决策树、高斯奢侈贝叶斯、反对向量机 SVM 剖析营销流动数据 | 数据分享
用 PyTorch 机器学习神经网络分类预测银行客户散失模型
R 语言用 FNN-LSTM 假近邻长短期记忆人工神经网络模型进行工夫序列深度学习预测 4 个案例
Python 中 TensorFlow 的长短期记忆神经网络 (LSTM)、指数挪动平均法预测股票市场和可视化
R 语言 KERAS 用 RNN、双向 RNNS 递归神经网络、LSTM 剖析预测温度工夫序列、IMDB 电影评分情感
Python 用 Keras 神经网络序列模型回归拟合预测、准确度检查和后果可视化
Python 用 LSTM 长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析
R 语言中的神经网络预测工夫序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
R 语言深度学习:用 keras 神经网络回归模型预测工夫序列数据
Matlab 用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
R 语言 KERAS 深度学习 CNN 卷积神经网络分类辨认手写数字图像数据(MNIST)
MATLAB 中用 BP 神经网络预测人体脂肪百分比数据
Python 中用 PyTorch 机器学习神经网络分类预测银行客户散失模型
R 语言实现 CNN(卷积神经网络)模型进行回归数据分析 Python 应用神经网络进行简略文本分类
R 语言用神经网络改良 Nelson-Siegel 模型拟合收益率曲线剖析
R 语言基于递归神经网络 RNN 的温度工夫序列预测
R 语言神经网络模型预测车辆数量工夫序列
R 语言中的 BP 神经网络模型剖析学生问题
matlab 应用长短期记忆(LSTM)神经网络对序列数据进行分类
R 语言实现拟合神经网络预测和后果可视化
用 R 语言实现神经网络预测股票实例
应用 PYTHON 中 KERAS 的 LSTM 递归神经网络进行工夫序列预测
python 用于 NLP 的 seq2seq 模型实例: 用 Keras 实现神经网络机器翻译
用于 NLP 的 Python:应用 Keras 的多标签文本 LSTM 神经网络分类