我有一个需要检测欺诈的数据集。99% 不是欺诈,1% 是。
有哪些方法可以解决类不平衡的问题?
我有一个需要检测欺诈的数据集。99% 不是欺诈,1% 是。
有哪些方法可以解决类不平衡的问题?
有2种技术:
Oversampling:这下有很多技术,ROSE和SMOTE是最有名的用于过采样的技术。在 ROSE 中,它只是增加了少数类。在 SMOTE 中,它综合生成更多数量的稀有少数类用于平衡。大多数场景 SMOTE 提供比 ROSE 更好的结果,但您应该两者都尝试。除此之外,还有另一种技术只是复制记录以使其等于 n 数。此链接用于在 Python 中实现 SMOTE。
UnderSampling:这下也有很多技术,但是这个Link-1,Link-2让您更好地了解欠采样。一般来说,我不喜欢欠采样,因为你会丢失一些信息。
您需要使用这些技术的原因是,如果我们不使用,那么模型的准确率将会非常高,它能够以 99% 的准确率正确预测不是欺诈的情况,这是我们不想要的。如果它能够以同样的准确度进行预测以找出欺诈行为,那么这是一个很好的洞察力。这只能通过使用上述任何一种技术来实现。
看看,如果您还有其他问题,请告诉我。
有几种技术
随机上采样
随机下采样
重复采样
您可以按照这两种方法进行操作。
您可以在所有类型的算法中使用一些相关参数作为成本函数,例如Kappa、CEN、 。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"]