摘要:长短期记忆网络(LSTM)因其强大的序列建模能力,成为时间序列预测任务中的主流深度学习模型。然而,股票数据作为典型的时间序列数据,常常面临数据格式多样、内容错误、非线性和非平稳性、模型数据要求格式高等问题。该文详细阐述了针对LSTM的时间序列数据处理方法,并基于Python语言进行了实证检验。实验证明,经过优化的数据处理流程不仅减少了模型训练过程中的错误,还显著提升了预测精度。
关键词:量化投资;深度学习;长短期记忆网络(LSTM);时间序列数据预处理
中图分类号:TP311文献标识码:A
文章编号:1009-3044(2024)34-0060-03开放科学(资源服务)标识码(OSID):
0引言
随着金融市场的复杂性和动态性日益增加,量化投资作为一种基于数学模型的投资策略,越来越受到投资者的青睐。与此同时,得益于计算机芯片的发展,人工智能(AI)重新焕发出活力。机器学习技术被引入量化投资领域,形成了监督学习、非监督学习、强化学习等机器学习方法与股票选择、股票择时等投资学内容的交叉研究。长短期记忆网络(LSTM)作为一种深度学习模型,具有广泛的假设空间和强大的序列建模能力,足以应对市场的复杂性,在预测精度上展现出巨大潜力。
股票数据作为量化投资的主要数据来源,是一种典型的时间序列数据。然而,当将股票数据输入LSTM等时间序列模型进行分析时,常常遇到数据格式多样、内容错误等问题。因此,本文旨在优化时间序列数据处理流程,针对非线性、非平稳的时间序列数据以及数据噪声和过拟合等问题,提出解决方案。
1文献综述
受我国资本市场发展时间短、不全面的影响,我国的量化交易起步相较欧美国家略晚一些。李斌等人[1]利用各类机器学习算法,以中国公司特征预测A股市场价格变动情况,实证证明机器学习模型对于我国的A股价格预测有着同国外一样的效果。彭燕等人[2]为研究LSTM最适宜网格层数和隐藏层的隐藏神经元个数,利用Keras框架进行模型构建,并利用小波分析等方式对数据进行预处理,发现对苹果公司的股票价格预测准确率提升了30%。贺毅岳等人[3]基于CEEMDAN-LSTM进行股票市场指数预测建模研究。利用LSTM进行股票价格预测的研究已经不在少数,但是对于整个模型最重要的数据处理部分却少有人研究,因此本文对用于LSTM的时序数据处理的方法进行研究。
2时间序列数据常见问题及解决方案
股票投资中的时间序列数据常见问题包括数据缺失、数据噪声、非平稳性、数据高维性、趋势和季节性、多重共线性、自相关性、过拟合问题、数据延迟和对齐等问题。这些问题会对模型的预测能力造成不同程度的干扰,增加分析和决策的难度。因此,本文提出“七步数据清洗法”对数据进行处理以解决上述问题。
2.1数据对齐
在股票数据分析的初步阶段,数据对齐是一个至关重要的关键步骤。鉴于数据来源的多样性,不同数据提供方在数据标准把控上往往存在差异,这无疑给数据质量带来了严峻挑战。在获取数据时,我们应全面关注其全面性、完整性、连续性、一致性和时效性,以确保最终分析结果的准确无误。然而,即便数据来源可靠,股票数据也常常存在固有的频率不一致问题。例如,市场交易数据通常是按日提供的,而宏观经济数据和财务报表数据则可能是按月、按季或按年发布的。这种频率上的差异,在数据合并过程中,往往会导致大量缺失值的产生。
为解决这一难题,本文建议以最细的时间颗粒度,即日频数据为基准,来调整其他频率的数据。这样做可以最大限度地保留数据样本量,减少信息的损失。在数据频率调整一致后,我们便可利用数据的时间戳进行精确匹配,确保所有数据源在时间轴上能够完全对齐。这样的数据对齐方法,不仅能够显著提升数据集的整体质量,而且为后续的分析工作奠定了坚实基础,使得基于多源数据的股票投资分析更加精准可靠。
2.2重复值、缺失值和异常值处理
在数据处理过程中,重复值、缺失值和异常值是三种常见且不容忽视的问题,它们对数据分析结果的影响不容小觑。对于重复值,处理方法相对直接,我们通常可以通过删除那些重复次数超过设定阈值的行,来有效消除重复数据,从而确保数据的唯一性和分析的准确性。
对于缺失值,其产生原因可能多种多样,如数据传输故障、交易所停盘等。处理缺失值的方法主要有两种:删除和填充。删除方法可以根据缺失值的比例设定不同的阈值,一旦数据行的缺失值比例超过该阈值,便将其剔除。填充方法则包括使用相邻数据、均值、中位数、众数等统计量进行填充,或者通过训练专门的机器学习模型来预测并填充缺失值。
异常值的处理则需更加谨慎。数据录入错误和市场极端事件都可能导致异常值的出现。在识别和剔除异常值时,可以借助统计学中的3σ原则或箱线图等工具进行初步筛选。这些方法基于数据分布的特征,能够有效识别出那些显著偏离正常范围的值。然而,仅凭统计学方法可能并不足以全面评估异常值。因此,我们需要结合金融市场的专业知识,进一步判断这些异常值是否合理。例如,某些看似异常的数据点,可能正是市场某次真实波动的反映。在这种情况下,这些数据点虽然异常,但却具有实际意义,应当予以保留。
通过将统计方法与领域知识相结合,能够更加精确地识别和合理处理异常值,从而提升数据分析的可靠性和准确性。这种综合处理策略不仅有助于消除数据中的噪声,还能确保分析结果能够真实、准确地反映市场的动态变化。
2.3特征缩放
在股票数据、财务数据和宏观经济数据中,不同特征的数值范围可能存在较大差异。例如,股价可能在几十到几百之间波动,而财务数据中的市盈率(PE)或每股收益(EPS)可能在几到几十之间,宏观经济数据如利率、M2则可能是百分比或上万亿的规模。这种差异在模型训练时会引发一些问题:
首先,数值范围较大的特征会主导梯度更新过程,导致数值较小的特征对模型的影响微乎其微,无法有效捕捉到它们的变化趋势。其次,不进行特征缩放的情况下,模型的训练可能会出现梯度消失或梯度爆炸现象,影响训练过程中的参数更新,导致模型收敛速度变慢,甚至无法有效收敛。
为了解决这些问题,可以对数据进行特征缩放,常用的方法有归一化和标准化。归一化通常将特征缩放到[0,1]或[-1,1]之间,这样所有特征都在相同的尺度上,消除了不同特征之间的量纲差异,从而加快了模型的训练速度。标准化则是将特征按标准正态分布进行缩放,使特征均值为0,标准差为1,这在某些模型中(如线性回归、神经网络等)尤其重要。特征缩放不仅可以提高模型的收敛效率,还能防止某些特征在训练过程中主导模型的权重更新,确保所有特征都能为模型的学习提供有效信息。
通过对数据进行合适的特征缩放,模型能够更快地捕捉数据中的模式和关系,从而提升预测效果。
2.4特征选择
基于概率近似正确理论(ProbablyApproximatelyCorrect,PAC),我们知道在机器学习中,模型的复杂度、训练数据的数量和质量都会影响模型的泛化能力。过多的特征和过少的样本数可能导致模型过拟合,即模型在训练数据上表现很好,但在未见过的数据上表现较差。为了防止过拟合,我们需要进行特征选择和降维处理。
我们可以通过计算特征与目标变量之间的皮尔逊相关系数、斯皮尔曼等级相关系数或肯德尔等级相关系数,来评估特征与目标变量之间的线性或非线性的关系,筛选出高相关性的特征。使用主成分分析(PCA)等方法减少特征维度,保留主要信息,降低模型复杂度。而在进行特征选择时,除了使用相关性分析的统计学方法外,我们还可以结合金融市场知识,选择对股票价格有显著影响的特征,使用随机森林、Lasso回归等模型进行特征重要性排序。
2.5时间序列处理
LSTM模型要求输入数据是一个三维张量,形状为(样本数、时间步长、特征数)。其中,样本数是一次训练或预测的样本个数。时间步长是每个样本中时间序列的长度。特征数是每个时间步的特征维度。对于单变量时间序列预测,特征数通常为1;对于多变量时间序列预测,特征数则等于变量的数量。
为此,我们可以采用滑动窗口方法构建输入序列,将时间序列数据转换为监督学习样本。滑动窗口有助于模型学习时间序列的连续性和趋势性,时间步长则适用于需要捕捉长期依赖关系的情况。通过调整窗口大小,可以捕捉不同时间尺度的信息。同时,基于网格搜索、随机搜索、贝叶斯优化等方法尝试滑动窗口等不同超参数,以期提高模型的预测准确性,同时降低计算复杂度。
此步是处理LSTM序列数据最重要的一步,只有符合LSTM的三维张量的要求,才能把数据放到Keras提供的模型里进行训练。以Python为例,我们常使用的机器学习数据结构是DataFrame,但是LSTM要求输入张量时,对应的数据格式应为Ndarray格式。在进行DataFrame到Ndarray的格式转换前,应当把数据整合为以时间戳为行索引,所有股票的所有特征为列索引的格式,然后再进行滑动窗口函数的编写。
2.6平稳性检验
为了确保目标时间序列满足LSTM模型对数据平稳性的要求,并进而提升模型的预测性能,我们首先采用ADF检验和KPSS检验对时间序列进行平稳性检验。根据检验结果,若序列已呈现平稳状态,则无须额外处理;反之,若序列不平稳,则需进行进一步的平稳化处理。处理措施包括:通过一阶或多阶差分来消除趋势和季节性因素,利用对数变换减缓增长趋势以使序列更趋平稳,以及采用移动平均等平滑处理方法来减少序列的波动性。在时间序列处理阶段引入这样的平稳性检验,能够使我们更加有针对性地进行平稳化处理,从而确保数据质量。
2.7数据分段与序列构建
时序数据的划分需要特别注意时间顺序,不能采取随机抽样的方式构成训练集和测试集,以避免未来数据泄漏到训练集中。因此,我们要根据数据的特性和预测任务的需求,选择固定长度分段或动态分段策略。按时间先后顺序划分数据,确保训练集、验证集和测试集在时间上不重叠。例如,可以采用前8年的数据作为训练集,接下来1年的数据作为验证集,最后1年的数据作为测试集。
3基于LSTM模型进行训练与优化
本文通过对比两组数据处理方法下的LSTM模型训练效果,开展实证研究。第一组数据(记为A组)仅进行基本的数据对齐和缺失值处理,而第二组数据(记为B组)则按照“七步数据清洗处理法”进行更为全面的处理。研究的主要参考指标为损失曲线形态,模型性能通过多项关键指标进行衡量,包括均方误差(MSE)、平均绝对误差(MAE)、均方根误差(RMSE)以及决定系数(R²)[4-5]。
模型的编写基于Python语言,训练过程在Ana⁃conda平台下完成,主要调用的库包括pandas、NumPy、scikit-learn、statsmodels和TensorFlow。为了确保实验的公正性,模型架构在实验组和对照组中保持一致,均为相同的LSTM模型。在实验过程中,我们分别在两组数据上训练模型,记录和比较两组的性能表现。
在数据特征选择方面,本文采用了以下三类特征:
宏观经济数据:如货币供应量M2同比增长率(M2_yoy)、国内生产总值GDP同比增长率(GDP_yoy)。
公司基本面数据:包括自由现金流(fcff)、经营活动现金流量净额同比增长率(ocf_yoy)、流动比率(cur⁃rent_ratio)、总资产净利率(roa_dp)、净资产收益率(roe)、资产周转率(assets_turn)、利息费用(interest_in⁃come)、净利润(n_income)、营业收入(revenue)、非流动负债(total_ncl)。
市场指标:包括标准化的换手率(turnover_rate_d)、成交量(vol_d)、昨日收盘价(pre_close_d)及日涨跌幅(pct_chg_d)。
LSTM模型架构包括两层堆叠的LSTM单元,每层包含50个单元,并在每一层后加入Dropout层(丢失率为0.2)以防止模型过拟合,提高泛化能力。最后,通过全连接层将LSTM提取的特征映射至最终的预测结果。模型训练使用Adam(AdaptiveMomentEstimation)优化器,其结合了动量(Momentum)和RMSProp优化算法的优点。通过计算梯度的一阶矩和二阶矩,动态调整每个参数的学习率,实现高效的梯度下降。
在模型训练的结果分析中,我们观察到A组数据在输入模型时频繁出现报错,且尽管其MSE和MAE值相对较低,R²值较高,但模型的稳定性和泛化性较差。而B组数据通过“七步数据清洗处理法”后,模型训练过程顺利,且其拟合效果更优,模型在测试数据上的表现显著提升。
4结束语
本文通过优化时间序列数据处理流程,将平稳性检验有效地整合到“七步数据清洗法”中,解决了股票数据在输入LSTM模型前存在的多种问题。研究表明,经过优化的数据处理不仅减少了模型训练中的错误,提高了数据质量,还显著提升了LSTM模型的预测性能。在实验中,采用优化后的数据清洗方法的实验组模型表现优于仅进行基本数据清洗的对照组,验证了优化数据处理流程在提高LSTM模型预测准确性方面的有效性。未来的研究可以进一步探索更多数据处理和模型训练的优化策略,如引入更先进的特征选择方法、增强模型的泛化能力以及结合其他深度学习模型,以进一步提升量化投资中的预测效果。此外,考虑将多源数据融合和实时数据处理技术应用于量化投资,将为投资策略的制定提供更为坚实的数据支持。
参考文献:
[1]李斌,邵新月,李玥阳.机器学习驱动的基本面量化投资研究[J].中国工业经济,2019(8):61-79.
[2]彭燕,刘宇红,张荣芬.基于LSTM的股票价格预测建模与分析[J].计算机工程与应用,2019,55(11):209-212.
[3]贺毅岳,李萍,韩进博.基于CEEMDAN-LSTM的股票市场指数预测建模研究[J].统计与信息论坛,2020,35(6):34-45.
[4]欧阳红兵,黄亢,闫洪举.基于LSTM神经网络的金融时间序列预测[J].中国管理科学,2020,28(4):27-35.
[5]武博.基于LSTM模型的股票价格预测[D].大连:大连理工大学,2021.
【通联编辑:代影】