Py学习  »  机器学习算法

基于图深度学习的指数预测

QuantML • 3 周前 • 34 次点击  

1 引言

金融市场在全球经济发展中扮演着举足轻重的角色 。股票市场每日交易量巨大 。有效市场假说指出,在一个理想的竞争性股票市场中,所有市场信息都应及时反映出来 。因此,对股票行为的分析和未来预测长期以来一直是金融领域的研究热点 。然而,股票价格的波动受多种因素影响 ,包括全球经济环境、公司财务报告、与金融直接或间接相关的新闻事件,以及金融专家的投机行为 。

过去十年,随着机器学习,尤其是深度学习技术的蓬勃发展 ,股票行为预测已成为数据科学领域的一个活跃研究课题 。本文提出了一种基于图的模型,用于通过多样化数据源预测股票指数趋势 。

2 相关工作

由于公司运营、公众舆论以及其他未知潜在因素等多种原因,预测个股的价格趋势或走势可能是一项艰巨的任务 。然而,股票市场指数作为单一公司加权聚合的产物 ,提供了一种理解整体股票市场趋势的替代方法,并且通常被认为更可靠 。预测模型大致分为两类(不一定相互独立):预测个股和预测指数 。对深度学习技术在股票市场预测中的应用进行了广泛(几乎完整)的调查 。本节主要介绍了一些专门利用CNN或图方法的工作 。

2.1 卷积神经网络在股票预测中的应用

尽管CNN模型最初是为计算机视觉任务开发的,但在股票预测领域,CNN可作为一种工具,通过从输入矩阵中提取一维数据来处理时间序列数据 。通常,CNN使用一维滤波器以由数据大小决定的步幅在时间序列数据上滑动 。

利用CNN对输入历史事件数据进行训练,改进了事件嵌入方法,其中池化层有效地提取了代表性事件历史特征 。(U-CNNpred)源自,采用分层方法进行训练,其中子CNN层顺序进行预训练,直到提议的模型结构完成 。该模型表现出良好的结果,并且由于其简单的架构和浅层而有效,这减少了维度灾难,因为需要学习的权重更少 。

为了充分利用预定行业关系中包含的信息,一些模型将知识图与CNNs集成 。提出的知识驱动时间卷积网络(KDTCN)利用Open IE提取与知识图相关的事件并进行股票预测 。为了避免一维卷积层常见的数据泄漏问题,KDTCN采用因果卷积,该卷积在上一层中仅使用当前和先前时间步的信息 。KDTCN通过提取价格时间序列中的重要特征,有效解释了价格的突然变化 。

2.2 图神经网络在股票预测中的应用

现有研究已将知识图整合到其个股预测模型中,方法是将图神经网络与循环神经网络(RNN)等序列模型相结合 。这类模型的通用流程如下:1. 历史股票数据作为特征输入到时间序列层,以输出每个股票的节点嵌入:前一天的收盘价和移动平均线 、价格变化率 。2. 图的邻接矩阵是一个预先确定的图,通过开放知识图源构建,用于通过行业、子公司、人员和产品关系连接公司 。3. 节点嵌入和图信息输入到图神经网络层以更新节点嵌入:中执行滚动窗口分析 。4. 更新后的嵌入输入到全连接层进行预测 。所有这些工作都依赖于GAT和GCN的原始版本或某些派生版本 。

一种LSTM关系图卷积网络(LSTM-RGCN)模型,该模型处理股票之间的相关性,其中相关性基于历史市场数据计算 。LSTM机制被添加到RGCN层中,以缓解过平滑问题 。

利用GCN分析指标在股票趋势预测中的相关性 。MG-Conv基于多图卷积神经网络,并利用使用成分股票数据构建的指数之间的静态图 。此外,他们基于指数之间具有不同投资组合策略的趋势相关性创建了动态图,并基于这两个图定义了多图卷积操作 。

3 数据集

我们拥有每个市场82个特征的每日数据 。这些数据可分为八个不同组别:原始特征、技术指标、经济数据、世界股票市场指数、美元兑其他货币汇率、大宗商品、美国市场大公司数据和期货合约 。其中,只有原始特征和技术指标因不同指数而异 。

4 方法论

4.1 背景

