# Ml Imbalanced Learning

> 处理类别不平衡(class imbalance)的决策框架。当"少数类召回为0""accuracy虚高但少数类 全判成多数类"，或要做重采样/阈值移动/代价敏感选型时调用：先确认度量失守，再按部署约束 在再缩放三路线中选路并审查各自隐藏前提。不适用于：类别比例尚可只是指标选择问题、回归 任务、纯排序场景。trigger: imbalanced, SMOTE, oversampling, 过采样, 欠采样, threshold moving, 阈值移动, minority class。

- Skill: `fieldlu/ml-imbalanced-learning` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add fieldlu/ml-imbalanced-learning`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fieldlu/ml-imbalanced-learning/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: fieldlu (https://skillmd.com/u/fieldlu)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fieldlu/ml-imbalanced-learning

---


# 类别不平衡学习 (Imbalanced Learning)

## R — 原文 (Reading)

> "这就是类别不平衡学习的一个基本策略——'再缩放'(rescaling)……再缩放也是代价敏感
> 学习的基础……不能对初始正例进行重复采样，否则会招致严重的过拟合；过采样法的代表性
> 算法 SMOTE 是通过对训练集里的正例进行插值来产生额外的正例。"
>
> — 周志华《机器学习》第3章3.6节

> "有 998 个反例，但正例只有 2 个，那么学习方法只需返回一个永远将新样本预测为反例的
> 学习器，就能达到 99.8% 的精度；然而这样的学习器往往没有价值，因为它不能预测出任何
> 正例。"
>
> — 周志华《机器学习》第3章3.6节（998反例）

---

## I — 方法论骨架 (Interpretation)

类别不平衡的病根不在数据本身，而在"训练集观测几率 = 真实几率"这个隐含假设被打破后的度量失守。处理它的统一策略是**再缩放 (rescaling)**：既然训练时两类样本数不等扭曲了判决天平，就在决策端把它扳回来。具体拆成三条路线：

1. **直接调整训练集分布**（重采样）：欠采样砍多数类（省算力但丢信息），过采样补少数类（保信息但可能过拟合）。
2. **不动数据只动判决**（阈值移动）：训练照常，推理时按真实几率调整判正阈值——零额外训练成本。
3. **把不平衡翻译成代价**（代价敏感）：将样本数比 m-/m+ 换成代价比 cost+/cost-，让损失函数自己学会偏心。

三条路线源于同一个判断：无偏采样假设是否成立、以及你愿意在哪一端付代价。选择依据不是技巧流行度，而是部署约束（延迟、算力、能否重训）与信息保全需求。

---

## A1 — 书中的应用 (Past Application)

### 案例 1: 998 反例思想实验 (c20)
- **问题**: 训练集中有 998 个反例、2 个正例，一个永远输出"反例"的学习器精度高达 99.8%。
- **方法论的使用**: 作者用这个极端数字暴露 accuracy 在不平衡下的失效机制——当"永远猜多数类"就能拿到可接受精度时，该度量已无法区分有用模型与无用模型。
- **结论**: 必须换用查准/查全/代价敏感度量重新评估，并从观测几率推出再缩放策略。
- **结果**: 该思想实验成为整节展开欠采样/过采样/阈值移动三路线及其各自坑位（EasyEnsemble 保信息、SMOTE 插值防复制）的论证入口。

---

## A2 — 触发场景 (Future Trigger) ★

### 用户会在什么情境下需要这个 skill?

1. 风控/欺诈/疾病筛查模型 accuracy 很高但混淆矩阵里少数类召回≈0，不知道下一步动数据还是动阈值。
2. 正例占比万分之一量级，纠结 SMOTE、随机复制、EasyEnsemble、class_weight、阈值移动哪个适合线上延迟敏感的服务。
3. 对少数类做了复制式过采样后验证指标暴涨，怀疑出了问题又说不清原因。
4. 用"已报警案件"等选择性上报数据训练检测模型，发现阈值怎么调都不对。

### 语言信号 (用户的话里出现这些就应激活)

- "accuracy 99.9% 但 fraud recall 是 0 / 欺诈全放行"
- "该用过采样还是欠采样？SMOTE 有没有坑？" / "oversampling vs undersampling"
- "class_weight 和阈值移动是一回事吗？" / "threshold moving"
- "训练集里正例太少了，模型总把少数类判成多数类"

### 与相邻 skill 的区分（定稿口径）

- 与 `ml-evaluation-design` 的区别（depends-on 单向）: 度量失守的判定与换尺子选型（P/R/Fβ/代价敏感）由 evaluation-design 完成；本 skill 在尺子已换对之后，接手再缩放三路线的选路与修复执行。998 反例是两站共用的入口证据。
- 与 `ml-diagnosis` 的区别: diagnosis 遇到"accuracy 99.8% 但少数类召回为 0"时会把症状移交本 skill 换尺子，确认真实差距后再回到 diagnosis 归因；本 skill 不做偏差-方差归因。
- 与 `ml-pitfall-audit` 的区别：审计 skill 只负责问"训练集是无偏采样吗"(x18)；本 skill 在前提成立后给出完整的三路线选路与修复执行——审计问前提，本 skill 干活。
- 与 `ml-ensemble-design` 的区别：EasyEnsemble 这类"为不平衡而生"的集成归本 skill（服务再缩放目标）；通用集成设计原理（好而不同/扰动通道）归 ensemble-design。
- 与 `ml-dimensionality` 的区别：那是高维小样本下的结构问题；本 skill 只管类别比例失衡引发的判决失真。

---

## E — 可执行步骤 (Execution)

当 skill 被激活后, agent 应按以下步骤执行:

1. **确认度量已失守**
   - 完成标准: 看混淆矩阵而非 accuracy——若"全猜多数类"也能达到接近当前的 accuracy，则确认失守；同时记录少数类数量级（如 998:2）。

2. **审查无偏采样前提**
   - 完成标准: 明确回答"观测到的类别比例是否等于真实比例"。若训练数据来自选择性上报/筛选（如只用已报警案件），标注偏差方向。
   - 判停条件: 若观测几率≠真实几率且无法估计真实几率，跳到步骤 5 改走领域代价设定或验证集校准，禁止直接套再缩放公式。

3. **按部署约束在三路线中选路**
   - 完成标准: 给出明确选路及理由，例如——在线延迟敏感→阈值移动（零训练成本）；少数类极珍贵不可丢→SMOTE 插值（禁止随机复制）；算力受限→EasyEnsemble 式集成欠采样（禁止随机丢弃）。每条路线须附对应禁令。

4. **换度量复评**
   - 完成标准: 用查准/查全/Fβ 或代价加权指标重评，报告阈值移动前后的混淆矩阵对比，确认少数类召回提升未以总体代价暴涨为交换。

5. **声明残留风险**
   - 完成标准: 输出中注明所用路线的隐藏前提（如插值可能生成"平均欺诈"样本），以及验证集与线上分布的一致性假设。

---

## B — 边界 (Boundary) ★

### 不要在以下情况使用此 skill

- 两类比例失衡但业务只关心整体 accuracy 且阈值可接受——此时换度量即可，不必上重采样工程。
- 回归任务的目标分布偏斜（长尾回归）——那是损失函数/变换问题，不是类别再缩放问题。
- 推荐系统"正样本稀疏"本质是排序问题——用 ranking 度量，本框架的三路线不适用。

### 作者在书中警告的失败模式

- **精度幻觉 (x16)**: 99.8% 精度的"永远猜反例"学习器毫无价值——先看混淆矩阵再谈上线。
- **修复动作引入新失败模式 (x17)**: 过采样简单复制正例导致严重过拟合；欠采样随机丢弃反例丢失重要信息。原理级判据：插值而非复制、集成而非随机丢。
- **再缩放的前提陷阱 (x18)**: 再缩放依赖"训练集是无偏采样"假设，而现实中观测几率≠真实几率（选择性上报/筛选）很常见——前提不成立时阈值移错方向。

### 作者的盲点 / 时代局限

- 成书于 2015-2016，未覆盖深度不平衡学习的 focal loss、logit adjustment 等现代手段；但三路线的分类逻辑仍能映射到它们（focal loss 属代价敏感路线的变体）。
- 全书默认 i.i.d.，对持续漂移的不平衡流数据（概念漂移下不平衡率本身在变）无讨论。

### 容易混淆的邻近方法论

- **代价敏感学习**: 与再缩放同源（m-/m+ ↔ cost+/cost- 可互换），但视角不同——前者显式建模错误后果，后者修正采样偏差。选路时应说明用的是哪一侧语义。
- **异常检测**: 极端不平衡有时应改形为单类问题（one-class），此时不再适用监督再缩放框架。

---

## 相关 skills

- depends-on: ml-evaluation-design（度量失守判定与换尺子选型是其前置；本 skill 接手三路线修复）
- contrasts-with: ml-pitfall-audit（x18 前提审查 vs 前提成立后的执行深挖）, ml-ensemble-design（不平衡专用集成 vs 通用集成原理）
- composes-with: ml-diagnosis（99.8% 精度红旗的移交对象：换尺子后回诊断主线）, ml-bayesian-thinking（代价矩阵同源接口）

---

## 审计信息

- **验证通过**: V1 ✓ / V2 ✓ / V3 ✓
- **素材单元**: f18, f17 / c20 / x16, x17, x18
- **skill_version**: 0.0.1
- **蒸馏时间**: 2026-08-24

