三、季节性自回归积分滑动平均模型(SARIMA)
1. 原理
SARIMA 模型是 ARIMA 模型的扩展,用于处理具有季节性成分的时间序列。SARIMA 模型引入了季节性成分,通过增加季节性自回归(SAR)、季节性差分(I)和季节性移动平均(SMA)项来建模。
2. 核心公式
推导:
3. 优缺点
- 1)优点:
- 适用于处理具有明显季节性成分的时间序列。
- 可以同时建模季节性和非季节性成分。
- 2)缺点:
- 模型复杂度高,参数较多,调整较为困难。
- 需要确定季节性周期。
4. 适用场景
SARIMA 模型适用于具有季节性波动的时间序列数据,如月度销售数据、季节性气象数据等。
5. 核心案例代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.statespace.sarimax import SARIMAX
# 生成示例数据:季节性时间序列
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=120, freq='M')
seasonal_component = 10 + 10 * np.sin(np.linspace(0, 3 * np.pi, 120))
data = seasonal_component + np.random.randn(120) * 2 # 叠加噪声
# 创建DataFrame
df = pd.DataFrame(data, index=dates, columns=['Value'])
# 拟合SARIMA模型 (p=1, d=1, q=1, P=1, D=1, Q=1, s=12)
model = SARIMAX(df['Value'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
sarima_result = model.fit()
# 预测未来12个月
forecast = sarima_result.get_forecast(steps=12)
forecast_index = pd.date_range(df.index[-1] + pd.DateOffset(months=1), periods=12, freq='M')
forecast_values = forecast.predicted_mean
# 可视化
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['Value'], label='Observed', color='blue')
plt.plot(forecast_index, forecast_values, label='Forecast', color='orange', linestyle='--')
plt.fill_between(forecast_index,
forecast.conf_int().iloc[:, 0],
forecast.conf_int().iloc[:, 1],
color='#FFA07A', alpha=0.3) # 使用有效的颜色代码
plt.title('SARIMA Model Forecast')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.grid(True)
plt.show()
图中展示了一个具有季节性波动的时间序列数据(蓝色)和未来 12 个月的预测值(橙色虚线)。预测区间的置信区间用浅橙色阴影表示。SARIMA 模型能够有效捕捉时间序列中的季节性模式。