本文主要是介绍Kaggle竞赛Santander 客户满意,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Kaggle竞赛Santander 客户满意
Banco Santander 获得了数据科学社区Kaggle最近主办竞赛的帮助。本次大赛的主要目标是建立一个区分满意和不满意客户的预测模型。
银行提供训练和测试数据集。训练数据集提供客户满意度的指标。参赛者要求使用此数据集建立,调整模型,成功预测没有提供满意度指标的测试集。
训练集包含369个匿名变量,和76818观测值。
数据
变量可用信息较少。只有数据结构和变量名称的特别提示提供深入了解如何最好的预处理数据。事项复杂,因为它是目前尚不清楚哪些变量是分类的,哪些是连续的。此外,在数据集中的一些变量完全无用。我们观察到的数据在很大程度上是不平衡的。训练集包含大约73000客户满意度和大约3000名不满的客户。
研究表明,预测变量包含整数变量全是分类变量而其余的变量是连续的。利用这种方法,我们就分开分类变量和连续变量。因此我们确定分类变量,对连续变量应用中心化和标准化进程,以消除以后的模型拟合因为量纲带来的任何不必要的影响。我们还检查分类变量的方差为零,以识别并删除那些所有观测值只存在一个值的。
模型
我们通过对问题施加高精度模型来评估预测的最大程度。我们最初的努力包括提高运行boosted tree模型和深度学习模型。
Xgboost - Sricharan Maddineni
极端梯度提升是一个功能强大的机器学习算法,在回归,分类和排名的过人之处。 Xgboost使我们能够实现简单的预测模型。梯度提升通过创建数百个树模型,加法产生一种高静的预测模型。 Xgboost的一个缺点是它只能处理数字矩阵,但在Santander 数据集不是问题问题,因为所有的样本是数字。 Xgboost算法还适合稀疏模型矩阵,因为观测值被表示为1或0,这简化了计算需求。
xgboost的关键是通过定义目标函数找到正确的参数来衡量模型的性能。对于目标函数的方程给出如下:
Obj(Θ)=L(Θ)+Ω(Θ)
其中L是训练损失函数和Ω为正则化项。
正则项控制模型的复杂度,并有助于避免过度拟合。对于这个特定的kaggle竞赛,AUC进行了优化,但更普遍的是使用logistic损失。
Xgboost是ensembling树模型,其中每个树的预测分数归纳起来得到最终的比分。此外,我们得到CART得分而不是分类变量。
数学上,这被表示为:
其中K是tree的数量,F是所有CART树的集合,f是函数空间F的函数
目标函数因此可以写为:
创建稀疏模型矩阵:
Xgboost模型代码:
Xgboost特征重要性:
GBM 模型 - Mike Todisco
GBM是一个用于分类和回归预测建模算法。在这种情况下,我们使用决策树作为基础,这是主要的用法,但GBM可以采取其它形式,例如线性。该模型是boosted,算法上结合许多弱模型,梯度提升迭代计算残差以提高精确度。 GBM与其他高端算法相比,性能可靠。我们没有丢失任何数据,但GBM足够强大处理NA。 GBM也使得任何缩放或正态化是不必要的。
GBM的包有几个可以运行的损失函数。两个常用损失函数是伯努利和Adaboost。伯努利是0和1的logistic损失函数。 Adaboost算法为0和1的一个指数损失函数。
在GBM模型有许多参数调整。下面是比较重要的几个:
•树的数量
•Shrinkage - 这也被称为学习率,根据损失梯度决定算法移动多快
•深度 - 每棵树将评估的决策数量
•最小观测 - 决定了产生一个叶节点的观测次数
•Cv.Folds - 运行交叉验证的数目
Adaboost 代码:
Bernoulli 代码:
随机森林- Matt Samelson
我们可以在R Caret 包中的训练函数优化随机林模型的参数。这种封装函数提供基本包没有的强大分析和优化特性。
在这种情况下我们选择使用R基本ranger 包生成森林。
为了最大化计算资源选出调整三个参数,每一轮的树的数量,最大树深度,树的样本。参数的范围可以在下面显示的代码中找到。
我们还采用了五折交叉验证,进一步优化模型。总体模型结果可以在博客文章的末尾汇总表中可以看出。
模型结果:
Model and Parameter | XGBoost | Adaboost | Neural Net | Bernoulli | RF |
---|---|---|---|---|---|
AUC | 0.840771 | 0.839205 | 0.821 | 0.820872 | 0.787 |
这篇关于Kaggle竞赛Santander 客户满意的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!