卷积神经网络预测股票走势项目内容概括

报告详情:

【华泰金工林晓明团队】人工智能选股之卷积神经网络——华泰人工智能系列之十五

【华泰金工林晓明团队】人工智能选股之循环神经网络——华泰人工智能系列之九

 

卷积神经网络项目:

测试流程包含如下步骤:

 

  1. 数据获取:

    a)股票池:全A股。剔除ST股票,剔除每个截面期下一交易日停牌的股票,剔除上市3个月内的股票,每只股票视作一个样本。

     

    b)回测区间:2011年1月31日至2019年1月31日。

  2. 特征和标签提取:每个自然月的最后一个交易日,计算82个因子暴露度,作为样本的原始特征,因子池如图表13和图表14所示。计算下一整个自然月的个股超额收益(以沪深300指数为基准),对于分类模型,选取下月收益排名前30%的股票作为正例(y = 1),后30%的股票作为负例(y = 0),作为样本的标签。对于回归模型,使用下个月的超额收益作为标签。

  3. 特征预处理和二维数据生成

    a)中位数去极值:设第T期某因子在所有个股上的暴露度序列为 Di,DM为该序列中位数,DM1为序列|Di-DM|的中位数,则将序列Di中所有大于DM+5DM1的数重设为DM+5DM1,将序列Di中所有小于DM-5DM1的数重设为DM+5DM1;

    b)缺失值处理:得到新的因子暴露度序列后,将因子暴露度缺失的地方设为中信一级行业相同个股的平均值;

    c)行业市值中性化:将填充缺失值后的因子暴露度对行业哑变量和取对数后的市值做线性回归,取残差作为新的因子暴露度;

    d)标准化:将中性化处理后的因子暴露度序列减去其现在的均值、除以其标准差,得到一个新的近似服从N(0, 1)分布的序列。

    e)要使用卷积神经网络,需要提供二维的特征数据,我们按照图表3的形式,将某只股票多个截面期的因子数据组织成类似于图片的二维数据,总共82行(对应82个因子),5列(对应5个截面期),这样在每个月截面上,就可以得到上千张“股票图片”。

  4. 滚动训练集和验证集的合成:由于月度滚动训练模型的时间开销较大,本文采用年度滚动训练方式,全体样本内外数据共分为九个阶段,如下图所示。例如预测2011年时,将2005-2010年共72个月数据合并作为样本内数据集;预测T年时,将T-6至T-1年的72个月合并作为样本内数据。

  5. 样本内训练:使用卷积神经网络对训练集进行训练。

  6. 交叉验证调参:随机取10%样本内的数据作为验证集,在训练的同时观察卷积神经网络在验证集上的表现,当验证集上的loss达到最小时,停止训练。

  7. 样本外测试:确定最优参数后,以T月末截面期所有样本预处理后的特征作为模型的输入,得到每个样本的预测值f(x)。将预测值视作合成后的因子,进行单因子分层回测。

  8. 模型评价:我们以分层回测和构建选股策略的结果作为模型评价标准。

为了进行系统的对比,本文将会对比三个模型的测试结果:卷积神经网络、全连接神经网络和线性回归。其中卷积神经网络和全连接神经网络的主要参数如下:

  1. 卷积神经网络:

    (1)输入数据:每个股票样本包含82个因子,5个历史截面期,构成82*5的“股票图片”,其标签为1或0(涨或跌)。

    (2)卷积层:一层卷积层,包含10个5*5大小的卷积核。卷积核权重使用xavier初始化方法(一种保证激活值和梯度值方差不变的初始化方法,经实证适合于初始化卷积层)。深度学习——Xavier初始化方法

    (3)池化层:没有池化层。

    (4)全连接层:3层全连接层,分别包含100、70、40个神经元,连接权重使用truncated_normal初始化方法(截断的正态分布初始化方法,最为常用)。

    (5)Dropout率(神经元连接随机断开的比例):80%。

    (6)优化器和学习速率:RMSProp,0.001。

    (7)损失函数:交叉熵损失函数(二分类)。

     

     

  2. 全连接神经网络,为了能和卷积神经网络进行差异最小的对比,我们将全连接神经网络的参数设置如下:

    (1)输入数据:每个股票样本包含82个因子,5个历史截面期,构成82*5的“股票图片”,再将“股票图片”进行一维展开,作为输入数据,其标签为1或0(涨或跌)。

    (2)全连接层:4层全连接层,分别包含780、100、70、40个神经元,连接权重使用truncated_normal初始化方法。这里第一层全连接层的780个神经元等于卷积神经网络中卷积结果一维展开后得到的特征数目,780=(82-5+1)*10

    (3)Dropout率:80%。

    (4)优化器和学习速率:RMSProp,0.001。

    (5)损失函数:交叉熵损失函数(二分类)

循环神经网络项目:

  由于神经网络模型训练缓慢且参数众多,难以借助本系列之前报告中所提到的网格搜索进行参数寻优。因此LSTM的参数设置中加入了一些经验选择的方法。具体参数选择如下:

1.       输入维度(input_shape):70,对应70个因子。

2.       输出维度(units):2,对应二分类。

3.       输入序列数目(time_steps):5。这是循环神经网络独有的参数,即预测当前时点输出所使用的历史输入序列数目。在月频的多因子选股中,该参数太大会使得满足要求的样本太少(因为股票停牌造成因子缺失),太小又难以发挥循环神经网络的特性,因此设定为5,即预测下个月股票的涨跌使用过去5个月的因子为输入。

4.       隐藏层数:2层。在测试中,我们发现1层隐藏层的LSTM预测能力有限,而2层以上的LSTM具有了不错的预测能力,因此把隐藏层数目定为2层,这兼顾了模型的预测能力和低复杂度。

5.       隐藏层神经元数(units):每层都为100个。考虑到因子数目为70个,选择100个隐藏层神经元数顾了模型的预测能力和低复杂度。

6.       随机断开输入神经元比率(dropout):0.2。该参数主要用来避免过拟合。

7.       初始化权值方法(kernel_initializer):RandomUniform。使用正态分布初始化权值。

8.       神经元激活函数(activation):tanh。这是LSTM中最常用的激活函数。

9.       单个训练批次样本数(batch_size):1000。

10.    优化器(optimizer):RMSProp。该优化函数相比随机梯度下降(SGD)收敛速度快很多,可以大大节省训练时间。

11.    学习速率(learning_rate):0.001。该速率兼顾了收敛速度和收敛稳定性。

12.    损失函数(loss function):categorical_crossentropy。该损失函数适合二分类情景。

 

        在设置了以上参数后,LSTM网络的结构如图15所示。可以看到,该模型的输入是一个5*70的向量,两个LSTM隐藏层都有100个神经元,每个隐藏层之后都有一次dropout,最后通过一个全连接层(Dense)输出,输出维度是2,对应二分类。Num代表输入模型的样本数量。

循环神经网络正确率与AUC分析

        图16和图17展示了LSTM、GRU、传统RNN每一期样本外的正确率和AUC值随时间的变化情况。我们在2011-01-31 至 2017-10-31 的回测区间中分7 个阶段训练并测试模

型,三种模型样本外平均AUC分别为0.5429,0.5576,0.5410,样本外平均正确率分别为58.57%,57.61%,56.85%。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值