Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻)分类分析银行拉新活动挖掘潜在贷款客户

项目背景:银行的主要盈利业务靠的是贷款,这些客户中的大多数是存款大小不等的责任客户(存款人)。

由Kaizong Ye,Liao Bao撰写

银行拥有不断增长的客户。该银行希望增加借款人(资产客户),开展更多的贷款业务,并通过贷款利息赚取更多利润。

因此,银行希望将负债的客户转换为个人贷款客户。(同时保留他们作为存款人)。该银行去年针对负债客户开展的一项活动显示,成功实现了9%以上的成功转化率。

该部门希望建立一个模型,来帮助他们确定购买贷款可能性更高的潜在客户。可以增加成功率,同时降低成本。

数据集

下面给出的文件包含5000个客户的数据。数据包括客户人口统计信息(年龄,收入等),客户与银行的关系(抵押,证券账户等)以及客户对上次个人贷款活动的因变量(个人贷款)。在这5000个客户中,只有480个(= 9.6%)接受了先前活动中提供给他们的个人贷款

data.head()

data.columns

视频

贝叶斯推断线性回归与R语言预测工人工资数据

探索见解

去bilibili观看

探索更多视频

属性信息

属性可以相应地划分:

  • 变量 ID 一个人的客户ID与贷款之间没有关联,也无法为将来的潜在贷款客户提供任何一般性结论。我们可以忽略此信息进行模型预测。

二进制类别具有五个变量,如下所示:

  • 个人贷款-该客户是否接受上一个广告系列提供的个人贷款? 这是我们的目标变量
  • 证券帐户-客户在银行是否有证券帐户?
  • CD帐户-客户在银行是否有存款证明(CD)帐户?
  • 网上银行-客户是否使用网上银行?
  • 信用卡-客户是否使用银行发行的信用卡?

数值变量如下:

  • 年龄-客户的年龄
  • 工作经验
  • 收入-年收入(元)
  • CCAvg-平均信用卡消费
  • 抵押-房屋抵押价值

视频

从决策树到随机森林:R语言信用卡违约分析信贷数据实例

探索见解

去bilibili观看

探索更多视频

有序分类变量是:

  • 家庭-客户的家庭人数
  • 教育程度-客户的教育程度

标称变量是:

  • ID
  • 邮政编码
data.shape
data.info()

R语言基于决策树的银行信贷风险预警模型

阅读文章


# 文件中没有列有空数据
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'\]&nbsp;<&nbsp;0\]\['Experience'\].count()
52
#清理负数变量
dfExp&nbsp;=&nbsp;data.loc\[data\['Experience'\]&nbsp;>0\]
data.loc\[negExp\]\['ID'\].tolist()&nbsp;#&nbsp;得到有负数经验的客户ID

有52条负面经验的记录

以下代码执行以下步骤:

  • 对于具有ID的记录,获取Age column的值 
  • 对于具有ID的记录,获取Education column的值 
  • 从具有正数经验的记录的数据框中过滤符合以上条件的记录,并取中位数
  • 将中位数填充原本负数经验的位置
data.loc\[np.where(\['ID'\]==id)\]\["Education"\].tolist()\[0\]
df_filtered\['Experience'\].median()
#&nbsp;检查是否有负数经验的记录
data\[data\['Experience'\]&nbsp;<&nbsp;0\]\['Experience'\].count()
0

收入和教育对个人贷款的影响

观察 :看来教育程度为1的客户收入更高。但是,接受了个人贷款的客户的收入水平相同

boxplot(x='Education',y='Income',data=data)

推论 :从上图可以看出,没有个人贷款的客户和拥有个人贷款的客户的抵押贷款较高。

观察 :大多数没有贷款的客户都有证券账户

观察:家庭人数对个人贷款没有任何影响。但是似乎3岁的家庭更有可能借贷。考虑未来的推广活动时,这可能是一个很好的观察结果。

观察:没有CD帐户的客户,也没有贷款。这似乎占多数。但是几乎所有拥有CD帐户的客户也都有贷款

观察:该图显示有个人贷款的人的信用卡平均费用更高。平均信用卡消费中位数为3800元,表明个人贷款的可能性更高。较低的信用卡支出(中位数为1400元)不太可能获得贷款。这可能是有用的信息。

观察 上图显示与经验和年龄呈正相关。随着经验的增加,年龄也会增加。颜色也显示教育程度。四十多岁之间存在差距,大学以下的人也更多

#&nbsp;与热图的关联性

corr&nbsp;=&nbsp;data.corr()
plt.figure(figsize=(13,7))
#&nbsp;创建一个掩码,以便我们只看到一次相关的值

a&nbsp;=&nbsp;sns.heatmap(corr,mask=mask,&nbsp;annot=True,&nbsp;fmt='.2f')

观察

  • 收入和CCAvg呈中等相关。
  • 年龄和工作经验高度相关
sns.boxplot

看下面的图,收入低于10万的家庭比高收入的家庭更不可能获得贷款。

应用模型

将数据分为训练集和测试集

train\_labels&nbsp;=&nbsp;train\_set
test\_labels&nbsp;=&nbsp;test\_set

决策树分类器

DecisionTreeClassifier(class_weight=None,&nbsp;criterion='entropy',&nbsp;...)
dt_model.score
0.9773333333333334
dt\_model.predict(test\_set)

预测

array(\[0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0\])

查看测试集 

test_set.head(5)

朴素贝叶斯

naive\_model.fit(train\_set,&nbsp;train_labels)
naive_model.score
0.8866666666666667

随机森林分类器

RandomForestClassifier(max\_depth=2,&nbsp;random\_state=0)
Importance.sort_values
randomforest\_model.score(test\_set,test_labels)
0.8993333333333333

KNN(K-最近邻居)

data.drop(\['Experience'&nbsp;,'ID'\]&nbsp;,&nbsp;axis&nbsp;=&nbsp;1).drop(labels=&nbsp;"PersonalLoan"&nbsp;,&nbsp;axis&nbsp;=&nbsp;1)
train\_set\_dep&nbsp;=&nbsp;data\["PersonalLoan"\]
acc&nbsp;=&nbsp;accuracy\_score(Y\_Test,&nbsp;predicted)
print(acc)
0.9106070713809206

模型比较

for&nbsp;name,&nbsp;model&nbsp;in&nbsp;models:
    kfold&nbsp;=&nbsp;model\_selection.KFold(n\_splits=10)
    cv\_results&nbsp;=&nbsp;model\_selection.cross\_val\_score(model,&nbsp;X,&nbsp;y,&nbsp;cv,&nbsp;scoring)


#&nbsp;箱线图算法的比较
plt.figure()

结论

通用银行的目的是将负债客户转变为贷款客户。他们想发起新的营销活动;因此,他们需要有关数据中给出的变量之间的有联系的信息。本研究使用了四种分类算法。从上图可以看出,随机森林 算法似乎 具有最高的精度,我们可以选择它作为最终模型。


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds