前言 时序网络进行端到端量价因子挖掘时,常见的模型如GRU、PatchTST并未充分考虑股票与股票间的依赖关系,缺少截面信息可能导致模型在市场环境变化时表现不尽如人意。针对此问题 ,本篇报告提出一种时序+截面模型CrossGRU,模型在时序网络的基础上引入了一个可即插即用的截面交互模块,旨在捕捉股票之间的相互影响。CrossGRU模型在保持高效率的同时,无需任何额外的变量或图结构,展现出了其在简洁性和功能性上的优势。 模型特点 不同于使用额外的截面变量或模型的常见方法,CrossGRU以端到端的方式实现截面交互。我们提出“市场隐变量”假设,将其作为中间路由,结合交叉注意力机制实现截面维度的高效信息交互;同时考虑到个股的独立走势,我们引入可学习残差连接达到时序与截面信息的自适应融合。 因子测试对比 我们以GRU模型作为对比基准,在中证全指股票池回测区间内,CrossGRU因子的5日RankIC为10.9%,10日RankIC为11.7%,均略优于GRU模型; 在20分组的TOP组超额收益表现上,CrossGRU相较于GRU模型实现了7%的年化收益提升;在2024年初至4月区间,模型的TOP组超额收益最大回撤为8%,优于GRU模型的21%,在GRU因子表现较弱的2018、2024年,CrossGRU取得了显著更优的表现。 模型消融测试 我们对截面交互模块进行超参数检验,市场隐状态数量对CrossGRU的表现有较大影响,但整体结论仍然不变——不同参数设置下,CrossGRU模型的IC表现优于GRU模型,TOP组多头收益提高幅度为3%~7%,同时在回撤方面也得到不同程度改善。 为了进一步验证截面交互的增量,我们提出了一个更加简化的模型——CsAGRU。该模型使用加性注意力机制替代交叉注意力来实现截面交互。 CsAGRU的性能介于GRU和CrossGRU之间,在TOP组多头收益表现也优于GRU模型,进一步印证了引入截面交互模块的正面效果。 风险提示: 策略基于历史数据回测,不保证未来数据的有效性;深度学习模型存在过拟合风险;深度学习模型受随机数影响。 投资主题 报告亮点 基于时序深度学习模型进行端到端因子挖掘已有较多工作,然而单一的时序模型并没有有效利用截面的信息,处理上述问题常见的解决方法是引入额外的截面模型因子进行合成。本篇报告改进了时序端到端因子挖掘模型,在时序信息提取模块的基础上加入了截面信息的提取机制,而并不需要引入额外的特征,同时保持了时序模型在效率上的优势,为广大投资者提供新的研究思路,助力量化投资的发展。 投资逻辑 时序与截面信息数据在量化投资领域处处可见,因此用一个网络同时实现时间序列和截面信息具有相当的应用潜力。本篇报告改进了深度学习时序模型,进一步探索深度学习模型在量化领域上的运用。 一、动机 在我们之前的报告《PatchTST、TSMixer、ModernTCN时序深度网络构建量价因子》中,我们介绍了三个“Patch +通道独立”设计的时序深度学习网络,他们的骨干网络分别基于自注意力、MLP、CNN架构。我们将上述时序模型用于端到端量价因子挖掘任务,发现它们能一定程度学习到股票的时序与变量的有效信息交互,然而时序模型在2024年初产生了不同程度的显著回撤。 从模型设计的思路看,影响个股未来表现的特征并不仅来自于过去的时序特征,也来自于同时期的整体市场环境。之前我们介绍的时序模型实现了时序间与变量间的交互,但并没有考虑到股票之间的交互,缺失来自截面信息,这可能使时序模型在整体市场发生变化时得出错误的结论。因此在本篇报告中,我们尝试在时序模型的基础上进一步引入截面信息交互。 在时序模型的基础上引入截面信息学习时,每个batch的大小不是固定的常数,而是某个时点截面上所有股票过去一段时间的多变量时序数据,此时需要考虑的两个问题为: (1)截面股票数量不固定; (2)截面股票是一个较长的序列; 第一个问题限制了固定参数进行初始化的深度学习模块;对第二个问题,较长的序列对模型效率提出了额外要求,若将注意力机制运用在长度超过5000的序列上训练,硬件以及时间两方面的开销较大。 目前结合时序与截面特征的常见方法是使用两个不同模型进行分别建模,再进行融合加总,其中截面模型的输入通常为人工定义的截面特征,特征工程对先验知识提出了较高的要求。在本篇报告中,我们继续基于量价时序数据改进端到端深度学习模型,我们参考现代时序网络的解耦设计,在时序网络的基础上加入了一个无需图与额外特征、即插即用的截面信息抽取模块。 我们基于交叉注意力(Cross attention)与市场隐变量路由设计实现了股票截面信息交互模块,在GRU模型提取的时序特征的基础上进行自适应的时序、截面信息融合——我们取两个主要模块的缩写将新模型称为CrossGRU。 CrossGRU补足了时序GRU模型的股票截面维度的信息交互缺失,实现了一种自适应“时序+截面”的端到端量价因子挖掘模型,在量价因子挖掘任务上取得了更好的效果。 二、模型介绍 在本章我们首先分别介绍时序、截面信息提取模块涉及的相关技术,最后介绍CrossGRU的模型具体流程。 (一)时序模型 在本篇报告中,我们采用GRU模型进行时序信息抽取。在Embedding方式上也同样采用传统GRU的通道混合的编码方式。 GRU由Cho等在2014年提出,是一种循环类深度学习网络,它在每个时间点上通过门控单元自适应地捕获序列数据中的依赖关系,适合处理序列类数据。在股价序列的因子挖掘任务中GRU是强力的基线模型。 图表1经典RNN网络 我们之前的报告介绍的PatchTST等近年的时序深度模型采用了通道独立的设计。Han等人(2021)在实证测试中发现,通道独立的设计在多个时序任务中表现优于通道混合。在本篇报告使用的时序模型(GRU)中,我们采用了通道混合处理方式,考虑到了如下两点: 通道混合GRU模型的流程简单,与截面信息的结合步骤更为直观; 在端到端量价数据集上,从我们先前报告的测试结果看,若仅在序列嵌入阶段将通道混合改为通道独立提升不大,通道独立设计可能需要后续对应的模块联合使用(例如加入变量之间的信息交互),而本篇报告我们旨在探索时序截面信息的融合,应让模型效果提升的来源尽可能明显。 (二)交叉注意力 在Ashish Vaswani等人《Attention Is All You Need》中的Transformer模型是一种编码器-解码器模型,在机器翻译等自然语言任务中,transformer模型需要同时运用编码器和解码器部分,它们通过交叉注意力(cross attention)实现连接。仅基于编码器部分的自注意力机制(self attention)已经在深度量化模型中有了较多的运用,在本篇报告中我们探索了交叉注意力机制的应用。 图表2 Transformer模型 交叉注意力同样基于注意力机制,主要涉及Query、Key、Value三个中间变量(后续简写为Q、K、V),模型通过学习Q和K之间的相似性来为V分配权重,使模型输出集中注意力在最重要的信息上,公式表达如下: 𝑇 𝑄𝐾√𝑑 𝐴𝑡𝑡𝑒𝑛𝑡𝑖𝑜𝑛(𝑄, 𝐾, 𝑉) = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥 ( ) 𝑉 𝑘 对于自注意力机制,Q、K、V由同一个输入序列映射而来;在交叉注意力中,公式表达仍然同上不变,区别在于交叉注意力的Q、K、V来自于两个序列:通常Q来自一个序列,K和V来自另一个序列。因此交叉注意力表达了一个序列与另一个序列的信息交互过程,大致流程如下图所示: 图表3交叉注意力机制 交叉注意力的设计特点使其处理一个序列时能考虑与之相关的另一个序列的信息,两个序列可以来自于两类截然不同的数据,例如文本+图片、文本+声音等多模态情景,此外,交叉注意力在文本翻译、文本QA等任务中同样也有较多运用。 为方便介绍交叉注意力机制的灵活运用方式,我们进一步以视觉领域的模型CrossVit(Chen等,2021)为例进行说明: CrossVit以ViT模型为基础,增强了ViT模型对多尺度信息的处理能力。在ViT模型中,图像首先被切分为多个图像块(Patch),Patch数量越多,每个token包含的细节信息就越丰富,因此Patch大小表示了捕捉的信息粒度。为了使ViT模型能拥有类似卷积神经网络中的多尺度信息融合能力,CrossVit使用了双分支结构,每个分支设置不同大小的Patch——较小的Patch捕获更细粒度的信息,较大的Patch则覆盖更广泛的图片信息。两种尺度的Patch通过交叉注意力模块进行信息交互和融合,使模型更有效地整合不同尺度的信息。 图表4 CrossVit模型 简言之,交叉注意力是一种十分灵活的机制,可以实现各类不同来源信息的融合,在需对齐数据的场景下适用。对因子挖掘任务而言,融合不同时间粒度的特征、时序特征与截面特征是交叉注意力可能的应用场景,本篇报告中我们首先探索了后者,将交叉注意力用于时序与截面特征融合。 最后,我们简单对比交叉注意力、自注意力机制的复杂度:假设自注意力作用的序列长度为𝐿,交叉注意力作用的两个序列长度为𝐿、𝐿,序列中每个token的嵌入维度d相同;时间复杂度描述了算法的运行时间如何随着输入数据量的增加而增加,空间复杂度描述了算法的存储空间与数据量的关系。 对自注意力机制: 2 1 时间复杂度:𝑂(𝐿𝑑) 2 1 空间复杂度:𝑂(𝐿) 对交叉注意力: 时间复杂度:𝑂(𝐿𝐿𝑑), 空间复杂度:𝑂(𝐿𝐿) 如果的交叉注意力运用的两个序列长度𝐿≈𝐿,则两种注意力的复杂度相当。 (三)CrossGRU模型 CrossGRU的简化流程下图所示。我们在基于GRU的时序信息提取模块的基础上,进一步加入了基于交叉注意力的截面信息提取模块,并使用了一个可学习的残差模块自适应的将截面信息和个股表征进行融合。 图表5 CrossGRU模型 1、时序交互 模型首先通过GRU提取时序信息,GRU最后一个时间步包含了全部时序的信息,我们取最后一个时间步作的输出向量作为每只股票的表征,得到了截面上的股票表征序列。 假设一个batch输入的数据为𝑋,形状为[𝑁, 𝑇, 𝑀],其中𝑁为股票数,𝑇为时序,𝑀为变量,𝑇与𝑀在不同batch间是相同的,𝑁在不同batch间不一定相同: 𝑖𝑛 𝑆 = 𝐺𝑅𝑈(𝑋) 𝑖𝑛 取GRU的最后时间步结果后得到截面股票的表征序列𝑆。𝑆的形状为[𝑁, 𝑑],𝑑为嵌入的特征维度。 此时,如果我们直接在𝑆上运用自注意力机制学习股票间的交互,会造成较大的硬件负担,我们希望截面交互模块能捕捉不同股票之间交互作用的同时能够尽可能的高效。 2、截面交互 上一步我们得到一个截面股票的表征序列𝑆,假设我们有另一个表示截面信息的表征序列,且截面表征的序列长度远小于股票表征序列,对两个序列运用交叉注意力便可以高效的实现截面信息的融合。 那么截面的全局信息表征如何获得?最为直观的方法是引入额外的先验截面变量,例如市场近期的波动率、市场风格/阿尔法因子时序数据等,将它们嵌入为截面表征后,以股票表征序列作query访问截面表征进行交叉注意力;但这种方式不可避免地带来了另一个新问题:选择什么变量、多少变量才能更为准确地描述市场截面信息,它对模型结果可能存在较大的影响。 在本篇报告中,受到FactorVAE、CrossFormer工作的启发,我们使用路由机制的交叉注意力回避了上述问题,这种方式不需要引入额外的变量,能继续以端到端的方式实现因子挖掘任务。 我们让模型自行学习“不可观测”的市场隐状态,市场隐状态作为交叉注意力的中间路由进行两次交叉注意力——首先市场隐状态通过交叉注意力访问当前截面上所有的股票信息,得到当前截面表征,再通过第二次交叉注意力,用个股表征序列访问截面表征,