样本不均衡处理的底层逻辑解析

7 阅读2分钟

在机器学习的实际应用中,正负样本极度不均衡是常态:

  • 欺诈检测中99%的交易正常
  • 广告点击率预估中千分之一的点击概率
  • 医疗诊断中罕见病占比极低

面对这种“少数淹没于多数”的困境,直接训练模型往往收效甚微——模型倾向于“懒惰地”全预测为多数类,准确率看似很高,实则对关键少数类毫无识别能力。 为破解这一困局,“下采样”成为工程师手中的常用利器:通过减少多数类样本数量,使正负样本比例趋于均衡。但随之而来的一个根本性质疑浮现出来:

训练集的比例被人为改变了,和真实场景完全不同,这样训出的模型还能用吗?

答案是:不仅能用,而且常常比原样训练更有效。

我们可以从四个维度层层拆解其底层逻辑。

一、核心原理:学的是“特征映射”,不是“比例本身”

要理解下采样的合理性,首先要厘清一个本质问题:模型到底在学什么? 模型的核心任务,并非记住“正样本占多少、负样本占多少”,而是学习一个映射函数:给定输入特征 XX,判断它属于正类还是负类的概率。 这个概率由贝叶斯公式决定:

P(YX)=P(XY)P(Y)P(X)P(Y∣X)= \frac{P(X|Y) \cdot P(Y)}{P(X)}

其中包含三个关键概率:

  • 类条件概率 P(XY)P(XY)P(X∣Y)P(X|Y):给定标签 YY 时,特征 XX 的分布。
    • 比如:“正样本通常具有高消费频次、夜间登录等特征”;“负样本多表现为低活跃、单一IP访问”。
    • 这是模型真正需要学习的核心知识,决定了能否区分正负。
  • 类别先验概率P(Y)P(Y):正/负样本在总体中出现的比例。
    • 比如真实场景中负样本占99%,正样本仅1%。
    • 这是数据分布的先验属性,不是模型必须从训练集中“背下来”的。
  • 后验概率 P(YX)P(Y∣X):给定特征 XX,样本为正/负的概率。
    • 这是模型最终输出的目标,用于做预测决策。

下采样的本质操作:仅改变训练集中的P(Y)P′(Y)(如将1%正样本提升到50%),但只要采样合理,并不破坏P(XY)P(X∣Y)的分布结构。

结论:模型依然学到了“什么样的特征对应什么样的标签”,即正确的 P(XY)P(X∣Y),这就足够了。至于 P(Y)P(Y)的偏差,是一个可后期修正的数值问题,而非模型失效的根本原因。

二、下采样的真正作用:打破优化偏置,让模型“愿意学少数类”

如果不做任何处理,直接用原始不均衡数据训练,会发生什么? 设想一个极端案例:100个正样本,9900个负样本(比例1:99)。 使用交叉熵损失函数时,总损失 ≈ 99%来自负样本。模型发现:只要把所有样本都预测为负类,就能轻松获得99%准确率,损失还极低。 于是:

  • 损失函数被多数类主导:模型无需理解正样本特征,也能“成功”;
  • 梯度更新被负样本淹没:正样本带来的梯度信号太弱,参数更新几乎不受影响;
  • 结果:模型沦为“多数类复读机”,对少数类召回率为0。

这就是所谓的优化偏置(Optimization Bias)——模型的学习过程天然偏向多数类。 而下采样通过构建一个近似均衡的训练集(如1:1),彻底扭转了这一局面:

  • 正负样本在损失计算和梯度更新中拥有平等“话语权”;
  • 模型不能再靠“偷懒”获得低损失,必须认真区分两类特征;
  • 特征提取器被迫关注少数类的独特模式,从而真正学会 P(XY)P(X∣Y)

下采样不是为了“模仿真实比例”,而是为了创造一个公平的学习环境,让模型有机会学会识别少数类。

三、比例偏差如何校正?两种轻量级方案轻松补救

下采样改变了训练集的先验概率P(Y)P(Y),模型学到的后验概率 P(YX)P'(Y|X)是基于这个“错误”的先验的。那么,我们最终如何判断一个样本是不是正样本呢?

我们可以通过以下两种方式,在推理阶段还原真实场景下的预测表现:

方法一:贝叶斯后验概率校正(理论严谨)

直接将模型输出的 P(YX)P'(Y|X)转换回真实世界下的 P(YX)P(Y|X)

从贝叶斯公式出发,我们可以建立真实后验和训练后验之间的关系:

P(Y+X)P(YX)=P(XY+)P(XY)P(Y+)P(Y)\frac{P(Y^+|X)}{P(Y^-|X)}=\frac{P(X|Y^+)}{P(X|Y^-)} \cdot \frac{P(Y^+)}{P(Y^-)}

同样,在训练集上:

P(Y+X)P(YX)=P(XY+)P(XY)P(Y+)P(Y)\frac{P'(Y^+|X)}{P'(Y^-|X)}=\frac{P(X|Y^+)}{P(X|Y^-)} \cdot \frac{P'(Y^+)}{P'(Y^-)}

