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

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


最近我们被客户要求撰写关于银行拉新活动的研究报告,包括一些图形和统计输出。

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

该银行希望增加借款人(资产客户),开展更多的贷款业务,并通过贷款利息赚取更多利润。因此,银行希望将负债的客户转换为个人贷款客户。(同时保留他们作为存款人)。该银行去年针对负债客户开展的一项活动显示,成功实现了9%以上的成功转化率。该部门希望建立一个模型,来帮助他们确定购买贷款可能性更高的潜在客户。可以增加成功率,同时降低成本。

数据集

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

复制代码
data.head()
复制代码
data.columns

属性信息

属性可以相应地划分:

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

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

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

数值变量如下:

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

有序分类变量是:

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

标称变量是:

  • ID

  • 邮政编码

    data.shape

复制代码
# 文件中没有列有空数据data.apply(lambda x : sum(x.isnull()))
两两变量散点图
  • 年龄 特征通常是分布的,大多数客户年龄在30岁到60岁之间。
  • 经验 大多分布在8年以上经验的客户。这里的 平均值 等于中 位数。有负数 。这可能是数据输入错误,因为通常无法衡量负数的工作经验。我们可以删除这些值,因为样本中有3或4条记录。
  • 收入出现 正偏斜。大多数客户的收入在45,000到55K之间。我们可以通过说平均值 大于 中位数来确认这一点
  • CCAvg 也是一个正偏变量,平均支出在0K到10K之间,大多数支出不到2.5K
  • 抵押 70%的人的抵押贷款少于4万。但是最大值为635K
  • 家庭和教育变量是序数变量。家庭分布均匀

有52条记录经验为负数。在进一步进行之前,我们需要对这些记录进行清理

有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()

    复制代码
      
收入和教育对个人贷款的影响

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

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

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

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

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

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

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

复制代码
# 与热图的关联性corr = data.corr()plt.figure(figsize=(13,7))# 创建一个掩码,以便我们只看到一次相关的值a = sns.heatmap(corr,mask=mask, annot=True, fmt='.2f')

观察

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

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

应用模型

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

复制代码
train\_labels = train\_settest\_labels = test\_set

决策树分类器

复制代码
DecisionTreeClassifier(class\_weight=None, criterion='entropy', ...)dt\_model.score0.9773333333333334dt\_model.predict(test\_set)
``````

查看测试集

复制代码
test_set.head(5)

朴素贝叶斯

复制代码
naive\_model.fit(train\_set, train\_labels)naive\_model.score0.8866666666666667

随机森林分类器

复制代码
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()

结论

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

相关推荐
思则变2 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络3 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find4 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取5 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector7 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习7 小时前
Python入门Day2
开发语言·python
Vertira7 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉7 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗7 小时前
黑马python(二十四)
开发语言·python
晓13138 小时前
OpenCV篇——项目(二)OCR文档扫描
人工智能·python·opencv·pycharm·ocr