首页 > 解决方案 > 在不平衡的数据上建立模型可以吗?

问题描述

背景 - 我正在处理的数据集高度不平衡,类数为 543。数据受日期限制。在探索了 5 年的数据后,我开始知道这种不平衡是固有的并且是持久的。模型将获得的测试数据也将受到日期范围的限制,并且也会有类似的不平衡。

数据不平衡的原因是不同的消费金额,产品的受欢迎程度。处理不平衡会对业务造成不公正的影响。

问题 - 在这种情况下,是否可以继续在不平衡数据上构建模型?

该模型将每月根据新数据进行重新训练,并每月用于预测一次。

标签: machine-learningscikit-learnimbalanced-data

解决方案


根据您要建模的内容,这样做可能正确,也可能不正确。

在不平衡的数据集上进行训练通常会使您的模型过度拟合那些出现频率更高的元素,这会导致最好的情况是偏向这些元素,或者最坏的情况是不了解代表性不足的样本。如果您试图对某些信息的自然发生进行建模,那么本质上不平衡的数据集已经应用了先验概率,因此可能需要由此产生的偏差。在这些情况下,每个类的元素数部分实际信息。然而,这种偏差也可以人为地(非)建模,例如,通过应用缩放因子进行分类(例如通过类权重)等。为了避免这种偏差,增强和集成方法,如 Xgboost(或更简单的 Adaboost案例)或只是随机森林工作相对较好。如果你有时间,k-fold 交叉验证可以帮助进一步减少错误。

为确保每个样本都得到充分代表,您可以选择对代表性不足的类进行过度抽样或对过度代表性的类进行过度抽样。为了确定正确的可能性,请确保也捕获先验分布并使用它来塑造后验分布。如果样本数量较少,数据增强可能会对您有所帮助;根据您的情况,合成数据生成可能是一种好方法。例如,您可以尝试仅在代表性不足的样本上训练 GAN,并使用它来生成更多 - 就像想法一样:首先在所有可用数据上训练它,然后更改鉴别器损失以强制它仅伪造和识别代表性不足的类。在不进入深度学习领域的情况下,SMOTE 或 ADASYN 等技术可能会起作用。两者都可以在imblearn基于 scikit-learn 构建的 Python 包。

最后,仔细选择损失指标可能会有所帮助。您可以在论文中找到更多(和更详细)的信息,例如关于具有类不平衡的深度学习的调查


推荐阅读