Stanford CS224W: Machine Learning with Graphs
Stanford CS 224W (Machine Learning with Graphs) course project by Xiang Li and Farzad Pourbabaee.
查看 Colab 上的完整实现:
https://colab.research.google.com/drive/1giTiIwPRgwgwhSAhqp1rz37m48asWQQj?usp=sharing
动机
从专业基金经理到普通人,很多人都想通过投资股市来赚钱,但很少有人能够跑赢市场。事实上,标普道琼斯指数的 2024 年 SPIVA 美国中期报告显示,57% 的活跃美国大盘股经理人表现不及标普 500 指数,与 2023 年观察到的 60% 的表现不佳率一致 [Ganti,2024 年]。
众所周知,由于市场的非线性、短期和长期时间依赖性以及股票之间的复杂关系,预测股票价格极具挑战性。在这项工作中,我们旨在探索对股票间关系进行建模在预测股票价格方面的优势。我们提出了一种名为“差分图Transformer”的新型图Transformer架构,它可以学习动态更新股票相关图以跟踪波动的市场状况。我们证明我们的模型明显优于不包含股票间关系的基线,并表明以统计相关性先验为基础有助于将模型推广到未来未见过的市场状况。
股票有共同趋势
由于市场基本面因素的影响,股价通常会一起波动。然而,特殊因素也会导致整个市场出现差异。例如,在图 1 中,我们绘制了三只高度相关的股票的价格时间序列:苹果 (AAPL)、Discover Financial Services (DFS) 和特斯拉 (TSLA)。从中可以看出,这三只股票都遵循某种市场模式,并且存在特定于股票的变化。
图 1. 3 只高度相关的股票的历史股价
以前的股市预测方法通常将每只股票视为一个孤立的实体,仅考虑单个目标公司 [Patel 等人,2024]。然而,实际上,股价并不是独立的,可能会受到其他因素的影响。例如,同一行业或行业内的股票往往具有相关性,这意味着它们可以朝相同的方向(正相关)或相反的方向(负相关)移动。这类信息通常被传统方法忽视,但可以成为预测股市走势的宝贵信息来源。
不同股票之间的相互依赖性可以通过相关性来衡量。在图 2 中,我们以图形方式表示了与 Apple (AAPL) 高度相关的 10 只股票。相关性越高,相应节点就越近,边的颜色也表示相关性的强度。
图 2. 10 只高相关性股票的相关性图
统计相关图因其易于构建和及时性而受到青睐
为了捕捉股票间关系,通常使用 3 种主要类型的股票图:公司关系图、文本图和统计图 [Patel et al., 2024]。构建公司关系图需要扎实的金融领域知识和大规模数据工程,这既费时又费力,而且成本高昂 [Tian et al., 2023]。这些预定义的图通常也是静态的,并非总是最新的,并且包含股票之间错误、缺失或不相关的联系,这会给学习带来很大的噪音并抑制泛化 [Tian et al., 2023, Kim et al., 2019, Ma et al., 2024]。文本图也有类似的缺点。虽然公共新闻和投资者情绪会影响未来价格,但情绪数据的影响会随着时间的推移而恶化,投资者对反映在股价走势中的新闻做出反应也需要不确定的时间 [Shantha Gowri and Ram, 2019]。因此,该领域已转向仅依赖历史数据的统计图构建。最常用的统计指标是股票对之间的皮尔逊相关系数。最近,提出了互信息来解决皮尔逊相关性在捕捉非线性股票模式方面的局限性 [Feng et al., 2022, Yan et al., 2020]。
虽然统计指标可以捕捉工业部门等股票之间的重要关系 [Yan et al., 2020] 和股票之间的相关依赖关系 [Patel et al., 2024],但由于 GNN 具有密集和全连接的特性,因此充分利用这些指标仍然具有挑战性。为了防止过度平滑,通常会切断低于给定阈值的相关值,并将剩余的正相关值二值化 [Yin et al., 2021]。虽然阈值化会产生适合 GNN 处理的稀疏图,但它也会丢弃关键信息,例如股票之间的相关性大小。研究还表明,GNN 的性能对阈值很敏感,并且该超参数可能并非适用于所有股票 [Yin et al., 2021]。在下面的小节中,我们将追溯从历史数据构建统计图的发展过程,从全局相关图到完全动态的可学习图。
全局关联图很容易构建,但难以捕捉不断变化的市场动态
Yin 等人 [2021] 率先使用基于所有过去价格的全局相关图。基于训练数据中的所有历史价格构建无向皮尔逊相关图,并且仅保留任意阈值以上的强连接以防止过度平滑。混合图卷积网络 (GCN) 和门控循环单元 (GRU) 模型用于预测道琼斯工业平均指数 (DJIA) 和交易所交易基金 (ETF) 中选定股票的第二天价格。他们的模型不是在 GRU 的每个时间步骤中独立考虑每只股票,而是使用 GCN 在给定时间步骤为所有股票创建嵌入,条件是这些股票的先前隐藏状态和当前价格。虽然这种固定的全局相关图优于独立处理股票的 GRU 基线,但本质上存在局限性。由于消息传递 GCN 的功能方式,股票仅限于从全局相关性预定义的一组固定邻居接收消息。这使得模型很难捕捉股票之间随时间变化的关系。
局部和全局相关图的组合可以更好地捕捉多种分辨率的市场动态
Ma 等人 [2024] 超越了静态全局相关图,结合了不同时间尺度的多个相关图来捕捉全局和局部关系。与 Yin 等人 [2021] 类似的阈值技巧用于实现稀疏性,并使用多图卷积网络 (Multi-GCN) 模型来组合全局和局部相关图。在 ETF、DJIA 和上海证券交易所 (SSE) 数据集上,Multi-GCN 的表现优于仅使用全局相关的变体。虽然具有多种分辨率的相关性有助于根据波动的市场条件调整模型,但预定义的统计相关性可能无法形成股票之间的最佳消息传递路径,因为它将许多复杂的股票相互依赖关系融合到标量相关强度中。
可学习的动态图表使库存关系更加灵活
Tian 等人 [2023] 更进一步,使用动态图神经网络从历史股票特征中自动学习不断变化的依赖关系,并取得比预定义的相关性和行业股票图更好的性能。开发了一个自适应动态图学习 (ADGL) 模块,通过引入多头稀疏自注意力网络,从每个时间点的原始股票数据中明确学习股票依赖关系。虽然注意力机制自然会生成一个密集的权重矩阵,但由于担心密集权重会分散注意力分数,因此只保留每行的前 k 个最大元素。然后使用 softmax 对稀疏化的权重矩阵进行归一化,并通过混合 GCN-GRU 架构来模拟学习到的股票依赖关系的动态演变。
差分图Transformer作为股票市场预测的统一框架
在从历史数据构建图的过程中,图稀疏化仍然是临时性的,依赖于单个超参数阈值,随着市场的发展,该阈值可能并非对所有股票都最佳。GCN 过度平滑和注意力权重分散的挑战要求一种新的图模型,该模型可以有效地学习关注密集、全连接图中的相关节点。此外,该模型应该能够捕捉不同规模的股票关系,无论是全球还是本地,以应对动荡的市场。
我们提出了差分图Transformer( DGT ),这是一种新颖的图Transformer模型,旨在过滤市场噪音并发现密集图中的相关连接。该模型灵活地结合了预定义的局部和全局相关图,并可以利用最近提出的差分注意机制动态修改它们 [Ye et al., 2024]。完全动态的图构建也是可能的,它就像传递一个单位矩阵作为相关图一样简单。结合时间维度上的因果注意(图 3),我们的方法有效地模拟了股票之间复杂的时空相互依赖关系。
图 3. 我们的差分图Transformer的基本结构,插图由 [Zheng et al.,2019] 提供。节点表示股票,加权边表示股票之间的预定义相关性。在每个时间步骤 t,差分图注意力都会应用于预定义的相关性,并产生动态注意力矩阵。在时间步骤中,时间注意力会捕获短期和长期时间依赖性。
问题陈述
给定 T 天 N 只股票的价格 P = {p1, p2, ..., pT } ∈ R^(T ×N) 和股票相关矩阵 A ∈ R^(N ×N),任务是预测第二天的价格 p_(T +1)。
输入投影将价格与库存和时间信息融合
为了为我们的模型创建输入嵌入,我们将每个时间步骤中每只股票的价格投影到 d 维嵌入,并将其添加到可学习的股票和时间嵌入中:
时间注意力编码股票之间的时间依赖性
对于每个节点 s,仅解码器的transformer学习根据 t 个过去节点嵌入对 t + 1 个时间步进行编码。
其中 X^s 表示所有时间步骤中股票 s 的输入节点嵌入,X′^s 表示所有时间步骤中的输出节点嵌入。M 是一个因果注意力掩码,可确保未来时间步骤不会泄漏到过去。
差异注意力学会消除注意力噪音,并关注上下文的相关部分
在详细阐述如何将差分注意力机制应用于图设置之前,我们先来解释一下这种新注意力机制的要点。注意力机制的主要工作是关注输入的相关部分。然而实验表明,Transformer 通常只将一小部分注意力分数分配给相关部分,而过度关注不相关的上下文(即注意力噪音)[Ye et al., 2024]。因此提出了差分注意力机制,以在消除噪音的同时放大对相关上下文的注意力。具体而言,差分注意力机制将注意力分数计算为两个单独的 softmax 注意力图之间的差值。减法可以消除噪音,从而促进稀疏注意力模式的出现。
语言建模上的实验结果表明,差异 Transformer 在各种实际应用中都优于 Transformer,例如长上下文建模、关键信息检索、幻觉缓解、上下文学习和激活异常值减少 [Ye et al., 2024]。差异注意力机制的公式如下:
其中 W_Q、W_K、W_V 是参数,λ 是可学习的标量权重,由 λ_q1、λ_q2、λ_k1 和 λ_k2 参数化。权重的初始偏移量为 λ_init,根据经验,第一层设置为 0.2。差分注意力通过计算每个头部的差分注意力并连接每个头部的输出,直接扩展到多头自注意力 [Vaswani et al., 2023]。
差分图注意力将差分注意力扩展到图上的条件
在给定的时间步骤 t,差分图注意力机制将预定义的相关图整合到多头自注意力机制中,以学习动态图。我们不是计算两个 softmax 注意力图并取其差值,而是将预定义的相关图的邻接矩阵作为先验注入到注意力计算中。然后从先验中减去动态注意力矩阵,以解释市场变化。差分图注意力机制如下:
其中 X_t 表示时间 t 的输入时间节点嵌入,X′_t 表示输出节点嵌入,A_t(h) 表示时间 t 时头部 h 的相关图的邻接矩阵。第一组键、查询和值缩放输入邻接矩阵,第二组用作偏差。由于局部和全局股票相关性显示为相互补充 [Ma et al., 2024],因此可以将局部相关先验应用于一个头部,将全局先验应用于另一个头部,以动态捕获多尺度依赖关系。下面,我们展示了差分图注意力的参考实现,它采用自 UniLM 中的差分注意力模块。为了简洁起见,我们仅显示 forward() 函数:
class MultiheadDiffAttn(nn.Module):
def forward(
self,
x,
A=None,
attn_mask=None,
):
bsz, tgt_len, embed_dim = x.size()
src_len = tgt_len
# Project input x into query, key, and value
q = self.q_proj(x)
k = self.k_proj(x)
v = self.v_proj(x)
q = q.view(bsz, tgt_len, 2 * self.num_heads, self.head_dim)
k = k.view(bsz, src_len, 2 * self.num_kv_heads, self.head_dim)
v = v.view(bsz, src_len, self.num_kv_heads, 2 * self.head_dim)
q = q.transpose(1, 2)
k = repeat_kv(k.transpose(1, 2), self.n_rep)
v = repeat_kv(v.transpose(1, 2), self.n_rep)
q *= self.scaling
# Compute attention weights by multiplying query and key
attn_weights = torch.matmul(q, k.transpose(-1, -2))
attn_weights = torch.nan_to_num(attn_weights)
# Apply attention mask
if attn_mask is not None:
attn_weights += attn_mask
# Calculate attention scores using softmax
attn_weights = F.softmax(attn_weights, dim=-1, dtype=torch.float32).type_as(
attn_weights
)
# Calculate the lambda used for differential attention
lambda_1 = torch.exp(torch.sum(self.lambda_q1 * self.lambda_k1, dim=-1).float()).type_as(q)
lambda_2 = torch.exp(torch.sum(self.lambda_q2 * self.lambda_k2, dim=-1).float()).type_as(q)
lambda_full = lambda_1 - lambda_2 + self.lambda_init
# **Optionally condition the differential attention on a graph prior A**
attn_weights = attn_weights.view(bsz, self.num_heads, 2, tgt_len, src_len)
attn_weights = attn_weights[:, :, 0] * (1 if A is None else A) - lambda_full * attn_weights[:, :, 1]
# Compute output embeddings by mixing values based on their attention scores
attn = torch.matmul(attn_weights, v)
attn = self.subln(attn)
attn = attn * (1 - self.lambda_init)
attn = attn.transpose(1, 2).reshape(bsz, tgt_len, self.num_heads * 2 * self.head_dim)
return (attn, attn_weights)
将所有内容整合到差分图Transformer中
时间步骤 T 的最终嵌入被投射为第二天的价格。在训练期间,我们使用教师强制并行预测每个时间步骤 t 的第二天的价格,类似于标准解码器。
我们的损失函数是预测价格和实际价格之间的 l2 距离:
我们使用常见的回归指标来评估我们的模型,包括均方根误差 (RMSE) 和平均绝对误差 (MAE) [Patel et al., 2024]:
标准普尔 500 数据集的构建:股票预测的现实基准
我们的数据集包含从 2014 年 10 月 31 日至 2024 年 10 月 02 日 10 年期间标准普尔 500 指数股票的每日收盘价。标准普尔 500 指数通常用作股市预测的基准,因为该指数是美国股市的关键指标,占美国上市公司总市值的 80% [Patel et al., 2024, Global, 2024]。我们直接从雅虎财经获得了这个包含 2496 个交易日的数据集,并将数据集分成 64 天的块,每个块大致对应一个财政季度。前 80% 的块用于训练,接下来的 10% 用于验证,最后 10% 用于测试。换句话说,前 8 年或 31 个季度用于训练,然后 1 年或 4 个季度用于验证,最后一年用于测试。这种分割结构可确保模型在连续且不重叠的时间段内进行训练、验证和测试,从而使我们能够准确评估其在未来未见数据上的表现。所有原始价格均根据 Tian 等人 [2023] 的训练数据集通过 z 分数归一化进行转换。
标准普尔 500 指数的探索性数据分析证实,相互信息是更好的相关性测量
之前,我们介绍了皮尔逊相关系数和互信息作为构建相关图的两个主要统计指标。为了直观地了解它们的有效性,我们对标准普尔 500 指数数据集进行了一些探索性数据分析。我们首先根据整个 10 年数据集,使用互信息和皮尔逊绘制与苹果相关性最高的 3 只股票,如图 4 和图 5 所示。
图 4. 使用全局相互信息得出的与 Apple (AAPL) 相关性最高的 3 只股票
图 5. 使用全局皮尔逊相关系数得出与苹果 (AAPL) 相关性最高的 3 只股票
从视觉上看,我们可以注意到,全局互信息比皮尔逊更善于发现具有相似趋势的股票。这可能是因为皮尔逊只衡量股票之间线性关系的强度和方向,因此不足以捕捉波动市场中的长期趋势。然而,当我们考虑图 5 和图 6 中大约一个财季长度(约 64 天)的小窗口时,这两种指标之间的性能差距急剧缩小。我们可以看到,互信息和皮尔逊选择了与苹果具有相似趋势的两只顶级股票,仅在第三只最相似的股票上有所不同。
图 5. 使用局部共同信息得出的与 Apple (AAPL) 相关性最高的 3 只股票
图 6. 使用局部皮尔逊相关系数得出与 Apple (AAPL) 相关的前 3 只股票
PyG Temporal 可用于构建 S&P500 时间图数据集
我们可以使用 PyG Temporal 包构建具有静态或动态图的时间数据集。在全局相关性的情况下,我们可以创建一个 StaticGraphTemporalSignal 数据集,其中图是固定的,但信号沿时间轴变化。在局部相关性的情况下,我们可以创建一个 DynamicGraphTemporalSignal 数据集,其中图也可以沿时间轴变化。无论数据集类型如何,我们都需要实现 4 个关键函数:
_get_edges():返回图形的边列表序列。对于静态图形,这将是一个边的 numpy 数组。对于动态图形,这将是一个边的 numpy 数组列表,每个数组代表该时间步骤的一个图形。在我们的例子中,我们所有的图形都是完全连接的,因此我们只需使用 np.nonzero 将一个填充 1 的方阵扩展为相应的边列表即可。
_get_edge_weights():返回图的边权重。边权重应具有与边相同的形状,但最后一个维度是 1,而不是 2。
_get_targets_and_features():返回特征和目标的元组。特征是模型的输入,在我们的例子中是所有 S&P500 股票过去 64 天的价格。目标是模型的预期输出,在我们的例子中是所有股票的第 65 天价格。
get_dataset():将以上3个函数的结果组合成一个StaticGraphTemporalSignal或一个DynamicGraphTemporalSignal。
下面是我们 S&P500 数据集的简化版本,其中为简洁起见省略了用于加载相关矩阵的辅助函数和用于分割数据集的代码:
from torch_geometric_temporal.signal import StaticGraphTemporalSignal, DynamicGraphTemporalSignal
# Dataset loader for SP500 stock prices
class SP500CorrelationsDatasetLoader(object):
def __init__(self, corr_name, corr_scope):
self._read_csv(corr_name, corr_scope)
def _get_edges(self, times, overlap):
# Construct a fully-connected graph
def helper(corr_index):
return np.array(np.ones(self._correlation_matrices[corr_index].shape[:2]).nonzero())
if len(self._correlation_matrices) == 1:
_edges = helper(0)
else:
_edges = []
for time in range(0, self._dataset.shape[0] - self.batch_size, overlap):
if not time in times:
continue
corr_index = max(0, time // self.days_in_quarter - 1)
_edges.append(
helper(corr_index)
)
return _edges
def _get_edge_weights(self, times, overlap):
# Edge weights are the correlations between stocks
def helper(corr_index):
w = self._correlation_matrices[corr_index]
# Flatten the first two dimensions
return w.reshape((w.shape[0] * w.shape[1],) + w.shape[2:])
if len(self._correlation_matrices) == 1:
_edge_weights = helper(0)
else:
_edge_weights = []
for time in range(0, self._dataset.shape[0] - self.batch_size, overlap):
if not time in times:
continue
corr_index = max(0, time // self.days_in_quarter - 1)
_edge_weights.append(
helper(corr_index)
)
return _edge_weights
def _get_targets_and_features(self, times, overlap, predict_all):
# Given previous batch_size stock prices...
features = [
self._dataset[i : i + self.batch_size, :]
for i in range(0, self._dataset.shape[0] - self.batch_size, overlap)
if i in times
]
# predict next-day stock prices
targets = [
(self._dataset[i+1 : i + self.batch_size+1, :, 0]).T if predict_all else (self._dataset[i + self.batch_size, :, 0]).T
for i in range(0, self._dataset.shape[0] - self.batch_size, overlap)
if i in times
]
return features, targets
def get_dataset(self, batch_size) -> Union[StaticGraphTemporalSignal, DynamicGraphTemporalSignal]:
# Returning the data iterator where the train is designed for many-to-many predictions (each day predict next day's price)
# while the validation and test are many-to-one predictions (many past days predict tomorrow's price)
self.batch_size = batch_size
total_times = list(range(0, self._dataset.shape[0] - self.batch_size, self.batch_size))
times = list(range(total_times[int(len(total_times) * 0)], total_times[int(len(total_times) * 0.8)]))
overlap = self.batch_size
predict_all = True
_edges = self._get_edges(times, overlap)
_edge_weights = self._get_edge_weights(times, overlap)
features, targets = self._get_targets_and_features(times, overlap, predict_all)
dataset = (DynamicGraphTemporalSignal if type(_edges) == list
else StaticGraphTemporalSignal)(
_edges, _edge_weights, features, targets
)
return dataset
标准普尔 500 指数上的实验表明,基于图先验的差分化注意力具有优越性
为了研究在价格预测中纳入股票间关系的实用性以及不同类型和范围的相关性的影响,我们在 S&P500 数据集上训练了 GRU 基线和 DGT 变体。对于 DGT 变体,我们尝试了 2 种依赖性度量:皮尔逊和互信息。对于每种相关性类型,我们检查 3 个范围:全局、局部和对偶。全局相关性涵盖整个训练数据集,而局部相关性则集中在上一财季(64 天)。在实践中,我们将上一批次计算的相关矩阵用于当前批次中的所有预测,以降低计算成本。对偶相关结合了全局和局部相关性,并在每个时间步骤将两个图都提供给模型。然后,在 DGT 模型中,我们将一个差分注意力头调节到全局相关图上,将另一个调节到局部相关图上。以下是实验结果:
图 7 GRU 基线与 DGT 变体在 S&P500 上的实验结果
要点 1:没有空间注意力的 DGT 表现优于 GRU,展示了时间注意力的威力
与 GRU 等 RNN 模型相比,我们的时间注意模块实现了显著更低的测试误差。这一结果证实了 Transformer 在对股票中复杂的非线性时间依赖性进行建模方面的强大能力。
要点 2:基于局部相关性的 DGT 优于完全动态 DGT 和没有空间注意力的 DGT
总体而言,我们发现具有局部互信息的 DGT 实现了最佳性能,与完全动态 DGT 相比,测试 RMSE 降低了 45%,与没有空间注意的 DGT 相比,降低了 51%。具有局部皮尔逊的 DGT 也大大优于这两个变体。我们假设局部相关性在模型上创建了一个有用的归纳偏差,从而实现更好的泛化。结合差分图注意,该模型可以动态调整最新的相关性,以在看不见的数据上实现更好的性能。我们还观察到局部相关性始终优于全局相关性,证实了市场预测需要更细粒度的统计数据。
要点 3:以双重相关性为条件的 DGT 可以实现有竞争力的表现,但对相关性类型很敏感
一个自然而然的问题是,鉴于 Ma 等人 [2024] 的观察结果,不同分辨率下的相关性相互补充,结合全局和局部相关性是否可以带来更好的性能。我们的实验表明,对偶皮尔逊的表现与局部互信息变体具有竞争力,获得了更好的测试 MAE,但测试 RMSE 更差。然而,我们发现,基于测试 RMSE,对偶互信息的表现比除 GRU 基线之外的所有模型都差。我们不确定这个问题的确切原因,但假设在对偶相关的情况下每个相关变体的头数量减少会导致训练期间的不稳定。对于对偶相关,每个相关图只有 1 个相应的注意力头,而全局或局部相关的情况下有 2 个头。这可能会使训练不太稳定,尤其是考虑到局部相关变体的动态性质。
测试集上的模型预测可视化
最后,我们可以使用基于不同相关类型和范围的 DGT 在测试集上对预测的股票价格进行可视化。为了视觉清晰,我们将可视化分为两幅图。图 8 显示了使用基于皮尔逊的 DGT 在测试集上预测的苹果股价,图 9 显示了基于互信息的预测价格。我们可以看到,图 7 中显示的测试错误率在视觉上得到了重现。图 8 显示,对偶皮尔逊与真实股价非常接近,其次是局部皮尔逊,最后是全局皮尔逊。图 9 显示,局部互信息与实际股价非常接近。全局变量偏离程度更大,而对偶变量明显比局部或全局变量不稳定得多。
图 8. 基于皮尔逊相关系数的 DGT 在测试集上预测的苹果 (AAPL) 股票价格与实际价格
图 9. 基于相互信息的 DGT 测试集上苹果 (AAPL) 股票的预测价格与实际价格
参考
S. Feng, C. Xu, Y. Zuo, G. Chen, F. Lin, and J. XiaHou. Relation-aware dynamic attributed graph attention network for stocks recommendation. Pattern Recognition, 121:108119, 2022. ISSN 0031–3203. doi: https://doi.org/10.1016/j.patcog.2021.108119. URL: https://www.sciencedirect.com/science/article/pii/S003132032100306X.
A. R. Ganti. SPIVA® U.S. Mid-Year 2024, 2024. URL: https://www.spglobal.com/spdji/en/spiva/article/spiva-us.
S. Global. S&P 500, Oct. 2024. URL: https://www.spglobal.com/spdji/en/indices/equity/sp-500/.
X. Hou, K. Wang, C. Zhong, and Z. Wei. ST-Trader: A spatial-temporal deep neural network for modeling stock market movement. IEEE/CAA Journal of Automatica Sinica, 8(5):1015–1024, 2021. doi: 10.1109/JAS.2021.1003976.
D. Y. Kenett, X. Huang, I. Vodenska, S. Havlin, and H. E. Stanley. Partial correlation analysis: Applications for financial markets, 2014. URL: https://arxiv.org/abs/1402.1405.
R. Kim, C. H. So, M. Jeong, S. Lee, J. Kim, and J. Kang. HATS: A hierarchical graph attention network for stock movement prediction, 2019. URL: https://arxiv.org/abs/1908.07999.
D. Ma, D. Yuan, M. Huang, and L. Dong. VGC-GAN: A multi-graph convolution adversarial network for stock price prediction. Expert Systems with Applications, 236:121204, 2024. ISSN 0957–4174. doi: https://doi.org/10.1016/j.eswa.2023.121204. URL: https://www.sciencedirect.com/science/article/pii/S0957417423017062.
M. Patel, K. Jariwala, and C. Chattopadhyay. A systematic review on graph neural network-based methods for stock market forecasting. ACM Comput. Surv., 57(2), Oct. 2024. ISSN 0360–0300. doi: 10.1145/3696411. URL: https://doi.org/10.1145/3696411.
B. Shantha Gowri and V. S. Ram. Influence of news on rational decision making by financial market investors. Investment Management and Financial Innovations, 16(3):142–156, 2019.
H. Tian, X. Zhang, X. Zheng, and D. D. Zeng. Learning dynamic dependencies with graph evolution recurrent unit for stock predictions. IEEE Transactions on Systems, Man, and Cybernetics: Systems, 53(11):6705–6717, 2023. doi: 10.1109/TSMC.2023.3284840.
A. Vaswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones, A. N. Gomez, L. Kaiser, and I. Polosukhin. Attention is all you need, 2023. URL: https://arxiv.org/abs/1706.03762.
Y. Yan, B. Wu, T. Tian, and H. Zhang. Development of stock networks using part mutual information and Australian stock market data. Entropy, 22(7), 2020. ISSN 1099–4300. doi: 10.3390/e22070773. URL: https://www.mdpi.com/1099-4300/22/7/773.
T. Ye, L. Dong, Y. Xia, Y. Sun, Y. Zhu, G. Huang, and F. Wei. Differential Transformer, 2024. URL: https://arxiv.org/abs/2410.05258.
X. Yin, D. Yan, A. Almudaifer, S. Yan, and Y. Zhou. Forecasting stock prices using stock correlation graph: A graph convolutional network approach. In 2021 International Joint Conference on Neural Networks (IJCNN), pages 1–8. IEEE, 2021.
C. Zheng, X. Fan, C. Wang, and J. Qi. GMAN: A graph multi-attention network for traffic prediction, 2019. URL: https://arxiv.org/abs/1911.08415.