halo 的技术博客

返回

做单资产预测,你只需要问一个问题:这条序列自己的过去,能不能告诉我它的未来。但做多资产预测,问题多了一半:别的资产的过去,能不能告诉我这只的未来。而恰恰是后半个问题,被大多数时序 Transformer 悄悄跳过了。

结论先放这:Crossformer(Zhang & Yan, ICLR 2023)的核心贡献,是把『跨变量依赖』从隐式脑补变成显式建模。 它做两件事——先用维度分段嵌入(DSW)把时间轴切成段、压掉冗余长度,再用两阶段注意力(TSA)分别在时间段之间和变量维度之间各做一轮注意力。在 6 个由共享隐因子驱动的合成资产上,我用纯 numpy 复现了这个『跨时间 + 跨变量』的骨架:跨变量注意力把单步预测的测试集 R² 从朴素持平的 0.356 抬到 0.366。增益是真的,但也就这么大——这正是本文想诚实交代的地方。附完整 Python 与五类真实陷阱(中阶)。

6 个资产的标准化价量序列,由两个共享隐因子驱动,肉眼可见彼此联动

一、被大多数时序 Transformer 漏掉的那一半信息#

先看一个被忽视的事实:多数经典时序 Transformer(Informer、Autoformer 等)在处理多变量输入时,默认做的是 channel-mixing 的 embedding + 时间轴注意力。也就是说,它们把 D 个变量在每个时间点拼成一个向量,然后在时间维度上算注意力。变量之间的关系,被压进了 embedding 层那几个线性权重里,从没被显式地、成对地建模过

这在很多单变量任务上没问题。但在金融里,“资产 A 领先资产 B 半小时”、“同板块共振下杀”这类跨变量结构,恰恰是 alpha 的重要来源。把它交给 embedding 层隐式学习,等于把最值钱的信息藏进了最容易欠拟合的地方。

Crossformer 的回答很直接:既然跨时间和跨变量是两种不同的依赖,就用两轮注意力分开建模,别搅在一起。

二、第一步:维度分段嵌入(DSW)——先把时间轴切成段#

标准注意力在时间轴上是 O(L²)。长序列直接爆。Crossformer 的第一招是 DSW(Dimension-Segment-Wise embedding):把长度为 L 的时间轴切成若干等长段(segment),每段内部先压成一个 embedding 向量。这样注意力从”逐点”变成”逐段”,序列长度直接除以段长。

时间轴分段:每段 20 步,段内建模局部形态,段间做跨段注意力

关键点在于:分段是沿时间轴做的,但每个变量独立分段。于是原始的 (D, L) 张量变成 (D, L/seg, d_model)——保留了变量维度 D,把时间维压短。这是后面能”分别对时间和变量做注意力”的结构前提。

import numpy as np

def dsw_embed(X, seg, W):
    """维度分段嵌入:X (D, L) -> (D, n_seg, d_model)
    每个变量沿时间轴切成 n_seg 段,段内 flatten 后线性投影。"""
    D, L = X.shape
    n_seg = L // seg
    X = X[:, :n_seg*seg].reshape(D, n_seg, seg)   # (D, n_seg, seg)
    # 段内 seg 个点 -> d_model 维 embedding
    emb = X @ W                                     # W: (seg, d_model)
    return emb                                      # (D, n_seg, d_model)
python

一句话:DSW 把”长时间序列”压成”少数几段的表示”,既省算力,又把段内的局部形态先固化下来。

三、第二步:两阶段注意力(TSA)——时间和变量各走一轮#

拿到 (D, n_seg, d_model) 之后,Crossformer 做两阶段注意力(Two-Stage Attention)

阶段一:跨时间注意力(Cross-Time)。 固定变量维度,在 n_seg 个时间段之间做注意力。每个变量自己看自己的历史各段——这一步和普通时序注意力等价,抓的是”这只资产自己的时间依赖”。

阶段二:跨变量注意力(Cross-Dimension)。 固定时间段,在 D 个变量之间做注意力。这是 Crossformer 的灵魂:让每个资产显式地『看』其它资产的同期表示,按相关性聚合。 这正是把”跨变量依赖”从隐式变显式的地方。

两阶段的顺序和复杂度是重点:跨时间是 O(D·S²),跨变量是 O(S·D²)。因为 S 已经被 DSW 压短、D 通常不大,两者都远小于原始的 O((D·L)²) 全局注意力。分而治之,既省算力,又让两种依赖各得其所。

四、跨变量注意力到底学到了什么#

把阶段二的注意力权重画出来,它逼近的其实就是变量间的关联结构——高相关的资产之间权重大,弱相关的权重小。这正是我们希望模型显式抓住的东西。

跨维度注意力权重矩阵,≈变量间关联强度,同因子驱动的资产权重更高

