不平衡类的异常值检测

数据挖掘 Python 阶级失衡 异常检测 离群值
2021-09-23 02:25:24

我必须建立一个预测模型,以根据其他一些数字数据预测布尔赢/输变量;并进一步找出“获胜”的观察特征。

但是,我的数据集中“赢”的数量是 0.05%。我已经尝试过过采样和下采样,但它没有奏效。即使我采用等量的“赢”和“输”,该模型对于其余的“输”值也不准确。我也尝试过举重,但效果不佳。理想情况下,我认为我必须为“赢”赋予很高的权重。

PS:使用RandomForestClassifier,用混淆矩阵来验证。

我不热衷于尝试 SMOTE,因为我听说它在 Python 中很难。

所以现在我正试图以不同的方式看待它,并对“获胜”案例进行异常检测,因为数据中的“获胜”案例如此之少是很自然的。所以,两个问题

  1. 这是一个正确的方法吗?
  2. 如何使用 Python 进行操作?
2个回答

您需要区分这些情况:

  1. 数据不平衡
  2. 数据不平衡 + 样本数量很少(少数类)
  3. 严重的数据不平衡 + 样本数量很少(少数类)

20:60 vs. 10:20 vs. 100:1000 vs. 10:100

这些情况:

  1. 不同类别之间的相似性。

  2. 同一类中差异很大。

您需要了解您的问题属于哪种情况。

如果您有非常严重的数据不平衡 + 样本数量很少 + 多数类内的广泛变化以及不同类之间的相似性。常规过采样或下采样技术不会像大多数专门为处理数据不平衡而设计的合成过采样技术一样帮助您,但假设是有足够数量的样本。

尝试更多地关注主要用于处理数据不平衡的集成技术。SMOTE-Boost RUSBoost SMOTEBagging IIIVote EasyEnsemble

首先,异常检测看起来并不适合您的用例。

方法 1:这里 有一个 python 模块可以使用各种技术执行欠采样和过采样该软件包还包括 SMOTE 实现。使用此包尝试在运行 RandomForest 或任何其他分类算法之前平衡样本中的事件数据。

方法 2:如果上述方法效果不佳,那么 firth 的偏差减少逻辑回归方法以及基于惩罚轮廓似然性的参数估计置信区间将适合您的情况。您可以尝试从 Python scikit 库对逻辑回归进行 L1 (Lasso) 正则化。或者,您可以尝试 R 的 'logistf' 包示例