基于RF-LSTM模型对A股历史数据的分析

2024-01-16 05:03丁睦坤柴啸龙
商展经济 2024年1期
关键词:历史数据个股误差

丁睦坤 柴啸龙

(广东财经大学 广东广州 510320)

相较已成熟的房地产市场,中国股市还处于发展阶段。虽然我国股票市场尚未成熟,但关于个股历史数据和指标的分析仍具有重要意义。因为无论市场发展到何种阶段,其趋势都会遵循一个周期循环,在历史数据中隐藏了很多有用信息,利用机器学习可以比人工更加细节有效地提取这些信息,帮助观察市场情况。

最初将深度学习算法与股票市场结合发生在1988年,Rodríguez等(2000)将神经网络模型运用到对IBM公司的收益率预测中,自此之后,越来越多的研究人员将机器学习算法运用到金融市场中。在国外研究领域中,Nelson等(2017)、Roondiwala等(2017)将LSTM模型应用到股市中。2017年,Selvin等(2017)已将LSTM对股市数据的预测效果与RNN及CNN进行比较。在国内,陈卫华、徐国祥(2018)使用长短时间记忆模型(LSTM)对沪深300中的个股进行预测并进行了精度和比较研究,发现LSTM对个股数据预测的适用性比其他模型更高。Kim等(2019)使用特征融合长短时记忆—卷积神经网络(LSTM-CNN)对美股的标普500指数中的股票进行预测,发现准确率更高了。虽然前面的研究在模型的改进及新指标的选取都有所提升,但在指标选取方面还较为薄弱,对指标的取舍没有合理的解释,于是,国内学者刘玉敏等(2021)发表了关于结合随机森林(RandomForest)与长短时间记忆模型(LSTM)对个股的指标进行合理的取舍再进行预测分析[8],发现准确率有了更大的提高。本文参考了刘玉敏等(2021)搭建的集合模型,并结合自定义研究的指标及主观定义的模型,对个股未来走势进行预测。

与以往机器学习对股票数据进行预测的研究对象相比,本文在阅读金融书籍的基础上,参考过去数据,编写代码提取个股这段时期内的支撑压力位,即上涨的压力点和下跌的底部,从而得到新的自定义指标,并利用自定义指标对RF-LSTM模型的预测结果进行量化。

在对比模型上,本文采用基于自回归的AR时间序列分析模型与随机森林的集合模型,在对比模型上较为新颖。

1 RF-LSTM模型的建立与分析

1.1 指标选取与清洗

根据随机抽样的原则,本文从东方财富数据接口中随机抽取30只A股个股的数据作为研究对象,划分训练集和测试集。通过爬虫程序得到股票历史数据后,本文取个股的11个属性,即日期、开盘价、收盘价、最高价、最低价、成交量、成交额、振幅、涨跌幅、涨跌额和换手率。

在获取历史数据后,本文根据参考论文和金融书籍的建议,选取9个常用的二级指标即MACD、KDJ、BOLL、SAR、RSI、OBV、W%R、DPO、ROC。选取这些指标的原因是其能够较好地反映出股票价格的趋势和动量,且已被广泛使用和研究。

通过箱线图分析已有数据,未发现明显的异常值,但可以观察到数据集存在大量缺失值。一级指标均无缺失值,但由于二级指标基于历史数据生成,在前期存在较多的缺失值,同时两个自定义指标存在缺失值。由于时间窗口设置为150天且向后滚动了3天,则第154条数据才会出现相应的支撑压力位。

其中,两个自定义指标的缺失数量超过100条,属于严重缺失;而其他二级指标的缺失情况并不很严重,均在30条以内。因此,本文采用最早一天的数据对这些二级指标进行填补。对于两个缺失严重的自定义指标,本文将以第154条数据的支撑压力线为基础,采用同样的规律进行量化填补。

1.2 自定义指标

本文使用历史的最高价和最低价计算出股票价格的顶部和底部,在时间窗口设置为150天的情况下,通过rolling方法在原始数据上进行滚动处理。再通过shift函数向前移动的3个时间步数(天),利用得到的数值及顶部及19.1%、38.2%、50%、61.8%、80.9%的下跌幅度还有底部,得到7个数值,即对应的支撑压力线。

本文将当日收盘价与对应当天的支撑压力位进行比对,自定义一个新的指标将当日股价位置量化为1~8的数字,命名为“150均移3日支撑压力位-指标1”,表示当日股价在长阶段的位置。再利用linspace函数,将当日股价位于的小阶段,即最接近的两根线之间等分为4份,将中间的两份量化为2,低位一份量化为1,高位一份量化为3,命名为“150均移3日支撑压力位-指标2”,表示当日股价在短阶段的位置。

1.3 随机森林RF的指标处理

