专栏名称: 华创金工
提供市场观点、舆情挖掘、事件研究、市场监控等服务。
目录
相关文章推荐
十点读书会  ·  《哪吒2》登顶全球影史前9!外国人坐不住了: ... ·  11 小时前  
新京报书评周刊  ·  《情绪疲惫的你》:觉察自我是一场精神的归乡 ·  3 天前  
51好读  ›  专栏  ›  华创金工

【专题报告】CrossGRU-2:基于Patch与多尺度时序改进端到端模型

华创金工  · 公众号  ·  · 2024-08-01 17:22

正文

华创专题报告

根据《证券期货投资者适当性管理办法》及配套指引,本资料仅面向华创证券客户中的金融机构专业投资者,请勿对本资料进行任何形式的转发。若您不是华创证券客户中的金融机构专业投资者,请勿订阅、接收或使用本资料中的信息。 本资料难以设置访问权限,若给您造成不便,敬请谅解。感谢您的理解与配合。

摘要



时序数据在不同尺度表达下的特征模式可能并不完全相同。例如,股票在分钟、日、周、月尺度上呈现不同的趋势与波动。 对于较长的序列,我们希望端到端模型可以更好处理序列的局部短期与整体长期的关系,实现不同尺度的信息提取与交互。


时序深度学习模型中的“patch”通常指将时间序列中连续的时点聚合成子序列,可以帮助模型更有效地学习局部的时间特征。 我们将时序模块改为双分支结构,每个分支使用不同patch设置以提取不同时间尺度的信息,通过门控循环单元(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.4%,跟踪误差6.2%。



风险提示:策略基于历史数据回测,不保证未来数据的有效性;深度学习模型存在过拟合风险;深度学习模型受随机数影响。


1


概述

在先前的报告《CrossGRU:基于交叉注意力的时序+截面端到端模型》中(后记为CrossGRU-1),我们基于交叉注意力机制实现了一个截面模块,使端到端模型学习截面股票间的交互作用,相比于GRU基线模型取得了改善。

在本篇报告中,我们探索了模型在时序维度上的改进方法。端到端的深度学习模型利用过去一段时期的量价时序数据进行因子挖掘。我们认为量价数据在不同时间尺度下存在差异,例如,日度K线包含相对丰富的“局部”信息,而周度K线则更多地体现为“整体”的走势特征。我们希望模型在处理较长序列时,能够兼顾短期的局部特征与长期的整体信息。


基于以上考虑,我们从“局部-整体”思路出发,使模型学习不同尺度内的特征模式,以及不同尺度间的信息交互。为了实现这一目标,我们引入了近年来时序网络中常见的Patch设计,我们使用一个双分支的时序模块,通过不同的Patch设置得到不同时间尺度下的表征,通过GRU模型实现每个尺度内的时序信息交互,并通过交叉注意力实现不同尺度间的信息交互。

在上述双分支时序模块的基础上,我们继 续使用CrossGRU-1中的截面模块,构建一个双分支时序+截面模块的 端到端模型。


由于模型的基础机制仍然是交叉注意力(CrossAttention)与GRU,我们将本篇报告提出的模型记为CrossGRU-2。 我们在30D以及两个序列长度更长的90D和30min量价数据集上对模型进行了测试,我们还进一步通过消融测试初步探讨了时序模块和截面模块在不同输入数据集上的表现差异,以及在长序列输入中引入Patch对GRU模型的改进效果。


2


模型介绍

本篇报告的模型简化流程下图所示,模型大致分为时序、截面、特征三个模块,其中截面与特征维度的模块与先前报告CrossGRU-1相同。


2.1 主要机制

交叉注意力

交叉注意力是注意力机制的一种运用方式,涉及Query、Key、Value三个中间变量(简写为Q、K、V),公式表达如下:

交叉注意力与自注意力的核心公式同为上式。自注意力机制捕捉同一序列内部的依赖关系,Q、K、V由同一个序列经过映射得到,计算复杂度为Ο(𝑛2),其中n是序列长度;交叉注意力机制的Q、K、V则来自于两个序列,核心思想是将两个不同的输入序列进行交互,以捕捉它们之间的相关性,计算复杂度为Ο(𝑚·𝑛),其中m、n分别是两个序列的长度。交叉注意力机制常被运用于多模态类的任务场景,例如机器翻译、文本+图片等,是处理数据对齐场景的一种灵活机制。

时序 Patch

时序Patch通常做法是在模型Embedding步骤前,将时间序列数据划分为多个固定长度的连续子序列。patch通过设置特定大小的窗口,在原序列进行“滑动截取”得到多个子序列(当滑动的步长不等于滑动窗口的大小时,一个时点的值可以存在于多个子序列中),将一个子序列视为一个token进行后续的Embedding步骤。Patch的逻辑与优势在于:(1) 使单个token包含更多信息:不同于自然语言序列中的“字”,时序的每一个时点的取值意义有限,Patch将局部连续的时点取值看成一个整体并视为一个token,单个token信息更加丰富;(2) Patch处理后输入序列长度明显降低,能减少模型计算开销或接受更长的序列;


2.2 时序交互模块

在时序模块的设计上我们参考了CrossVit(Chenetal.,2021)的双分支结构。对过去一段时间的量价时序输入使用不同的Patch大小进行采样,构建一个双分支结构;

对时序模块的一个分支,流程如下图所示:

在第一步,我们通过一个1D卷积实现patch与Embedding,两个分支的kernelsize设置为不同的大小,kernelsize较小的分支每个token表示相对更高频、局部的信息,kernelsize较大的分支每个token表示相对更低频、整体的信息;在第二步,我们将上一步的输出序列输入GRU模型;


上述步骤后,我们得到了每只个股在两个不同的时间尺度下的表征序列,对每一种尺度表度,我们用GRU学习时序维度的信息交互。接下来我们使用交叉注意力的对两个表征序列进行融合:对频率相对高频的分支,取GRU最后一个时间步并作为交叉注意力的Query,取频率相对低频的分支GRU的所有时间步的输出,并作为交叉注意力的Key和Value:


2.3 截面交互模块

截面交互以及后续的特征模块与CrossGRU-1报告相同,简要流程如下:


2.4 特征交互模块

对特征维度,我们通过一个FFN层实现特征维度交互:


3


因子测试


3.1 数据集介绍

数据集变量

  • 30D、90D数据集:日频的高、开、低、收、均价、成交量6个变量;

  • 30min数据集:30分钟频的高、开、低、收、换手率5个变量;

采样方法

以每周的最后一个交易日t为一个采样截面,在每个采样截面首先通过如下条件对股票进行排除:(1) 剔除上市不满120天的股票;(2)剔除截面市值最小的10%股票。

对日频数据集,取采样截面t对应的Nt个股票过去T日的量价时间序列,滚动生成数据截面(N1,T,6)、(N2,T,6)…(Nt,T,6),在第一个维度上进行拼接得到全部训练数据。我们对T分别取30和90,即30D、90D数据集;

对30分钟频数据,回溯截面上Nt个股票过去10个交易日的数据(序列总长度为80),其余步骤同上,后续记为30min数据集;


模型按年滚动训练,每年年底重新训练模型;回溯过去11年作为训练集+验证集,其中最近的一年为验证集,次年为测试集,如下图所示:

在进行模型重训练时,设置3个随机种子,将3次预测结果合成作为最终结果。

标准化方法

(1)MAD法对异常值进行缩尾处理;(2)除换手率外,每个截面用最后一个交易日收盘价/成交量作为分母进行缩放归一化;(3)进行Z-score标准化;验证集与测试集标准化涉及的统计量采用训练集的拟合结果。

模型预测标签

预测标签为未来10日收益(t+1日收盘价~t+11日收盘价计算,rank标准化处理);MLP预测头输出维度为64,取64个值的均值作为每只股票的因子得分;损失函数为IC。

主要参数设定

1D卷积输出通道为64、GRUhiddenstate设置为64、层数为1;注意力机制的头数为4;FFN层的乘数为2;截面模块的市场隐状态数为30; CrossGRU模型中双分支时序的patch大小设置为:对30D、90D数据集patchsize取3、5;在30min数据集取2、8。

训练策略涉及相关参数为:

在下一节,我们首先展示包含 双分支时序+截面模块 的模型因子测试结果(记为CrossGRU-2模型)。我们的对比基准为GRU+MLP(后续记为GRU模型)。在消融测试小节,我们再展示模块逐个删减的测试结果。


3.2 测试结果

本节我们对不同深度学习模型得出的量价因子进行检验与对比。回测区间为2018年1月1日~2024年5月31日、股票池为中证全指。

IC测试结果

本部分展示不同数据集上深度学习因子的IC测试结果,因子数值为周度频率,我们计算5日与10日IC:

从不同数据集的结果看,CrossGRU-2与GRU模型在IC各指标上表现相近;10日RankIC指标上,表现最佳的模型为基于90D数据集的CrossGRU-2,RankIC为12.5%。

分组测试结果

本部分我们对因子进行分组测试,分组数设置为20,每周最后一个交易日根据因子值分组,次周第一个交易日收盘价进行调仓操作,不计交易成本;超额收益的计算基准为中证全指。

下图依次展示在每个数据集上,CrossGRU-2与GRU不同分组年化收益,以及多头TOP组(第20分组)的超额收益走势对比:

上表展示了3个数据集的分组测试结果。相较于IC指标,两个模型在分组测试特别是TOP分组的表现上呈现较大差异:

  • 在所有数据集上,CrossGRU-2的TOP组表现均优于GRU模型, 在30D、90D、30min数据集上,年化超额收益率分别为31.13%、34.54%、25.79%,相比基准分别高出7.1%、8.3%、4.2%。

  • 2024年因子TOP组在上述三个数据集的表现为:累计收益7.4%、10.4%、-11.7%,均高于GRU模型的-8.5%、-6.2%、-14.6%;最大回撤分别为16.2%、16.1%、24.6%,均低于GRU模型的22.9%,23.3%,28.1%;


4


消融测试

本节我们进一步探讨CrossGRU-2模型中双分支时序模块、截面模块的影响。


4.1剔除时序或截面模块

我们首先考虑,剔除时序或截面模块后,模型表现如何变化。 下面我们逐个剔除CrossGRU-2的组件:

CrossGRU-2为基线模型,剔除截面模块后记为CrossGRU-2w/oCSAttn;剔除双分支时序结构后记为CrossGRU-2w/oTSAttn(此时模型与CrossGRU-1报告中的模型相同)。

鉴于不同模型IC差异仍然较小,下面仅展示分组测试结果:

我们发现在不同的数据集上的消融测试的结论并不完全一致:

  • 对基于日频数据的30D、90D数据集,同时加入双分支时序、截面模块后效果好于仅使用单个时序或截面模块; 在30D数据集上,剔除截面模块会造成模型效果的显著下降;包含截面模块的模型在24年的回撤明显更少;

  • 对基于分钟数据的30min数据集,同时加入双分支时序、截面模块的效果弱于仅加入时序模型或仅加入截面模块,30min数据集上最优的模型为CrossGRU-2w/oCSAttn, 即仅用双分支时序模块;截面模块在分钟数据集上的增量弱于日频数据集,我们认为这可能是因为分钟频视角更倾向于个股的局部、特质信息,股票间的交互关系更为复杂。


4.2 时序Patch

在本部分,我们单独讨论时序Patch的作用,特别是在较长序列中Patch的应用。GRU设计的初衷是为了缓解RNN的长期依赖问题,它通过引入门控机制控制信息的流动更好地捕捉长期依赖关系,但随着序列长度的增加,长期依赖问题仍然可能会存在,另一方面,随着序列长度的增加,GRU模型的训练时间和推理时间都会变长。

本篇报告加入了90D、30min数据集,对应序列长度分别为90、80,当我们用更长的输入序列时,GRU模型是否能很好地捕捉到长序列中的增量信息?

我们采用1D卷积实现了通道混合的时序Patch(卷积核的大小表示patchsize,卷积步长与卷积核大小相同),下面我们对比三个模型:

  • GRU基线模型,与上文相同;

  • Patch+GRU,在基线模型的基础上,数据输入GRU前进行Patch;

  • TS-CrossGRU,在Patch+GRU的基础上更改为双分支,并通过交叉注意力进行尺度融合,即CrossGRU-2剔除截面模块,与上节的CrossGRU-2w/oCSAttn相同。

第一、第二个模型我们希望观察Patch对GRU模型的影响;第二、第三个模型我们观察双分支的多尺度Patch设计相对单个Patch的提升。

Patch+GRU模型的patchsize为:30D、90D数据集为3;30min数据集为2;TS-CrossGRU模型的patchsize为:30D、90D数据集两个分支的patchsize均分别设置为3、5;30min数据集上两个分支的patchsize分别为2、8;

下面我们展示分组多头测试结果:

以上结果显示:

  • 对比单分支与双分支Patch: 在所有数据集上双分支效果好于单分支 ,双分支相比单分支在年化收益率提高幅度约2%;

  • 对比单分支与基线模型: 在30D数据集上加入Patch无法跑赢GRU基线;而在较长的输入序列的数据集,例如90D和30min数据集,加入Patch的后模型强于GRU基线, GRU+Patch在两个长序列数据集上相比GRU模型在年化收益指标提高约4%。

下面我们展示两个序列较长的数据集90D、30min,20分组以及TOP组结果的对比图:

综合以上结果,我们可以初步得出结论:

  • 序列长度可能对Patch效果存在影响,在更长的序列中Patch效果更好。对输入较长序列的90D数据集和30min数据集,GRU加入Patch的优势明显 ——Patch在提升模型因子表现的同时拥有更高的训练效率;对于序列长度较短的30D数据集,加入Patch后因子表现略微下降。

  • 增长量价输入序列能带来一定的增量信息 ;例如对两个同样基于日频的数据集30D、90D,不同模型在90D数据集均有好于30D的表现;仅使用GRU模型处理较长时序可能并没有充分发掘数据中的信息。

  • 多分支Patch优于单分支Patch。 考虑不同时间尺度下的特征,效果相比于一个固定的Patch更好,我们认为这是因为时序数据特别是较长的时间序列,在不同的尺度下存在并不完全相同特征,且不同尺度间存在交互作用。


4.3 小结

在本章中,为了进一步验证双分支时序模块、截面模块的作用,我们进行了一系列消融测试得出了以下结论:

  • 对于30D和90D数据集,同时加入双分支时序模块、截面模块的模型表现最优, 加入截面模块后2024年回撤明显减少; 对30min数据集,只加入双分支时序模块实现最优表现;

  • 我们进一步讨论了长序列输入、时序Patch以及时序多尺度交互, 我们发现(对于GRU模型而言)更长的量价序列存在增量,在长序列加入Patch后同时提高因子表现和模型效率,通过多分支的Patch实现多尺度信息提取比单个Patch效果更优;

  • 总体而言,在GRU/CrossGRU-1的基础上引入多尺度时序模块增强了模型表现。 对于分钟频、日频数据集各自特点带来的结论差异,我们将在后续报告中继续研究模型的混合频率问题。


最后,我们取表现最优的模型——90D数据集上的CrossGRU-2,在中证1000上进行指增测试:

约束条件(1)指数成分股占比大于80%(2)单只股票权重上限为0.8%,下限为0%(3)市值暴露小于3%(4)行业暴露小于3%(5)每期换手30%;

调仓频率为周频,根据每周最后一个交易日的因子值在次周首个交易日进行调仓,持有期为10天;回测交易成本双边千2.5。

以下图表展示了指增组合的超额走势及逐年累计收益。1000指增超额收益年化19.43%,年化跟踪误差为6.2%,每期换手平均32%。


5







请到「今天看啥」查看全文