该数据与银行机构的直接营销活动相关,营销活动基于电话。
我们围绕银行机器学习技术进行一些咨询,帮助客户解决独特的业务问题。通常,需要与同一客户的多个联系人联系,以便访问产品(银行定期存款)是否会(“是”)或不会(“否”)订阅。
y – 客户是否订阅了定期存款?(二进制:’是’,’否’)
可下载资源
银行数据集
我们的数据集描述
我们的目标是选择最好的回归模型来让客户订阅或不订阅定期存款。我们将使用如下算法:
- 线性回归
- 随机森林回归
- KNN近邻
- 决策树
- 高斯朴素贝叶斯
- 支持向量机
选择最佳模型的决定将基于:
- 准确性
- 过采样
数据准备
在本节中,我们加载数据。我们的数据有 45211 个变量。
视频
支持向量机SVM、支持向量回归SVR和R语言网格搜索超参数优化实例
视频
逻辑回归Logistic模型原理和R语言分类预测冠心病风险实例
输入变量
银行客户数据
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)
![](https://img-blog.csdnimg.cn/bd358a8ec8424abfb27e302ff58b4e6f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_20,color_FFFFFF,t_70,g_se,x_16)
我们的下一步是查看变量的形式以及是否存在缺失值的问题。
df1 = data.dtypes
df1
![](https://img-blog.csdnimg.cn/3719f4c36ddf4d51bacf8bca7d969792.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_5,color_FFFFFF,t_70,g_se,x_16)
df2 = data.isnull().sum()
df2
![](https://img-blog.csdnimg.cn/010b86b8317f45668eb773329527f1c5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_4,color_FFFFFF,t_70,g_se,x_16)
我们的下一步是计算所有变量的值。
data\['y'\].value_counts()
![](https://img-blog.csdnimg.cn/ed80772b890b49eb81812e4b533f2459.png)
data\['job'\].value_counts()
![](https://img-blog.csdnimg.cn/83e886dd322d4cd486aa56a984977263.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_7,color_FFFFFF,t_70,g_se,x_16)
data\['marital'\].value_counts()
![](https://img-blog.csdnimg.cn/83324dd8bb184ee79708c8cbbe76d323.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_8,color_FFFFFF,t_70,g_se,x_16)
data\['education'\].value_counts()
![](https://img-blog.csdnimg.cn/a00643cb51be4d92bba0a10fc4ab3ad3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_10,color_FFFFFF,t_70,g_se,x_16)
data\['housing'\].value_counts()
![](https://img-blog.csdnimg.cn/da872db80061401a9351cae4e13a450b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_9,color_FFFFFF,t_70,g_se,x_16)
data\['loan'\].value_counts()
![](https://img-blog.csdnimg.cn/84eecfcbd69f4fc38dd8de7ba86a8d07.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_9,color_FFFFFF,t_70,g_se,x_16)
data\['contact'\].value_counts()
![](https://img-blog.csdnimg.cn/0032fec807824adda4090d29c007b02d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_10,color_FFFFFF,t_70,g_se,x_16)
data\['month'\].value_counts()
![](https://img-blog.csdnimg.cn/b613b9cfc3354e6d941519e2107596b1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_10,color_FFFFFF,t_70,g_se,x_16)
data\['poutcome'\].value_counts()
![](https://img-blog.csdnimg.cn/0e1fa9bd689445d19eef378fb61d89f2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_9,color_FFFFFF,t_70,g_se,x_16)
随时关注您喜欢的主题
描述性统计
数值总结
data.head(5)
![](https://img-blog.csdnimg.cn/165474abf74e494caeb6f5cf8d158c63.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_20,color_FFFFFF,t_70,g_se,x_16)
改变因变量 y 的值。代替 no – 0 和代替 yes – 1。
data\['y'\] = data\['y'\].map({'no': 0, 'yes': 1})
data.columns
![](https://img-blog.csdnimg.cn/271307f983d84e77aea1282f5386c916.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_20,color_FFFFFF,t_70,g_se,x_16)
对于我们的每个变量,我们绘制一个箱线图来查看是否有任何可见的异常值。
plt.figure(figsize=\[10,25\])
ax = plt.subplot(611)
sns.boxplot(data\['age'\],orient="v")
![](https://img-blog.csdnimg.cn/6c9311f0e4e74823bf248d47cda5a7cf.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/a5693c9ad5914255ad61a8345b033bd6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_19,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/be9f7a3b679c490692e3fde014c1ad46.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/dd3f1a9f6f764c10b49b14bf337757a4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/9a4b3cec206a49e69e8feb2d361b5f64.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/49e0f570ddac43a79a7a073a2a821247.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
我们可以看到许多可见的异常值,尤其是在 balance 、 campaign 、 pdays 的情况下。在 pdays ,我们可以看到很多变量都在分位数范围之外。这个变量是一个特例,它被解码为 -1,这就是我们的图看起来像这样的原因。
在表示变量之前的箱线图的情况下,它表示在此活动之前执行的联系数量,在这种情况下,我们还可以注意到许多超出分位数范围的值。
直方图
我们的下一步是查看连续变量的分布和直方图
我们可以看到没有一个变量具有正态分布。
plt.figure(figsize=\[10,20\])
plt.subplot(611)
g = sns.distplot(data\["age"\], color="r")
![](https://img-blog.csdnimg.cn/119e76ecbb1c4afd894e1ebe1dfbea07.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/35b2dcd1b01c4f99a1d39c076e6a6380.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/4f7fbd2d3bb14d6c94c504bf22ab7747.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/db340274de6b4aa4a7e26d0745c196cc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/75fd955e85e347a4acd844df650894e8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/7747362255724697897e17001c1d0212.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
我们的下一步是查看因变量 y 与每个变量或连续变量之间的关系。
g = sns.FacetGrid(data, col='y',size=4)
g.map
![](https://img-blog.csdnimg.cn/59869ee5b58e4a5ba3796229f6c1193e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/3b6c6a2b5ed84e129daa6260ea6291ce.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/3a6ec515344040a69c0dd8dd8a9ffa6e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/ff58651962684913af058ac85244922c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/c1b106ea40bd410696db015481ae9cef.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/d6a73c04e18042e0b43dc5ba069c738a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
从这些变量中我们可以得到的最有趣的观察是,大多数说不的人年龄在20-40岁之间,在月底的第20天,大多数人也拒绝了这个提议。
分类总结
我们制作仅包含分类变量的数据子集,以便更轻松地绘制箱线图
data_categorical = data\[\['job',
'marital',
'education',
'default', 'housing',
'loan','month', 'y'\]\]
![](https://img-blog.csdnimg.cn/75a29eb8aaff47f387cf2ddbe6729f39.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/1dfd0af38a7946c2934471bfe3de76b5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/6a52ae7424c54db8a6cdf20cd60ee704.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
我们还查看了分类变量,看看是否有一些有趣的特征
从上面的条形图中可以看出,最有趣的结果来自变量:婚姻状况、教育和工作。
从代表婚姻状况的图表来看,大多数人都已婚。
正如我们在代表教育的图表上看到的那样 – 最大的是接受过中等教育的人数。
在约伯的情况下,我们可以看到大多数人都有蓝领和管理工作。
我们还想在马赛克图上查看我们的分类变量与 y 变量之间的关系。
plt.rcParams\['font.size'\] = 16.0
![](https://img-blog.csdnimg.cn/7b02030e68d4443285b8f781f342389e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
正如我们所见,大多数人都拒绝了该提议。就地位而言,已婚的人说“不”最多。
![](https://img-blog.csdnimg.cn/a2171174f2684f1d9f691cb0b0be7651.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
在可变违约的情况下,大多数没有违约信用的人也拒绝了该提案。
![](https://img-blog.csdnimg.cn/26019902186945ed9d983bc5b711220e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
大多数有住房贷款的人也拒绝了该提议。
![](https://img-blog.csdnimg.cn/ad52c8b3c847427ca6f468054af846bc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
大多数没有贷款的人拒绝了这个提议。
数据挖掘
data.head(5)
![](https://img-blog.csdnimg.cn/554f79937d254799a3f1d9db6a72ff3c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_20,color_FFFFFF,t_70,g_se,x_16)
我们想更深入地研究我们的变量,看看我们是否可以用它们做更多的事情。
我们的下一步是使用 WOE 分析。
finv, IV = datars(data,data.y)
IV
![](https://img-blog.csdnimg.cn/b132abb79fc7438d8e14f5f08a7b2287.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_6,color_FFFFFF,t_70,g_se,x_16)
基于对我们有用的 WOE 分析变量是:pdays、previous、job、housing、balance、month、duration、poutcome、contact。
在下一步中,我们决定根据 WOE 结果和变量的先前结果删除无用的列。
我们删除的其中一个列是 poutcome,尽管它的 WOE 很高,但我们决定删除它,因为从 prevois 分析中我们看到它有许多未知的观察结果。
在可变持续时间的情况下,我们也可以看到WOE相当大,甚至可以说这个结果有点可疑。我们决定根据 WOE 结果放弃它,因为我们的模型应该根据过去的数据说明是否建议给某个人打电话。
在可变接触的情况下,我们放弃了它,因为对我们来说,接触形式在我们的模型中没有用。
我们还删除了变量 day 因为它对我们没有用,因为这个变量代表天数,而该变量的 WOE 非常小。我们删除的最后一个变量是变量 pdays,尽管这个变量 WOE 的结果非常好,但它对我们来说并不是一个有用的变量。
我们分析中剩下的列:
![](https://img-blog.csdnimg.cn/83d343cbee934471a6d868abc7660988.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_20,color_FFFFFF,t_70,g_se,x_16)
要执行我们的算法,我们首先需要将字符串更改为二进制变量。
特征选择和工程
data = pd.get_dummies(data=data, columns = \['job', 'marital', 'education' , 'month'\], \
prefix = \['job', 'marital', 'education' , 'month'\])
![](https://img-blog.csdnimg.cn/a9b6cf40538048bba49ce577c8c1ce6f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_20,color_FFFFFF,t_70,g_se,x_16)
我们更改了列的名称。
data.head(5)
![](https://img-blog.csdnimg.cn/238ff3d70f3f496aabfdf809a3659af9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_20,color_FFFFFF,t_70,g_se,x_16)
创建虚拟变量后,我们进行了 Pearson 相关。
age = pearsonr(data\['age'\], data\['y'\])
![](https://img-blog.csdnimg.cn/9993770d15fe4d70bded718b078471db.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_15,color_FFFFFF,t_70,g_se,x_16)
sns.heatmap(corr
![](https://img-blog.csdnimg.cn/b15b42d1f8d24eab836ed9cc8ff14510.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
我们选择了数字列来检查相关性。正如我们所看到的,没有相关性。
我们查看因变量和连续变量之间的关系。
pylab.show()
![](https://img-blog.csdnimg.cn/7429ade813024cc396a7f8319414ac06.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
交叉验证
经过所有准备工作,我们终于可以将数据集拆分为训练集和测试集。
算法的实现
逻辑回归
K=5
kf = KFold(n_splits=K, shuffle=True)
logreg = LogisticRegression()
\[\[7872 93\]
\[ 992 86\]\]
![](https://img-blog.csdnimg.cn/5a67562572c649b7bebca1c3bf749669.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/f59f2bb66d25483f8dd774f815cb636c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7919 81\]
\[ 956 86\]\]
![](https://img-blog.csdnimg.cn/5d7a27e7dd7b4d2b8984e58c9020dbef.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/5c5f166301ba43699dc12bfc5a4bd4df.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7952 60\]
\[ 971 59\]\]
![](https://img-blog.csdnimg.cn/773fe2df95b84830a3fb3edc8f226663.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/96ffc6b110a74c80aa25668c4ed87d4f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7871 82\]
\[1024 65\]\]
![](https://img-blog.csdnimg.cn/e681c303af724afb9269e7bbba3ddf31.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/7e25f59ac4bc4f4ba81a69c4b971cd72.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7923 69\]
\[ 975 75\]\]
![](https://img-blog.csdnimg.cn/f3cdf2b7bcb349b2bdffe4cb7c9962f9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/fbec144860a84e679b71c1ee16cb60ef.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
决策树
dt2 = tree.DecisionTreeClassifier(random\_state=1, max\_depth=2)
\[\[7988 0\]
\[1055 0\]\]
![](https://img-blog.csdnimg.cn/85e6f4acb87b4c45ada19f24ef216bc6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/95cbae4454804dc7a146709296d9c90a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7986 0\]
\[1056 0\]\]
![](https://img-blog.csdnimg.cn/720502ee472d4a7b8a4f310864e56843.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/a0961ac08fb74734add522a3072e089c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7920 30\]
\[1061 31\]\]
![](https://img-blog.csdnimg.cn/0c6c9a424bde467daac6d0749e954343.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/f5611c3fe8504e46865c8b0a97661bca.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[8021 0\]
\[1021 0\]\]
![](https://img-blog.csdnimg.cn/7129d0923676461a912a715faf232aaf.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/a2b385d5e44745a8b093a8066348b659.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7938 39\]
\[1039 26\]\]
![](https://img-blog.csdnimg.cn/96f7029a69944b21b590daff67136673.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/5a7162071b6647d18fef6ab2410d7189.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
随机森林
random_forest = RandomForestClassifier
\[\[7812 183\]
\[ 891 157\]\]
![](https://img-blog.csdnimg.cn/1642e2f9ee6f43e2888441ed76add774.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/e59ab2407a7a48e49c137449878711d7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7825 183\]
\[ 870 164\]\]
![](https://img-blog.csdnimg.cn/61ae72139d5a47ee8acc5b68a875d72c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/8ea12856619f4c27bc2223e1e4e8db23.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7774 184\]
\[ 915 169\]\]
![](https://img-blog.csdnimg.cn/e2d192c8de4d4bc2ad099dfed6c59625.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/46157905d58d4dbaa389118fc4bdc22c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7770 177\]
\[ 912 183\]\]
![](https://img-blog.csdnimg.cn/acfc2b6274984f41b43d49e73be4dacd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/3e06515cb4744cfb87e827b2da4c2ebe.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7818 196\]
\[ 866 162\]\]
![](https://img-blog.csdnimg.cn/b5583284d13c43649d604deccdc5c2fd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/cde0248e4f2a4f66bf98b002b14c8bfb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
KNN近邻
classifier = KNeighborsClassifier(n_neighbors =13,metric = 'minkowski' , p=2)
print("Mean accuracy: ",accuracyknn/K)
print("The best AUC: ", bestaucknn)
\[\[7952 30\]
\[1046 15\]\]
![](https://img-blog.csdnimg.cn/cea8cf5998294e4d869770410bc4c442.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/c3f83660fb124da5bde428b7a73e589b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7987 30\]
\[1010 15\]\]
![](https://img-blog.csdnimg.cn/ced1933bf34a4674aecc1088cd6e0c4f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/ae6f83233f3b43dcaf5c1bc3a1d108c1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7989 23\]
\[1017 13\]\]
![](https://img-blog.csdnimg.cn/2cd412676fd04ed780c84c33aeb3181e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/fcce96f8dd3e4e3ea084160b8352f3dd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7920 22\]
\[1083 17\]\]
![](https://img-blog.csdnimg.cn/901eb90b1a0b416e9e86fc4ad8b4de29.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/4ac862a640e34ef7af78d9e22a12668c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7948 21\]
\[1052 21\]\]
![](https://img-blog.csdnimg.cn/2f135172297c43778433ebb945d189f3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/f335ec7a98974cb6bb10e5c546bf054c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
高斯朴素贝叶斯
kf = KFold(n_splits=K, shuffle=True)
gaussian = GaussianNB()
\[\[7340 690\]
\[ 682 331\]\]
![](https://img-blog.csdnimg.cn/2b13ec6918ea4198a4c0d4869bb0dd8c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/60ecb979c9f447098bf11476533e9c0e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7321 633\]
\[ 699 389\]\]
![](https://img-blog.csdnimg.cn/d960ce71014b4c8cb76255c9349004c3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/b6f03fab931e441094d29f2329537f93.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7291 672\]
\[ 693 386\]\]
![](https://img-blog.csdnimg.cn/65546f1f617b40afa2817a5f1f6a6c64.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/bf248cc4f5ac440fbc0232fd1363d6cb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7300 659\]
\[ 714 369\]\]
![](https://img-blog.csdnimg.cn/0f81276da7ad4317a28dc7fa7c067b70.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/62c0babaa99f4a459bd1480d21d5b8e7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
\[\[7327 689\]
\[ 682 344\]\]
![](https://img-blog.csdnimg.cn/b866b4197b054ac98fe9fd6f121a4d87.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/e6c6f82892df41958c3ac58e694431ac.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
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\]})</code></pre><p><img referrerpolicy="no-referrer" src="https://img-blog.csdnimg.cn/26f8a0aea07c443e938adf8ec1ef54bc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_10,color_FFFFFF,t_70,g_se,x_16" alt="" title=""></p><p>我们看到根据 AUC 值的最佳模型是朴素贝叶斯我们不应该太在意最低的 R2 分数,因为数据非常不平衡(很容易预测 y=0)。在混淆矩阵中,我们看到它预测了漂亮的价值真正值和负值。令我们惊讶的是,决策树的 AUC 约为 50%。</p><h1>欠采样</h1><p>我们尝试对变量 y=0 进行欠采样</p><pre><code>gTrain, gValid = train\_test\_split</code></pre><p><img referrerpolicy="no-referrer" src="https://img-blog.csdnimg.cn/1b4ddd59874c4ba98b5870e9171af9c1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_10,color_FFFFFF,t_70,g_se,x_16" alt="" title=""></p><h2>逻辑回归</h2><pre><code>predsTrain = logreg.predict(gTrainUrandom)</code></pre><p><img referrerpolicy="no-referrer" src="https://img-blog.csdnimg.cn/0c22f20618434a01b24122211e874372.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16" alt="" title=""></p><pre><code>predsTrain = logreg.predict(gTrain20Urandom)</code></pre><p><img referrerpolicy="no-referrer" src="https://img-blog.csdnimg.cn/391db37ed11e4bc99c62773911b92ab2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16" alt="" title=""></p><pre><code>predsTrain = logreg.predict(gTrrandom)</code></pre><p><img referrerpolicy="no-referrer" src="https://img-blog.csdnimg.cn/7c49f9d966f744e0b8366f901d237f4c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16" alt="" title=""></p><h2>决策树</h2><pre><code>
print("Train AUC:", metrics.roc\_auc\_score(ygTrds))
![](https://img-blog.csdnimg.cn/44694a57f2dc408091757a4d18818ce5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
随机森林
print("Train AUC:", metrics.roc\_auc\_score(ygTr, predsTrain),
"Valid AUC:", metrics.roc\_auc\_score(ygVd, preds))
![](https://img-blog.csdnimg.cn/94fd1af2bb6442a2b39e3b1a86dc6fd4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
KNN近邻
print("Train AUC:", metrics.roc\_auc\_score(ygTrm, predsTrain),
"Valid AUC:", metrics.roc\_auc\_score(ygVal10, preds))
![](https://img-blog.csdnimg.cn/e7b990dab2fd40589287202bb3e4d4c6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
高斯朴素贝叶斯
print("Train AUC:", metrics.roc\_auc\_score(ygTraom, predsTrain),
"Valid AUC:", metrics.roc\_auc\_score(ygid, preds))
![](https://img-blog.csdnimg.cn/2ba25b95d918454f8ec300a2fe4d258b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
过采样
我们尝试对变量 y=1 进行过采样
feates = datolist()
print(feures)
feaes.remove('y')
![](https://img-blog.csdnimg.cn/2dba3245e07e4562a3d2a6ea0a2700db.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_20,color_FFFFFF,t_70,g_se,x_16)
print(gTrainOSM.shape)
(31945, 39)smt = SMOT</code></pre><pre><code>(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))
![](https://img-blog.csdnimg.cn/93a4004e98b44e78859e62c5c6a07253.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
决策树
dt2.fit(,ygTranOS)
predsTrain = dtpreict(TrainOSM)
preds = dt2.predict(gValid)
![](https://img-blog.csdnimg.cn/79f822b717ab4cf9a3c85a04d4e77db6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_11,color_FFFFFF,t_70,g_se,x_16)
随机森林
random_forest.fit(rainOSM, ygTranOS)
predsTrain = random_forest.prect(gTraiOSM)
p
![](https://img-blog.csdnimg.cn/5a87df2f27694bedb1a0d319a0a371f9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_18,color_FFFFFF,t_70,g_se,x_16)
KNN近邻
classifier.fit(granOSM, yTanOSM)
predsTrain = classifier.predict(gTaiSM)
preds = classifier.predict(Vaid)
![](https://img-blog.csdnimg.cn/740dea69ff844e3abfaedf80ba09035e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
高斯朴素贝叶斯
gaussian.fit(gTriOM, ygrainM)
predsTrain = gaussian.predcti)
![](https://img-blog.csdnimg.cn/7e03b4440b0c4284a78df440d59a9f73.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ouT56uv56CU56m25a6k,size_17,color_FFFFFF,t_70,g_se,x_16)
结论
我们看到欠采样和过采样变量 y 对 AUC 没有太大帮助。
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!