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

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

时间:2023-10-08 22:57:20浏览次数:50  
标签:KNN Python 拉新 模型 神经网络 客户 贷款 data

原文链接: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神经网络分类

标签:KNN,Python,拉新,模型,神经网络,客户,贷款,data
From: https://www.cnblogs.com/tecdat/p/17750395.html

相关文章

  • Python随机波动模型Stochastic volatility,SV随机变分推断SVI分析标普500指数股票价格
    全文链接:https://tecdat.cn/?p=33809原文出处:拓端数据部落公众号随机波动模型(Stochasticvolatilitymodels)经常被客户用来对股票价格随时间的变动性进行建模。波动性(volatility)是随时间的对数收益的标准差。与假设波动性恒定不变不同,随机波动模型具有隐变量参数,可以在每个时刻......
  • 机器学习之旅-从Python 开始
    你想知道如何开始机器学习吗?在这篇文章中,我将简要概括一下使用Python来开始机器学习的一些步骤。Python是一门流行的开源程序设计语言,也是在人工智能及其它相关科学领域中最常用的语言之一。机器学习简称ML,是人工智能的一个分支,它是利用算法从数据中进行学习,然后作出预测。......
  • python xml(ElementTree)
    pythonxml处理(ElementTree)1.模块导入fromxml.etree.ElementTreeimportElementTree,Element,SubElement2.对象概述ElementTree:表示整个xml层级结构Element:表示树形结构中的父节点SubElement:表示树形结构中的所有子节点,有些节点既可以是父节点,也可以是子节点3.Elem......
  • Python 内部类,内部类调用外部类属性,方法
     一Python中内部类classMyOuter:age=18def__init__(self,name):self.name=nameclassMyInner:def__init__(self,inner_name):self.inner_name=inner_nameout=MyOuter('lqz')inner=out.MyInner('lqz_inner�......
  • Python检测Windows剩余磁盘空间
    设计模块包:wmi  #pipinstallwmiwindows1064位,安装成功;windows200864位,安装失败。 WindowsManagementInstrumentation(WMI)AlightweightwrapperaroundtheWMIclassesavailableforallWin32platforms.Theseprovideastandardwaytoaccesssystem-leveli......
  • Python 压缩文件解压文件
    安装zipfilepip3installzipfile38pip3installzipfile37 f=zipfile.ZipFile("test.zip",mode="")//mode解压是r,压缩是w,追加压缩是a  压缩文件importzipfiledefzip_files(files,zip_name):zip=zipfile.ZipFile(zip_name,'w',zipfi......
  • python29days
    绑定方法绑定给对象绑定给类非绑定方法(静态static)封装隐藏属性property装饰器(内置的,用来把函数伪装成属性)封装————————————————————————————————————————————————————————  该方法就......
  • 【Python】数独游戏
    StartimportrandomclassSudokuGenerator:BOARD_SIZE=9SUBGRID_SIZE=3def__init__(self)->None:self.board=[[0for_inrange(self.BOARD_SIZE)]for_inrange(self.BOARD_SIZE)]defgenerate(self):self.fill_va......
  • Python入门示例系列10 字符串(初级)
     字符串(string)Python中的字符串用单引号'或双引号"括起来,同时使用反斜杠\转义特殊字符。'ABC' 与"ABC"完全等价。示例:s1="hello"#双引号"括起来s2='hello'#单引号'括起来s3=''#空字符串s4=""#空字符串s5='''......
  • Python入门示例系列07 Python注释
     Python中的注释有单行注释(linecomment)和多行注释(paragraphcomment,blockcomment):Python中单行注释以#(hash,pound)开头,例如:#这是一个单行注释acommentlineprint("Hello!")#这是一个单行注释acommentline示例:#thisisthefirstcommentspam=1#andthisist......