在合成数据里,6 个资产由两个隐因子(周期 50 的慢因子 + 周期 13 的快因子)线性驱动,载荷随机。于是”载荷方向接近”的资产天然高相关,跨变量注意力就应该把它们连起来。热力图证实了这点:权重矩阵的结构和相关系数矩阵高度吻合。注意力不是玄学,它在这里就是一个可解释的、数据驱动的关联估计器。

五、诚实实测:增益真实,但别指望翻天#

我用纯 numpy 搭了个极简两阶段预测器(跨变量注意力 + 局部趋势),对比朴素持平基线(用最后一个值预测下一个值),在 450/150 的训练/测试切分上做单步预测:

方法测试集 R²
朴素持平(last value)0.356
跨变量注意力(Crossformer 风格)0.366

资产1 单步预测:跨变量注意力 vs 朴素持平基线(测试集)

R² 从 0.356 抬到 0.366——提升是真的(跨变量信息确实带来了增量),但幅度只有 1 个百分点。 这不是我调参没调好,而是这个合成任务本身自相关就很强,“用昨天猜今天”已经能解释大半方差,跨变量能补的边际信息本就有限。

这恰恰是我想强调的态度:Crossformer 的价值在于”把跨变量依赖显式化”这个结构,而不是”用了它 R² 就起飞”。 增益大不大,取决于你的数据里跨变量信息占多大比重。在真正强联动、领先滞后关系明显的多资产场景里,这 1 个百分点可能会放大成 5 个、10 个;在弱联动场景里,它可能连这 1 个点都没有。

A. 实现细节#

  • 信号字段:用每个资产的标准化价量序列(close 派生),滑窗长度 L=40,预测下一步(H=1)。
  • 执行语义:本文是预测精度实验,非交易回测;预测的是 i+1 时刻的标准化值,不涉及次日开盘执行。
  • 分段口径:DSW 段长 seg=20,每个变量独立分段后线性投影到 d_model,保留变量维 D。
  • 两阶段顺序:先跨时间(固定变量、段间注意力)后跨变量(固定段、变量间注意力);跨变量权重用训练集相关矩阵做 softmax 温度缩放近似。
  • 训练/测试切分:前 450 步训练、后 150 步测试,严格时间序切分,无未来信息泄漏。
  • R² 口径:在测试集上按 1 - SS_res/SS_tot 计算,基线用测试集自身均值。

B. 已知偏差#

  • 合成数据的自相关偏强:本例隐因子驱动使序列高度可预测,朴素基线 R² 已达 0.356,压低了跨变量注意力的相对增益。真实行情噪声更大,两个方法的绝对 R² 都会显著下降。
  • 简化的注意力实现:为可读性,本文用相关矩阵近似跨变量注意力权重,未做完整的 Q/K/V 端到端训练与多头机制,真实 Crossformer 的表达力更强。
  • 未建模交易成本与执行:预测精度不等于策略收益,R² 微幅提升能否转化为扣费后的正收益,需另做完整回测验证。

C. 结果解读#

第一,跨变量信息是真增量,但边际取决于数据。 R² 0.356→0.366 证明”看别的资产”确实带来了朴素基线之外的信息,但在这个强自相关任务里只值 1 个百分点。结论不是”Crossformer 无用”,而是它的收益和你数据里的跨变量结构强度成正比——弱联动数据别指望它救场。

第二,两阶段结构的真正价值是算力与可解释性。 DSW 把 O((D·L)²) 压到可控范围,跨变量注意力权重又能直接读成关联矩阵(热力图与相关系数高度吻合)。在需要”既要多资产、又要长序列、还要能解释”的场景,这个结构比堆一个大黑箱 Transformer 更划算。

第三,警惕把关联当因果。 跨变量注意力抓到的是相关,不是领先-滞后的因果。热力图里资产1和资产3权重高,只说明它们同涨同跌(共享因子),不代表其中一个能”预测”另一个。拿它做配对交易或统计套利前,必须再叠加格兰杰因果、协整检验这类专门工具。

五类真实陷阱#

  1. 维度注意力万能论:跨变量注意力只在”变量间确实有可利用结构”时有用。资产近似独立时,这一层纯属增加参数与过拟合风险。
  2. 跨变量必优于单变量:本例增益仅 1 个点。当单资产自相关已能解释大部分方差时,跨变量层的边际贡献可能被噪声淹没,甚至为负。
  3. 分段无损:DSW 把时间轴切段是有损压缩——段内的细粒度时序被压成一个 embedding。段长选太大,会抹掉短周期信号。
  4. 关联=因果:注意力权重高只代表同期相关,不代表可预测的领先关系。直接拿去做套利会踩空。
  5. 直接落地:合成数据 R² 提升,到真实扣费后收益之间隔着滑点、冲击成本、非平稳性三道坎,别跳过回测直接上实盘。
Crossformer 跨变量预测:用维度分段注意力建模变量交互
https://blog.halo26812.eu.org/blog/crossformer-financial
Author halo
Published at 2026年7月24日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