基于Google Cloud AI金融训练项目的ARIMA模型构建实战
引言
在金融时间序列分析中,ARIMA(自回归积分滑动平均)模型是一种经典且强大的预测工具。本文将基于Google Cloud AI金融训练项目中的实践案例,详细介绍如何使用ARIMA模型对苹果公司(AAPL)股票收盘价进行建模和分析。
环境准备
首先需要安装必要的Python库:
!pip install --user statsmodels
安装完成后,导入所需的库:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import datetime
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA
数据获取与预处理
1. 数据加载
我们从云端存储中加载AAPL十年期的股票数据:
df = pd.read_csv('gs://cloud-training/ai4f/AAPL10Y.csv')
df['date'] = pd.to_datetime(df['date'])
df.sort_values('date', inplace=True)
df.set_index('date', inplace=True)
2. 数据重采样
为了减少噪声并突出长期趋势,我们将日数据重采样为周数据:
df_week = df.resample('w').mean()
df_week = df_week[['close']]
3. 计算周收益率
金融分析中通常使用对数收益率:
df_week['weekly_ret'] = np.log(df_week['close']).diff()
df_week.dropna(inplace=True)
平稳性检验
ARIMA模型要求时间序列是平稳的。我们使用Dickey-Fuller检验来验证:
# 计算滚动统计量
rolmean = udiff.rolling(20).mean()
rolstd = udiff.rolling(20).std()
# 可视化
plt.figure(figsize=(12, 6))
plt.plot(udiff, color='blue', label='Original')
plt.plot(rolmean, color='red', label='Rolling Mean')
plt.plot(rolstd, color='black', label='Rolling Std Deviation')
plt.title('Rolling Mean & Standard Deviation')
plt.legend(loc='best')
plt.show()
# Dickey-Fuller检验
dftest = sm.tsa.adfuller(udiff.weekly_ret, autolag='AIC')
当p值小于0.05时,我们可以拒绝原假设,认为序列是平稳的。
模型参数选择
1. 自相关(ACF)和偏自相关(PACF)图
# ACF图
fig, ax = plt.subplots(figsize=(12,5))
plot_acf(udiff.values, lags=10, ax=ax)
plt.show()
# PACF图
fig, ax = plt.subplots(figsize=(12,5))
plot_pacf(udiff.values, lags=10, ax=ax)
plt.show()
通过分析ACF和PACF图,我们可以初步确定ARIMA模型的参数(p,d,q):
- PACF图在滞后3阶后截尾,建议p=3
- ACF图在滞后1阶后截尾,建议q=1
- 由于数据已经平稳,d=0
ARIMA模型构建与评估
# 构建ARIMA(3,0,1)模型
ar1 = ARIMA(udiff.values, order=(3, 0, 1)).fit()
print(ar1.summary())
模型摘要提供了多项重要指标:
- 系数显著性:查看P>|z|列,小于0.05表示显著
- AIC/BIC:用于模型比较,值越小越好
- Ljung-Box检验:检验残差是否自相关
模型分析与可视化
# 分析未来两周趋势
steps = 2
forecast = ar1.forecast(steps=steps)
# 可视化结果
plt.figure(figsize=(12, 8))
plt.plot(udiff.values, color='blue', label='Actual')
plt.plot(ar1.fittedvalues, color='red', label='Fitted')
plt.plot(pd.DataFrame(forecast,
index=range(len(udiff.values)+1, len(udiff.values)+1+steps)),
color='green', label='Trend Analysis')
plt.title('ARIMA Model Results')
plt.legend()
plt.show()
模型优化建议
- 参数调优:尝试不同的(p,d,q)组合,选择AIC最小的模型
- 季节性模型:如果数据存在季节性,考虑使用季节性时间序列模型
- 外部变量:引入宏观经济指标等外部变量改进模型
- 模型组合:将ARIMA与其他模型(如GARCH)结合使用
结语
本文详细介绍了在Google Cloud AI金融训练项目中构建ARIMA模型的完整流程。虽然我们的初步模型分析效果有限,但通过参数调优和模型改进,可以显著提升分析精度。ARIMA模型在金融时间序列分析中仍具有重要价值,特别是在理解数据结构和趋势分析方面。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考