随机森林能处理不同类型的问题,处理分类问题的随机森林由分类树集成,以及针对股票数据本文要使用到的处理预测回归问题的随机森林模型由回归树集成。本文利用boost-strap 抽样方法,由随机向量,即回归树构成组合模型。

该模型将数值型变量作为预测变量,生成多元非线性回归随机森林模型。这些树{h(G, θk)}取的均值形成该模型的预测值,且该模型需要满足一个条件:由各自相互独立的训练集形成随机森林。

在设定森林的参数时,本文采用k折交叉验证模型选出最优参数,最终得到的最佳选择是100个决策树、最大树深为7、特征选择数为7成。

建立RF模型的主要目的是抽取信息重要程度,以给出27个指标的最终排名,进而帮助建立LSTM模型。具体地,本文对每个指标进行重要程度评估,给出其在股票收盘价预测中的相对重要程度,某个股(不同个股特征排名不同)的特征重要排名如表1所示(展示27个指标中的前5个)。

表1 特征排名

训练好的随机森林模型对测试集的预测结果R方检验为0.9965。

1.4 AR-RF模型的应用

结合上一步实现的随机森林模型,本文利用statsmodels模块中的AutoReg方法建立AR模型,设置的滞后阶数p为1。由于之前检验随机森林模型的测试集是无序的,在传入参数时重新划分测试集,以数据集(以日期为顺序)最后200条数据为预测对象,传入AR模型对各项指标进行预测,再将预测结果与上文建立好的随机森林RF模型相结合,得到新的收盘价预测结果。在重新划分测试集之后,本文将数据集的全部数据传入AR模型,并对未来的数据进行预测。

1.5 LSTM模型的应用

1.5.1 LSTM模型原理及对股票数据的适用性

长短期记忆模型LSTM是一种递归神经网络(RNN),在处理时序数据时比传统的MLP等模型能够更好地捕捉到其序列性和长期依赖关系。在股票价格预测任务中,过去一段时间的收盘价、开盘价、最高价、最低价等信息都与未来的股票价格有一定的相关性,具有一定的时序性。

具体的模型公式如下:

关于输入门的运算:

关于遗忘门的运算:

关于记忆单元的更新运算:

关于输出门的运算:

LSTM模型的最终输出:

式(2)~(6)中:it、ft、ot、ct分别代表输入门、遗忘门、输出门和记忆单元的状态;ReLU 代表ReLU激活函数;tanh 代表双曲正切函数; W 和 b 分别代表权重和偏置参数;⊙表示逐元素相乘操作。

不同于其他研究,本文采用ReLU函数替代常用的Sigmoid函数作为激活函数,因为Sigmoid函数处理梯度消失和梯度爆炸问题时存在一定限制。相比之下,ReLU函数的计算速度更快,并且在处理梯度问题时更加稳定,可以帮助LSTM模型更好地处理股票数据。

1.5.2 LSTM模型的指标选取与建立

在建立LSTM模型时,有许多参数需要设置,本文通过逐次检验误差的方法,通过获取模型对测试集的多种误差检验,对参数进行调整,经过筛选,最终选择时间步数n_steps设置为50。

在设置LSTM隐藏层神经元数量units、训练迭代次数epochs、批大小batch_size的具体输入参数时,本文使用3折交叉检验模型对指标进行选取,从字典中选出最佳参数,同时对不同的激活函数进行检验,验证选择ReLU的想法是否对应。最终得到的最佳参数选择:神经元个数是250个,训练次数为160,批大小为32;而在激活函数选择时,3折交叉检验在ReLU、TanH、Sigmoid中选择了ReLU作为激活函数,符合本文的最初选择。

本文搭建LSTM神经网络模型是基于keras深度学习框架。关于搭建好的模型,考虑到股票数据的特性,在损失函数选择均方误差(MSE),在优化器选择适应性矩估计(Adam)。

1.5.3 模型的改进

本文通过上一步建立的初步模型,结合前文随机森林RF模型的指标排名对指标选择进行筛选改进,并通过列表对排序后的指标进行装填,利用循环依次将指标输入LSTM模型,再通过判断模型的误差,得到最合适的指标搭配。

结果发现,当去除排名倒数8位指标后将剩余指标输入模型时,误差评分最高,四种误差MSE、RMSE、MAE、R2分别为:[0.030664,1.417732,0.732709,0.99075]。

在对多只股票进行指标选取时,本文发现对于不同个股的指标排名会有明显浮动,在指标选取时皆舍去排名倒数8个指标,选择剩余的指标建立最终LSTM模型。

2 股票预测结果分析与量化

2.1 对过去数据预测的误差

在完成数据的预处理后,本文将30只股票的数据划分为训练集和测试集两部分。其中,训练集用于训练模型,测试集用于评估模型的预测准确性。

2.1.1 AR-RF模型对过去数据预测的误差

