赞
踩
近几年,伴随着互联网的发展,在线食品配送业务成为了新潮流。在此背景下,我们帮助客户对“在线食品交付偏好-班加罗尔地区”数据开展研究,建立印度在线食品配送平台消费者的用户画像,研究影响顾客购买意愿的因素,并给出相应的预测。本文结合一个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的影响。
由于原数据集有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的采样显得必要了。
本文旨在探讨如何有效处理并分析严重不平衡的破产数据(查看文末了解数据免费获取方式),采用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))
点击标题查阅往期内容
【视频讲解】Python比赛LightGBM、XGBoost+GPU和CatBoost预测学生在游戏学习过程表现|数据代码分享
左右滑动查看更多
01
02
03
04
plt.xticks(rotation=90)
虽然识别出存在跨越多个标准差的异常值,但鉴于缺乏领域专业知识,未直接删除这些异常值,以避免可能的信息损失。
采用K-means聚类算法探索数据在特征空间中的分布特性,通过肘部法则确定最佳聚类数。结果显示数据多样性较高,可能包含多个潜在的子群体。
数据是多种多样的,许多实体分布在特征空间中。
因此,我们的数据可能属于 2 个以上的类,因为在聚类 = 2 时,方差似乎有点偏离。
针对数据的高度不平衡性,应用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。
资料获取
在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。
数据获取
在公众号后台回复“破产数据”,可免费获取完整数据。
点击文末“阅读原文”
获取全文完整代码数据资料。
本文选自《过采样SMOTE逻辑回归、SVM、随机森林、AdaBoost和XGBoost对不平衡数据分析预测》。
点击标题查阅往期内容
Python进行多输出(多因变量)回归:集成学习梯度提升决策树GRADIENT BOOSTING,GBR回归训练和预测可视化
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化
R语言基于树的方法:决策树,随机森林,Bagging,增强树
python在Scikit-learn中用决策树和随机森林预测NBA获胜者
python中使用scikit-learn和pandas决策树进行iris鸢尾花数据分类建模和交叉验证
R语言里的非线性模型:多项式回归、局部样条、平滑样条、 广义相加模型GAM分析
R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类
R语言用泊松Poisson回归、GAM样条曲线模型预测骑自行车者的数量
R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测
R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测
R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者
R语言基于树的方法:决策树,随机森林,Bagging,增强树
R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间
R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析
R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。