我正在使用 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是目标。
无论如何,所有常规指标都取决于所选阈值,因此尚不清楚我是否可以节省阈值调整时间。
我的问题:
声明对于此类任务具有相当高的 AUC 可以优先考虑,而不是仅查看精度、召回率和其他作为阈值函数的指标,这是否正确?
我结合使用 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
```