在重新划分测试集后,利用AR模型对各指标进行预测,并将预测结果可视化(见下图1/2/3),从样本集中挑选了三只不同走势的个股(下面的案例皆以这三只个股)其中黑线为真实K线,红线为AR-RF模型预测结果,可以发现AR-RF模型的预测幅度皆过于单一,大部分个股预测的走势趋近水平线,分析的价值很小。

图1/2/3 AR-RF对测试集的预测结果

2.1.2 RF-LSTM模型对过去数据预测的误差

在确定好输入指标、时间步长、神经元个数等因素后,本文选择“epochs=160”作为训练轮次,并根据评价指标R方误差、均方根误差RMSE等指标评估模型的效果(得到的误差评估效果见表2)。训练好模型后,对划分好的测试集进行预测,得到30只个股的R方均值为0.871159193,表明模型具有很好的泛化能力和预测精度(个股的可视化结果见下图4/5/6)。

图4/5/6 RF-LSTM对测试集预测的结果

表2 RF-LSTM对测试集预测的误差

由此可以看到,模型对历史数据的预测十分精准。

2.2 对未来走势的预测

2.2.1 RF-LSTM模型对未来数据的预测

从上文AR-RF模型对测试集的历史数据预测可以看到,该模型对具有周期性的数据预测效果不佳;对未来数据的预测可以看到,AR-RF模型无法有效利用历史数据的信息。相反RF-LSTM模型则能很好地给出一个能更好地反映历史数据的周期性信息。

将预测时长设置为50天,预测可视化结果如图7/8/9所示。

图7/8/9 RF-LSTM对未来趋势的预测

虽然能更好的观察到RF-LSTM模型预测结果的周期性,但由于预测的时间跨度太长,且带有剧烈的波动使预测结果难以达到参考的目的。针对这个问题,本文决定最终将预测的趋势量化成一个投资参考值,结合其它因素,给出一个更加合理的量化结果。

2.3 对结果进行分析及量化

2.3.1 量化方法

在拿到预测数据后,本文主观定义了一个公式,用于实现量化预测结果及不同个股之间的比较:

式(7)中:F NS(Fi n alSc ore)为最终量化的结果;SC(SelfCol)模型输出结果及LL(LastLevel)最新交易日的支撑压力位的定义公式如下:

式(12)(13)中:i-1和j-1是现阶段最后一个交易日的自定义指标1和自定义指标2,Z1、Z2是两个根据自定义指标1和指标2的数据分布实现的,用来实现标准化的数组,分别是

本文通过i-1和j-1从Z1、Z2取出对应的数值,引入LL1和LL2是为了展现当前最新交易数据所处的位置在量化模型中产生的影响,定义Z1和Z2数组是为了保证不同股票之间的同量级,方便比较。

2.3.2 量化结果分析

将股票的模型预测结果代入量化预测公式进行处理,可以得到以下数据(见表3)。

表3 各只个股的自定义指标

模型对这30只个股的给分情况差异较大,其中代码为601155的个股的量化结果最高,FNS达到89.875,而代码为002229的个股量化结果最低,FNS为-67.015。

2.3.3 量化结果聚类

从上文的量化结果可视化可以看出,模型给出的得分没有明显区分,本文在分析结果时,考虑使用轮廓系数结合Kmeans模型对量化结果进行聚类,聚类对象包括个股的FNS、RLM、LDP等属性。结果发现,当将个股样本分为3个类时最为合理,对分类后的数据进行分析,模型将FNS在[-67.015,-42.687]之间的个股分为一类,FNS在[-37.893,14.689]之间的个股分为一类,FNS在[22.144, 89.875]之间的个股分为一类,本文按照FNS的区间将三个类分别命名为“数据悲观”“数据观望”及“数据乐观”。针对随机抽取的个股样本,有43.44%的个股处于“数据观望”范围,即最终模型对当前大部分个股持“观望”态度。

3 结语

综上所述,本文对于研究建立的RF-LSTM模型的预测结果进行误差检验,30只个股的平均R方为0.87,可见RFLSTM模型对股票数据的适用性。本文结合自定义量化公式实现该模型的目的是将历史数据中的信息量化作为参考值,以期降低决策者做出判断的噪声。在今后的研究方向上,还会考虑引进更多模型及利用能获取的信息因素对预测结果量化进行二次改进。

猜你喜欢
历史数据个股误差
基于设备PF性能曲线和设备历史数据实现CBM的一个应用模型探讨
基于故障历史数据和BP神经网络的接地选线方案研究
角接触球轴承接触角误差控制
Beidou, le système de navigation par satellite compatible et interopérable
压力容器制造误差探究
连续上涨2天以上的31只个股
基于Hadoop技术实现银行历史数据线上化研究
用好细节材料 提高课堂实效
房地产开发Ⅱ个股表现
航空运输Ⅱ个股表现