核心要点

  • 数据层:对少数类过采样(含 SMOTE 合成新样本)、对多数类欠采样,或两者结合。

  • 算法层:用 class_weight / 代价敏感学习,给少数类误分配更高惩罚,让模型更关注它。

  • 决策层:调整分类阈值(默认 0.5 往往不合适),按业务对精确率/召回率的取舍移动工作点。

  • 评估层:弃用准确率,改看精确率、召回率、F1 与 PR-AUC,并按少数类分层做交叉验证

标准回答

为什么要专门处理

不平衡时模型倾向多数类,准确率虚高但少数类(通常才是关注对象,如欺诈、故障)召回极差。应从数据、算法、评估三个层面综合应对。

数据层

过采样复制或合成少数类样本,SMOTE 在少数类样本的近邻间插值生成新样本,避免简单复制导致的过拟合;欠采样随机丢弃多数类但可能损失信息。重采样务必只在训练折内做,否则会数据泄漏。

算法层

设置类别权重或代价矩阵(代价敏感学习),让少数类的误分类损失更大,等价于在损失函数里重新加权,无需改变数据分布。

决策与评估层

根据 PR 曲线/业务代价调整判别阈值;用 PR-AUC、F1、召回率衡量,而非会被多数类主导的准确率。

常见误区

⚠️ 常见踩坑

最致命的是在划分训练/测试之前就做重采样或 SMOTE,导致合成/复制样本泄漏到验证集,指标虚高。正确做法是只在训练折内重采样。

追问

追问 1SMOTE 相比随机过采样好在哪?有什么风险?

随机过采样只是复制样本,易过拟合;SMOTE 在少数类近邻间插值生成「新」样本,增加多样性。风险是当少数类与多数类高度重叠时,合成样本会落入多数类区域引入噪声,可用 Borderline-SMOTE 或 SMOTE+欠采样改进。

追问 2重采样和调类别权重该怎么选?

两者目标一致、常二选一或叠加。权重法不改数据、实现简单、无额外内存开销,多数库(如 scikit-learn 的 class_weight)原生支持;重采样在数据极端稀少或需配合 SMOTE 增多样性时更有效。可先试权重,不够再加重采样。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。

🛠️ AI 工具

  • Scikit Learn

    Python 机器学习库,65,876+ stars。最流行的 Python 机器学习框架,提供分类、回归、聚类、降维等全面的 ML 算法,API 设计简洁优雅,是 ML 入门和工业实践的首选