时间序列预测系列之ARIMA模型

1.模型介绍及适用性

1.1 移动平均模型(MA, Moving Average)

上文提到的AR模型,描述的是当前时刻的观测值 X t X_t Xt与过去时刻 X p , p + 1 , . . . , t X_{p,p+1,...,t} Xp,p+1,...,t的观测值之间的依赖关系

MA模型描述的则是当前时刻的数据与过去噪声的关系。严格定义上来讲:其模型的定义是基于白噪声序列的假设。白噪声是一种特殊的时间序列模型,每个时间点的数据都是独立且服从相同分布的,且具有常数的均值和方差。

MA模型的核心思想是使用一系列过去的白噪声(随机误差)观测值的线性组合来预测当前时刻的数据点。具体来说,MA(q)模型的数学表示如下:

X t = u + ε t + θ 1 ε t − 1 + θ 2 ε t − 2 + … + θ q ε t − q X_t=u+ε_t+\theta_1ε_{t−1}+\theta_2ε_{t−2}+…+\theta_qε_{t−q} Xt=u+εt+θ1εt1+θ2εt2++θqεtq

其中

  • X t X_t Xt 是当前时刻的时间序列值
  • μ 是均值
  • ε t ε_t εt 是白噪声随机误差项(实际计算中即为残差值)
  • θ 1 , θ 2 , … , θ q θ_1,θ_2,…,θ_q θ1,θ2,,θq 是模型的参数,表示过去q个时刻的白噪声误差对当前时刻的影响

小结

  • AR 模型描述了当前时刻的观测值与过去时刻的观测值之间的依赖关系,它用自回归参数表示这种关系。
  • MA模型描述了当前时刻的观测值与过去时刻的白噪声误差项之间的依赖关系,它用移动平均参数表示这种关系。
  • 需要注意的是,MA模型假设数据点之间没有自回归(Autoregressive)的关系,而是仅依赖于过去时刻的白噪声误差项。因此,MA模型通常用于描述时间序列中的短期波动性和随机性。即尽管仍需数据保持平稳,但允许序列在短期内可能会受到随机因素的影响而产生的波动
  • AR 和 MA模型通常结合在一起,形成ARMA模型,以更全面地建模时间序列数据。

1.2 自回归移动平均模型(ARMA, Autoregressive Moving Average Model)

ARMA集成了自回归(AR)和移动平均(MA)模型,用于描述时间序列数据中的依赖关系和随机性。

ARMA 模型的一般形式如下:
X t = c + ϕ 1 X t − 1 + ϕ 2 X t − 2 + … + ϕ p X t − p + ε t − θ 1 ε t − 1 − θ 2 ε t − 2 − … − θ q ε t − q Xt=c+ϕ_1X_{t−1}+ϕ_2X_{t−2}+…+ϕ_pX_{t−p}+ε_t−θ1ε_{t−1}−θ_2ε_{t−2}−…−θ_qε_{t−q} Xt=c+ϕ1Xt1+ϕ2Xt2++ϕpXtp+εtθ1εt1θ2εt2θqεtq
其中:

  • Xt 是当前时刻的时间序列值。
  • c 是常数项。
  • ϕ 1 , ϕ 2 , … , ϕ p ϕ_1,ϕ_2,…,ϕ_p ϕ1,ϕ2,,ϕp 是自回归参数,表示当前时刻的观测值与过去 p 个时刻的观测值之间的依赖关系。
  • εt 是白噪声随机误差项。
  • θ 1 , θ 2 , … , θ q θ_1,θ_2,…,θ_q θ1,θ2,,θq 是移动平均参数,表示当前时刻的观测值与过去 q 个时刻的白噪声误差项之间的关系。
  • p 是自回归阶数,q 是移动平均阶数。

小结

  • ARMA结合了两种模型的优缺点, 适用于捕捉时间序列中的线性依赖关系和随机性, 但它仍然是一种线性模型,并且仍受到平稳时间序列数据的限制
  • ARMA主要适用于拟合较高阶模型

1.3 自回归差分移动平均模型(ARIMA, Autoregressive Integrated Moving Average Model)

为了解决ARMA模型的受平稳数据的限制, 集成了差分(I)操作(差分可使时间序列数据变得平稳), 产生了ARIMA模型, ARIMA 模型描述和ARMA一致

小结

  • ARIMA 可用于非平稳数据, 捕捉时间序列数据中的趋势和季节性, 但仍是一种线性模型
  • ARIMA 模型通常具有三个参数:p(自回归阶数)、d(差分阶数)、q(移动平均阶数),通常表示为ARIMA(p,d,q)

2.实现案例

2.1 模拟数据

import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt

# 创建一个示例的具有季节性的气象T2M数据
# 假设你已经有一个包含日期和T2M值的DataFrame
# 日期应该是时间戳格式
# 你需要根据你的实际数据来替换这部分

# 创建日期范围
date_rng = pd.date_range(start='2010-01-01', end='2023-12-31', freq='D')

# 创建一个示例的DataFrame
data = {
    'Date': date_rng,
    'T2M': np.sin(2 * np.pi * date_rng.dayofyear / 365) * 10 + np.random.randn(len(date_rng))
}

df = pd.DataFrame(data)
df.set_index('Date', inplace=True)

# 使用季节分解模型
result = sm.tsa.seasonal_decompose(df['T2M'], model='additive', period=365)

# 绘制原始数据、趋势、季节和残差
plt.figure(figsize=(12, 8))
plt.subplot(411)
plt.plot(df['T2M'], label='Original')
plt.legend(loc='best')
plt.subplot(412)
plt.plot(result.trend, label='Trend')
plt.legend(loc='best')
plt.subplot(413)
plt.plot(result.seasonal, label='Seasonal')
plt.legend(loc='best')
plt.subplot(414)
plt.plot(result.resid, label='Residual')
plt.legend(loc='best')
plt.tight_layout()

在这里插入图片描述

2.2 拟合模型

# 进行气象T2M的年周期性预测
# 在这里,你可以根据需要使用合适的时间序列预测模型来预测T2M的年周期性
# 比如使用ARIMA、SARIMA或Prophet等模型进行预测
# 以下是一个简单的ARIMA模型示例:

# 拆分数据集为训练集和测试集
train_size = int(len(df) * 0.8)
train, test = df[:train_size], df[train_size:]

# 训练ARIMA模型
model = sm.tsa.ARIMA(train['T2M'], order=(2, 0, 3))
model_fit = model.fit()
print(model_fit.summary())

## 进行预测
predictions = model_fit.predict(start=len(train), end=len(train) + len(test) - 1, typ='levels')

# 绘制预测结果
plt.figure(figsize=(12, 4))
plt.plot(train['T2M'], label='Training Data')
plt.plot(test['T2M'], label='Test Data')
plt.plot(predictions, label='ARIMA Predictions')
plt.legend(loc='best')
plt.show()

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学海一叶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值