当我关心异常值时,适当的目标函数和评估指标?

数据挖掘 回归 xgboost 评估 离群值 目标函数
2021-09-21 14:02:49

我正在阅读这两页: xgboost 文档 评估指标上的帖子

我有一个数据集,我试图在用户级别预测未来的支出。我们的很多支出来自大笔支出者、异常值。所以,我们关心他们。我正在使用 XGBoost。

我已经尝试过 xgboost reg:squarederror这往往有点低估了。然后我尝试了reg:squaredlogerror,这导致预测的预测远不止使用平方误差。

我尝试使用几种不同的超参数组合进行调整,但没有一个能像改变目标那样产生如此大的差异。所以,我一直在关注目标函数,并试图了解是否还有另一个值得一试的?

在上面的 xgboost 文档中,其他回归目标选项中的一些reg:pseudohubererror是以及count:poisson.

没有选择,我可以看到,只有 MAE。如果使用不易受 rmsle 异常值影响的目标函数让我远离准确性,而 rmse 让我更接近,那么使用 MAE 可能值得一试吗?在这个数据集中,异常值更重要,但普通用户也很重要。

什么是好的目标和评估指标?MAE值得一试吗?如果是这样,怎么做?查看上面的文档,我看不到 MAE 作为回归参数下的选项。

1个回答

您可以尝试以下几件事:

  • 使用四次误差,(是的-是的^)4,而不是二次误差。这将惩罚很多大错误,远远超过 MSE。问题是这在 xgboost 中没有实现,您需要开发一个自定义 loss
  • 如果你的目标总是积极的,你可以使用目标作为训练权重。这会给异常值更多的权重。如果不总是正数,可以使用目标的绝对值作为权重。如果直接使用目标值会给异常值带来过多的权重,您可能需要对其进行转换(例如,使用对数或平方根),并且如果您有目标值为零的样本,您可能需要向所有样本添加一些 epsilon权重。请注意,可以使用 weights 轻松训练 xgboost
  • 尝试预测训练分布的分位数,然后使用训练累积概率函数转换您的预测。