前言 时序数据在不同尺度表达下的特征模式可能并不完全相同。例如,股票在分钟、日、周、月尺度上呈现不同的趋势与波动。对于较长的序列,我们希望端到端模型可以更好处理序列的局部短期与整体长期的关系,实现不同尺度的信息提取与交互。 模型特点 时序深度学习模型中的“patch”通常指将时间序列中连续的时点聚合成子序列,可以帮助模型更有效地学习局部的时间特征。 我们将时序模块改为双分支结构,每个分支使用不同patch设置以提取不同时间尺度的信息,通过门控循环单元(GRU)处理同一尺度内的时序信息交互,再通过交叉注意力处理不同尺度间的信息交互。在此基础上,我们继续引入先前报告中的截面模块,构建一个双分支时序+截面的端到端模型,进行量价因子挖掘任务。 因子测试对比 我们以GRU模型作为对比基准,CrossGRU-2在30D、90D、30min数据集的10日RankIC分别为12.3%、12.5%、11.9%;分组测试中TOP组在上述三个数据集的年化收益分别为28.60%、32.01%、23.26%,相比GRU实现了7.1%、8.3%、4.2%的提高;2024年TOP组在上述数据集的累计收益分别为7.4%、10.4%、-11.7%,均高于GRU模型的-8.5%、-6.2%、-14.6%; 模型消融测试 我们对双分支时序、截面模块进行一系列消融测试。在大多情况下同时加入双分支模块、截面模块的模型实现最优表现;在较长序列的数据集上加入Patch改进明显:对90D、30min数据集,GRU加入patch后因子TOP组收益提高2~3%,改为双分支的多尺度结构后表现进一步提高;我们取CrossGRU-2最优模型在中证1000构建指增组合,组合实现超额收益年化19.43%,跟踪误差2.83%。 风险提示: 策略基于历史数据回测,不保证未来数据的有效性。深度学习模型存在过拟合风险。深度学习模型受随机数影响。 投资主题 报告亮点 基于时序深度学习模型进行端到端因子挖掘已有较多工作,我们对时序模型的多尺度交互进行初步探讨。处理多尺度问题常见的方法是多分支网络,本篇报告基于Patch提取不同时间尺度的信息表征,并使用交叉注意力机制进行不同尺度的信息交互,以此改进端到端模型的时序模块,同时,我们进一步加入了截面信息交互模块,构建一个端到端的多尺度时序+截面模型,为广大投资者提供新的研究思路,助力量化投资的发展。 投资逻辑 时序与截面数据在量化投资领域处处可见,通过深度学习网络实现时序或截面信息的信息挖掘具有相当的潜力。本篇报告提出了基于深度学习的量价因子挖掘模型,进一步探索深度学习在量化领域上的运用。 一、动机 在先前的报告《CrossGRU:基于交叉注意力的时序+截面端到端模型》中(后记为CrossGRU-1),我们基于交叉注意力机制实现了一个截面模块,使端到端模型学习截面股票间的交互作用,相比于GRU基线模型取得了改善。 在本篇报告中,我们探索了模型在时序维度上的改进方法。端到端的深度学习模型利用过去一段时期的量价时序数据进行因子挖掘。我们认为量价数据在不同时间尺度下存在差异,例如,日度K线包含相对丰富的“局部”信息,而周度K线则更多地体现为“整体”的走势特征。我们希望模型在处理较长序列时,能够兼顾短期的局部特征与长期的整体信息。 基于以上考虑,我们从“局部-整体”思路出发,使模型学习不同尺度内的特征模式,以及不同尺度间的信息交互。为了实现这一目标,我们引入了近年来时序网络中常见的Patch设计,我们使用一个双分支的时序模块,通过不同的Patch设置得到不同时间尺度下的表征,通过GRU模型实现每个尺度内的时序信息交互,并通过交叉注意力实现不同尺度间的信息交互。 最后,在上述双分支时序模块的基础上,我们继续使用CrossGRU-1中的截面模块,构建一个双分支时序+截面模块的端到端模型,由于模型的基础机制仍然是交叉注意力(Cross Attention)与GRU,我们将本篇报告提出的模型记为CrossGRU-2。 我们在30D以及两个序列长度更长的90D和30min量价数据集上对模型进行了测试,我们还进一步通过消融测试初步探讨了时序模块和截面模块在不同输入数据集上的表现差异,以及在长序列输入中引入Patch对GRU模型的改进效果。 二、模型介绍 本篇报告的模型简化流程下图所示,模型大致分为时序、截面、特征三个模块,其中截面与特征维度的模块与先前报告CrossGRU-1相同。 本篇报告我们主要改进了时序模块的设计,通过一个双分支结构提取不同时间尺度的信息,并使用交叉注意力融合;在后文我们首先介绍模型涉及的主要机制,再具体介绍CrossGRU-2三个模块的实现方法。 图表1 CrossGRU-2模型 (一)模型主要机制 1、交叉注意力 交叉注意力是注意力机制的一种运用方式,涉及Query、Key、Value三个中间变量(简写为Q、K、V),公式表达如下: T QK√d Attention(Q,K,V)=softmax( )V k 交叉注意力与自注意力的核心公式同为上式。自注意力机制捕捉同一序列内部的依赖关系,Q、K、V由同一个序列经过映射得到,计算复杂度为Ο(𝑛),其中n是序列长度; 交叉注意力机制的Q、K、V则来自于两个序列,核心思想是将两个不同的输入序列进行交互,以捕捉它们之间的相关性,计算复杂度为Ο(𝑚·𝑛),其中m、n分别是两个序列的长度。 交叉注意力机制常被运用于多模态类的任务场景,例如机器翻译、文本+图片等,是处理数据对齐场景的一种灵活机制。 2、时序Patch 时序Patch通常做法是在模型Embedding步骤前,将时间序列数据划分为多个固定长度的连续子序列。patch通过设置特定大小的窗口,在原序列进行“滑动截取”得到多个子序列(当滑动的步长不等于滑动窗口的大小时,一个时点的值可以存在于多个子序列中),将一个子序列视为一个token进行后续的Embedding步骤。 Patch的逻辑与优势在于: -使单个token包含更多信息:不同于自然语言序列中的“字”,时序的每一个时点的取值意义有限,Patch将局部连续的时点取值看成一个整体并视为一个token,单个token信息更加丰富; -Patch处理后输入序列长度明显降低,能减少模型计算开销或接受更长的序列; (二)时序交互模块 在时序模块的设计上我们参考了CrossVit(Chenet al.,2021)的双分支结构: 图表2 CrossVit模型 CrossVit以ViT模型为基础,在ViT模型中图像首先被切分为多个图像块(Patch),Patch参数的设置影响了每个token的信息粒度。为了使ViT模型能拥有类似卷积神经网络中的多尺度信息融合能力,CrossVit使用了双分支结构,每个分支设置不同大小的Patch,较小的Patch捕获更细粒度的信息,较大的Patch则覆盖更广泛的图片信息。每个分支的Encoder输出通过交叉注意力与MLP完成信息融合。 我们参考上述CrossVit的思路,对过去一段时间的量价时序输入使用不同的Patch大小进行采样,构建一个双分支结构;对时序模块的一个分支,流程如下图所示: 图表3时序双分支流程 𝑖 𝑙,𝑚 考虑第i个股票𝑋∈ℝ程为: 的输入,其中l为时间序列长度,m为变量数,每个分支的流 ′𝑙,𝑑 𝑖 𝑒𝑚𝑏 (1)对输入序列进行PatchEmbedding处理,得到一种尺度的信息表征𝑋其中l’为Patch后子序列数,d为嵌入维度; ∈ℝ , (2)将上一步的序列输入每个分支对应的GRU模型。 在第一步,我们通过一个1D卷积实现patch与Embedding,两个分支的kernel size设置为不同的大小,kernel size较小的分支每个token表示相对更高频、局部的信息,kernel size较大的分支每个token表示相对更低频、整体的信息; 在第二步,我们将上一步的输出序列输入GRU模型; 上述步骤后,我们得到了每只个股在两个不同的时间尺度下的表征序列,对每一种尺度表度,我们用GRU学习时序维度的信息交互。接下来我们使用交叉注意力的对两个表征序列进行融合:对频率相对高频的分支,取GRU最后一个时间步并作为交叉注意力的Query,取频率相对低频的分支GRU的所有时间步的输出,并作为交叉注意力的Key和Value: 𝑖 𝑎𝑡𝑡𝑛 𝑖ℎ𝑓 𝑖𝑙𝑓 𝑖𝑙𝑓 𝑆 =CrossAttn(𝑆,𝑆,𝑆) 𝑖ℎ𝑓 1,𝑑 𝑖𝑙𝑓 𝑙′,𝑑 𝑆 ∈ℝ 为高频分支GRU输出的最后一个时间步,𝑆 ∈ℝ 为低频分支GRU的输 出的完整序列。我们将交叉注意力的输出S 与高频分支GRU的输出结果进行连接: attn 𝑖𝑡𝑠 𝑖 𝑎𝑡𝑡𝑛 𝑖ℎ𝑓 𝑆=𝑆 +𝑆 i ts 1,𝑑 S∈ℝ ,为时序模块的最终输出; (三)截面交互模块 截面交互以及后续的特征模块与CrossGRU-1报告相同,简要流程如下: 图表4截面交叉注意力 𝑛,𝑑 记时序模块输出截面股票表征序列为S∈ℝ ,n为股票数量;截面交互实现步骤为: ts 初始化c个可学习的、维度为d的市场隐状态,记为R; 以R为Query,股票表征序列S为Key、Value进行交叉注意力,交叉注意力输出结果记为B; ts 以股票表征序列𝑆为Query,B为Key、Value进行交叉注意注意力,交出注意力输出结果𝑆与𝑆使用门控连接,得到S; 𝑡𝑠 𝑐𝑠𝑎𝑡𝑡𝑛 𝑡𝑠 𝑐𝑠 第三步的门控连接为: Z=Softmax(MLP(S)) ts 𝑆=S+𝑍⊗𝑆 𝑐𝑠 ts 𝑐𝑠𝑎𝑡𝑡𝑛 𝑛,𝑑 𝑆∈ℝ 为截面模块的最后输出,此时截面股票实现了信息交互。 𝑐𝑠 (四)特征交互模块 对特征维度,我们通过一个FFN层实现特征维度交互: 𝑆 =𝐵𝑎𝑡𝑐ℎ𝑁𝑜𝑟𝑚(𝑆+𝑀𝐿𝑃(𝑅𝑒𝐿𝑈(𝑀𝐿𝑃(𝑆)))) out 𝑐𝑠 𝑐𝑠 图表5特征维度信息交互 𝑛,𝑑 𝑆 ∈ℝ 为CrossGRU-2骨干模型的最终输出。 𝑜𝑢𝑡 三、测试结果 (一)数据集介绍 数据集变量: 30D、90D数据集:日频的高、开、低、收、均价、成交量6个变量; 30min数据集:30分钟频的高、开、低、收、换手率5个变量; 采样方法: 以每周的最后一个交易日t为一个采样截面,在每个采样截面首先通过如下条件对股票进行排除: 1、剔除上市不满120天的股票; 2、剔除截面市值最小的10%股票。 -对日频数据集,取采样截面t对应的N个股票过去T日的量价时间序列,滚动生成数据截面(N,T,6)、( N2 ,T,6)…(N,T,6),在第一个维度上进行拼接得到全部训练数据。我们对T分别取30和90,即30D、90D数据集; t t -对30分钟频数据,回溯截面上N个股票过去10个交易日的数据(序列总长度为80),其余步骤同上,后续记为30min数据集; t 模型按年滚动训练,每年年底重新训练模型;回溯过去11年作为训练集+验证集,其中最近的一年为验证集,次年为测试集,如下图所示: 图表6训练验证集划分方法 在进行模型重训练时,设置3个随机种子,将3次预测结果合成作为最终结果。 标准化方法: 1、MAD法对异常值进行缩尾处理; 2、除换手率外,每个截面用最后一个交易日收盘价/成交量作为分母进行缩放归一化; 3、进行Z-score标准化; 验证集与测试集标准化涉及的统计量采用训练集的拟合结果。 模型预测标签: 预测标签为未来10日收益(t+1日收盘价~t+1