本小节概述了GraphCNNPred的两种神经网络类别:图神经网络(GNN)和CNNpred 。

4.1.1 卷积神经网络和CNNpred

卷积神经网络于1995年由[CNN]引入 。CNN已被应用于特征选择和市场预测 。由于我们的模型是CNNpred的派生和泛化版本 ,我们首先解释了CNNpred的架构,这是一个用于股票市场预测的通用CNN框架 。

CNNpred有两种变体,分别称为2D-CNNpred和3D-CNNpred 。我们分四个主要步骤解释了该框架:输入数据表示、每日特征提取、持续时间特征提取和最终预测 。

  • 输入数据表示:CNNpred从不同市场获取信息并用于预测这些市场的未来 。目标是找到一个将市场历史映射到未来波动的通用模型,这里的通用模型指的是适用于多个市场的模型 。换句话说,我们假设从历史到未来的真实映射函数对于许多市场都是正确的 。为此,需要设计一个单一模型,该模型能够根据市场自身历史预测未来,但为了提取所需的映射函数,该模型需要通过来自不同市场的样本进行训练 。
  • 每日特征提取:历史数据中的每一天都由一系列变量(如开盘价和收盘价)表示 。CNNpred第一层设计背后的思想源于这一观察 。在CNNpred的两种变体的第一步中,都有一个卷积层,其任务是将每日变量组合成更高级别的特征,以表示历史中的每一天 。
  • 持续时间特征提取:预测市场未来行为的另一部分有用信息可以直接通过研究市场行为随时间的变化来提取 。这提供了市场行为趋势的信息,并可以找到未来预测的模式 。因此,需要组合连续几天的数据变量,以提取高级特征来反映趋势或市场行为 。
  • 最终预测:在最后一步,前几层生成的特征通过 展平操作转换为一维向量,然后将此向量输入到全连接层,将特征映射到预测 。

4.1.2 图神经网络

基于图的结构在表达复杂互连系统的归纳偏差方面取得了成功,从而应用于生物学、物理学、化学和推荐系统 。典型任务包括节点预测、图嵌入和图级分类 。近年来,图神经网络(GNN)已成功应用于所有这些不同的学习问题 。GNN利用图的拓扑结构来编码实体信息,例如节点、边或超图 。GNN模型的核心是消息传递的概念 。在网络的每一层中,每个节点特征都根据由相邻节点特征组成的消息进行更新 。即,对于具有顶点集和节点特征的图G,第n步的节点特征通过以下方式更新:

其中MSG和AGG通常可以学习 。它们的不同选择和约束产生了不同的神经网络架构 。对于图分类任务,最终层的节点特征被汇集在一起 ,用于分类任务 。因此,在这种方法中,通过图传播消息,然后将它们汇集在一起 。我们详细阐述了构成我们模型图部分的两个经典GNN:图卷积网络(GCN)和图注意力网络(GAT) 。本节的其余部分额外假设:不允许边缘信息 。

一个GCN层有两个主要步骤:消息传递和组合 。我们表示u、v为节点,为节点特征,为v的邻域,为v的度 。对于消息传递:

对于组合:

 ,

其中W是一个可训练的权重矩阵 。对于GCN,一个自然的问题是:我们能否隐式地学习聚合权重,而不是为每个节点分配权重?  GAT提供了一个解决方案:对所有节点应用一个共享的线性变换,由权重矩阵W参数化,以及一个共享的注意力机制,该机制计算注意力系数以指示节点u对节点v的重要性 。因此,GAT通过用注意力系数替换原始GCN节点权重来构建 。

4.2 模型

2D-CNNpred和3D-CNNpred的构建遵循以下步骤:1. 提取每日特征;2. 处理持续时间数据;3. 进行最终预测 。具体来说,一个线性变换将82维数据提取为一维(每日特征) 。然而,由于金融数据和数据集中特征固有的复杂隐式性质,我们提供了一种提取每日特征的替代方法 。提取持续时间信息的步骤与CNNpred一致,因为它结构简单且方差低,相比于传统的如RNN或LSTM等时间序列模型 。

尽管如此,通过放弃CNNpred模型中顺序的限制(即先每日特征,再持续时间数据),我们的模型将有三种可能的布局 :1. 以CNN处理时间开始,以图进行每日特征提取结束 。2. 以一个小的CNN开始,部分提取持续时间数据,然后通过图进行每日特征提取,最后以另一个小的CNN提取所有持续时间数据 。3. 以图进行每日特征提取开始,以CNN处理时间结束 。

