Zhang, K., Zhong, G., Dong, J., Wang, S., & Wang, Y. (2019).Stock Market Prediction Based on Generative Adversarial Network. Procedia Computer Science, 147, 400–406.
- 文章原文:Stock Market Prediction Based on Generative Adversarial Network(pdf)
- 文章代码:stock_market_GAN(GitHub)
- 代码结果:资产定价笔记07:基于GAN的股票市场预测-代码
- Gu et al. (2020)可参见资产定价笔记03:机器学习与资产定价(1)
- Leippold et al. (2021)可参见资产定价笔记04:中国股市中的机器学习
- Chen et al. (2019)可参见资产定价笔记05:资产定价中的深度学习
- Lin et al. (2021)可参见资产定价笔记06:基于生成对抗网络的股价预测
摘要
深度学习由于其强大的数据处理能力,最近在许多领域取得了巨大的成功。例如,它在股票市场预测、投资组合优化、财务信息处理和交易执行策略等金融领域得到了广泛的应用。股票市场预测是金融学中最受欢迎和最有价值的领域之一。本文提出了一种基于多层感知器(MLP)和长短时记忆(LSTM)的生成式对抗网络(GAN)结构,用于预测股票收盘价。该生成器由LSTM构建,从给定的股票市场数据中挖掘股票的数据分布,生成相同分布的数据,而MLP设计的判别器则用于区分真实股票数据和生成的数据。我们选择标普500指数的每日数据和多个交易日的几只股票,试图预测每日的收盘价。实验结果表明,与机器学习和深度学习中的其他模型相比,该模型能够在真实数据上获得较好的收盘价预测效果。
1. 引言
股票市场收益的预测是该领域最重要和最具挑战性的问题之一。金融领域的许多分析和假设表明,股票市场是可预测的。股票投资技术分析理论是一种通过对过去市场数据的研究来预测价格走向的分析方法。一个有意义的假设叫做均值回归,它指出股票价格是暂时的,随着时间的推移会趋向于平均价格。此外,这种假设还有一个进一步的发展,叫做移动平均回归(MAR),它假设价格的平均是过去一个时间窗口的价格的平均值,例如5天。基于上述观点,我们提出了一种新的深度学习模型来预测日收盘价。
本文的主要贡献可以总结如下:
- 提出了一种以长短时记忆(LSTM)网络为生成网络,以多层感知器(MLP)为鉴别器的生成对抗网络(GAN)结构。该模型以端到端方式训练,通过给出过去几天的股票数据来预测每天的收盘价。
- 我们尝试通过对抗性学习系统生成相同的股票日数据分布,而不是仅仅使用传统的回归方法进行价格预测。
2. 相关工作
参见原文。
3. 方法论
3.1 原理
GAN是一个新的框架,它像零和游戏一样训练两个模型。在对抗性过程中,生成器可以看作是一个作弊者,生成与真实数据相似的数据,而鉴别器则扮演着判断者的角色,区分真实数据和生成数据。它们可以达到一个理想的点,即鉴别器无法区分这两种类型的数据。此时,生成器可以从这个游戏中获取数据分布。基于这一原理,我们提出了GAN架构用于股票收盘价的预测。
3.2 生成器
该模型的生成器采用LSTM设计,具有较强的时间序列数据处理能力。我们选择近20年的每日数据,结合7个财务因素预测未来的收盘价。1天内股票数据的7个因子分别是最高价、最低价、开盘价、收盘价、成交量、换手率和Ma5(过去5天收盘价的平均值)。这7个因子在运用技术分析的均值回归理论进行价格预测时具有重要的价值和意义,因此,这些因子可以作为股票数据的7个特征来进行价格预测。假设我们的输入是 ,由 天的每日股票数据组成。 中的每一个 都是一个向量,它由7个特征组成:
生成器结构如图1所示。为了简单起见,我们省略了LSTM的细节。我们利用生成器提取LSTM的输出 ,并将其放入一个7个神经元的全连接层中,生成 。 的目的是近似 ,我们可以从 得到 作为 日收盘价的预测。
图1:用LSTM设计的生成器。图源:Zhang et al. (2019)
生成器 的输出定义为 , 。其中:
- 为LSTM的输出
- 为以 作为输入的LSTM的输出
- 表示 Leaky Rectified Linear Unit (ReLU) 激活函数
- 和 表示全连通层中的权重和偏差
我们还使用dropout作为正则化方法来避免过拟合。此外,我们可以用 和 继续预测 。
3.3 鉴别器
鉴别器的目的是构成一个可微函数 ,对输入数据进行分类。期望鉴别器输入假数据时输出0,输入真数据时输出1。在这里,我们选择一个MLP作为我们的鉴别器,它有三个隐藏层 ,分别包含72、100、10个神经元。隐层之间使用Leaky ReLU作为激活函数,输出层使用sigmoid函数。在此基础上,选取交叉熵损失作为损失函数进行优化。
- 将 和 结合,得到 为假数据
- 将 和 结合,得到 为真数据
鉴别器的输出定义为: , 。式中
- 表示MLP的输出
- 表示sigmoid激活函数。
和 都输出单个标量。图2显示了该鉴别器的结构:
图2:使用MLP设计的鉴别器。图源:Zhang et al. (2019)
3.4 GAN的结构
通过上面提到的两个模型,我们提出了GAN架构。在双人极大极小博弈中, 和 都试图优化一个值函数。同理,我们可以定义我们的值函数 的优化如下:
我们定义了生成器损耗 和鉴别器损耗 来优化值函数。将均方误差(MSE)与经典GAN的生成器损耗结合起来。数学细节参见原文。之所以将 和 而不是 和 放在鉴别器中,是因为我们希望鉴别器捕获 和 之间的相关性和时间序列信息。
GAN的结构如图3所示:
图3:GAN的结构。图源:Zhang et al. (2019)
4. 实验
4.1 数据集描述
我们在真实的股票数据上评估我们的模型,包括
- 标普500指数(S&P 500指数)
- 中国上证综合指数
- NYSE的IBM
- NASDAQ的微软公司(MSFT)
- 中国平安保险(PAICC)
所有的股票数据都可以在雅虎财经上下载。我们选择最近20年的交易日期,每只股票近5000条数据。因周末和节假日交易受限,交易日期不连续。
归一化是必要的,也是实现竞争性结果的关键点。根据上述MAR的假设,我们对数据进行归一化处理,即减去均值后除以标准差。我们在经验上选择 ,是因为我们试图用过去一周的数据来预测第二天的数据(周末交易有限)。例如,我们计算5天数据的平均值和标准差来对数据进行规范化。然后,利用归一化数据对第6天的数据进行预测。训练和测试期间的数据都以相同的方式处理。
4.2 模型训练
我们的目的是通过过去 天的数据来预测这7个因素,并得出第二天的收盘价。之所以预测7个因子在第二天,是因为生成器的目的是挖掘真实数据的分布,我们可以从生成的数据中得到收盘价格。数据分为两部分,用于训练和测试。我们选择前90%-95%的存量数据进行训练,剩余5%-10%(约250-500条数据)进行测试。
训练期间的损失如图4所示。在训练过程中,鉴别器和生成器之间存在着明显的对抗过程。在对抗过程中对鉴别器和产生器进行了优化。
图4:训练过程中鉴别器和发生器的损耗。图源:Zhang et al. (2019)
4.3 实验结果
我们通过以下统计指标来评估我们的模型的预测性能:
- 平均绝对误差(MAE)
- 均方根误差(RMSE)
- 平均绝对百分比误差(MAPE)
- 平均回报(AR)
假设实际收盘价为 ,预测第 天收盘价为 。指标如下所示:
,若 我们计算5个数据集上均方根误差的平均值作为平均评价。MAE和HR也是这样计算的。支持向量回归(SVR)、神经网络(ANN)和LSTM是股市预测的经典方法,我们选择它们作为基线与我们的模型进行比较。预测结果如表2所示。较低的MAE、RMSE和MAPE表明预测的收盘价接近真实数据。AR显示了基于四种预测方法的这些股票的日平均收益。我们可以看到,与其他方法相比,我们的方法取得了具有竞争力的性能。
表2:对五个股票数据集的平均评价。来源:Zhang et al. (2019)
Method | MAE | RMSE | MAPE | AR | Our_GAN | 3.0401 | 4.1026 | 0.0137 | 0.7554 | LSTM | 4.1228 | 5.4131 | 0.0145 | 0.6859 | ANN | 7.3029 | 9.1757 | 0.0808 | 0.5249 | SVR | 4.9285 | 8.2261 | 0.0452 | 0.7266 | 图5显示了四种方法在PAICC上的一个训练步骤相同的预测示例。从图5可以看出,我们的方法在匹配真实价格的趋势线方面表现最好。
图5:GAN和一些比较模型的价格预测,以中国平安保险为例。图源:Zhang et al. (2019)
5. 结论
我们在股票市场预测方面做了一些探索,并尝试用我们提出的GAN来捕捉真实股票数据的分布。在未来的工作中,我们计划探索如何从股票市场中提取出更有价值、更有影响的金融因素,并优化我们的模型,更准确地学习数据分布,从而通过我们的方法获得更高精度的股票市场趋势或价格预测。
(完)
返回目录: |
|