王浩文 刘娟 郭亚
摘要:对于股票趋势的准确预测具有重要的商业价值,将股票趋势预测任务转化为二元分类问题,提出了一种基于改进损失函数的股票预测方法,使用小波变换对原始数据进行去噪处理,通过随机森林算法对技术指标进行筛选。实验选择了沪深300等指数与个股,对提出的改进方案进行验证,结果表明改进后的预测模型仅使用15个技术指标作为输入特征,对于不同市场的指数与个股仍然具有很好的预测能力,模型平均准确率达到60.6%,平均精确率达到62.2%。
关键词:股票预测;小波变换;随机森林;长短期记忆神经网络(LSTM);损失函数
一、前言
经济的高速发展带动着人们投资理念的进步,越来越多的民众通过股票进行投资[1]。同时,作为一国宏观经济的“晴雨表”,股票的价格变动也直接影响经济系统的健康运行[2]。因此,股票预测引起了社会各界的广泛关注。
随着人工智能技术的不断发展,一些学者借助一些经典的技术指标作为机器学习模型的输入特征进行预测,例如MACD(异同移动平均线)、RSI(相对强弱指标)等。邓烜堃选择MACD等48个经典的技术指标进行预测,取得了上佳的效果[3]。伯毅创造了一种新颖的支撑指标,并证明了该指标的显著作用[4]。
技术指标对于模型有着非常重要的意义,但特征个数的增加有时并不能带来精度的提升。章睿[5]从A股数据中提取了共166个特征,当特征数达到60个时,模型的预测精度已达瓶颈。因此,如何选择与未来走势最具相关性的特征指标,是一个重要的研究方向。
就股票预测任务而言,不同的评价指标反映着模型在不同方面的预测能力。而目前,对于股票预测的研究在评价指标上往往缺乏侧重[6],本文基于投资者普遍存在的损失厌恶心理[7],将模型的精确率作为侧重点,对传统的二元交叉熵损失函数进行了改进,增大误判买点时产生的损失惩罚,引导模型谨慎地给出买点判断。
在常见的神经网络中,LSTM是应用最为广泛的一种[8]。在RNN(循环神经网络)的基础上,LSTM增加了输入门、输出门和遗忘门,使得神经网络的权重能够自我更新,能有效解决RNN在处理时间序列中距离较远的节点时,易发生的梯度膨胀和梯度消失问题[9]。
本文基于小波变换和随机森林算法对特征进行优化,使用LSTM对来自不同市场的重要指数与个股进行趋势预测,证明了本文所提方法的有效性。
二、实验准备
(一)原始数据集的选择
为了更加全面、客观地验证模型的预测能力,本文选择了不同市场的重要指数与个股作为原始数据集,它们分别是沪深300指数、恒生指数、标普500指数、贵州茅台、腾讯控股、微软。
每个原始数据集均包含五个非常重要的当日交易数据,它们分别是:开盘价、最高价、最低价、收盘价、交易量,每个数据集约包含600天的交易数据。
(二)预测目标与评价指标的确定
本文将预测目标定为对买点的判断,买点标签 的定义如下:
其中open0表示当日开盘价, close6表示6天后的收盘价,总持股周期为7天。如果6天后的收盘价高于当日开盘价,则认为当日是一个买点,标签为1(正例),反之标签则为0(负例)。简而言之,模型的预测目标是完成一个分类任务,即判断当日是否是一个买点。
根据标签真实值与模型预测值的不同,可将所有样本分为4个类别:
1.真正类(TruePositive,TP),样本实际为正例,并且被正确地预测为正例。
2.假正类(FalsePositive,FP),样本实际为负例,但被错误地预测为正例。
3.假负类(FalseNegative,FN),样本实际为正例,但被错误地预测为负例。
4.真负类(TruePositive,TN),样本实际为负例,并且被正确地预测为负例。
为了综合评估模型的预测能力,本文选择准确率(Accuracy)、精确率(Precision)、召回率(Recall)、 分数作为模型的评价指标。以上评价指标计算公式如下:
由于损失厌恶心理的存在,在借助模型进行买点预测时,相对于那些由于模型没有预测到真实买点而产生的收益减少,投资者们可能会更在意由于模型预测错误导致的损失。因此本文认为对于股票走势预测而言,精确率会比召回率更加重要,因此将 的取值确定为0.5,更加重视模型在精确率方面的表现。
(三)技术指标的选取与归一化
为了让模型具有更佳的预测能力,本文基于其他研究的发现[10],选择MACD、RSI等合计26个技术指标作为数据集的特征部分,部分指标及其描述如表1所示。
为了避免某一特征对最终预测结果产生较大的影响,在将特征输入神经网络之前,对每个特征都分别进行了归一化处理,将特征的取值限定在0到1之间。公式如下:
式中xmax与xmin分别是该特征的最大值与最小值,x*为归一化处理完毕后的值。
(四)LSTM框架与损失函数
本文选择使用包含两层输入层的LSTM网络进行预测,为了避免出现过拟合现象、提升预测模型的泛化能力,每一个输入层都进行了dropout处理,丢弃掉本层30%的神经元。本文使用的LSTM神经网络框架如图1。
经典的二元交叉熵(Binary Cross Entropy,BCE)中,对于每一个独立的买点标签 ,预测值y与yi之间的偏差可被表示为:
在股票预测问题上,本文希望模型能在精确率上有更为突出的表现。因此本文对损失函数进行了适应性改进:当真实买点标签y为0时,如果模型反而给出了较为正面的预测,则有针对性地加重这部分的损失惩罚。改进后的损失函数如下:
三、实验及其结果分析
(一)基于原始特征的实验结果
本文首先选择26个技术指标作为输入特征,完成基础实验,便于与后续实验进行参照对比,以经典的二元交叉熵作为LSTM神经网络的损失函数。
表2显示了使用26个技术指标作为输入特征的神经网络的预测性能。从准确率来看,神经网络已经拥有了一定的预测能力,平均准确率达到了52.48%。
(二)经特征优化后的实验结果
本文首先使用Coif4小波基函数对收盘价数据进行去噪处理,然后使用去噪后的交易数据重新计算26个技术指标的值,最后使用随机森林算法对去噪后的技术指标进行筛选。本文使用的随机森林算法的重要参数如表3所示:
图2列出了经随进森林算法选出的重要性位于前15的技术指标。其中,重要性高于0.05的技术指标使用深棕色标出,高于平均值0.038的指标使用深蓝色标出,其余指标使用深绿色标出。如图3所示,对于每个数据集而言技术指标的重要性虽不完全相同,但PC、ADX、OBV等指标在各个数据集中的重要性都位于前列。
对于每一个数据集,仅将筛选出的15个优质技术指标作为输入特征,沿用二(二)节的买点标签与神经网络模型重新评估模型的预测性能,特征优化后模型的预测性能如表4所示。
对比表2与表4,可以发现经特征优化后,模型的预测性能获得了全面的提升。但是,模型“高召回,低精确”的现象仍然存在。
(三)改进损失函数实验结果
将BCE损失函数更换为二(四)节中改进后的损失函数后,继续使用特征优化后的15个技术指标作为输入特征,沿用二(二)节的买点标签与神经网络模型对股票走势进行预测,损失函数改进后模型的预测性能如表5所示。
对比表4与表5可发现,使用改进的损失函数后,六大数据集在准确率方面并没有非常明显的变化,但在精确率方面,六大数据集平均获得了超5个百分点的提升,并且已经全面超越召回率。 分数的显著提升说明模型的综合能力获得了显著的提高。
四、结语
本文针对股票趋势预测模型在评价指标上缺少侧重、泛化能力不强等问题提出了改进方案。选择沪深300等重要指数与个股作为数据集,使用小波变换和随机森林算法对原始特征进行优化。经特征优化后,LSTM模型在仅输入15个特征的情况下,仍然获得较高的预测精度。另外,本文还基于损失厌恶心理对BCE损失函数进行了适应性改进,加重了模型误判买点时的损失惩罚,有针对性地提高LSTM预测模型的精确率,使模型预测得到的买点有更高的概率是真实买点,投资者蒙受损失的概率显著降低。
参考文献
[1]李银霞.基于改进多因子模型的股票超额收益的系统性分析及预测[D].南京:东南大学,2020.
[2]徐程成.股票价格预测方法综述[J].中国市场,2020(9):42-43.
[3]邓烜堃,万良,黄娜娜.基于DAE-BP神经网络的股票预测研究[J].计算机工程与应用,2019,55(3):126-132.
[4]伯毅.基于XGBoost模型的短期股票预测[D].哈尔滨:哈尔滨工业大学,2018.
[5]章睿.基于机器学习的股票特征K线图预测研究[D].大连:大连理工大学,2021.
[6]邱一豪,孟志青.时态神经网络模型及其在股票分类预测上应用[J].计算机工程与应用,2019,55(15):263-270.
[7]汤轶璇.基于短视性损失厌恶视角的A股市场股权溢价问题实证研究[D].北京:北京交通大学,2017.
[8]方红,韩星煜,徐涛.改进型基于LSTM的股票预测方法[J].安徽大学学报(自然科学版),2019,43(6):36-42.
[9]邱锡鹏.神经网络与深度学习[J].中文信息学报,2020,34(7):4.
[10]Ji G,Yu J,Hu K,et al.An adaptive feature selection schema using improved technical indicators for pre-dicting stock price movements[J].Expert Systems with Applications,2022,200:116941.
基金项目:国家自然科学基金面上项目(课题编号:31771680)
作者单位:王浩文、郭亚,江南大学物联网工程学院;刘娟,无锡学院数字与经济管理学院