图和图层的构建比CNN的单层更复杂和精细 ,这意味着更多的参数调整,更多的可训练系数(特别是对于GAT的自注意力机制) 。因此,我们通过简单的CNN时间序列层来平衡这种复杂性,这减少了维度灾难 。

4.2.1 图的构建

我们仅使用训练数据计算所有82个特征的相关图 。我们将每个特征视为图中的一个节点 。如果两个特征之间的相关性大于固定值(本文选择0.7),则它们之间形成一条边 。回想大多数GNN利用拓扑结构来编码图信息,每层的消息传递仅从节点到其邻域可用 。因此,如果两个节点连接,节点信息将传递给另一个节点 。类似地,对于两个几乎不相关的特征,可以安全地认为是独立的,这两个特征应该被隔离,并且在图层之后,只依赖于全局信息及其局部信息 。因此,在我们的模型设置中,为了提取每日特征,即从特定日期的所有特征中提取信息,我们通过GCN或GAT引入了高度相关特征(即邻域)的信息 。

4.2.2 GAT-CNNpred

  • 输入数据表示:如前所述,输入与2D-CNNpred相同,是一个二维矩阵 。矩阵的大小取决于表示每一天的变量数量以及用于进行预测的历史天数 。如果用于预测的输入由d天组成,每d天由f个变量表示,则输入张量的大小将是 。
  • 每日特征提取:在CNNpred中,为了提取每日特征,使用了1 x初始变量数量的过滤器 。每个过滤器覆盖所有每日变量,并将它们组合成一个单一的高级特征 。相反,对于GAT-CNNpred,模型中引入了GAT 。回想在“图的构建”小节中,我们将每个特征视为图中的一个节点,并且如果相关性大于固定值,则形成一条边 。GAT的一层使得网络中的每个特征能够从与其相关的其他特征中收集信息 。因此,在层的输出中,每个节点信息表示节点的实际修改数据,并受到其邻域的影响 。
  • 持续时间特征提取:在CNNpred中,具有过滤器的卷积层组合了不同日期提取的特征,以构建在特定持续时间内聚合可用信息的高级特征 。每个过滤器覆盖连续三天,这一设置的灵感来自于观察,即大多数著名的K线图模式,如“三线打击”和“三只乌鸦”,都试图在连续三天中找到有意义的模式 。然后是激活层和最大池化层 。为了聚合更长时间间隔的信息并构建更复杂的特征,2D-CNNpred使用另一个具有过滤器的卷积层,然后是另一个与第一个类似的池化层 。我们提出了一种从CNNpred中提取持续时间特征的广义方法 。我们将连续的两组持续时间卷积层(卷积层、激活和池化)视为两组独立的层 。具体来说,我们将一组卷积层视为从短时间段(即本文中的3天)部分提取持续时间特征 。因此,这些层的精确排列没有限制,因为任何一种排列都会提取这两个维度信息 。因此,我们将图层与持续时间卷积层组进行交叉 。这些不同的交叉将在示例配置中明确解释 。结合每日特征提取,该模型可以从不同日期和特征中提取数据特征,即来自第i天第j个特征和来自第天第个特征的数据 。
  • 最终预测:由最后一个池化层生成的特征向量被展平为一个最终特征向量 。然后,该特征向量通过一个全连接层转换为最终预测 。激活函数不是ReLU,而是Sigmoid 。我们的模型做出的预测(每个数据点有五个数字)可以解释为五种指数第二天价格上涨的概率 。具体来说,将更多的资金投入到上涨概率更高的股票是合理的,反之亦然 。在第5节中,我们将输出返回为0或1,以更接近预测的值为准 。在第6节中,采用了不同的标签系统,因此预测具有15个维度,输出为0、1或2 。

