2、常见标签类型:二元分类标签、回归标签、多分类标签、时序标签、事件标签
在事件驱动回测中,标签(Label)是定义“什么是正确预测”的核心。不同的策略目标对应不同的标签类型,错误的标签口径会直接导致回测结果失真。本节系统梳理五种最常见的标签类型及其在回测中的处理要点。
2.1 标签类型总览
下表从预测目标、输出空间、典型场景三个维度对比五种标签类型,帮助你在设计回测时快速选型:
| 标签类型 | 预测目标 | 输出空间 | 典型场景 |
|---|---|---|---|
| 二元分类标签 | 涨/跌、买入/卖出 | {0, 1} 或 {-1, +1} | 方向性择时、止损触发预测 |
| 回归标签 | 连续数值 | ℝ(实数域) | 收益率预测、波动率预测 |
| 多分类标签 | 多个离散类别 | {0, 1, …, K-1} | 行业轮动、多档位调仓 |
| 时序标签 | 未来序列 | ℝᵀ(时间窗口) | 价格路径预测、成交量曲线 |
| 事件标签 | 事件是否发生 | {0, 1} + 时间戳 | 财报超预期、高管增持 |
2.2 二元分类标签
二元分类是量化回测中最基础的标签形式。其核心口径问题在于:阈值如何设定?
- 固定阈值法:未来 N 日收益率 > 0 标记为 1,否则为 0。简单但忽略幅度差异。
- 分位数法:取截面所有标的未来收益率的前 30% 为 1,后 30% 为 0。适合横截面多空策略。
- 波动率调整法:收益率 / 预期波动率 > 阈值。避免低波动期噪声被误判为信号。
避坑提示:二元分类标签在样本不平衡时(如牛市期间“涨”标签占比极高),回测中的准确率会虚高。建议在回测报告中同时输出 Precision / Recall / F1,而非仅看准确率。
2.3 回归标签
回归标签直接预测连续数值,常见于高频做市、波动率预测等场景。口径处理的关键在于去极值与标准化:
# 回归标签的典型处理流程
import numpy as np
def process_regression_label(raw_returns, winsor_limit=0.05):
# 1. 去极值:MAD 方法
median = np.median(raw_returns)
mad = np.median(np.abs(raw_returns - median))
upper = median + 5 * mad
lower = median - 5 * mad
clipped = np.clip(raw_returns, lower, upper)
# 2. 标准化:Z-score
mean = np.mean(clipped)
std = np.std(clipped)
normalized = (clipped - mean) / std
return normalized
注意:回归标签在回测中容易受到极端值影响,导致策略绩效被少数样本主导。务必在回测框架中内置 Winsorize 或 MAD 截断 步骤,且截断参数应在样本内确定,避免未来信息泄露。
2.4 多分类标签
多分类标签将预测空间划分为多个有序或无序的类别。在量化回测中,有序多分类(如调仓力度:-2, -1, 0, +1, +2)比无序多分类更常见。
多分类标签的口径处理要点:
- 类别边界定义:使用分位数或固定间隔划分,需保证每个类别在训练集中有足够样本。
- 有序性保持:若使用 Softmax 等无序分类器,需额外引入序数损失函数(如 Ordinal Loss)。
- 类别权重:中间类别(如“持有不动”)样本量通常远大于两端,需在损失函数中设置类别权重。
2.5 时序标签
时序标签不是预测一个点,而是预测一段未来路径。常见于高频交易中的价格曲线预测、限价单簿动态预测等。
时序标签的口径设计包含三个维度:
- 预测长度:固定窗口(如未来 20 个 tick)还是动态窗口(如到止损触发为止)。
- 采样频率:与特征频率保持一致,避免时间错配。
- 对齐方式:事件发生时点与标签序列的起始点必须严格对齐,常用 shift(-N) 操作。
实践建议:时序标签的回测评估不应使用静态指标(如 MSE),而应使用 路径相似度指标(如 DTW 距离、相关系数)或 交易模拟指标(如按预测路径执行后的 PnL)。
2.6 事件标签
事件标签是二元分类标签的扩展,但增加了时间维度。它回答的是:“在某个时间窗口内,特定事件是否发生?”
常见的事件标签类型:
- 点事件:财报发布、分红除权、高管增持公告。
- 区间事件:连续 3 日涨幅超过 10%、波动率突破阈值。
- 复合事件:放量突破 + 均线金叉。
事件标签的口径处理核心是避免未来信息泄露:
# 事件标签的防未来信息处理
def create_event_label(df, event_col, lookahead=5):
"""
生成事件标签:未来 lookahead 天内事件是否发生
关键:使用 shift(-lookahead) 确保标签不包含当前时刻信息
"""
df['event_label'] = (
df[event_col]
.rolling(window=lookahead, min_periods=1)
.max()
.shift(-lookahead)
)
# 标签生成后,删除最后 lookahead 行(未来不可知)
df = df.iloc[:-lookahead].copy()
return df
严重警告:事件标签回测中最常见的错误是 标签时间戳与特征时间戳重叠。例如,用当天收盘后的公告数据预测当天收盘价,这属于未来信息。务必在回测框架中设置 标签生成时间 > 特征生成时间 的硬约束。
2.7 标签类型选择决策流程
以下 SVG 图展示了从策略目标到标签类型的决策路径,帮助你在设计回测时快速定位合适的标签口径:
2.8 标签口径检查清单
在回测框架中实现标签生成时,建议逐项核对以下检查点:
| 检查项 | 二元分类 | 回归 | 多分类 | 时序 | 事件 |
|---|---|---|---|---|---|
| 阈值/边界定义 | ✅ 必须 | ✅ 去极值 | ✅ 必须 | ✅ 窗口长度 | ✅ 时间窗口 |
| 未来信息检查 | ✅ shift 对齐 | ✅ shift 对齐 | ✅ shift 对齐 | ✅ 严格对齐 | ✅ 严格对齐 |
| 样本平衡性 | ✅ 重点关注 | ⚠️ 可选 | ✅ 重点关注 | ⚠️ 可选 | ✅ 重点关注 |
| 评估指标 | F1 / AUC | MSE / MAE | Macro F1 | DTW / 相关系数 | Precision@K |