Press "Enter" to skip to content

因子挖掘:基于图神经网络与公司主营(附代码)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

本期遴选论文

标题:HIST: A Graph-based Framework for Stock Trend Forecasting via Mining Concept-Oriented Shared Information

作者:Wentao Xu, Weiqing Liu, Lewen Wang, Yingce Xia, Jiang Bian, Jian Yin, Tie-Yan Liu, Sun Yat-sen University, Microsoft Research

 

股票特征的拆分

 

股票市场的涨跌容易受到相关共同概念的影响,但在预定义的概念中,有时候并不能包含完全的信息,比如在某些概念数据中有些股票并不属于相关概念,但涨跌也受到了该概念的影响。有时候即使某只股票属于相关概念,但涨跌反而也没有受概念的影响。

 

同时预定义的概念并不能考虑到市场上所有存在的涨跌逻辑,可能市场中有一部分隐含概念也能影响股票收益。

 

作者提出了隐含概念的逻辑,并将股票的特征用以下三个部分来解释:

 

市场存在的预定义概念包含的共有信息

 

隐含概念包含的共有信息

 

股票特质信

 

通过图神经网络及全连接层的组合,作者构建了一个HIST模型,该模型可以将以息进行剥离,并最终放入一个全连接的线性层进行股票收益的预测。并在最终的测试中取得的满意的效果。

 

HIST模型结构

 

 

输入

 

t 时间股票的特征

 

m 个预定义的概念

 

步骤

 

1、股票特征提取

 

第一步使用2层的GRU对股票原始特征(Alpha360因子)进行表征提取:

 

以上为股票i的因子,为提取后的表征。则矩阵为所有股票的表征(第i行为股票i的表征)。

 

2、股票特征分层处理

 

本文假设每个股票表征所包含的信息有以下三层组成:

 

预定义概念相关的共有信息

 

隐含概念相关的共有信息

 

每只股票的特质信息

 

在本步骤中,主要是应用三个不同的模型对这三类信息进行分层提取,提取过程中主要采用了Doubly Residual的模型架构。

 

为了方便阐述,我们把以上三层不同的模型用模型0、1、2表示,每个股票i输入模型j的数据用表示,经过模型j处理后,得到两个输出:

 

用于最后对于股票收益率的预测,其中最终用于预测的输入为:;

 

用于从当前的 剥离掉的信息,并得到下一层模型的输入:

 

Module 0:预定义概念处理模块(Predefined concept module)

 

 

在这一步中,基于股票行业和概念属性构建了图神经网络模型。主要细分步骤如下:

 

概念表征初始化

 

如下图3(a)表示,先把股票和对应概念(行业分类和主营业务)构建二分图(bipartite graph)。那幺每个概念的表征的计算如等式(5)所示,其含义为: 概念k的表征为该概念内所有股票表征的市值加权 ,以这个表征作为概念的初始化表征。

 

概念表征修正

 

概念表征的修正主要为了解决以下两个问题:(1)预定义概念的信息缺失问题,有些股票跟概念的关联可能没呈现出来;(2)预定义概念的信息过剩问题,有些股票虽然跟概念有关联,但其实对股价影响不大。本文主要通过股票与概念的相似性解决这两个问题,如果一个股票与某个概念相似性很高,但在预定义概念中,这个股票与这个概念并没有相连,那就可以视为缺失的关联。反过来,如果股票与某个概念间相关度不高,但在预定义概念中两者相连,则这个关联是没有必要的。

 

其中,股票与表征的相关性计算采用Cosine相关性,并在后续步骤概念表征加总时,使用经Softmax归一化后的相关性作为权重,具体公式如下:

 

概念表征加总

 

最终在基于修正后的图结构计算每个概念的表征,并传入全连接层输出作为最终概念k的表征,其中选用了LeakyReLU作为激活函数:

 

预定义概念相关共有信息的剥离

 

在概念的表征修正后,重新计算股票与每个概念的相关性,并经Softmax归一化作为权重,其中 为股票i与概念k在t时间,归一化后的相关性:

 

接着,把股票i与所有概念k的表征加权总和,传入全连接层,输出作为股票i所包含的预定义概念的相关共有信息。

 

最后,再把传入两个全连接层,分别输入:

 

其中 作为下一个模型的输入。

 

Module 1:隐含概念处理模块(Hidden concept module)

 

 

在上面的模型钟提取了预定义概念相关的共有信息,这里我们进行隐含概念共有信息的提取,主要经历以下步骤:

 

隐含概念表征初始化

 

假设隐含概念的数量与股票数量一致,都为n。并假设概念i的表征 为对应股票i的表征 。

 

股票与隐含概念相似性计算

 

采用Cosine计算股票i与概念k,两两之间的相关性:

 

股票与隐含概念关联

 

将股票与相似度最高的概念进行连接(除了原先对应的概念,如股票1与概念1),如图4所示,股票1与概念2 进行了连续,而概念3没有股票与其连接,则把概念3删掉。然后再把每个股票原先对应的概念加回来,如图4(b)所示。

 

计算隐含概念的表征

 

最后通过全连接层计算概念的表征:

 

后续计算股票在隐含概念相关的共信息的步骤和以上Module 0的步骤一致。

 

Module 2:股票特质信息处理(Individual information module)

 

经过以上两个模型的信息剥离,每个股票都只包含里自身的特质信息,这些信息再经过一个全连接层输入为最后预测股票收益的信息:

 

3、全连接神经网络层

 

以上三个Moudle的输出最终放到一个线性全连接层:

 

训练的目标函数为:

 

实证效果

 

数据

 

股票范围:中证100和沪深300

 

股票特征(因子):基于Qlib计算的Alpha360特征

 

时间跨度:2007-01-01至2020-12-31;其中2007-01-01至2014-12-31为训练集,2015-01-01至2016-12-31为验证集,2017-01-01至2020-12-31为测试集

 

预定义概念数据:使用公司的行业数据及主营业务作为预定义的概念数据

 

预测的目标:股票下一个交易日的收益率

 

Baseline模型

 

 

Baseline的模型细节参考原文

 

结果

 

在所有的模型钟,在两个股票池CSI100与CSI300钟,HIST模型的IC和RankIC都是最高的。比如在CSI300的测试中,RankIC达到了12.6%。

 

 

在考虑交易成本(买入万五,卖出万分之十五)的日度交易策略中,每日买入收益预测最高的前30只股票, 在2017年到2020年,模型的累计收益为50%,是所有测试模型中收益最高的。

 

 

代码

 

作者开源了基于Pytorch的代码,非常简洁明了:

 

https://github.com/Wentao-Xu/HIST

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注