关注概率预测时的 LightGBM 模型改进

机器算法验证 机器学习 分类 预测模型 助推 奥克
2022-03-28 08:30:12

我正在使用 LightGBM 构建一个二进制分类器。目标不是预测结果本身,而是预测目标的概率。更具体地说,它更多的是根据目标事件发生的概率对不同的对象进行排名。

数据集是不平衡的,因为类的分布大约是 1 到 10。并不是说数据严重不平衡,但这肯定会影响模型的性能。

鉴于概率是这项任务的关键,我认为以 AUC 分数为目标在这里更有利,特别是考虑到它在某种程度上不受不均匀类分布的影响。

我有一种感觉,我在特征工程方面做得不好(我意识到这部分的重要性),但让我们假设这是我需要使用的数据集以及所有特征工程技巧已经实施。

老实说,我认为基于 boosting 的模型不需要太多的数据争论是理所当然的。例如,标签编码就足够了,计算量大的 one-hot 编码甚至可以胜过,等等。

尽管如此,我得到的结果远非完美。AUC 得分为 0.82 让我认为在概率预测方面,该模型并不糟糕,但正如您所看到的,其他指标充其量是令人满意的。

F1-score: 0.508
ROC AUC Score: 0.817
Cohen Kappa Score: 0.356

分析精确率/召回率曲线并尝试找到将它们的比率设置为的阈值会产生更平衡的情况,但对于这项任务,尚不清楚应该最小化哪种类型的错误,或者是否应该最大化 f1-score是目标。1

无论如何,所有常规指标都取决于所选阈值,因此尚不清楚我是否可以节省阈值调整时间。

我的问题:

  1. 声明对于此类任务具有相当高的 AUC 可以优先考虑,而不是仅查看精度、召回率和其他作为阈值函数的指标,这是否正确?

  2. 我结合使用 Optuna 和 5 折交叉验证来选择最佳超参数。然而,结果并没有显着改善。无论用于 LGBMClassifier 的估计器数量如何,我什至无法在火车数据集上获得非常高的 AUC 分数。这是否意味着对于这个任务、数据集和特征来说这是某种平台?
    有哪些常用方法(除了更好的特征工程和获取更多数据)来改善梯度提升方法的结果?

             precision    recall  f1-score   support

       False       0.92      0.76      0.83     10902
        True       0.40      0.70      0.51      2482

    accuracy                           0.75     13384
   macro avg       0.66      0.73      0.67     13384
weighted avg       0.82      0.75      0.77     13384
Results for threshold=0.66:
              precision    recall  f1-score   support

       False       0.89      0.89      0.89     10902
        True       0.52      0.51      0.51      2482

    accuracy                           0.82     13384
   macro avg       0.70      0.70      0.70     13384
weighted avg       0.82      0.82      0.82     13384

F1-score: 0.515
ROC AUC Score: 0.817
Cohen Kappa Score: 0.405
```
1个回答

在这种情况下(以及在大多数情况下),使用二元对数损失分类作为目标是一个很好的举措。如果我们关心概率可能偏离多少,我们可能希望指出Optuna (或我们的通用超参数搜索框架)以最小化预测的 Brier 分数;AUC-ROC 是一个排名分数,它比这项任务的 F1 分数要好,但不一定是我们的最佳选择。

关于主要帖子中的特定问题:

  1. 是的,但我们可能会做得更好(如上所述)。使用基于不连续规则(如 Precision、Recall、F1 等)的指标可能会产生误导。这篇关于准确性是否是二进制分类设置中的不正确评分规则的帖子?专注于准确性,但同样适用于精度等指标。
  2. 尝试不同的超参数以及学习器;LightGBM 很棒,但不是灵丹妙药。即使只是简单地尝试XGBoostCatboost也可能足以探索一些显而易见的简单选择。

关于评论中的子问题:

  1. 使用等渗回归可能是有益的,但必须仔细设置(保持集等)。如果我有时间,我会不考虑“重新采样”,但通常它在 ROC-/PR-AUC 方面给我的收益很少。也可能值得考虑其他校准选项,例如Platt 缩放beta 校准不过,在我的工作中,我还没有找到一个能凌驾于其他人之上的人。
  2. 请在 CV.SE 线程中查看我的回答:xgboost 的偏差预测(高估)我认为这与您的问题有关。正如那里提到的,(早期)梯度提升实现(是?)没有很好地校准。有了更大的数据集和更精心设计的损失函数,现在这可能在一定程度上得到了改善,但我没有看到任何最近的论文。