基于多因子模型的框架,我们通常构建因子预测股票截面收益,进而通过组合优化得到股票持仓,在此机器学习/深度学习与传统框架契合。
传统选股因子来源于手工构建的基本面或者交易指标等,而机器学习/深度学习算法则能自动化搜索挖掘有效信号。区别于基本面特征更多的基于逻辑驱动,对于量价特征我们可以利用各类算法基于数据驱动挖掘增量信息。
对于“数据->特征->因子”模式,通常数据源最为关键,其次是特征设计,模型的重要性则要弱于前两者。完成数据准备和特征构建后,遗传规划、神经网络等经典算法可以帮助我们挖掘一些有效信号。
![](http://mmbiz.qpic.cn/sz_mmbiz_png/EZdPZZGWHFtiaNtiaic6I9WxNd3aps1ticWSMQQelB8eIc7dv19ALHQgT0h4r7Qpte9ibKibBd7WhlMksOPdA1dxpiaYQ/640?wx_fmt=png)
金融数据具有明显的时序特征,深度学习模型中的RNN模型,在基于时序信息建模中表现出优异效果,RNN
模型的基本结构如下:
输入:
,T为序列长度,
,m为特征数,;
隐藏层: ![](http://mmbiz.qpic.cn/sz_mmbiz_png/EZdPZZGWHFtiaNtiaic6I9WxNd3aps1ticWSNkQvY8tK9fldNcpctovasa2FXicwLtTHibmd2HGENcknx9kzGxrEBRNA/640?wx_fmt=png)
输出层:![](http://mmbiz.qpic.cn/sz_mmbiz_png/EZdPZZGWHFtiaNtiaic6I9WxNd3aps1ticWSkAZPWBy9P9WnOJS2ygHp5Ac1DnGLEfoCpUiayCibBMEx5TgDITP4ax0w/640?wx_fmt=png)
损失函数:![](http://mmbiz.qpic.cn/sz_mmbiz_png/EZdPZZGWHFtiaNtiaic6I9WxNd3aps1ticWS63ZgHtIIZAcsyygJ4QsszoKdX55IPBdW4AznISDia0LApNVeJC0A09Q/640?wx_fmt=png)
用loss度量预测值和真实值之间的误差,根据误差反向传播,训练参数矩阵U,W,V。
由于RNN面对长序列数据存在梯度消失等缺陷,因此在RNN基础上衍生出了LSTM、GRU等模型。本文以LSTM为例,探索深度学习模型对于股票时序数据中的alpha信息捕捉。
首先,以往我们在线性模型中的输入特征向量通常为因子截面,通过因子加权,得到股票收益预测/因子,输入样本为一维数据:
![](http://mmbiz.qpic.cn/sz_mmbiz_png/EZdPZZGWHFtiaNtiaic6I9WxNd3aps1ticWS7TQqJibnKibjMK69Ch1IYfiav8a1SF4bZp3QGpfl1vicIRa9QbBtvqwpWg/640?wx_fmt=png)
相比而言,RNN的输入刻画了特征的时序变化,其包含特征间的截面关系以及特征自身的时序关系两维度信息,输入样本为二维数据矩阵:![](http://mmbiz.qpic.cn/sz_mmbiz_png/EZdPZZGWHFtiaNtiaic6I9WxNd3aps1ticWSE67IhbAibytibicmvOUibZ254LEharM4oicMnPw9HlNzCy98BTMgyRv6vcg/640?wx_fmt=png)
模型经过计算之后得到股票收益预测/因子得分f(x)。
![](http://mmbiz.qpic.cn/sz_mmbiz_png/EZdPZZGWHFtiaNtiaic6I9WxNd3aps1ticWS7Nlp8HErpQ3BkFG0a4tJKkScOX4Lq7bEcxAB6T1ZYvpjPcHaGKjeibg/640?wx_fmt=png)
此外,近年来transformer在自然语言学习等领域展现出良好表现,其核心在于注意力机制的引入。因此,在LSTM基础上,我们在隐藏层后设计了一个简易自注意力机制。
假设hidden为序列的隐藏层,我们通过线性层提取Q、K、V矩阵:
![](http://mmbiz.qpic.cn/sz_mmbiz_png/EZdPZZGWHFtiaNtiaic6I9WxNd3aps1ticWSoofMAzwLFvOuPDO4LUQL1PpbyE4EQvM6Fteee6aj6cOV3RT23ic7liag/640?wx_fmt=png)
将输出output
进行截面zscore标准化后,接入权重恒为1的线性层转换为因子值:![](http://mmbiz.qpic.cn/sz_mmbiz_png/EZdPZZGWHFtiaNtiaic6I9WxNd3aps1ticWSERfhG4yRjsBGyMIMBITSUjHkGzZ9FIURnic2MycHUAVDIiaxAZCEicSOg/640?wx_fmt=png)
利用score作为最终的因子值,以上则为本文所设计的模型结构。
最后,具体训练模型时,考虑到模型输出信号的可交易性,我们以股票T+1至T+11的vwap价格计算的收益率为预测目标:
1. 模型每年滚动训练,在每年年初以股票过去8年的历史数据为数据集,按照时间先后,拆分后10%数据作为验证集,其余为训练集;
2. 我们假设在不同日期的股票样本是有差异的,即训练时每个batch的input为T日所有股票样本;
3. 预测目标label为股票收益率对行业、市值回归之后的残差zscore值;
4. 损失函数loss定义为pred与label之间的pearson correlation;
5. 采取early stop机制防止训练过拟合,验证集loss多次不下降时停止训练,返回验证效果最好的参数组合;
![](http://mmbiz.qpic.cn/sz_mmbiz_png/EZdPZZGWHFtiaNtiaic6I9WxNd3aps1ticWSzBjn5mWmZGcBoq6YMBNicTsum4jSj0qCicVic84fTFDFvNicaFLm8cS2KA/640?wx_fmt=png)
而对于模型绩效的提升,一般通过几个维度展开:
1. 通过调整超参数选取、label构建、数据预处理方式等精进单一模型;
2. 对同一数据集根据不同模型训练,堆叠多模型的输出;
3. 对同一模型构建差异化数据集输入,堆叠多数据集的输出;
本文将探索第三个维度,尝试构建不同数据集提取不同是alpha信息。我们基于端到端建模最常使用的是股票的日行情数据,日级别的价格和成交额、量等信息。
微观角度看,日行情特征集合是股票高频逐笔交易数据根据成交的价/量信息降频后衍生出的日频特征。按照这个思路,我们可以把特征工程建立在从高频数据中降频生成类似的特征集合。
日/周/分钟频率行情数据集合:价格的开、高、低、收、成交额/量等。
资金流特征集合:逐笔成交数据根据订单的金额大小拆分,衍生得到日频率资金流特征:特大、大、中、小单买入/卖出金额。
日内收益特征集合:日内数据按照30分钟窗口拆分,可以得到区间收益的开高低收分布:开盘收益率,早盘收益率、尾盘收益率、最高收益率、最低收益率、平均收益率。
由于训练具有随机性,不同随机数种子训练出的模型结果存在差异。分析表明,相同模型下堆叠不同随机数种子训练出的结果可以提升模型绩效。
但是,受限于算力限制,本文所有结果均在CPU上训练、推理,因此我们只展示根据单一随机数种子训练的结果。
因子检验时,我们计算T日因子对于T+1至T+6日vwap价格计算的收益的预测能力,即检验因子对于周度窗口的预测有效性,并展示因子20分组多头的扣费前超额收益。