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 时序标签

时序标签不是预测一个点,而是预测一段未来路径。常见于高频交易中的价格曲线预测、限价单簿动态预测等。

时序标签的口径设计包含三个维度:

  1. 预测长度:固定窗口(如未来 20 个 tick)还是动态窗口(如到止损触发为止)。
  2. 采样频率:与特征频率保持一致,避免时间错配。
  3. 对齐方式:事件发生时点与标签序列的起始点必须严格对齐,常用 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? 二元分类 多分类 连续 预测单点还是路径? 回归标签 时序标签 是否关注事件发生? 事件标签 回归/分类 虚线路径:事件标签可视为带时间约束的二元分类,需额外处理时间窗口对齐

2.8 标签口径检查清单

在回测框架中实现标签生成时,建议逐项核对以下检查点:

检查项 二元分类 回归 多分类 时序 事件
阈值/边界定义 ✅ 必须 ✅ 去极值 ✅ 必须 ✅ 窗口长度 ✅ 时间窗口
未来信息检查 ✅ shift 对齐 ✅ shift 对齐 ✅ shift 对齐 ✅ 严格对齐 ✅ 严格对齐
样本平衡性 ✅ 重点关注 ⚠️ 可选 ✅ 重点关注 ⚠️ 可选 ✅ 重点关注
评估指标 F1 / AUC MSE / MAE Macro F1 DTW / 相关系数 Precision@K