不到70行Python代码,轻松玩转决策树预测客户违约模型(附案例数据与代码)

在这里插入图片描述

本文已在公众号 “ 数据分析与商业实践 ” 首发,源数据与源代码可空降文末

本文将会包含如下知识点
在这里插入图片描述

数据读入

在这里插入图片描述

数据说明

  • obey:违约情况,1-违约;0-履约
  • gender:性别,1-男,0-女
  • AGE:年龄;
  • edu_class: 教育阶层,0-3 分别表示初中,高中,大专,大学
  • nrProm:n recent promotion / month 最近一个月的电话营销次数
  • prom:最近一周是否有打电话
  • telephone_service: 客户是否有过电话投诉

数据探索

对各分类变量进行数量上的统计

在这里插入图片描述
在这里插入图片描述

将连续变量转化为分类变量

连续变量的存在是使决策树模型不稳定的主要原因之一,这里使用等宽分箱

而且将连续变量转化为类别变量后,可以与其他类别变量一起,都直接使用卡方检验或方差分析,写成函数快捷操作也更方便。

等宽分箱:每个分箱中的样本量一致
等深分箱:每个分箱中的取值范围一致

# 数据集中的两个连续变量
bins_label = [1, 2, 3, 4, 5]

df['AGE'] = pd.qcut(x=df['AGE'], q=5, labels=bins_label)
df['duration'] = pd.qcut(x=df['duration'], q=5, labels=bins_label)

方差分析与卡方检验

  • 多分类使用方差分析如 obey 与 AGE, edu_class, nrProm
  • 二分类用卡方检验或方差分析如 obey 与 gender,posTrend,prom,telephone_service

在这里插入图片描述

插播一条样本量和置信水平 α_level 的注意点(置信水平 α 的选择经验)
在这里插入图片描述
样本量过大,α-level 就没什么意义了。数据量很大时,p 值就没用了,样本量通常不超过 5000,所以为了证明两变量间的关系是稳定的,样本量要控制好。

在这里插入图片描述

上述代码框可以反复运行几次,避免随机抽样不平均或有例外,可以发现除了最不显著的 prom 和也不怎么显著的 nrProm 和 edu_class 外,其他变量都十分显著,刷新多次就会发现,来来去去都是这三个变量不怎么显著

筛选变量

去除 prom 与 nrProm 这两个变量,剩下的用于后续建模

data = df.drop(columns=['edu_class', 'prom', 'nrProm'])
data.sample(3)

在这里插入图片描述

决策树建模

定义树

在这里插入图片描述

拆分测试集与训练集

在这里插入图片描述

训练定义好的树并进行预测

在这里插入图片描述

模型评估

在测试集上的表现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里表现出了过渡拟合的情况,毕竟决策树往死里建的话可以精确到每一位用户,那模型的泛化性便大打折扣。比较好的模型是 trainning 和 test 的曲线都往左上角突出,而且两条线几乎是没有间隔。这也解释了为什么我们需要对测试集和训练集都进行预测,其实是为了这一步的画图工作。上图中,红train 与 蓝test 之间有不少间隔,说明模型在训练集上的表现比训练集要好,训练集表现更好 – 过度拟合(因为模型记住了训练集中的一些噪声点,说明可能需要回到开头处理一下异常值或者在拆分测试训练集的时候下点其他功夫如交叉验证等),又或者是建模参数的选择方面出了问题,总之需要根据实际情况探索是什么原因导致了在测试集上的表现相对减弱,即模型的泛化能力降低了).其中的一个解决办法是我们可以考虑降低模型的复杂度,拔高一下模型在测试集的表现,模型在训练集的表现稍微降一点点也没事。

至于 ROC 曲线与 AUC 等模型评估指标的理解,可参考文章:

趣析逻辑回归模型评价指标

在这里插入图片描述

再次看出模型在测试集与训练集的表现上的差距还是比较大的。

模型优化

梯度优化

在这里插入图片描述
重复模型评估的步骤与查看模型预测结果
在这里插入图片描述

果然,牺牲了小部分在训练集上的精准度,换来了模型更高的泛化性,过拟合的问题得到了较好的解决。

查看“最优”模型的各种参数,并重新建模

# 下面这行代码将显示出决策树建模中各种参数的最优组合
clfcv.best_params_

# 用 best_params 得出的最佳组合进行建模,需要手动输入参数。
clf = tree.DecisionTreeClassifier(criterion='gini', max_depth=3,
                                  min_samples_split=4) 
clf.fit(X_train, y_train)  #  使用训练数据建模,建模结果便是调优前后对比图中的下半部分,这里不再显示

可视化决策树

在这里插入图片描述

在这里插入图片描述

注:相关数据源和超详细的代码(python,Jupyter Notebook 版本 + 详细注释)已经整理好,在 “ 数据分析与商业实践 ” 公众号后台回复 “ 决策违约 ” 即可获取。

在这里插入图片描述
案例实战 | 逻辑回归实现客户流失预测

案例实战 | Python 实现 RFM 模型

后续会不断更新常见场景下的 Python 实践
在这里插入图片描述

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值