跳到正文

标签质量:量化金融中最被低估的问题

在监督学习中,垃圾进垃圾出。标签质量——你的目标变量在多大程度上准确反映你实际试图预测的东西——是量化金融中最被低估的问题。

第 1 篇 · 共 10 篇 约 3 分钟

每个监督学习模型都训练来预测某个东西。「某个东西」是 标签(也叫目标变量或因变量)。对于量化金融,标签通常是:「未来 N 天的收益是多少?」

标签质量决定了你模型表现的上限。没有 ML 架构、没有特征工程、没有超参数调优能弥补一个糟糕的标签。在量化金融中,标签质量被系统性地低估了。

为什么金融中标签质量很难

收益标签有噪声。 明天的收益是许多组成部分的总和:alpha 信号、噪声、微观结构效应、流动性效应、外生冲击。可从当天特征预测的部分很小。大部分标签是噪声。

Alpha 是短暂的。 真正的 alpha——收益的可预测部分——随着更多交易者利用它而衰减。2015 年可预测的标签在 2024 年可能不可预测。标签本身是一个移动目标。

市场结构变化。 当你定义「次日收益」为收盘到收盘时,你假设市场微观结构是稳定的。它不是。十进制化、高频交易和市场结构变化改变了标签的属性随时间。

收益标签的问题

考虑标准标签:r_{t+1}^{(i)} = (price_{t+1}^{(i)} / price_t^{(i)}) - 1

这个标签有几个问题:

1. 它被噪声主导。 对于典型股票,日收益方差约 1%(σ ≈ 1%)。IC = 0.05 的因子只解释 0.25% 的方差(IC² = 0.0025)。标签 97.5% 是噪声。

2. 它混合了 alpha 与微观结构。 收盘到收盘收益包括:

  • 真正的 alpha 信号(你想要预测的)
  • 买卖价差反弹(来自市场微观结构的噪声)
  • 流动性效应(特别是小盘股)
  • 日内动量/反转模式

3. 它忽略交易成本。 如果你的「预测」是日收益 0.1%,但你的交易成本是 0.15%,你的预测毫无价值。你的标签应该是扣除成本后的净收益。

更好的标签

净收益标签

从总收益中减去估计的交易成本:

rnet(i)=rgross(i)−TC^(i)r_{net}^{(i)} = r_{gross}^{(i)} - \hat{TC}^{(i)}

其中 TC 是头寸的估计往返交易成本。

Alpha 标签(收益分解)

将收益分解为 alpha 和噪声成分:

r(i)=α(i)+ϵ(i)r^{(i)} = \alpha^{(i)} + \epsilon^{(i)}

训练 alpha(如果你能估计它)而不是 r。实践中常使用因子模型来估计 alpha。

Barra 风格基本面收益

使用基本面未预期收益(分析师盈利惊喜减去市场预期)作为标签,比原始收益有更好的信噪比。

替代标签

标签用途
残差收益(alpha)当你有好的风险模型时
Sharpe 贡献收益当你想要风险调整标签时
扣除成本后净收益当 TC 是绑定约束时
分析师预测误差对于事件驱动策略
宏观因子惊喜对于宏观策略

在 Python 中测试标签质量

标签稳定性测试。 计算标签在不同滞后的自相关。

import pandas as pd
import numpy as np

def test_label_stability(returns, lags=[1, 5, 10, 20]):
    """
    通过自相关测试标签稳定性。
    """
    results = {}
    for lag in lags:
        acf = returns.autocorr(lag=lag)
        results[f'lag_{lag}'] = acf

    # 随机标签:所有 ACF ≈ 0
    # 含信号标签:相关滞后处的 ACF > 0
    return pd.Series(results)


def test_label_noise_ratio(factor_values, returns, model):
    """
    测试标签中信噪比。
    """
    # 用模型预测 alpha
    predicted_alpha = model.predict(factor_values)

    # 计算预测 alpha 与实际收益的相关性(这是 IC)
    ic = np.corrcoef(predicted_alpha.flatten(), returns.values.flatten())[0, 1]

    # 估计信噪比
    snr = ic**2 / (1 - ic**2)

    return {
        'ic': ic,
        'snr': snr,
        'noise_ratio': 1 - ic**2
    }

存活者偏差与标签

使用当前交易的股票的历史收益而忽略退市股票,会产生存活者偏差。退市股票在退市前通常下跌——忽略它们使你的标签偏向上。

解决方案: 使用包含已退市股票的完整历史数据库(如 Compustat)。或者在分析中明确说明你的测试仅限存活公司。

def compute_survivorship_adjusted_returns(prices, delisted_returns):
    """
    计算包含已退市公司收益的存活者偏差调整收益。
    """
    # 对于退市公司,用 delisted_returns 中的数据填充
    adjusted = prices.copy()

    for ticker in delisted_returns.index.get_level_values('asset').unique():
        if ticker in delisted_returns.index.get_level_values('asset'):
            # 用 delisted 数据覆盖
            pass

    return adjusted

常见错误

在噪声标签上训练。 如果你的标签 97% 是噪声,你的模型会拟合噪声。使用去噪标签(alpha 残差)或更好的标签定义。

数据 snooping 与标签。 选择使回测看起来不错的标签定义是数据 snooping。标签应在看到回测结果之前定义。

存活者偏差在标签中。 只使用当前交易的股票的历史回测会系统性地上偏。退市股票的平均收益是负的。

混淆预测与预测错误。 「预测明天收益」和「预测收益误差」是不同的机器学习问题。后者有更好的信噪比,因为误差是均值为零的。

在知识体系中的位置

标签质量是整个监督学习流水线的基础。如果你的标签是垃圾,你的模型也会是垃圾。特征工程构建输入,但标签决定你优化的目标。因子评估使用 IC 来测量预测力和标签质量。

参考文献

  • López de Prado, Advances in Financial Machine Learning, 第 3 章. Wiley, 2018. ISBN: 978-1-119-48208-6.
  • Ang, Asset Management, 第 5 章. Oxford University Press, 2014. ISBN: 978-0-19-995932-3.
  • Marcos, Advances in Wealth Management, 第 7 章. Wiley, 2022. ISBN: 978-1-119-82601-7.