时间序列分析方法之 -- 季节性自回归积分移动平均模型(Seasonal ARIMA, SARIMA)原理及python代码
CSDN 2024-09-18 16:01:02 阅读 98
原理
季节性自回归积分移动平均模型(Seasonal ARIMA, SARIMA)是时间序列分析中处理季节性数据的一种重要方法。SARIMA 模型在 ARIMA 模型的基础上,增加了处理季节性成分的部分。SARIMA 模型的常见表示形式为 SARIMA(p, d, q)(P, D, Q, m),其中:
p:非季节性自回归(AR)阶数。d:非季节性差分(I)次数。q:非季节性移动平均(MA)阶数。P:季节性自回归(SAR)阶数。D:季节性差分(SI)次数。Q:季节性移动平均(SMA)阶数。m:季节周期的长度(如月份数据的 m=12,季度数据的 m=4)。
SARIMA 模型的数学表达式为:
其中:
和
是非季节性和季节性自回归系数。
和
是非季节性和季节性移动平均系数。B 是滞后算子。
是白噪声误差项。
通过这种表示形式,SARIMA 模型可以同时处理时间序列中的非季节性和季节性成分,使得模型更适用于有明显季节性变化的时间序列数据。
适用情况
SARIMA 模型适用于以下情况:
具有季节性模式:SARIMA 模型特别适用于具有季节性模式的时间序列数据。季节性模式是指时间序列在特定时间间隔内呈现出周期性变化。短期和中期预测:SARIMA 模型既可以用于短期预测,也可以用于中期预测,特别是在处理季节性数据时效果显著。非平稳时间序列:与 ARIMA 模型类似,SARIMA 模型也适用于非平稳时间序列数据,通过差分处理可以将其转化为平稳时间序列。
Python 示例代码
以下是使用 Python 实现季节性自回归积分移动平均模型(SARIMA)的示例代码,利用 <code>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'))code>
# 可视化数据
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')code>
plt.plot(predictions, label='Predictions', color='red')code>
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 模型适用于具有季节性模式的时间序列数据,并且在短期和中期预测中表现良好。通过选择合适的模型阶数和季节周期,可以显著提高预测的准确性。在实践中,结合数据的具体特征和目标需求,调整模型参数以获得更好的预测效果。
下一篇: 【Datawhale X 李宏毅苹果书 AI夏令营】Task1笔记
本文标签
SARIMA)原理及python代码 时间序列分析方法之 -- 季节性自回归积分移动平均模型(Seasonal ARIMA
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。