基于Google Cloud AI金融训练项目的ARIMA模型构建实战

基于Google Cloud AI金融训练项目的ARIMA模型构建实战

training-data-analyst Labs and demos for courses for GCP Training (http://cloud.google.com/training). training-data-analyst 项目地址: https://gitcode.com/gh_mirrors/tr/training-data-analyst

引言

在金融时间序列分析中,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()

模型优化建议

  1. 参数调优:尝试不同的(p,d,q)组合,选择AIC最小的模型
  2. 季节性模型:如果数据存在季节性,考虑使用季节性时间序列模型
  3. 外部变量:引入宏观经济指标等外部变量改进模型
  4. 模型组合:将ARIMA与其他模型(如GARCH)结合使用

结语

本文详细介绍了在Google Cloud AI金融训练项目中构建ARIMA模型的完整流程。虽然我们的初步模型分析效果有限,但通过参数调优和模型改进,可以显著提升分析精度。ARIMA模型在金融时间序列分析中仍具有重要价值,特别是在理解数据结构和趋势分析方面。

training-data-analyst Labs and demos for courses for GCP Training (http://cloud.google.com/training). training-data-analyst 项目地址: https://gitcode.com/gh_mirrors/tr/training-data-analyst

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

俞毓滢

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值