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

本文通过Python构建XGB决策树模型预测客户违约,涉及数据读入、探索、变量筛选、建模、优化及可视化。通过方差分析和卡方检验筛选特征,发现模型在训练集上过度拟合,通过梯度优化提高泛化能力。
摘要由CSDN通过智能技术生成

089dbc2a530897fefa793a81a0c9c9f1.png

关注一下~,更多商业数据分析案例等你来撩

9a2399cc816c7c892d21b4a25dc3ac88.png

本文包含的代码知识点如下导图,已在公众号“数据分析与商业实践”首发,欲获取源数据与包含详细注释的源代码可空降文末 ~~​

f0e7b8991f265245b4a99172e438e630.png

数据读入

7981c4441f551b1f3f323a773bc1f84f.png

af9e952e01b35c48d2c8c2472c9796c4.png

数据说明

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

数据探索

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

ac01472f78f7bb9dcbd404316ab7b09a.png

c6886e960813347ed6d901050e236f13.png

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

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

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

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

6333440c24ee87494024f67ea16654ad.png

方差分析与卡方检验

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

4f1f7c6e72e35bdc9aee9a8eb8491a92.png

插播一条样本量和置信水平 α_level 的注意点(置信水平 α 的选择经验)

7d354beefedb24a3ca278b95c72fdb1a.png

样本量过大,α-level 就没什么意义了。数据量很大时,p 值就没用了,样本量通常不超过 5000,所以为了证明两变量间的关系是稳定的,样本量要控制好。

8cfe65c844feb2037276c65b6b14f162.png

5f146d80ca5e99f523d750c486a69ee7.png

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

筛选变量

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

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

bf5346bc71e99bfc349e0e5b142ec105.png

决策树建模

定义树

d33d55b1c29466c6a17558c29896b555.png

拆分测试集与训练集

e112f522c2b21fa184502fe1f5afa3f2.png

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

d3c691bc5f58db70a40b080216671643.png

41b8da77a1152d6fb24730e2c8586640.png

模型评估

在测试集上的表现

070465402fed11e5babfa1c0bf95629d.png

edb60121ef4c4a0297d332d2d2ff9462.png

252c91b8d57c90e8f8dda4fa7cce6828.png

079790049ff12c808b6f0986da53c101.png

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

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

趣析逻辑回归模型评价指标​mp.weixin.qq.com
5e5fed2922676751cfb39a6d03c8dc04.png

8b98bb455763d93d84ab927a6d30b366.png

da2a6ccc1ff37573d528e50335a3db0b.png

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

模型优化

梯度优化

9aec17e7288b736faa88ea1460fa29da.png

重复模型评估的步骤与查看模型预测结果

b1198a398a360bdcc618c85ff74af60e.png

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

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

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

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

可视化决策树

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

4bf869d4867effe8ff70a9b222a62319.png

6f11d6ef5476e9ad31d33cbdfcaaecc6.png

4e6082d35100232a1436187f8cf48f63.png
案例实战 | 逻辑回归实现客户流失预测​mp.weixin.qq.com
bb026fa1d147586c9ae9f105327df021.png
案例实战 | Python 实现 RFM 模型​mp.weixin.qq.com
3da071812ed8c7a01f2f1f902194e7e4.png

后续会不断更新常见场景下的 Python 实践

364f945c673317d06b0d500e4faee1e1.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值