找回密码
 会员注册
查看: 30|回复: 0

时间序列分析方法之--季节性自回归积分移动平均模型(SeasonalARIMA,SARIMA)原理及python代码

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64454
发表于 2024-9-12 13:31:13 | 显示全部楼层 |阅读模式
原理季节性自回归积分移动平均模型(SeasonalARIMA,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)的示例代码,利用statsmodels库进行建模和预测:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromstatsmodels.tsa.statespace.sarimaximportSARIMAXfromstatsmodels.tsa.stattoolsimportadfuller#生成样本数据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('SampleTimeSeriesDatawithSeasonality')plt.show()#检查数据平稳性result=adfuller(data_series)print('ADFStatistic:',result[0])print('p-value:',result[1])#差分处理使数据平稳ifresult[1]>0.05:data_series_diff=data_series.diff().dropna()result_diff=adfuller(data_series_diff)print('DifferencedADFStatistic:',result_diff[0])print('Differencedp-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)+12predictions=model.predict(start=pred_start,end=pred_end,dynamic=False)#可视化结果plt.figure(figsize=(12,6))plt.plot(data_series,label='OriginalData')plt.plot(predictions,label='Predictions',color='red')plt.legend()plt.title('SeasonalAutoregressiveIntegratedMovingAverageModel(SARIMA)')plt.show()在上述代码中:我们首先生成了一些带有季节性成分的样本数据,并将其创建为一个Pandas系列对象。使用adfuller函数检查数据的平稳性。如果数据不是平稳的,可以通过差分处理使其平稳。使用SARIMAX类拟合SARIMA模型,并打印模型摘要。注意,这里我们指定了SARIMA(p,d,q)(P,D,Q,m)模型的阶数。使用拟合好的模型进行预测,并将预测结果与原始数据进行可视化。结论季节性自回归积分移动平均模型(SARIMA)是处理具有季节性模式的时间序列数据的一种有效方法。通过结合自回归、差分、移动平均和季节性成分,SARIMA模型可以捕捉时间序列中的复杂动态特征,特别是季节性变化。SARIMA模型适用于具有季节性模式的时间序列数据,并且在短期和中期预测中表现良好。通过选择合适的模型阶数和季节周期,可以显著提高预测的准确性。在实践中,结合数据的具体特征和目标需求,调整模型参数以获得更好的预测效果。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 14:08 , Processed in 1.880604 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表