使用BERT和GAN进行股票预测
三个要点
✔️使用GAN进行股票价格预测的方法
✔️使用finBERT输入金融市场情绪分析的结果
✔️取得了比以前的模型更好的结果
Stock price prediction using BERT and GAN
written by Priyank Sonkiya, Vikas Bajpai, Anukriti Bansal
(Submitted on 18 Jun 2021)
Comments: Published on arxiv.
Subjects: Statistical Finance (q-fin.ST); Computation and Language (cs.CL); Machine Learning (cs.LG) Computing (cs.NE)
code:
本文所使用的图片要么来自该文件,要么是参照该文件制作的。
研究概况
使用股票价格的技术指标(如移动平均线)进行技术分析是预测金融市场走势的一种普遍方法。近年来,计算能力和技术的进步使得使用神经网络来预测股票价格在一定程度上成为可能。在本文中,我们提出了一个具有GAN架构的模型,其性能优于以前的模型,最初是为图像生成提出的,但现在我们的模型生成的是一维数组的数据。除了各种市场数据,如股票价格和技术指标,使用BERT对金融市场进行情绪分析的结果也被用于训练。在以前的论文中已经表明,基于GAN的模型在预测金融市场方面表现良好。新模型成功地超越了以前的模型。
数据集
以下是我们使用的数据集的粗略分类。
- Apple.inc的股价数据
- 美国市场指数,如标准普尔500指数、纳斯达克100指数和纽约证券交易所指数。
- 伦敦、印度、东京、香港、上海和芝加哥证券交易所的股票指数
- 黄金、石油和美元等所谓商品的价格数据
- 微软、亚马逊和谷歌等所谓大科技公司的股价
- 使用FinBERT进行情感分析的Seeking Alpha新闻和头条新闻
本预测涵盖了Apple.inc.的股票。股票价格数据是从雅虎财经下载的。使用的时期是10年,从2010年7月到2020年7月。对于股价数据,除了最低价、最高价、开盘价、收盘价、成交量和调整后的收盘价*之外,还使用了技术指标。
为了获得股票拆分实施前后的股价的连续视图,股票拆分实施前的收盘价被调整为拆分后的价值,被称为 "调整后收盘价"。调整后的收盘价 - 雅虎财经
使用的技术指标如下
- 7天和21天的简单移动平均线
- 连接指定天数的平均收盘价的一条线
- 布林线
- 检查时的偏差值的图像
- MACD(移动平均收敛扩散)。
- 短期移动平均线减去中期移动平均线
- RSI(相对强弱指数
- 确定市场是否超买或超卖的指标
- 收盘价的傅里叶变换
- 将该函数分解为其三角成分。这一次的计算分别使用了3、6和9的关闭值。
对每个指标背后的理论的详细解释超出了本文的范围,但每个指标的图示见下图。
芬博特
关于金融市场的情绪分析。首先,什么是FinBERT? FinBERT是用金融数据对BERT进行微调,用于金融情感分析任务。使用了两组训练数据:TRC2- 金融数据和 金融短语库 数据。
关于FinBERT的更详细的解释,你可能希望阅读以下论文
FinBERT: Financial Sentiment Analysis with Pre-trained Language Models
written by Dogu Araci
(Submitted on 27 Aug 2019)
Comments: Published on arxiv.
Subjects: Computation and Language (cs.CL); Machine Learning (cs.LG)
code:
对于使用FinBERT的情绪分析,从Seeking Alpha网站上刮取了2010年7月至2020年7月的新闻和头条,并输入FinBERT。Seeking Alpha是一家网络媒体公司,自2004年以来一直存在。广泛的投资者和作家提供高质量的信息。
图片: https://seekingalpha.com/ (截至30/09/2021 12:50)
然后,从FinBERT输出的情感分析结果被添加到数据集中,同时也被传递给GAN生成器,如下所述。
对于这个预测,回看数据的步骤只进行了三天。前三天的数据被用来预测未来四天的价格。数据集的大小为(2517,37),其中2517为天数,37为列数。期限是10年,但天数是这样的,因为节假日市场上没有交易。我们将数据集以7:3的比例分割,用于训练和测试,最终的数据规模分别约为2010-2017年的训练(1746,3,37)和2017-2020年的测试(748,3,37)。这里的3代表回看时间步长参数。下图显示了本研究中使用的数据集的概况。
正常化
最后,我们使用scikit-learn库中的MinMax标度器对数据进行标准化处理。这里,xscaled指的是归一化的值,xmax指的是最大值,xmin指的是最小值。这通过将数据的范围保持在-1~1之间来降低数据的复杂性。
建议的模式
GAN由两部分组成:一个生成器和一个鉴别器。GANs最初被提议用于生成图像,但在提议的模型中,它们被构建为生成价格数据序列。在本节中,我们将讨论GAN的数学理论和结构的细节。拟议模型的总体情况如下
发电机 (GENERATOR)
该发电机由以下公式表示
其中θ是发电机的重量。在普通的GAN中,Z指的是N(0,1)输入向量,但在拟议的模型中,它被FinBERT的情感分析的输出所取代。生成器寻求θ,使生成的数据分布能够使生成器的输出gθ(Z)被鉴别器估计为与实际价格数据的分布X相同。
发电机的结构
在提议的模型中,GRU(门控递归单元)*被用于生成器。该发生器在第1、2和3层分别由1024、514和256个单元组成。为防止过度训练,每层设置了20%的辍学率。此外,还有一个具有128、64和1单元的完全耦合层。生成器的输出是输入数据的第二天的股票价格,然后传递给判别器。下图是发电机的示意图。
GRU是LSTM(长短时记忆)模型的改进版,它经常被用来分析时间序列数据等。GRU可以用比LSTM更少的参数进行学习,因此它的学习速度更快,在更少的数据下表现更好。
(DISCRIMINATOR)
鉴别器由以下公式表示
其中w是判别器的权重。鉴别器对实际价格数据输出1,对生成数据输出0。
鉴定机的结构
鉴别器是一个一维卷积神经网络(CNN),激活函数是一个泄漏整顿线性单元(LeakyRelu)。如果输入值小于零,LeakyRelu返回一个等于输入值的值,如果输入值大于零,则返回相同的值。在这种情况下,α是0.01。对于一个3层的CNN,核的大小被设定为(3,5,5)。接下来是一个扁平化层,将CNN的卷积数据转换为一维数据,一个有220个单元的全连接层,一个α设置为0.3的LeakyRelu层,一个有220个单元的全连接层,Relu为激活函数,以及一个现在连接了一个具有sigmoid激活函数的单一全组合层。下面是鉴别器的示意图。
损失函数
GAN的损失函数是基于KL-JS发散,在训练步骤中,我们使用交叉熵来区分两个分布(实际数据分布Px和生成的数据分布Pθ)。通过最小化这个交叉熵,KL-JS发散被最小化,得到一个与实际数据相似的分布。
GAN模型
GAN模型可以用方程(θ,w)来表示,具体如下
由于生成器希望鉴别器将生成的数据判断为真实数据(Dw(gθ(Z))部分),所以它试图使上述方程最小化。反过来说,我们希望判别器能正确地对实际数据和生成的数据进行分类。因此,我们将上述公式最大化,以确保正确的分类。对上述方程进行微分,并将其分解为其权重部分,得到以下结果
这里,𝜂代表学习率。鉴别器通过向生成器反向传播进行学习,生成器在计算实际数据和生成数据的分布之间的损失后,更新权重以产生更接近实际数据的生成数据。
实验结果
除了提议的模型外,还评估了ARIMA、LSTM、GRU和将噪声作为输入的普通GAN(其参数和结构与提议的模型相同)进行比较。均方根误差(RMSE)被选为模型的评价指标。最后,对每个模型的5天、15天和30天后的股价预测结果进行了比较。在这里,提议的模型被命名为S-GAN。第一张图是预测第二天的股票价格的结果。
虽然该图只能从主观上看,但我们可以看到(b)LSTM、(d)GAN和(e)S-GAN的结果看起来不错。
接下来是每个模型的RMSE值的结果。
Zhang等人提出的GAN模型在下面的论文中进行了描述。
Stock Market Prediction Based on Generative Adversarial Network
written by KangZhang, GuoqiangZhong, JunyuDong,ShengkeWang,YongWang.
Comments: Procedia Computer Science; Volume 147, 2019, Pages 400-406
在我们的实验中,我们用上述模型的总体图所示的相同的超参数进行训练。学习率为0.00016,批次大小为128,历时数为165,权重的更新采用亚当的优化。使用所提出的模型(这里是指S-GAN)2010年至2017年的训练数据,训练RMSE为0.5606;在2017年至年底的数据上计算的测试RMSE为1.827。可以看出,所提出的模型在训练和测试分数方面都表现得最好。
最后,这里是5天、15天和30天的结果。上图显示了每个模型在5天、15天和30天内的预测和实际价格,从左到右依次为。下表显示了模型的RMSE分数。
可以看出,GAN模型的斜率与普通GAN模型几乎相同。GANs和普通GANs之间唯一可以确定的区别是模型的输入,因为本文使用FinBERT的情绪分析作为拟议模型的输入,这表明了使用金融市场情绪分析的影响,因此也表明了其有效性。
摘要
在本文中,我们通过使用FinBERT的金融市场情绪分析结果,发现以GRU为生成器、CNN为判别器的GAN在股票价格预测任务中输出的结果比其他模型更好。换句话说,金融市场的玩家情绪影响着市场。挑战在于,该模型在当天交易结束后预测第二天的股价,所以它应该能够在交易时间内实时做出预测。然而,在交易日结束时能够在一定程度上预测第二天的价格,对玩家来说可能是足够的信息。
印象
在我看来,提前几天或几周预测一只股票的价格比未来一天或几小时的价格更重要,但也更难。很少有股价上涨快到可以在短时间内获利的情况,而提前几个月预测股价则要复杂得多,需要考虑许多不同因素。这并不是说,不可能预测这些金融市场。我的个人观点是,试图用模式识别来对付随机漫步的市场是无稽之谈,但我相信,随着每一个新的模型和努力,例如将GANs应用于时间序列任务,准确率会继续提高。我想这是值得继续研究的领域之一,只是为了看看我们在未来能走多远。
与本文相关的类别