上面解释过,合理的下采样的不会影响P(XY)P(X∣Y)

  • 少数类样本全保留P(XY+)P(X∣Y^+)完整;
  • 多数类样本有代表性抽取P(XY)P(X∣Y^−)基本不变;
  • 只是让训练集的 P(Y)P′(Y)与真实 P(Y)P(Y) 不一致。

将两式相除,消去 P(XY)P(X∣Y) 项,得到:

P(Y+X)P(YX)=P(Y+X)P(YX)P(Y+)P(Y)P(Y)P(Y+)\frac{P'(Y^+|X)}{P'(Y^-|X)}=\frac{P'(Y^+|X)}{P'(Y^-|X)} \cdot \frac{P(Y^+)}{P(Y^-)} \cdot \frac{P'(Y^-)}{P'(Y^+)}

r=P(Y+)P(Y)/P(Y+)P(Y)r=\frac{P(Y^+)}{P(Y^-)} / \frac{P'(Y^+)}{P'(Y^-)}
odds=P(Y+X)1P(Y+X)odds'=\frac{P'(Y^+|X)}{1-P(Y^+|X)}

odds=oddsrodds = odds' \cdot r

最后将校正后的几率(odds)转换回概率

P(Y+X)=odds1+oddsP(Y^+|X)=\frac{odds}{1+odds}

该方法基于概率论严格推导,能精准还原真实后验概率,适用于需要可靠概率输出的场景(如风控打分、推荐排序)。

方法二:决策阈值移动(工程首选)

很多时候,我们并不真正关心概率的绝对值,只关心分类结果。这时,移动阈值是最高效的方法。

既然模型输出的概率整体偏高,我们就提高判定为正样本的门槛。

如何找到新阈值?

  1. 使用验证集(必须是未下采样的、代表真实分布的验证集!)。
  2. 让模型对验证集进行预测,得到一系列 P(Y+X)P'(Y^+|X)
  3. 绘制 Precision-Recall (PR) 曲线 或 ROC曲线。
  4. 根据业务目标选择最优阈值:
    • 如果你更关心召回率(不能漏掉正样本,如疾病诊断),可以选择较低的阈值。
    • 如果你更关心精确率(预测为正的要尽量准,如垃圾邮件过滤),可以选择较高的阈值。
    • 如果追求平衡,可以找F1-score最高的点。

例如在1:1下采样训练的模型,在真实99:1的数据上,可能需要将阈值从0.5提高到0.9甚至0.99,才能得到合理的预测结果。

四、成功的前提:采样策略必须“保特征”,不能“毁分布”

下采样有效并非无条件成立。其成立的关键前提是:

下采样后的多数类样本,仍能代表原始多数类的特征分布。

若采样方式粗暴(如纯随机抽样),可能导致以下风险:

  • 抽中的样本集中在某一子群体(如某地区、某用户层级),丢失其他重要特征模式;
  • 恰好剔除了与少数类边界相近的“难分样本”,削弱泛化能力;
  • 导致 P(XY)P(X∣Y^−) 被扭曲,模型学到错误的特征边界。

因此,工程实践中应避免“盲采”,转而采用更具代表性的采样策略:

采样方法原理说明优势
分层下采样(Stratified Downsampling)按特征维度或业务维度分层,在每层内按比例抽样保证各子群体均有代表,维持整体分布
聚类下采样(Cluster-based Sampling)对多数类聚类,从每个簇中选取中心或代表性样本用少量样本覆盖多样特征,提升代表性
近邻下采样(NearMiss, Tomek Links)保留与少数类距离近的多数类样本,剔除冗余或易混样本强化分类边界,提升模型判别力

这些方法在减少样本量的同时,最大限度保留了特征空间的结构信息,确保 P(XY)P(X∣Y)不被破坏,是下采样成功的基石。

五、延伸思考:为何不下采样,而不用上采样?

既然下采样改变了比例,那为何不选择上采样少数类(如SMOTE、ADASYN)来保持原始比例? 原因在于上采样的固有缺陷:

  1. 过拟合风险高:
    • 简单复制少数类样本 → 模型反复看到相同样本,容易记忆噪声;
    • SMOTE生成合成样本 → 若插值不合理,可能创造“不存在”的虚假样本,污染 P(XY)P(X∣Y)分布。
  2. 引入分布偏移:
    • 生成样本可能落入多数类区域,造成类别混淆;
    • 特别是在高维稀疏特征下,SMOTE效果不稳定。
  3. 计算开销增加:
    • 上采样后数据量增大,训练时间变长,资源消耗更高。 相比之下,下采样:
  • 减少数据量,加快训练;
  • 不引入新样本,无过拟合担忧;
  • 配合合理采样策略,特征保留度高;
  • 后续校正简单,整体 pipeline 更稳健。

因此,在多数工业场景中,“先下采样 + 后阈值校正”已成为处理样本不均衡的黄金组合。