GAT-CNNpred的示例配置:如前所述,我们用于每个预测的输入由60天组成,每天由138个变量表示(在“数据准备”小节中解释) 。因此,GAT-CNNpred的输入是一个60乘138的矩阵 。我们提供了三个子模型:

  • GAT-CNN:前两个图层(GAT)的输出通道分别为30和10,之后有一个池化层,将图信息“汇总”为一个单节点形状向量 。然后是两个卷积层,带有8个过滤器,每个过滤器后面都有一个ReLU激活层和一个最大池化层 。
  • CNN-GAT:前两个卷积层具有过滤器,每个过滤器后面都有一个ReLU激活层和一个最大池化层 。然后是两个图层(GAT),输出通道分别为30和10,之后有一个池化层,将图信息“汇总”为一个单节点形状向量 。
  • CNN-GAT-CNN:第一个卷积层具有85个 过滤器,后面是ReLU激活层和最大池化层 。然后是两个图层(GAT),输出通道分别为20和10,之后有一个池化层,将图信息“汇总”为一个单节点形状向量 。然后是另一个卷积层,带有85个过滤器,每个过滤器后面都有一个ReLU激活层和一个最大池化层 。

最终的扁平特征向量被输入到全连接层以生成最终输出 。我们的模型将同时生成5个指数的预测,而不是只预测一个指数的趋势 。图的池化层将在“池化”小节中讨论 。简而言之,有三种可能的池化方式:平均池化 、最大池化 、全连接池化 。

4.2.3 GCN-CNNpred

该模型与GAT-CNNpred类似 。然而,GCN具有固定的聚合权重,而GAT允许共享注意力机制计算注意力系数 。因此,为了实现两种图模型的相似目的,GCN通常需要比GAT更多的层 。为了避免GCN模型的灵活性过大,我们让GCN的输出通道衰减速度快于GAT 。GCN-CNNpred的一种常见配置是6层GCN,输出通道分别为10、7、2、3、5、5 。

4.2.4 图的池化

给定一个具有N个节点、F个特征和特征矩阵X(N行,F列)的图,池化在一步之内将该图池化为一个单一节点 。我们介绍了三种图的池化方法 :

  • 平均池化(Mean pooling):在节点维度上进行逐特征平均,作为池化层的输出 。
  • 最大池化(Max pooling):在节点维度上进行逐特征最大化,作为池化层的输出 。
  • 全连接层池化(Full-connected layer pooling):这是一个带有大小为F的可训练变量的全连接层 。

研究了图神经网络中各种池化方法的性质和一般原则 。如果任务更侧重于图中的统计和分布信息而非精确结构,则平均聚合器可能表现良好 。此外,当节点特征多样且很少重复时,平均聚合器与求和聚合器一样强大 。最大池化既不能捕捉精确结构也不能捕捉分布 。然而,它可能适用于需要识别代表性元素或“骨架”的任务,而不是区分精确结构或分布的任务 。最大池化聚合器学习识别3D点云的骨架,并且对噪声和异常值具有鲁棒性 。全连接池化也可以被视为大多数图神经网络中的解码器 。我们在模型中利用了所有三种池化层,并根据性能选择不同的池化层 。

4.3 数据准备

本文关注短期价格趋势预测 。回想原始数据集中,我们获得了每日的收盘价 。因此,为了对数据进行标记,我们首先计算第t天的日收益:,其中Close是第t天的收盘价 。我们提供了两种不同的标记系统 。

第一种是传统的趋势标记:如果收益大于0,则标记为1,否则标记为0 。然而,在实际训练和测试期间以及交易模拟中,我们注意到模型很难区分-0.0001和0.0001的收益 。此外,在实际交易中,预测-0.0001的收益为1并不像预测巨大下跌为1那样灾难性 。因此,我们提供了第二种标记系统 。对于所有训练数据,我们将低阈值和高阈值分别设置为收益的35%和65%分位数,并根据以下规则标记每个数据点:如果收益大于高阈值,则标记为2;如果收益小于低阈值,则标记为0;否则标记为1 。相应地,可以将1天收益的条件替换为n天收益,其中n从1到10,这符合短期收益的性质 。

数据集涵盖2010年1月至2017年11月 。我们采用65%-15%-20%的比例进行训练-验证-测试集划分 。由于数据的范围多样,需要进行数据标准化 。特别是在我们的模型中,我们深度依赖于带有不同池化方式的图神经网络 。非标准化数据会导致广泛的梯度消失问题,并减慢学习曲线 。我们对所有数据点进行正常标准化:,其中是从训练数据中计算出来的 。在第6节中,所有数据都包含在组合模拟部分 。回想一下,就指数而言,唯一不同的数据是原始数据和技术指标,因此特征的总维度为138 。在接下来的两节中,138是特征维度,而不是82,因为3D-CNNpred在F-measure方面表现略好,这可能是由于完全使用了所有可能的数据特征 。

