原文链接:http://tecdat.cn/?p=24057
1. 概要
本文的指标是应用各种预测模型预测 Google 的将来股价,而后剖析各种模型。Google 股票数据集是应用 R 中的 Quantmod 软件包从 Yahoo Finance 取得的。
2. 简介
预测算法是一种试图依据过来和当初的数据预测将来值的过程。提取并筹备此历史数据点,来尝试预测数据集所选变量的将来值。在市场历史期间,始终有一种继续的趣味试图剖析其趋势,行为和随机反馈。一直关注在理论产生之前先理解产生了什么,这促使咱们持续进行这项钻研。咱们还将尝试并理解 COVID-19对股票价格的影响。
3. 所需包
library(quantmod) R 的定量金融建模和交易框架
library(forecast) 预测工夫序列和工夫序列模型
library(tseries) 工夫序列剖析和计算金融。library(timeseries) 'S4' 类和金融工夫序列的各种工具。library(readxl) readxl 包使你可能轻松地将数据从 Excel 中取出并输出 R 中。library(kableExtra) 显示表格
library(data.table) 大数据的疾速聚合
library(DT) 以更好的形式显示数据
library(tsfknn) 进行 KNN 回归预测
4. 数据筹备
4.1 导入数据
咱们应用 Quantmod 软件包获取了 Google 股票价格 2015 年 1 月 1 日到 2020 年 4 月 24 日的数据,用于咱们的剖析。为了剖析 COVID-19 对 Google 股票价格的影响,咱们从 quantmod 数据包中获取了两组数据。
- 首先将其命名为 data\_before\_covid,其中蕴含截至 2020 年 2 月 28 日的数据。
- 第二个名为 data\_after\_covid,其中蕴含截至 2020 年 4 月 24 日的数据。
所有剖析和模型都将在两个数据集上进行,以剖析 COVID-19 的影响(如果有)。
getSymbols("GOG" fro= "2015-01-01", to = "2019-02-28")
before_covid <-dafae(GOOG)
getSymbols("GOG" , frm = "2015-01-01")
after_covid <- as.tae(GOOG)
4.2 数据的图形示意
par(mfrow = c(1,2))
plot.ts(fore_c)
4.3 数据集预览
最终数据集能够在上面的交互式表格中找到。
table(before_covid)
4.4 变量汇总
变量
形容
Open
当日股票开盘价
High
当日股票最高价
Low
当日股价最低
Close
当日股票收盘价
Volumn
总交易量
Adjusted
调整后的股票价格,包含危险或策略
5. ARIMA 模型
咱们首先剖析两个数据集的 ACF 和 PACF 图。
par(mfrow = c(2,2))
acft(bfoe_covid)
pacf(bfre_covid)
而后,咱们进行 ADF(Dickey-Fuller) 测验和 KPSS(Kwiatkowski-Phillips-Schmidt-Shin) 测验,测验两个数据集收盘价的工夫序列数据的平稳性。
print(adf.test)
print(adfes(sata\_after\_covid))
通过以上 ADF 测验,咱们能够得出以下论断:
- 对于 COVID-19 之前的数据集,ADF 测试给出的 p 值为 0.2093,该值大于 0.05,因而阐明工夫序列数据 不是安稳的。
- 对于 COVID-19 之后的数据集,ADF 测试给出的 p 值为 0.01974,该 值 小于 0.05,这阐明工夫序列数据是 安稳的。
print(kpss.s(t\_before\_covid))
print(kpss.est(Dafter_covid))
通过以上 KPSS 测试,咱们能够得出以下论断:
- 对于 COVID-19 之前的数据集,KPSS 测试得出的 p 值为 0.01,该值小于 0.05,因而阐明工夫序列数据 不是安稳的。
- 对于 COVID-19 之后的数据集,KPSS 测试给出的 p 值为 0.01,该值小于 0.05,这阐明工夫序列数据 不是安稳的。
因而,咱们能够从以上两个测试得出结论,工夫序列数据 不是安稳的。
而后,咱们应用 auto 函数来确定每个数据集的工夫序列模型。
auto.ar(befor_covid, lamd = "auto")
auto.arma(after_covid)
从 auto 函数中,咱们得出两个数据集的以下模型:
- 在 COVID-19 之前:ARIMA(2,1,0)
- 在 COVID-19 之后:ARIMA(1,1,1)
取得模型后,咱们将对每个拟合模型执行残差诊断。
par(mfrow = c(2,3))
plot(before_covidresiduals)
plot(mfter_covidresiduals)
从残差图中,咱们能够确认残差的平均值为 0,并且方差也为常数。对于滞后 > 0,ACF 为 0,而 PACF 也为 0。
因而,咱们能够说残差体现得像白噪声,并得出结论:ARIMA(2,1,0)和 ARIMA(1,1,1)模型很好地拟合了数据。或者,咱们也能够应用 Box-Ljung 测验在 0.05 的显着性程度上进行测验残差是合乎白噪声。
Box.test(moderesiduals)
Box.tst(moeit\_fter\_covidreia, type = "Ljung-Box")
在此,两个模型的 p 值均大于 0.05。因而,在显着性程度为 0.05 的状况下,咱们无奈回绝原假如,而得出的论断是残差遵循白噪声。这意味着该模型很好地拟合了数据。
一旦为每个数据集确定了模型,就能够预测将来几天的股票价格。
6. KNN 回归工夫序列预测模型
KNN 模型可用于分类和回归问题。最受欢迎的利用是将其用于分类问题。当初,应用 r 软件包,能够在任何回归工作利用 KNN。这项钻研的目标是阐明不同的预测工具,对其进行比拟并剖析预测的行为。在咱们的 KNN 钻研之后,咱们提出能够将其用于分类和回归问题。为了预测新数据点的值,模型应用“特色类似度”,依据新点与训练集上点的类似水平为值调配新点。
第一项工作是确定咱们的 KNN 模型中的 k 值。抉择 k 值的个别教训法令是取样本中数据点数的平方根。因而,对于 COVID-19 之前的数据集,咱们取 k = 32;对于 COVID-19 之后的数据集,咱们取 k = 36。
par(mfrow = c(2,1))
knn\_before\_covid <- kn(bfrvdGO.Clse, k = 32)
knn\_after\_covid <- kn(ber_oiGOG.lose ,k = 36)
plot(knn\_before\_covid)
plot(knn\_after\_covid)
而后,咱们针对预测工夫序列评估 KNN 模型。
before\_cvid <- ll\_ig(pdn\_befr\_vid)
afer\_vd<- rog\_ogn(redkn\_afer\_vd)
7. 前馈神经网络建模
咱们将尝试实现的下一个模型是带有神经网络的预测模型。在此模型中,咱们应用单个暗藏层模式,其中只有一层输出节点将加权输出发送到接管节点的下一层。预测函数将单个暗藏层神经网络模型拟合到工夫序列。函数模型办法是将工夫序列的滞后值用作输出数据,以达到非线性自回归模型。
第一步是确定神经网络的暗藏层数。只管没有用于计算暗藏层数的特定办法,但工夫序列预测遵循的最常见办法是通过计算应用以下公式:
其中 Ns:训练样本数 Ni:输出神经元数 No:输入神经元数 a:1.5 ^ -10
# 暗藏层的创立
hn\_before\_covid <- length(before.Close)/(alpha*(lengthGOOG.Close + 61)
hn\_after\_covid <- length(after\_covidClose)/(alpha*(lengthafter\_ovdClose+65))
#拟合 nn
nn(before\_covid$GOOG.Close, size = hn\_beoe_cid,
# 应用 nnetar 进行预测。forecast(befe_cvid, h 61, I =UE)
forecast(aftr_coid, h = 5, I = RE)
plot(nn\_fcst\_afte_cvid)
而后,咱们应用以下参数剖析神经网络模型的性能:
accuracy
accuracy
8. 所有模型的比拟
当初,咱们应用参数诸如 RMSE(均方根误差),MAE(均值绝对误差)和 MAPE(均值相对百分比误差) 对所有三个模型进行剖析。
sumary\_le\_efore_oid <- data.frame(RMSE = nuerc(), MAE = uer(),
MAPE = numric(), snsAsacrs = FALSE)
summ\_tabe\_fter_ovd <- data.fame(RMSE = umeri(), MAE = nmei(),
MAPE = numeic())
kable(smary\_abe\_eor_oid)
COVID-19 之前的数据模型汇总
模型
RMSE
MAE
MAPE
ARIMA
13.0
8.8
1.0
KNN
44.0
33.7
3.1
神经网络
13.0
8.7
1.0
kable(sumary\_tbl\_aft_ci
fulith = F, fixdtead = T )
COVID-19 之后的数据模型汇总
模型
RMSE
MAE
MAPE
ARIMA
16.6
10.4
1.0
KNN
45.9
35.7
3.3
神经网络
14.7
9.8
1.0
因而,从以上模型性能参数的总结中,咱们能够看到神经网络模型在两个数据集上的性能均优于 ARIMA 和 KNN 模型。因而,咱们将应用神经网络模型来预测将来两个月的股价。
9. 最终模型:COVID-19 之前
当初,咱们应用直到 2 月的数据来预测 3 月和 4 月的值,而后将预测价格与理论价格进行比拟,以查看是否因为 COVID-19 能够归因于任何重大影响。
foestdungcvid<- datafame("De"Actua Values" =
datatable(foestdungcvid, ilte= 'to')
从表中咱们能够看到,3 月和 4 月期间,Google 股票的理论价值通常比预测值要高一些。因而,能够说,只管产生了这种全球性大风行,但 Google 股票的体现依然相当不错。
10. 最终模型:COVID-19 之后
当初,咱们应用直到 4 月的数据预测 5 月和 6 月的值,以理解 Google 的将来股价。
foreataov <- data.frae(dn_reataeimean)
table(foreataov)
从表中能够得出结论,在 5 月和 6 月的接下来的几个月中,Google 股票的价格将持续上涨并体现良好。
最受欢迎的见解
1. 在 python 中应用 lstm 和 pytorch 进行工夫序列预测
2.python 中利用长短期记忆模型 lstm 进行工夫序列预测剖析
3. 应用 r 语言进行工夫序列(arima,指数平滑)剖析
4.r 语言多元 copula-garch- 模型工夫序列预测
5.r 语言 copulas 和金融工夫序列案例
6. 应用 r 语言随机稳定模型 sv 解决工夫序列中的随机稳定
7.r 语言工夫序列 tar 阈值自回归模型
8.r 语言 k -shape 工夫序列聚类办法对股票价格工夫序列聚类
9.python3 用 arima 模型进行工夫序列预测