(29-5-02)通过回测、ARIMA 和 GRU 预测股票价格:ARIMA模型预测(2)

29.7.4  确定p和q的值

在 ARIMA 模型中,p和q的值是通过自相关函数 (ACF) 和偏自相关函数 (PACF) 来确定的。ACF 和 PACF 用于帮助识别模型中需要的自回归项 (p) 和移动平均项 (q)。通常来说,如果 ACF 显示出明显的截断,并且滞后 1 的自相关为正,则应使用 AR 模型 (p)。如果 PACF 显示出明显的截断,并且滞后 1 的自相关为负,则应使用 MA 模型 (q)。

如果 ACF 和 PACF 都显示出逐渐下降的趋势,那么应同时使用 AR (p) 和 MA (q) 的组合模型。最终,通过最小化 Akaike 信息准则 (AIC) 或贝叶斯信息准则 (BIC),来确定 AR 和 MA 模型的最佳阶数。

在本项目中,通过下面的代码绘制了时间序列 df.High 的自相关函数(ACF)和偏自相关函数(PACF)图,用于确定序列中的滞后关系。这些图有助于选择 ARIMA 模型中的参数 p(自回归项)和 q(移动平均项)。

plot_acf(df.High, lags=5, title='Auto Correlation Function plot')
# 隐藏右侧边框
plt.gca().spines['right'].set_visible(False)
# 隐藏顶部边框
plt.gca().spines['top'].set_visible(False)
# 设置 x 轴标签为“滞后”
plt.xlabel('Lags')
# 设置 y 轴的上限
plt.ylim(top=1.25)
# 展示图像
plt.show()
plot_pacf(df.High, lags=5, title='Partial Autocorrelation Function plot')
# 隐藏右侧边框
plt.gca().spines['right'].set_visible(False)
# 隐藏顶部边框
plt.gca().spines['top'].set_visible(False)
# 设置 x 轴标签为“滞后”
plt.xlabel('Lags')
# 设置 y 轴的上限
plt.ylim(top=1.25)
# 展示图像
plt.show()

上述代码绘制了 df.High 列的自相关函数 (ACF) 和偏自相关函数 (PACF) 图,用于识别时间序列中的滞后效应。通过观察这些图,可以帮助选择 ARIMA 模型的 p 和 q 参数。执行效果如图29-20所示。

图29-20  自相关函数 (ACF) 和偏自相关函数 (PACF) 图

29.7.5  整合阶数 (d)

整合阶数 (d)是ARIMA 模型中的一个参数,表示为了使数据平稳数据被差分的次数,具体说明如下:

  1. 若阶数为 0,表示数据没有经过差分处理。
  2. 若阶数为 1,表示数据经过了一次差分处理。
  3. 更高的值则表示数据经过了多次差分处理。

在时间序列分析中,通过差分去除趋势或季节性,可以使数据达到平稳状态,使其更适合进行预测。在本项目中,通过下面的代码展示了时间序列的原始数据以及一阶和二阶差分。通过绘制原始序列和两次差分的序列图,可以观察数据的平稳性。差分是 ARIMA 模型中用来处理非平稳数据的技术,帮助去除趋势和季节性。

# 原始序列
fig, (ax1, ax2, ax3) = plt.subplots(3, figsize=(15, 10))
# 绘制原始序列的图像
ax1.plot(df.High); ax1.set_title('Original Series')
# 隐藏 x 轴
ax1.axes.xaxis.set_visible(False)
# 隐藏顶部边框
ax1.spines['top'].set_visible(False)

# 一阶差分
# 绘制一阶差分的图像
ax2.plot(df.High.diff()); ax2.set_title('1st Order Differencing')
# 隐藏 x 轴
ax2.axes.xaxis.set_visible(False)
# 隐藏顶部边框
ax2.spines['top'].set_visible(False)

# 二阶差分
# 绘制二阶差分的图像
ax3.plot(df.High.diff().diff()); ax3.set_title('2nd Order Differencing')
# 隐藏顶部边框
ax3.spines['top'].set_visible(False)

# 设置 x 轴标签为“滞后”
plt.xlabel('Lags')
# 调整子图的布局,使图像不重叠
plt.tight_layout()
# 展示图像
plt.show()

上述代码通过可视化展示原始时间序列、一阶差分和二阶差分,帮助理解差分处理如何影响时间序列的平稳性,执行效果如图29-20所示。由于序列在一次差分后已变为平稳,因此我们将 d 设为 1。

图29-20  原始序列和两次差分的序列图

29.7.6  移动平均(MA)

移动平均模型(MA)是一种时间序列模型,利用历史数据来预测未来值。该模型的基础思想是,时间序列在某一时刻的值是之前几个点值的平均值的函数。用于计算平均值的点数称为窗口大小。这是一种简单且广泛使用的技术,能够平滑短期波动,并突出长期趋势和周期。在本项目中,通过下面的代码绘制了时间序列数据的自相关函数(ACF)图,帮助识别数据的自相关结构。

fig, (ax1, ax2, ax3) = plt.subplots(3, figsize=(15, 10))
# 原始序列的自相关函数图
plot_acf(df.High, ax=ax1, auto_ylims=True, lags=5, title='Original Series')
ax1.spines['top'].set_visible(False)

# 一阶差分后的自相关函数图
plot_acf(df.High.diff().dropna(), auto_ylims=True, lags=5, ax=ax2, title='1st Order Differencing')
ax2.spines['top'].set_visible(False)

# 二阶差分后的自相关函数图
plot_acf(df.High.diff().diff().dropna(), auto_ylims=True, lags=5, ax=ax3, title='2nd Order Differencing')
ax3.spines['top'].set_visible(False)

plt.tight_layout()
plt.show()

执行效果如图29-21所示,图中包括三个子图:第一个显示原始序列的ACF,第二个显示一次差分后的ACF,第三个显示二次差分后的ACF。每个图都设置了标题,并去除了顶部边框,以便于清晰展示数据的自相关性。

图29-21  时间序列数据的自相关函数(ACF)图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值