4.4 评估

评估指标对于模型选择至关重要 。通常,对于不平衡数据集,我们依赖宏平均F-measure(F-measure的平均值)来评估每个类 。在第5节中,我们将使用0,1标签和F-measure作为指标 。在第6节中,由于采用了0,1,2标签系统,我们直接使用交易模拟夏普比率作为标准 。

4.5 网络参数

本文利用PyTorch实现CNN 。图神经网络则利用Torch-Geometric 。图形成边的阈值设置为相关性0.7 。除最后一层为Sigmoid外,所有层的激活函数均为ReLU 。GAT-CNNpred示例配置小节中提到的模型以及GCN-CNNpred中的类似版本是接下来两节的候选模型 。使用Adam优化器,批大小为32来训练网络 。

5 结论与讨论

5.1 结果

我们将所有提出的Graph-CNNpred模型与CNNpred和纯图技术中应用的算法进行了比较 。在所有基线算法中,使用了原始论文中报告的相同设置 。就CNNpred而言,2D-CNNpred和3D-CNNpred的结果在统计学上优于[(]cnnpred)中的基线算法,即PCA-ANN、技术指标和CNN-cor 。我们还将图技术(GAT和GCN)列为额外的基线算法,以比较我们的图启发模型及其原始图技术的性能 。对于这两种图技术,初始数据被输入到通过特征相关性构建的相同图,然后通过一个浅层ANN进行预测 。

为了使情况与其他基线算法相同,这些算法在相同条件下进行了多次测试 。然后,比较算法的平均F-measure 。在第5节和第6节中,将有两组不同的结果,根据训练/测试划分 。测试集(65%-15%-20%,测试日期从2016年4月21日开始)对于“始终做多”策略的夏普比率为0.114或年化夏普比率为1.8 。然而,2013年至2023年的历史数据显示,指数“始终做多”策略的平均年化夏普比率为0.84 。因此,我们提出了一种新的训练-测试划分方法:42%-8%-50%,测试日期从2014年4月21日开始,该测试日期对于“始终做多”策略的夏普比率为0.043或年化夏普比率为0.7 。

表1总结了基线算法和我们提出的模型在F-measure方面对标普500指数、道琼斯工业平均指数、纳斯达克综合指数、纽约证券交易所综合指数和罗素2000历史数据的平均结果 。基线算法与GCN-CNNpred和GAT-CNNpred之间的差异具有统计学意义 。表2还报告了不同指数算法的最佳性能 。表3和表4是如果测试日期从2014年开始的平均和最佳性能 。

5.2 讨论

从结果中显而易见,GAT-CNNpred和GCN-CNNpred在统计学上均优于基线算法,包括CNNpred和图技术 。我们的模型与基线算法的F-measure差异显著 。回想CNNpred通过简单的全连接层提取每日特征信息,而Graph-CNNpred允许特征之间进行消息传递 。由于CNNpred中两种不同的信息提取方法(持续时间特征和每日特征)是正交的,因此很难同时识别一小段连续时间内的复杂模式和一些相关特征 。

然而,GAT或GCN不以时间序列方式解释数据,但能够识别每日特征 。GCN-CNNpred能够从CNN层收集持续时间信息,GCN层能够收集特定时间段的高度相关数据并同时从这些二维数据中提取复杂的特征 。GAT-CNN结合了有效收集相关特征的注意力机制,这在理论上应该使训练过程更有效率 。

因此,我们混合图技术和CNN的通用框架相对于这两类基线算法具有两个优势:首先,它尊重数据集的时间序列性质,同时不会通过重型机械过度训练预测过程 ;其次,它使用一组包含股票预测有用信息的丰富特征,而不受时间维度和特征维度正交性的限制 。精心设计的CNN和图技术可以提升结果,使学习过程平滑且鲁棒 。

6 交易策略与模拟

