解决类不平衡问题的最佳方法,为什么?

数据挖掘 机器学习 Python 统计数据 阶级失衡
2022-03-06 19:42:00

我有一个需要检测欺诈的数据集。99% 不是欺诈,1% 是。

有哪些方法可以解决类不平衡的问题?

4个回答

有2种技术:

  1. Oversampling:这下有很多技术,ROSESMOTE是最有名的用于过采样的技术。在 ROSE 中,它只是增加了少数类。在 SMOTE 中,它综合生成更多数量的稀有少数类用于平衡。大多数场景 SMOTE 提供比 ROSE 更好的结果,但您应该两者都尝试。除此之外,还有另一种技术只是复制记录以使其等于 n 数。链接用于在 Python 中实现 SMOTE。

  2. UnderSampling:这下也有很多技术,但是这个Link-1Link-2让您更好地了解欠采样。一般来说,我不喜欢欠采样,因为你会丢失一些信息。

您需要使用这些技术的原因是,如果我们不使用,那么模型的准确率将会非常高,它能够以 99% 的准确率正确预测不是欺诈的情况,这是我们不想要的。如果它能够以同样的准确度进行预测以找出欺诈行为,那么这是一个很好的洞察力。这只能通过使用上述任何一种技术来实现。

看看,如果您还有其他问题,请告诉我。

有几种技术

随机上采样

  • 缺点->创建可能会给原始数据引入偏差和/或噪声的重复和/或人工实例

随机下采样

  • 缺点 -> 并非所有数据点都被使用。可能会删除有用的信息。具有非常高的类不平衡的数据的更好选择。

重复采样

  • 在此过程中,您从数据中识别出一些明确的负面因素以及明确的正面因素。训练您的模型并根据此模型对所有样本数据进行分类。
  • 重复此过程,并在最后执行投票以获得高度不平衡数据集的类标签。

您可以按照这两种方法进行操作。

  1. 正如其他人已经提到的,您可以在训练数据集中将分布更改为 50-50。
  2. 您可以使用加权随机森林算法在两个类之间建立平衡。在该算法中,随机森林本身为这两个类添加权重,以达到 50-50% 的权重。

您可以在所有类型的算法中使用一些相关参数作为成本函数,例如KappaCEN、 。MCEN

免责声明:

如果您使用的是 Python,则可以使用PyCM模块。该模块在接收到您的数据的混淆矩阵后,可以根据您的数据集的特点,提出一些适合评估您的算法的参数。

这是一个从该模块获取推荐参数的简单代码:

>>> from pycm import *

>>> cm = ConfusionMatrix(matrix={"Class1": {"Class1": 1, "Class2":2}, "Class2": {"Class1": 0, "Class2": 5}})  

>>> print(cm.recommended_list)
["Kappa", "SOA1(Landis & Koch)", "SOA2(Fleiss)", "SOA3(Altman)", "SOA4(Cicchetti)", "CEN", "MCEN", "MCC", "J", "Overall J", "Overall MCC", "Overall CEN", "Overall MCEN", "AUC", "AUCI", "G", "DP", "DPI", "GI"]