全文下载链接:http://tecdat.cn/?p=26219

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

该数据与银行机构的直接营销活动相关,营销活动基于电话。通常,需要与同一客户的多个联系人联系,以便访问产品(银行定期存款)是否会(“是”)或不会(“否”)订阅

银行数据集

我们的数据集描述

y - 客户是否订阅了定期存款?(二进制:'是','否')

我们的目标是选择最好的回归模型来让客户订阅或不订阅定期存款。我们将使用如下算法:

  • 线性回归
  • 随机森林回归
  • KNN近邻
  • 决策树
  • 高斯朴素贝叶斯
  • 支持向量机

选择最佳模型的决定将基于:

  • 准确性
  • 过采样

数据准备

在本节中,我们加载数据。我们的数据有 45211 个变量。

输入变量:
银行客户数据
1 - 年龄(数字)
2 - 工作:工作类型(分类:'行政'、'蓝领'、'企业家'、'女佣'、'管理'、'退休'、'自雇'、'服务'、'学生'、'技术员'、'失业'、'未知')
3 - 婚姻:婚姻状况(分类:'离婚'、'已婚'、'单身'、'不详';注:'离婚'指离婚或丧偶)。
4 - 教育(分类:'基础4年'、'基础6年'、'基础9年'、'高中'、'文盲'、'专业课程'、'大学学位'、'未知')
5 - 违约:是否有违约的信贷?(分类: '没有', '有', '未知')
6-住房:是否有住房贷款?(分类: '否', '是', '未知')
7 - 贷款:有个人贷款吗?
8 - contact: 联系通信类型(分类:'手机', '电话')。
9 - 月:最后一次联系的年份月份(分类:'一月', '二月', '三月', ..., '十一月', '十二月')
10 - day_of_week:最后一次联系的星期(分类:'mon', 'tue', 'wed', 'thu', 'fri')
11 - 持续时间:最后一次联系的持续时间,以秒为单位(数字)。
12 - 活动:在这个活动期间为这个客户进行的接触次数(数字,包括最后一次接触)。
13 - pdays: 在上次活动中最后一次与客户联系后的天数(数字,999表示之前没有与客户联系)。
14 - 以前:在这次活动之前,为这个客户进行的接触次数(数字)。
15 - 结果:上次营销活动的结果(分类:"失败"、"不存在"、"成功")。
社会和经济背景属性
16 - emp.var.rate:就业变化率--季度指标(数值)。
17 - cons.price.idx:消费者价格指数--月度指标(数值)。
18 - cons.conf.idx:消费者信心指数--月度指标(数字)。
19 - euribor3m:银行3个月利率--每日指标(数值)
20 - nr.employed: 雇员人数 - 季度指标(数字)

输出变量(所需目标):

  • y -  客户是否认购了定期存款?(二进制: '是', '否')
data.head(5)

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络

我们的下一步是查看变量的形式以及是否存在缺失值的问题。

df1 = data.dtypes
df1

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_02

df2 = data.isnull().sum() 
df2

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_03

我们的下一步是计算所有变量的值。

data['y'].value_counts()

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_04

data['job'].value_counts()

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_05

data['marital'].value_counts()

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_06

data['education'].value_counts()

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_07

data['housing'].value_counts()

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_08

data['loan'].value_counts()

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_09

data['contact'].value_counts()

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_10

data['month'].value_counts()

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_11

data['poutcome'].value_counts()

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_12

描述性统计

数值总结

data.head(5)

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_13

改变因变量 y 的值。代替 no - 0 和代替 yes - 1。

data['y'] = data['y'].map({'no': 0, 'yes': 1})
data.columns

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_14

对于我们的每个变量,我们绘制一个箱线图来查看是否有任何可见的异常值。

plt.figure(figsize=[10,25])
ax = plt.subplot(611)
sns.boxplot(data['age'],orient="v")

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_15

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_16

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_17

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_18

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_19

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_20

我们可以看到许多可见的异常值,尤其是在 balance 、 campaign 、 pdays 的情况下。在 pdays ,我们可以看到很多变量都在分位数范围之外。这个变量是一个特例,它被解码为 -1,这就是我们的图看起来像这样的原因。在表示变量之前的箱线图的情况下,它表示在此活动之前执行的联系数量,在这种情况下,我们还可以注意到许多超出分位数范围的值。

直方图

我们的下一步是查看连续变量的分布和直方图
我们可以看到没有一个变量具有正态分布。

plt.figure(figsize=[10,20])
plt.subplot(611)
g = sns.distplot(data["age"], color="r")

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_21

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_22

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_23

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_24

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_25

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_26

