PLUS会员

DeepAlpha短周期因子系列研究之:GATs在量化选股中的应用

由qxiao创建,最终由qxiao 被浏览 225 用户

更新

本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明

新版量化开发IDE(AIStudio):

https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW

新版模版策略:

https://bigquant.com/wiki/doc/demos-ecdRvuM1TU

新版数据平台:

https://bigquant.com/data/home

https://bigquant.com/wiki/doc/dai-PLSbc1SbZX

新版表达式算子:

https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS

新版因子平台:

https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5

\

图神经网络模型介绍

什么是图神经网络?

目前,机器学习、深度学习的日益发展,其在语音、图像、自然语言处理上均取得了很大的突破和贡献

近年来,人们对深度学习方法在图上的扩展越来越感兴趣。在多方因素的成功推动下,研究人员借鉴了卷积网络、循环网络和深度自动编码器的思想,定义和设计了用于专门处理图数据的神经网络结构 – GNN

A Gentle Introduction to Graph Neural Networks(from Google Research)

A Comprehensive Survey on Graph Neural Networks.(2019)

{w:100}{w:100}{w:100}{w:100}

目前业界五大主流图神经网络:图卷积网络(Graph Convolution Networks)、 图注意力网络(Graph Attention Networks)、图自编码器( Graph Autoencoders)、图生成网络( Graph Generative Networks) 和图时空网络(Graph Spatial-temporal Networks)

针对于金融时序领域的应用,我们这次研究和实践的主要模型为图注意力网络(Graph Attention Networks)

主流图神经网络

  • GCN: 通过相邻节点的信息来生成node embedding(其节点本身的feature可作为节点信息);
  • GraphSAGE: 相当于一种聚合信息框架,在这个框架之下,可以使用不同的聚合函数来进行相邻节点和上一节点信息的聚合;
  • GAT: 基本思路是在GCN的基础上,加上一个图注意力机制(graph attention)。其本质是有两种运算方式:1. Global Graph Attention; 2. Mask Graph Attention

GATs模型介绍

GATs的模型思路主要来源于图卷积网络GCN。GCN是将局部的图结构和节点特征进行结合,并且可以在节点分类任务中获得不错的表现。美中不足的是GCN结合邻近节点特征的方式和图的结构依依相关,这局限了训练所得模型在其他图结构上的泛化能力。

所以在GATs提出了用利用注意力机制来对邻近节点特征加权求和。邻近节点特征的权重完全取决于节点特征,独立于图结构,这也就摆脱了GCN模型中的缺点,理论上是大大改善了模型的泛化能力

此次GATs的模型构建主要借鉴于QLib的开源模型 → https://github.com/microsoft/qlib/blob/main/qlib/contrib/model/pytorch_gats_ts.py

QLib对于GATs的定义如下图:

GATs defined by Qlib and References{w:50}{w:100}{w:100}

模型结构

Graph Attention Networks(GATs) 整体运算示意图{w:100}{w:100}{w:100}{w:100}

运算公式(1){w:100}{w:100}{w:100}{w:100} 运算公式(2){w:100}{w:100}{w:100}{w:100}

衍生GATs模型

GATs模型的构造非常新颖简单,但应用于金融时序数据预测上其实存在着比较明显的优势和缺陷:

  • 优势:节点之间信息的计算是可并行处理,高性能;无需对整个图结构做深入了解,属于局部网络模型,泛化能力强;
  • 缺陷:仅使用了节点之间的隐性关系,缺乏显性关系的处理机制,过于依赖通过模型来泛化出节点间信息的能力

所以,其实基于GATs模型以上会有非常多的空间等待大家去探索。比如:

  • Qlib中给出的模型其实有很多细节可以调整;
  • 原有GATs模型的输入数据只有节点数据,如何加入已有节点之间的信息数据(比如标的之间的关系图谱等),即如何将注意力权重计算转变为,在数据输入时即构建好整张图所需要的V和E
  • 其他方法……

模型比较与数据集的测试结果

论文作者用Inductive训练的PPI数据集进行了不同模型间的横向对比,结果非常明显(如下表所示)

图表的下半部分,GraphSAGE*的表现明显不如GAT模型的原因正是由于其训练节点信息的时候应用全图结构的原因,而GAT模型靠注意力机制对节点信息的学习提升非常明显

「Const-GAT和GAT的区别在于Const是代表每个邻节点的权重是一样的」

PPI数据集下不同模型间结果总结{w:100}{w:100}{w:100}{w:100}

实验&结果

本文基于BigQuant人工智能量化投资平台(https://bigquant.com),对TabNet在量化选股中的应用进行了研究

实验方法

为了保证研究的客观性,我们采用《DeepAlpha短周期因子系列研究之一:DNN在量化选股中的应用》中同样的方法,利用量价因子预测股票未来5日的收益率

数据准备

数据

  • 在策略baseline中,我们选择两年全市场的日线股票数据作为训练数据,股票未来5日的收益率为训练的Label;并以未来一年的全市场数据作为测试集进行回测
  • 在滚动回测实验中,我们选择的是以滚动两年的全市场日线数据作为训练集,以滚动未来一年的数据作为测试集进行按年回测绩效的拼接

因子

和之前的DeepAlpha系列相同,我们同样使用开盘价、最高价、最低价、收盘价、换手率、当日收益率、成交量这7个基础数据,在量价行情基础数据中构建了98个因子。如下表所示:

表达式 含义 说明
mean 时序平均 共生成7个衍生因子,例如mean(close_0, 5)
ts_max 时序求最大 共生成7个衍生因子,例如ts_max(close_0, 5)
ts_min 时序求最小 共生成7个衍生因子,例如ts_min(close_0, 5)
std 时序标准差 共生成7个衍生因子,例如std(close_0, 5)
ts_rank 时序排序 共生成7个衍生因子,例如ts_rank(close_0, 5)
decay_linear 时序加权平均 共生成7个衍生因子,例如decay_linear(close_0, 5)
correlation 时序相关性 生成21个个衍生因子,例如correlation(close_0, volume_0, 5)
向前偏移 7*5=35个,例如close_4
衍生因子数 共计98个 (7*6+21+35)

数据处理

为了加快模型的训练速度,以及减少极端行情对模型的干扰,我们对数据进行了预处理

  • 缺失值处理
    • 缺失值统一填充为0
  • 标准化
    • 首先对98个因子进行时间截面上的Z-Score标准化
    • 同时,由于选股可以认为是对股票的打分,因此对Label也进行了同样的标准化处理
  • 极值处理
    • 对标准化之后的数据进行了处理,Clip(-3, 3)
  • 数据维度
    • 由于GATs模型适用于时序二维数据(类似于RNN),所以较之以前的模型增添了一个时序窗口的维度,目前一个batch的数据为 (batch_size, 5, 98)

模型训练

模型Baseline

标签

机器学习深度学习自然语言处理量化选股
{link}