DeepAlpha短周期因子系列研究之:GATs在量化选股中的应用
由qxiao创建,最终由qxiao 被浏览 224 用户
更新
本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明
新版量化开发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)
目前业界五大主流图神经网络:图卷积网络(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模型
GATs模型的构造非常新颖简单,但应用于金融时序数据预测上其实存在着比较明显的优势和缺陷:
- 优势:节点之间信息的计算是可并行处理,高性能;无需对整个图结构做深入了解,属于局部网络模型,泛化能力强;
- 缺陷:仅使用了节点之间的隐性关系,缺乏显性关系的处理机制,过于依赖通过模型来泛化出节点间信息的能力
所以,其实基于GATs模型以上会有非常多的空间等待大家去探索。比如:
- Qlib中给出的模型其实有很多细节可以调整;
- 原有GATs模型的输入数据只有节点数据,如何加入已有节点之间的信息数据(比如标的之间的关系图谱等),即如何将注意力权重计算转变为,在数据输入时即构建好整张图所需要的V和E
- 其他方法……
模型比较与数据集的测试结果
论文作者用Inductive训练的PPI数据集进行了不同模型间的横向对比,结果非常明显(如下表所示)
图表的下半部分,GraphSAGE*的表现明显不如GAT模型的原因正是由于其训练节点信息的时候应用全图结构的原因,而GAT模型靠注意力机制对节点信息的学习提升非常明显
「Const-GAT和GAT的区别在于Const是代表每个邻节点的权重是一样的」
实验&结果
本文基于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)