我们的下一步是查看因变量 y 与每个变量或连续变量之间的关系。

g = sns.FacetGrid(data, col='y',size=4)
g.map

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_27

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_28

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_29

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_30

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_31

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_32

从这些变量中我们可以得到的最有趣的观察是,大多数说不的人年龄在20-40岁之间,在月底的第20天,大多数人也拒绝了这个提议。

分类总结

我们制作仅包含分类变量的数据子集,以便更轻松地绘制箱线图

data_categorical = data[['job',
 'marital',
 'education',
 'default', 'housing',
 'loan','month', 'y']]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_33

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_34

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_35

我们还查看了分类变量,看看是否有一些有趣的特征
从上面的条形图中可以看出,最有趣的结果来自变量:婚姻状况、教育和工作。
从代表婚姻状况的图表来看,大多数人都已婚。
正如我们在代表教育的图表上看到的那样 - 最大的是接受过中等教育的人数。
在约伯的情况下,我们可以看到大多数人都有蓝领和管理工作。

我们还想在马赛克图上查看我们的分类变量与 y 变量之间的关系。

plt.rcParams['font.size'] = 16.0

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_36

正如我们所见,大多数人都拒绝了该提议。就地位而言,已婚的人说“不”最多。

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_37

在可变违约的情况下,大多数没有违约信用的人也拒绝了该提案。

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_38

大多数有住房贷款的人也拒绝了该提议。

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_39

大多数没有贷款的人拒绝了这个提议。


点击标题查阅往期内容

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_40

用PyTorch机器学习神经网络分类预测银行客户流失模型

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_41

左右滑动查看更多

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_42

01

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_43

02

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_44

03

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_45

04

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_46

数据挖掘

data.head(5)

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_47

我们想更深入地研究我们的变量,看看我们是否可以用它们做更多的事情。

我们的下一步是使用 WOE 分析。

finv, IV = datars(data,data.y)
IV

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_48

基于对我们有用的 WOE 分析变量是:pdays、previous、job、housing、balance、month、duration、poutcome、contact。
在下一步中,我们决定根据 WOE 结果和变量的先前结果删除无用的列。
我们删除的其中一个列是 poutcome,尽管它的 WOE 很高,但我们决定删除它,因为从 prevois 分析中我们看到它有许多未知的观察结果。
在可变持续时间的情况下,我们也可以看到WOE相当大,甚至可以说这个结果有点可疑。我们决定根据 WOE 结果放弃它,因为我们的模型应该根据过去的数据说明是否建议给某个人打电话。
在可变接触的情况下,我们放弃了它,因为对我们来说,接触形式在我们的模型中没有用。
我们还删除了变量 day 因为它对我们没有用,因为这个变量代表天数,而该变量的 WOE 非常小。我们删除的最后一个变量是变量 pdays,尽管这个变量 WOE 的结果非常好,但它对我们来说并不是一个有用的变量。

我们分析中剩下的列:

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_49

特征选择和工程

要执行我们的算法,我们首先需要将字符串更改为二进制变量。

data = pd.get_dummies(data=data, columns = ['job', 'marital', 'education' , 'month'], \
                                   prefix = ['job', 'marital', 'education' , 'month'])

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_50

我们更改了列的名称。

data.head(5)

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_51

创建虚拟变量后,我们进行了 Pearson 相关。

age = pearsonr(data['age'], data['y'])

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_52

