类别不平衡:预测"极端事件"的抽样术
我的掌握程度:
先掌握这个答案
三种应对:①class_weight(代价加权):少数类错误罚更重——最简单且通常够用(首选);②过采样(SMOTE等):合成少数样本——金融数据上慎用(插值造的"假样本"可能破坏分布结构);③欠采样多数类:扔掉多数样本——损失信息但训练均衡;金融面板常用"丢弃中庸"的变体(Top30%/Bottom30%训练,中间40%不参与——q-705三分类的深化)。中庸类处理:丢(三分类)——聚焦可交易的极端、对边界噪声免疫;留(加权二分类)——保留全部信息但边界样本稀释信号——对照实验定。坏指标原理:97%准确率=97%的"不是"——用AUC/精确率召回率/或直接用「因子化后的IC」评价(把预测概率当因子——回到统一评价器)。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
本阶段实战方法 · 把验证流程当作模型的一部分
训练选股模型或使用另类数据时,先保证训练过程没有接触预测时不可得的信息。
- 定义每个样本的特征可得时间和标签覆盖区间,再按预测场景设计时间切分。
- 归一化、缺失填充、特征选择和调参只在训练集拟合;重叠标签要按实际区间purge。
- 用朴素基线和多段滚动样本外比较,报告成本、稳定性、漂移与全部实验次数。
使用边界
- 排行榜或验证集反复用于挑模型后也会过拟合;留一份最终测试集。
- 随机切分不是所有问题都禁止,但金融未来预测必须尊重时点和标签重叠,说明验证目标。
背景 · 从一个困惑说起
想预测「未来10日暴涨>15%」的股票?正样本占比可能只有3%——模型只要全预测"不是"就有97%准确率(学会了懒惰)。类别不平衡是事件预测类任务的第一道坎。
由此产生的问题
不平衡的三种应对(加权/过采样/欠采样)的取舍?"中庸类"的处理(丢弃vs保留)?为什么"准确率"在不平衡任务里是坏指标?
核心概念
三种应对:①class_weight(代价加权):少数类错误罚更重——最简单且通常够用(首选);②过采样(SMOTE等):合成少数样本——金融数据上慎用(插值造的"假样本"可能破坏分布结构);③欠采样多数类:扔掉多数样本——损失信息但训练均衡;金融面板常用"丢弃中庸"的变体(Top30%/Bottom30%训练,中间40%不参与——q-705三分类的深化)。中庸类处理:丢(三分类)——聚焦可交易的极端、对边界噪声免疫;留(加权二分类)——保留全部信息但边界样本稀释信号——对照实验定。坏指标原理:97%准确率=97%的"不是"——用AUC/精确率召回率/或直接用「因子化后的IC」评价(把预测概率当因子——回到统一评价器)。
为什么需要它
①事件预测的价值密度:暴涨/暴跌/违约这些"少数派"恰是利润与风险的所在——模型学会懒惰=任务失败——不平衡处理是事件类ML的第一课;②评价器的回归统一:无论什么任务,最终都转成因子算IC/分层(q-705的老规矩)——准确率这类"分类原生指标"只是中间参考;③与代价的连接:加权本质是显式定价(漏掉一个暴涨的机会成本 vs 误报的成本)——这个定价你自己定(它就是你的投资观)。
实际应用场景
实操模板:class_weight='balanced'起步→三分类版(丢中庸)对照→评价统一用「概率因子的IC」——两版对照进实验日志。
与之前知识的联系
q-705(标签)的事件版延伸;评价统一化回扣q-426(IC);样本权重与q-720(时间加权)是权重的两个轴(类别×时间)。
⚠ 常见误解
- SMOTE是标准答案:它假设少数类内部可插值——金融极端事件常在边界外(插值造出"不存在的事件")——实证对照后再用
- 欠采样浪费数据:丢的是"信息稀薄"的中庸段——与"丢幅度换稳健"(q-704)同哲学;且训练加速
- 类别平衡了模型就好了:平衡只是让梯度不再偏食——任务本身的信息量(q-706地板)才是天花板
🛠 本题实践任务
构造「10日暴涨>10%」的事件标签(你的面板):跑加权vs不加权对照——捕获率与精确率各多少?概率转因子后IC呢?写下你的权重定价(漏报vs误报的机会成本)。
💡 提示(先自己想5分钟再看)
class_weight的数值=你对两类错误的定价——10:1意味着漏掉一个暴涨的错误十倍于误报。
✅ 验收标准
一组三口径对照+你的权重定价理由。事件预测的抽样术毕业。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(标签设计、样本结构),再用案例、公式和代码帮助理解。此功能需要先启用服务。