数据不平衡的几点思考

1. 不平衡并不仅仅只是某一类的数据少,数据冗余也是种不平衡

什么是数据冗余?

通俗来讲,数据冗余,就是说某一类case,对于学习模型来说,我只需要100个训练样本,就可以学到这类case,但训练数据里却有远超过100个数量的这一类case

数据冗余的问题?

  • 浪费标注人员的人力,物力
  • 挤占其他类别的学习机会,在计算学习器损失的时候这一类样本的损失占了很大比例,导致其他类别的损失占比小,降低模型收敛速度和效果

2. 脱离数据分布谈评估指标都是耍流氓

在工作中,我们经常遇到的一个情况便是模型在训练测试集上评价指标非常好,但拿一些实际业务数据测的时候却发现效果测试集上评测指标显示的那么理想,为什么?

  • 测试数据分布不合理,当训练数据中,某一类简单的case占了大部分的时候,默认的评价指标自然会比较好看,但这样其实掩盖了真正问题,那些数据较少,又对实际业务影响较大的case,效果如何,很难从默认的评价指标中看出来

3. 什么才是好的训练数据的分布?绝对平衡吗?

说到数据不平衡问题,大家首先想到的是通过降采样或上采样或其他数据增强的方式把不同类的数据变得数量上的绝对平衡,但绝对平衡一定是好的吗?个人认为,好的训练数据分布应该是在不违背总体先验分布的情况下,与各个类别的学习难度成正比,如果某一类别比较复杂,模型比较难学,那就多增加一些这类的样本,如果某一类别比较简单,就少增加一些这类的样本

4. 如何在实际业务中准备分布合理的训练数据?

模型的发展是一个迭代的过程,没有模型能够在一开始就很好的适应各种业务问题,相对应的训练数据也是一个迭代的过程,在迭代的过程中让分布越来越合理,实际工作中,在每一轮模型迭代的过程中,我们会通过模型输出的概率等方式去看模型在实际业务数据中的表现,通过这种方式指导调整数据的分布,以及模型的架构,最后完成这一轮的迭代。

5. 处理数据不平衡的方法总结

  • 调整数据分布
  • 使用非参数模型,如svm,基于决策树的模型(决策树,随机森林,gbdt…), svm基于最大间隔优化,决策树基于最大信息增益优化,他们的优化方式决定了相比逻辑回归等参数权值优化的方式,天然对数据不平衡问题更加鲁棒
  • 在计算损失时,对样本加权,对数量少的类别使用更大的样本权重,使得模型在优化时更加关注这一类的样本