本节重点关注从所有Graph-CNN模型派生出的交易策略 。理论上,高精度预测模型应能产生良好的交易表现 。我们注意到,我们的模型优于大多数现代市场指数预测系统 。这里需要提出的一个普遍问题是,这些基于图的模型是否能产生良好的交易策略和表现 。

回想在标签子节中,我们提供了两种标签策略系统,其中第二种是三类标签策略 。具体来说,第二种标签揭示了三类:如果股票的日收益显著为正,则标记为“上涨”;如果显著为负,则标记为“下跌”;如果接近零,则标记为“不变” 。在实现过程中,我们对这三类进行了独热编码 。在本节中,这种标签直接形成了一个交易策略:如果在第t天结果的最大值位于维度1,表示价格将上涨,则我们持有多头头寸;同理,如果价格将下跌,则持有空头头寸 。如果在第t天结果的最大值位于维度2,表示价格波动不大,则我们平仓(如果持有多头/空头头寸),或者不采取行动 。

对于性能指标,我们使用夏普比率(Sharpe ratio)  :

其中表示第t天的盈亏(PnL) 。然而,在实际金融交易世界中,年化夏普比率是最常见的夏普比率,即夏普比率乘以 。在此背景下,交易成本被忽略 。另一个绩效衡量指标是确定性等价收益(CEQ return) 。

其中是风险厌恶系数 。在本文中,风险厌恶系数为1 。

以下是我们在交易策略中使用的模型列表 :

  • GAT:纯GAT策略,不包含任何CNN层,使用012标签 。
  • GCN:纯GCN策略,不包含任何CNN层,使用012标签 。
  • GAT-CNNpred:结合了两层GAT和卷积层以获取持续时间信息的策略,使用012标签 。可能的组合包括不同风格的图池化、GAT然后CNN、CNN然后GAT、CNN然后GAT然后CNN 。
  • GCN-CNNpred:结合了两层GCN和卷积层以获取持续时间信息的策略,使用012标签 。可能的组合包括不同风格的图池化、GCN然后CNN、CNN然后GCN、CNN然后GCN然后CNN 。

在表7中,“Combination”列表示我们可以做多或做空任何五个指数中的1单位 。在模拟过程中,一个关键情况是“Always long”策略组合的夏普比率引起了注意 。从上面关于结果的子节中,存在两组训练-测试划分:65%-15%-20%和42%-8%-50% 。

6.1 讨论

Graph-CNNpred作为股票市场交易系统的一部分进行了测试,以根据交易策略的标准评估指标展示其对交易表现的影响 。尽管直观上,高精度市场预测模型可以带来不错的交易表现,但需要提出的一个自然问题是,一个好的预测模型能为模拟交易环境中的实际利润贡献多少 。我们的实验表明,使用CNNpred的预测进行交易策略,在大多数测试指数及其组合中,夏普比率和CEQ收益衡量指标都取得了良好的结果 。

“Always long”(在第一天买入并始终持有)是一种被动交易策略,是简单的基线 。如上所述,其他策略源自2D-CNNpred、3D-CNNpred、GAT和GCN 。这些观察结果表明,Graph-CNNpred框架可以作为实际交易系统的预测模块的良好候选 。

7 总结

金融市场价格预测任务具有挑战性,原因在于其非线性和复杂性 。高质量的数据变量能够实现更精确的预测 。本文整合了广泛的信息 。我们提出了两种基于图神经网络和CNN的组合框架的通用变体 。Graph-CNNpred在预测流行股票指数(即标普500、纳斯达克、道琼斯工业指数、纽约证券交易所和罗素指数)的趋势方面进行了测试 。最终结果表明,Graph-CNNpred的两种通用版本均显著优于最先进的基线算法 。Graph-CNNpred在所有五个指数的预测性能方面均提高了约1%至12%的F-measure 。这些发现证实了所提方法的有效性,并表明设计用于股票预测问题的CNN结构是一个值得进一步探索的关键挑战 。尽管本文的主要目标是预测股票市场的方向性走势,但Graph-CNNpred已成功应用于交易系统 。这表明,对Graph-CNNpred在交易系统应用方面的进一步探索可能是一个有趣的研究方向 。





代码见星球,加入QuantML星球,与星主和850+专业人士一起交流机器学习模型:
图片

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/183461
 
34 次点击