sns.heatmap(corr

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_53

我们选择了数字列来检查相关性。正如我们所看到的,没有相关性。

我们查看因变量和连续变量之间的关系。

pylab.show()

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_54

交叉验证

经过所有准备工作,我们终于可以将数据集拆分为训练集和测试集。

算法的实现

逻辑回归

K=5
kf = KFold(n_splits=K, shuffle=True)

logreg = LogisticRegression()
[[7872   93]
 [ 992   86]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_55

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_56

[[7919   81]
 [ 956   86]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_57

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_58

[[7952   60]
 [ 971   59]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_59

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_60

[[7871   82]
 [1024   65]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_61

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_62

[[7923   69]
 [ 975   75]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_63

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_64

决策树

dt2 = tree.DecisionTreeClassifier(random_state=1, max_depth=2)
[[7988    0]
 [1055    0]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_65

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_66

[[7986    0]
 [1056    0]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_67

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_68

[[7920   30]
 [1061   31]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_69

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_70

[[8021    0]
 [1021    0]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_71

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_72

[[7938   39]
 [1039   26]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_73

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_74

随机森林

random_forest = RandomForestClassifier
[[7812  183]
 [ 891  157]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_75

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_76

[[7825  183]
 [ 870  164]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_77

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_78

[[7774  184]
 [ 915  169]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_79

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_80

[[7770  177]
 [ 912  183]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_81

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_82

[[7818  196]
 [ 866  162]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_83

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_84

KNN近邻

classifier = KNeighborsClassifier(n_neighbors =13,metric = 'minkowski' , p=2)

print("Mean accuracy: ",accuracyknn/K)
print("The best AUC: ", bestaucknn)
[[7952   30]
 [1046   15]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_85

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_86

[[7987   30]
 [1010   15]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_87

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_88

[[7989   23]
 [1017   13]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_89

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_90

[[7920   22]
 [1083   17]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_91

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_92

[[7948   21]
 [1052   21]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_93

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_94

高斯朴素贝叶斯

kf = KFold(n_splits=K, shuffle=True)

gaussian = GaussianNB()
[[7340  690]
 [ 682  331]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_95

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_96

[[7321  633]
 [ 699  389]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_97

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_98

[[7291  672]
 [ 693  386]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_99

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_100

[[7300  659]
 [ 714  369]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_101

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_102

[[7327  689]
 [ 682  344]]

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_103

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_104

``````
models = pd.DataFrame({
    'Model': ['KNN', 'Logistic Regression', 
              'Naive Bayes', 'Decision Tree','Random Forest'],
    'Score': [ accuracyknn/K, accuracylogreg/K, 
              accuracygnb/K, accuracydt/K, accuracyrf/K],
    'BestAUC': [bestaucknn,bestauclogreg,bestaucgnb,
                bestaucdt,bestaucrf]})

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_105

我们看到根据 AUC 值的最佳模型是朴素贝叶斯我们不应该太在意最低的 R2 分数,因为数据非常不平衡(很容易预测 y=0)。在混淆矩阵中,我们看到它预测了漂亮的价值真正值和负值。令我们惊讶的是,决策树的 AUC 约为 50%。

欠采样

我们尝试对变量 y=0 进行欠采样

gTrain, gValid = train_test_split

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_106

逻辑回归

predsTrain = logreg.predict(gTrainUrandom)

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_107

predsTrain = logreg.predict(gTrain20Urandom)

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_108

predsTrain = logreg.predict(gTrrandom)

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_109

决策树

print("Train AUC:", metrics.roc_auc_score(ygTrds))

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_110

随机森林

print("Train AUC:", metrics.roc_auc_score(ygTr, predsTrain),
      "Valid AUC:", metrics.roc_auc_score(ygVd, preds))

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_111

KNN近邻

print("Train AUC:", metrics.roc_auc_score(ygTrm, predsTrain),
      "Valid AUC:", metrics.roc_auc_score(ygVal10, preds))

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_112

高斯朴素贝叶斯

print("Train AUC:", metrics.roc_auc_score(ygTraom, predsTrain),
      "Valid AUC:", metrics.roc_auc_score(ygid, preds))

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_113

过采样

我们尝试对变量 y=1 进行过采样

feates = datolist()
print(feures)
feaes.remove('y')

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_114

print(gTrainOSM.shape)
(31945, 39)
``````
smt = SMOT
(32345, 39)
``````
smt = SMOT
(32595, 39)
``````
ygTrain10OSM=gTrain10OSM['y']
gTrain10OSM=gTrain10OSM.drop(columns=['y'])

逻辑回归

print("Train AUC:", metrics.roc_auc_score(ygTrin10SM, predsTrain),
      "Valid AUC:", metrics.roc_auc_score(ygValid, preds))

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_115

决策树

dt2.fit(,ygTranOS)
predsTrain = dtpreict(TrainOSM)
preds = dt2.predict(gValid)

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_数据_116

随机森林

random_forest.fit(rainOSM, ygTranOS)
predsTrain = random_forest.prect(gTraiOSM)
p

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_时间序列_117

KNN近邻

classifier.fit(granOSM, yTanOSM)
predsTrain = classifier.predict(gTaiSM)
preds = classifier.predict(Vaid)

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_118

高斯朴素贝叶斯

gaussian.fit(gTriOM, ygrainM)
predsTrain = gaussian.predcti)

PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_119

结论

我们看到欠采样和过采样变量 y 对 AUC 没有太大帮助。

数据获取

在下面公众号后台回复“银行数****据”,可获取完整数据。


PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享|附代码数据_神经网络_120

本文摘选 《 PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据 》