过采样SMOTE逻辑回归、SVM、随机森林、AdaBoost和XGBoost对不平衡数据分析预测

全文链接:https://tecdat.cn/?p=37115

原文出处:拓端数据部落公众号

分析师:Yimeng Li

近几年,伴随着互联网的发展,在线食品配送业务成为了新潮流。在此背景下,我们帮助客户对“在线食品交付偏好-班加罗尔地区”数据开展研究,建立印度在线食品配送平台消费者的用户画像,研究影响顾客购买意愿的因素,并给出相应的预测。本文结合一个Python预测不平衡破产数据实例的代码数据,为读者提供一套完整的实践数据分析流程。

解决方案

任务/目标

建立印度班加罗尔地区在线食品配送平台消费者的用户画像,研究影响顾客购买意愿的因素。

数据源准备

数据集中包含一个完整的调研问卷和相应的用户反馈结果。问卷共计有效填写量338条,包含55项与订购用户相关的调研内容。问卷的发放方式为简单随机抽样(simple random),即随机选取到店和在线下单的用户并邀请填写问卷内容。

特征转换

由于数据集是问卷的形式,因而在数据预处理阶段将部分描述程度的变量转化为了整数,我们根据用户的意愿按程度进行给分:
Strongly agree (Very important): 2
Agree (Important): 1
Neutral (Moderately important): 0
Disagree (Slightly important): -1
Strongly disagree (Unimportant): -2

数据集的(部分)变量如下:
Output: 用户是否愿意再次线上下单(作为本数据集的因变量)
Age: 用户的年龄
Monthly income: 用户月薪的等级
Ease and convenience: 线上下单的便捷程度
Late delivery: 较慢的配送对不再购买的影响程度
Politeness: 送餐骑手的礼貌程度
Temperature: 食品温度的重要程度

划分训练集和测试集

为了验证模型的优劣,将数据集分为两部分,70%的数据作为训练集,30%的数据作为测试集。

建模

模型的目标是对output(用户是否愿意再次线上下单)进行预测,并对研究各变量对output的影响。

基于AIC的模型初步筛选

由于原数据集有55个自变量,为了让模型有更好的解释性,我们利用逻辑回归和AIC准则初步筛选得到9个自变量。如下所示:

Age

Ease.and.convenient

Time.saving

Late.Delivery

Unaffordable

Order.placed.by.mistake

Politeness

Freshness

Temperature

根据这九个自变量重新尝试搭建模型,得到的预测准确率为88%,AUC为94%

模型优化

由于数据集中因变量output为0和1的数据量有较大差异,为1:3,为了保证样本的平衡性,引入smote采样法(Smote采样简而言之是通过对原样本进行线性变换得到新的模拟样本,与bootstrap不同)经过采样,得到了数据量更大且具有较好平衡性的样本。通过此方法重新进行逻辑回归,模型的AUC从94%提升至97%,模型的表现得到了提升。

除了基于Smote采样的逻辑回归以外,在模型的探索过程中还引入了决策树、朴素贝叶斯以及加入交叉项等方法,得到的结果如下所示

综上,我们可以发现,就测试集合的准确率而言,C5.0决策树的准确率最高,为92.31%,其次是朴素贝叶斯模型,准确率为91.45%;
然而, 由于他们不是线性模型,这两者模型不具有可观的解释性;
特别的,通过之前的描述性统计与常识可以知道,年龄分布是类似正态的,因此有必要考虑年龄的二次项使得模型更加有效,而上表也进一步证实了引入年龄二次项使得模型的精度有较为显著的提高。
值得注意的是, 在具体选择模型的时候,需要结合具体所研究的数据特征进行选择模型; 例如,没有smote采样的模型由于训练的样本不平衡, 在测试集上的准确率较高但是在训练集上的AUC较少, 容易发生误判, 对于未知Output的分布未知的数据, 则Smote的采样显得必要了。

SMOTE逻辑回归、SVM、随机森林、AdaBoost和XGBoost分析严重不平衡的破产数据

本文旨在探讨如何有效处理并分析严重不平衡的破产数据,采用XGBoost模型作为主要分析工具。数据集包含实体的多种特征和财务比率,目标变量为公司未来几年是否破产(1表示破产,0表示未破产)。通过一系列预处理步骤,包括缺失值处理、多重共线性检查、异常值分析以及通过K-means聚类探索数据分布,本文最终实现了对不平衡数据的有效重采样,并评估了多种机器学习模型在破产预测任务上的性能。

数据预处理

数据导入与探索

首先,使用pandas库导入数据集,并设置实体ID为索引:

df = pd.read_csv('train.csv')
df.set_index('ID', inplace = True)

df.head()

数据不平衡性

初步分析表明数据存在严重的不平衡性,这是破产预测任务中常见的挑战。不平衡性可能源于罕见但影响重大的事件发生。

缺失值处理

对于数据中的缺失值,采用适当的插补策略以确保数据完整性。通过可视化缺失值矩阵,可以直观地了解缺失值的分布情况。

plt.figure(figsize=(16,6))
msno.matrix(X_df,labels = True, color=(0.20,0.15,0.45))

多重共线性检查

通过绘制热图检查特征之间的多重共线性问题,以避免模型训练过程中的信息冗余和过拟合风险。

fig, ax = plt.subplots(figsize=(16,12)) 

plt.xticks(rotation=90)

异常值处理

虽然识别出存在跨越多个标准差的异常值,但鉴于缺乏领域专业知识,未直接删除这些异常值,以避免可能的信息损失。

数据探索与聚类分析

K-means聚类

采用K-means聚类算法探索数据在特征空间中的分布特性,通过肘部法则确定最佳聚类数。结果显示数据多样性较高,可能包含多个潜在的子群体。

数据是多种多样的,许多实体分布在特征空间中。

因此,我们的数据可能属于 2 个以上的类,因为在聚类 = 2 时,方差似乎有点偏离。

数据重采样

SMOTE技术

针对数据的高度不平衡性,应用SMOTE(Synthetic Minority Over-sampling Technique)技术进行过采样。通过生成少数类(破产)的合成样本,平衡数据集,从而提高模型对少数类的识别能力。

X_res, Y_res = sm.fit_sample(X_train, Y_train)

模型评估与选择

模型应用

将逻辑回归、SVM、随机森林、AdaBoost和XGBoost等模型应用于处理后的数据集,评估它们在破产预测任务上的性能。

pd.DataFrame(predictors).T

性能比较

通过多次实验调整SMOTE中的过采样比率,并对比不同模型在召回率上的表现。结果显示,XGBoost模型在0.11214的打击率下取得了最高的召回率,表明其在处理不平衡数据方面的优势。

smote_values = np.linspace(0.065, 0.125, num= 15)
smote_values

召回分数是我们感兴趣的。召回率显示了我们的模型将正值预测为正值的能力。由于我们的数据高度不平衡,因此任何模型都很难获得更好的召回率。有时模型忽略了少数群体。

结论

综上所述,XGBoost模型在破产预测任务中表现优异,特别是在处理严重不平衡的数据集时,其高召回率证明了其在识别少数类(破产公司)方面的有效性。通过合理的数据预处理、重采样策略以及模型选择,本文为类似的不平衡分类问题提供了一种有效的解决方案。未来的研究可以进一步探索更多先进的重采样技术和模型优化策略,以提升模型的整体性能。

分析师

Yimeng Li拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在南京大学完成了数学系统计学专业的学位,专注数理统计、机器学习领域。擅长R语言、Python、Tableau。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值