季节性自回归积分移动平均模型(SARIMA)原理详解与Python实战应用
原理
季节性自回归积分移动平均模型(Seasonal ARIMA, SARIMA)是时间序列分析中处理季节性数据的一种重要方法。SARIMA 模型在 ARIMA 模型的基础上,增加了处理季节性成分的部分。SARIMA 模型的常见表示形式为 SARIMA(p, d, q)(P, D, Q, m),其中:
SARIMA 模型的数学表达式为:
其中:
通过这种表示形式,SARIMA 模型可以同时处理时间序列中的非季节性和季节性成分,使得模型更适用于有明显季节性变化的时间序列数据。
适用情况
SARIMA 模型适用于以下情况:
- 具有季节性模式:SARIMA 模型特别适用于具有季节性模式的时间序列数据。季节性模式是指时间序列在特定时间间隔内呈现出周期性变化。
- 短期和中期预测:SARIMA 模型既可以用于短期预测,也可以用于中期预测,特别是在处理季节性数据时效果显著。
- 非平稳时间序列:与 ARIMA 模型类似,SARIMA 模型也适用于非平稳时间序列数据,通过差分处理可以将其转化为平稳时间序列。
Python 示例代码
以下是使用 Python 实现季节性自回归积分移动平均模型(SARIMA)的示例代码,利用 statsmodels
库进行建模和预测:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.stattools import adfuller
# 生成样本数据
np.random.seed(0)
data = np.random.randn(120).cumsum() + 10 * np.sin(np.linspace(0, 24, 120))
# 创建数据序列
data_series = pd.Series(data, index=pd.date_range(start='2020-01', periods=120, freq='M'))
# 可视化数据
plt.figure(figsize=(12, 6))
plt.plot(data_series)
plt.title('Sample Time Series Data with Seasonality')
plt.show()
# 检查数据平稳性
result = adfuller(data_series)
print('ADF Statistic:', result[0])
print('p-value:', result[1])
# 差分处理使数据平稳
if result[1] > 0.05:
data_series_diff = data_series.diff().dropna()
result_diff = adfuller(data_series_diff)
print('Differenced ADF Statistic:', result_diff[0])
print('Differenced p-value:', result_diff[1])
# 应用SARIMA模型
p = 1 # 非季节性自回归阶数
d = 1 # 非季节性差分次数
q = 1 # 非季节性移动平均阶数
P = 1 # 季节性自回归阶数
D = 1 # 季节性差分次数
Q = 1 # 季节性移动平均阶数
m = 12 # 季节周期
model = SARIMAX(data_series, order=(p, d, q), seasonal_order=(P, D, Q, m)).fit()
print(model.summary())
# 进行预测
pred_start = len(data_series)
pred_end = len(data_series) + 12
predictions = model.predict(start=pred_start, end=pred_end, dynamic=False)
# 可视化结果
plt.figure(figsize=(12, 6))
plt.plot(data_series, label='Original Data')
plt.plot(predictions, label='Predictions', color='red')
plt.legend()
plt.title('Seasonal Autoregressive Integrated Moving Average Model (SARIMA)')
plt.show()
在上述代码中:
- 我们首先生成了一些带有季节性成分的样本数据,并将其创建为一个 Pandas 系列对象。
- 使用
adfuller
函数检查数据的平稳性。如果数据不是平稳的,可以通过差分处理使其平稳。 - 使用
SARIMAX
类拟合 SARIMA 模型,并打印模型摘要。注意,这里我们指定了 SARIMA(p, d, q)(P, D, Q, m) 模型的阶数。 - 使用拟合好的模型进行预测,并将预测结果与原始数据进行可视化。
结论
季节性自回归积分移动平均模型(SARIMA)是处理具有季节性模式的时间序列数据的一种有效方法。通过结合自回归、差分、移动平均和季节性成分,SARIMA 模型可以捕捉时间序列中的复杂动态特征,特别是季节性变化。SARIMA 模型适用于具有季节性模式的时间序列数据,并且在短期和中期预测中表现良好。通过选择合适的模型阶数和季节周期,可以显著提高预测的准确性。在实践中,结合数据的具体特征和目标需求,调整模型参数以获得更好的预测效果。
作者:wodertianna