如何处理小类别?

数据挖掘 分类 分类数据
2021-10-06 23:04:08

我正在玩UCI Bank Marketing Dataset因此,有一个名为的分类变量default告诉我们客户是否“有默认信用”。该变量具有三个选项noyesunknown看看它的分布:

no         32588
unknown     8597
yes            3

正如你所看到的,我们yes只遇到了 3 个案例,我的问题是一般如何处理这么小的类别?每次遇到它时,我是否应该将其从数据集中排除?或者也许我应该做一些像过采样但仅仅针对这种情况的东西?

我问是因为我担心它对分类任务的影响。据我了解,如果在分区期间所有这些yes都落入数据集validationtest数据集的一部分,它将扭曲度量的结果。

4个回答

这完全取决于目标任务和“小类”对该任务的重要性:

  • 在一些具有多个类且没有特别强调任何特定类的任务中,可以简单地丢弃“小类”。
  • 但是在这个数据集的情况下,自然的目标任务是检测默认情况,并且在应用程序中将客户分类为“无”或“未知”默认情况几乎没有意义。这意味着尽管它的大小很小,但“是”类对于该数据集最相关的应用程序非常重要。

如何处理这样的类的问题没有明显的答案:

  • 过采样是一种选择,但这几乎肯定会在模型中引入一些偏差。
  • 我在这里更喜欢的选择是将“未知”类视为未标记的数据,并尝试应用某种半监督学习。
  • 在我看来,这种不平衡接近异常检测领域。通常异常检测是无人监督的,但也许这里有一些需要调查的东西。

我支持@Erwan 的观察,即审查哪些类别取决于分析的目的。该数据集是针对单个结果变量收集的银行信用数据:

21 - 是 - 客户是否订阅了定期存款?(二进制:'是','否')

为此,我很乐意放弃 40K 观察中的 3 个“是”,并将类别减少到两个也将允许它转换为虚拟变量 (0/1)。如果变量是一个因素,不要忘记重新调整。

如何处理这取决于变量在预测目标变量中的重要性。一个快速的测试是计算不同类别中目标变量的事件率,并确定不同类别是否显着分离目标变量。如果没有分离,删除变量更有意义,否则您考虑将整个记录与小类一起删除或与其他类合并在一起。还要记住,当类别不平衡发生在目标变量而不是输入变量上时,为了模型性能指标而进行过采样。

只有三个观察值,模型将无法对贡献做出任何自信的估计。我认为您最好的选择是使用一些领域知识对列进行编码(no=0,unknown=1,yes=1.2?0.7?...),或者如果它没有提供信息,则直接删除该列。删除行也很好,但是在生产中,如果模型遇到另一个“是”,您希望模型做什么?