2. 标签口径定义
2.1 标签口径的概念
在量化回测与模型训练中,标签口径(Label Caliber)是指对原始市场数据或交易信号进行标准化、对齐和量化时所采用的度量基准与计算规则。它决定了“一个样本的标签值究竟代表什么含义”,是连接原始行情数据与监督学习目标之间的桥梁。
口径不统一会导致以下典型问题:
- 样本错配:同一段行情因收益率计算方式不同,被赋予截然不同的标签值。
- 模型偏差:模型学习到的是“口径噪声”而非真实市场规律。
- 回测失真:训练集与回测集使用不同口径,导致绩效评估失效。
核心原则:标签口径必须在训练集、验证集、回测集上保持完全一致,且与交易执行逻辑对齐。
2.2 常见口径类型
根据量化策略的不同目标,标签口径主要分为三大类:收益率口径、波动率口径和风险调整口径。下表对比了它们的核心差异:
| 口径类型 | 度量对象 | 典型计算方式 | 适用场景 |
|---|---|---|---|
| 收益率口径 | 价格变化百分比 | 简单收益率 / 对数收益率 | 趋势跟踪、均值回归 |
| 波动率口径 | 价格波动幅度 | 真实波动幅度均值 (ATR) / 标准差 | 波动率交易、期权定价 |
| 风险调整口径 | 收益与风险的比值 | 夏普比率 / 卡玛比率 / 信息比率 | 组合优化、因子评价 |
2.3 收益率口径详解
收益率口径是最基础的标签类型,其定义直接影响模型对“涨跌”的敏感度。常见的两种计算方式为:
- 简单收益率:\( R_t = (P_t - P_{t-1}) / P_{t-1} \),直观但分布不对称,存在向下偏倚。
- 对数收益率:\( r_t = \ln(P_t / P_{t-1}) \),时间可加性好,分布更接近正态,适合统计建模。
实践建议:在机器学习模型中,优先使用对数收益率作为标签,因其能更好地处理多期复合收益,且减少极端值对模型训练的干扰。
2.4 波动率口径详解
波动率口径用于衡量资产价格的不确定性,常见口径包括:
| 口径名称 | 计算公式 | 特点 |
|---|---|---|
| 历史波动率 (HV) | \(\sigma = \sqrt{\frac{1}{N-1}\sum (r_t - \bar{r})^2}\) | 基于历史数据,滞后性强 |
| 真实波动幅度均值 (ATR) | \(\text{ATR} = \frac{1}{n}\sum \text{TR}_t\) | 包含跳空缺口,更贴近日内真实波动 |
| 已实现波动率 (RV) | \(\text{RV} = \sqrt{\sum r_{t,i}^2}\) | 高频数据,精度高,计算成本大 |
注意:波动率口径对数据频率极其敏感。使用日线数据计算 ATR 与使用 5 分钟线计算 RV,得到的标签分布可能完全不同。必须根据策略持仓周期选择匹配的频率。
2.5 风险调整口径详解
风险调整口径将收益与风险结合,用于评估“单位风险下的收益表现”。最常用的口径包括:
- 夏普比率:\( \text{Sharpe} = \frac{E[R_p - R_f]}{\sigma_p} \),衡量超额收益与总风险的比值。
- 卡玛比率:\( \text{Calmar} = \frac{E[R_p - R_f]}{\text{Max Drawdown}} \),侧重最大回撤风险。
- 信息比率:\( \text{IR} = \frac{E[R_p - R_b]}{\sigma_{p-b}} \),衡量相对于基准的主动管理能力。
在模型训练中,风险调整口径通常作为多目标标签或约束条件使用,而非单一预测目标。
2.6 口径选择与模型训练的关系
不同的标签口径会直接影响模型的学习目标与收敛行为。下表总结了常见口径对模型训练的影响:
| 口径类型 | 标签分布特征 | 对模型的影响 | 推荐模型类型 |
|---|---|---|---|
| 简单收益率 | 右偏,有下界 -1 | 易受极端值影响,梯度不稳定 | 树模型 (XGBoost, LightGBM) |
| 对数收益率 | 近似正态,无下界 | 梯度平滑,适合深度学习 | LSTM, Transformer |
| ATR | 正偏,厚尾 | 需做对数变换或分箱处理 | 回归模型 + 分位数损失 |
| 夏普比率 | 分布范围窄,集中在 [-2, 2] | 直接回归效果差,建议排序学习 | Pairwise Ranking |
2.7 口径校准流程
为确保标签口径在回测与训练中的一致性,建议遵循以下校准流程:
- 定义口径规范:明确使用哪种收益率、波动率或风险调整口径,并记录计算公式。
- 数据对齐:确保所有样本的起始时间、复权方式、分红处理一致。
- 计算标签:按照规范批量计算训练集、验证集、回测集的标签值。
- 分布检验:检查标签的均值、标准差、偏度、峰度,确保三集分布一致。
- 回测验证:在回测集上使用相同口径计算绩效,与训练集标签进行相关性检验。
关键检查点:如果训练集标签均值与回测集标签均值差异超过 0.1 个标准差,说明口径存在系统性偏差,需要重新对齐数据或调整计算方式。
2.8 口径校准的常见陷阱
在实际项目中,以下陷阱最容易导致口径校准失败:
- 幸存者偏差:只使用当前存活的股票计算标签,忽略了退市样本。
- 前视偏差:在计算标签时使用了未来数据(如用未来价格计算当前收益率)。
- 复权不一致:训练集使用后复权价格,回测集使用前复权价格,导致标签数值偏移。
- 频率错配:用日线收益率训练模型,却在分钟线回测中应用。
严重警告:前视偏差是回测中最隐蔽的错误之一。例如,在 t 时刻计算标签时使用了 t+1 时刻的收盘价,模型会“看到未来”,导致回测绩效虚高。必须严格保证标签计算只使用截止到当前时刻的数据。
2.9 代码示例:收益率口径计算
以下 Python 代码展示了简单收益率与对数收益率的计算方式,并对比了它们的分布差异:
import numpy as np
import pandas as pd
# 模拟价格序列
np.random.seed(42)
prices = 100 * np.exp(np.cumsum(np.random.normal(0, 0.01, 1000)))
df = pd.DataFrame({'close': prices})
# 简单收益率
df['simple_return'] = df['close'].pct_change()
# 对数收益率
df['log_return'] = np.log(df['close'] / df['close'].shift(1))
# 对比统计量
print("简单收益率均值: {:.6f}, 标准差: {:.6f}".format(
df['simple_return'].mean(), df['simple_return'].std()))
print("对数收益率均值: {:.6f}, 标准差: {:.6f}".format(
df['log_return'].mean(), df['log_return'].std()))
# 多期复合收益对比
multi_period_simple = (1 + df['simple_return'].iloc[1:251]).prod() - 1
multi_period_log = df['log_return'].iloc[1:251].sum()
print("250期简单复合收益: {:.4f}".format(multi_period_simple))
print("250期对数复合收益: {:.4f}".format(multi_period_log))
输出解读:对数收益率的均值略低于简单收益率,但标准差相近。在多期复合时,对数收益率通过累加即可得到总收益,而简单收益率需要连乘,计算效率更低且数值稳定性较差。