XGBoost - 估算与保持 NaN

数据挖掘 决策树 xgboost 数据插补 梯度提升决策树
2022-03-10 01:20:53

在使用可以处理缺失值的 DT 方法(例如 XGBoost)时,输入数值或分类特征有什么好处?这个问题主要是针对值不是随机丢失的情况。

一个不随机丢失分类特征的例子

  • 第 1 类:用户有一辆红色汽车
  • 第 2 类:用户有一辆蓝色汽车
  • 第 3 类:用户没有车(缺失值)

在这种情况下,最好将此特征视为具有 NaN 缺失值的二进制 0/1,还是将其视为多标签特征:0,1 和 -999 表示缺失?

同样的问题适用于指示用户汽车年龄的数字特征。这里,缺失值表示用户没有车。将缺失值保留为 NaN 还是估算这些值更好?如果插补更好,我是否应该使用中值进行插补,并在缺少值时添加交互功能?

1个回答
  1. 说起来很无聊和重复——很抱歉——但这取决于你想预测什么,以及进行插补是否有意义。如果您试图预测汽车价格,可能知道它是什么颜色很重要,但如果您试图预测该人是否可能拖欠他/她的贷款 - 汽车颜色无关紧要(除非可能,拥有粉色车这么有钱,绝对没有违约风险!)

  2. 添加新的分类特征是否有任何成本?例如,为什么不保留这两个特征,包括颜色以及该人是否拥有汽车。当然,这取决于缺失值的频率。后期新增功能(人是否有车可用于制作其他交互功能)

  3. 关于数值,当它是一种提升方法时,它并不重要,因为这些方法固有地对数值进行分类。例如 Catboost 声称拥有更好、更有效的分箱算法。

  4. 类似于 3 - 如果将年龄替换为一些非常奇数的数字,例如 -99,它不会受到伤害,因为在中途没有标准化会出现偏差。最佳实践是查看缺失值的百分比,以及插补是否会提高您的性能 - 简而言之:这是非常实验性的。

  5. 你所有的“有意义的”实验都会回顾性地告诉你有什么帮助。因此,强烈建议您使用可帮助您重现所有步骤的管道。

  6. 还有更复杂的插补方法 - 例如,在您的示例中创建一个预测模型来预测“年龄”,然后使用该预测年龄作为第二个模型的输入。当然,一切都必须通过彻底的交叉验证,以确保没有泄漏。

  7. 尽可能包容 - 慷慨地添加各种特征 - 例如在你的数值中 - 拥有所有中等,平均和......然后决定哪个更有意义。如果这里有统计学家,我会被淘汰,因为存在过度拟合您的测试数据的风险!所以我希望你有海量的数据。