从逻辑回归到 XGBoost - 选择特征来运行模型

数据挖掘 特征选择 xgboost 逻辑回归 博鲁塔
2022-02-21 13:57:34

我被要求查看 XGBoost(在 R 中实现,最多大约 50 个功能)作为已经存在但不是由我开发的逻辑回归模型的替代方案,该模型由大量信用风险数据创建,包含一个几千个预测变量。

围绕逻辑回归的文档准备得很好,因此一直跟踪排除每个变量的原因。其中包括:

  • 自动数据审计(通过内部工具) - 即检测到过多的缺失或极低的方差等;
  • 缺乏单调趋势 - 尝试粗分类后的 u 形变量;
  • 高相关性 (>70%) - 在原始级别或分箱后;
  • 低 GINI / 信息值 - 在原始级别或分箱后;
  • 代表性低——通过人口稳定性指数 PSI 评估;
  • 业务逻辑/专家判断。

大量变量是派生出来的(包括聚合,如其他预测变量的标准差的最小值/最大值/平均值),有些变量被认为过于综合,无法包含在内。我们也决定不在 XGBoost 中使用它们。

回归最初使用 44 个预测变量(逐步过程的输出)运行,而最终批准的模型仅包括 10 个。

因为我对 XGBoost 比较陌生,所以我想知道特征选择过程是否与为准备逻辑回归所做的有很大不同,以及一些规则/良好实践是什么

根据我一直在阅读的内容,完美相关和缺失值都在 XGBoost 中自动处理。我怀疑趋势的单调性不应该是一个问题(因为与回归不同,重点是非线性关系),因此分箱可能会被淘汰;否则我对处理 u 形变量有点不确定。由于 GINI 通常用于在 CART(“分类和回归树”)方法下决定决策树中的最佳分割,因此也许这是一个值得保留的标准。

我一直在考虑仔细阅读我们的内部自动数据审计工具,删除标准聚合(如上所述过于合成),删除低 GINI 和低 PSI 变量,可能处理非常高(95+%)的相关性,然后应用套索/ 弹性网并从那里取出。我知道 Boruta 在这里很重要,但到目前为止仍然没有可靠的意见。

1个回答

基于树的方法的主要优点之一是“高相关性”不是什​​么大问题(与线性模型相比)。另一个优点是模型背后没有参数假设。因此,您很有可能将一些用于执行 Logit(高相关性/u 形)的变量用于提升。

WRT 到原始级别和/或低代表性,可能是某些功能在提升过程中实际上是有用的。我至少会试一试。检查特征重要性以排除预测能力很小的特征。

缺失不携带任何信息,因此排除具有大量缺失的特征。Bossting 本质上与这里的 Logit 存在相同的问题。对于专家建议排除的功能也是如此。但是,您仍然可以查看某些功能是否有帮助。这是一个测试问题。

请注意,这xgboost需要一个矩阵,其中因子被编码为虚拟变量。这在您使用 R 时非常重要。

您可以添加提前停止来提升,直到没有更多进展。

关于你的名单,我的感觉(不知道详细的数据)会是......

可用于xgboost

  • 缺乏单调趋势 - 尝试粗分类后的 u 形变量;
  • 高相关性 (>70%) - 在原始级别或分箱后;

值得一试:

  • 低 GINI / 信息值 - 在原始级别或分箱后;
  • 代表性低——通过人口稳定性指数 PSI 评估;

排除:

  • 业务逻辑/专家判断。
  • 自动数据审计(通过内部工具) - 即检测到过多的缺失或极低的方差等;

模型的一些想法:

有许多可以/必须调整的超参数。确保为您的问题选择正确的“学习任务参数”(可能是右偏分布)。看看文档,有一些很好的提示。还可以尝试调节 ( alpha, lambda)。max_depth(通常在 5 到 8 之间效果很好)。太小的树不适合,太大的树过拟合。着眼于subsample通过使树助推器“随机”来对抗过度拟合。还要看学习率eta低(er)学习率通常适用于大(er)数据。

您还可以添加自定义损失,这可能会有所帮助。我在 R 中玩过,你可以在这里找到一些代码(Python 并没有那么不同):https ://github.com/Bixi81/R-ml

作为替代方案xgboost,您还可以查看LightGBM https://github.com/Bixi81/Python-ml/blob/master/boosting_regression_boston.py