通俗易懂!利用SARIMA做季节性时间序列预测全流程与实现代码

您所在的位置:网站首页 时间序列模型arima步骤代码 通俗易懂!利用SARIMA做季节性时间序列预测全流程与实现代码

通俗易懂!利用SARIMA做季节性时间序列预测全流程与实现代码

2024-07-12 14:52| 来源: 网络整理| 查看: 265

目录

SARIMA模型

那么,SARIMA相比于ARIMA有什么区别和优势呢?

SARIMA公式简单回顾

SARIMA模型使用要求

SARIMA实现全流程讲解与代码

1.加载数据与参数设置(Excel格式输入即可!)

2.确定季节性与非季节性差分数

3.确定SARIMA模型阶数(可自动确定)

4.残差检验

5.预测

6.绘制结果图

完整代码

今天为大家带来一期利用SARIMA做季节性时间序列预测全流程与实现代码,适合作为创新点!用于各类时间序列预测!​也可用作对比方法!具体代码已放在最后,需要代码的朋友可直接拉到最后~

SARIMA模型

是一种用于时间序列预测的统计模型,全称为“季节性自回归积分滑动平均模型”(Seasonal Autoregressive Integrated Moving Average Model)。为了更容易理解,我们可以将这个模型名称拆解来看:

季节性(Seasonal): 这一部分考虑了数据随时间变化可能出现的周期性模式,比如说每年的某个季节销量上升或下降这样的季节性规律。

自回归(Autoregressive, AR): 这表示模型会用前一段时间内的数据来预测未来的值。想象一下,如果你在观察股市,你可能会发现今天的股价与过去几天的股价有关。

积分(Integrated, I): 这部分涉及到将时间序列转换为稳定的形式,使得序列的统计特性(如均值)不随时间改变。这通常通过差分完成,也就是计算连续观测之间的变化量。

滑动平均(Moving Average, MA): 这表示模型利用时间序列过去误差的平均值来做预测。这可以看作是一种平滑技术,有助于消除预测中的随机波动。

将这四部分结合起来,SARIMA模型就能够同时处理时间序列数据的季节性变化、趋势和随机波动。

那么,SARIMA相比于ARIMA有什么区别和优势呢?

ARIMA模型:这个模型像是一个有三个魔法镜的预言家。每个镜子都有它的特殊功能:

1.第一个镜子(自回归)可以让你看到过去的天气情况,帮你发现昨天和今天天气之间的联系。

2.第二个镜子(积分)是一个调整器,它可以调整你看到的信息,确保你不会因为时间的长短而迷失方向,让预测更加稳定。

3.第三个镜子(滑动平均)则可以展示过去预测的错误,帮你从以前的错误中学习,使你的预测更加准确。

SARIMA模型:这个模型是ARIMA的升级版,除了有ARIMA的三个魔法镜之外,它还有一个特别的季节性镜子。这个镜子让你能够看到像夏天经常下雨这样的季节性规律,帮助你更好地预测那些每年这个时候会发生的事情。

简单来说,ARIMA是一个很棒的预测工具,适用于很多情况,但如果你要预测的事情中有明显的季节性变化(比如夏天比冬天更热),SARIMA模型就能提供额外的帮助。它就像是一个特别为处理季节性变化而加装了一个超级镜子的ARIMA模型。

所以,如果你只需要基本的预测,ARIMA就足够了;但如果你需要考虑到一年中不同时间的特殊情况,SARIMA会是更好的选择。

SARIMA公式简单回顾

SARIMA 模型是在 ARIMA 模型的基础上增加了3个超参数P、D、Q,以及一个额外的季节性周期参数S,能够采用 Box-Jenkins 方法的模型识别、估计和预测程序,因此方便随着更多历史数据的获得而对模型进行实时调整,其一般表达式为:

其中,P为季节自回归的最大滞后阶数,Q为周期性移动平均算子的最大滞后阶数,D 是季节性差分次数。当P=D=Q=0时,SARIMA模型就相当于ARIMA模型。

SARIMA模型使用要求

数据要求有周期性,样本量不能少于10个(越多越好,也跟周期性和需要预测未来的步长有关)​

SARIMA实现全流程讲解与代码

下图为1949年到1960年每月国际航空公司的乘客人数。从中可以看到明显的季节性,该周期为12个月。

1.加载数据与参数设置(Excel格式输入即可!)

Excel数据格式输入,只需输入一列数据即可~非常方便

%% 初始数据导入数据,训练样本、测试样本处理data = xlsread('data.xlsx');S = 12; %季节性序列变化周期step = 48;  %预测步长 2.确定季节性与非季节性差分数

与ARIMA模型一样,使用SARIMA模型也要求数据平稳。不同的是SARIMA的差分项有两个,分别是季节性差分与非季节性差分。通常季节性差分经过一次即可,非季节性差分通常在0~3之间。

使用下述代码将原始序列进行差分计算,需要注意差分后的序列长度将会缩短。

for d = 0:3 D1 = LagOp({1 -1},'Lags',[0,d]); %非季节差分项的滞后算子 D12 = LagOp({1 -1},'Lags',[0,1*S]); %季节差分项的滞后算子 D = D1*D12; %相乘 dY = filter(D,data); %对原数据进行差分运算 if(getStatAdfKpss(dY)) %数据平稳 disp(['非季节性差分数为',num2str(d),',季节性差分数为1']); break; endend 3.确定SARIMA模型阶数(可自动确定)

用简单粗暴的暴力定阶方法,确定AR阶数p,MA阶数q,SAR阶数P,SMA阶数Q:

4.残差检验

为了确保确定的阶数合适,还需要进行残差检验。残差即原始信号减掉模型拟合出的信号后的残余信号。如果残差是随机正态分布的、不自相关的,这说明残差是一段白噪声信号,也就说明有用的信号已经都被提取到ARMA模型中了。

Standardized Residuals是查看残差是否接近正态分布,理想的残差要接近正态分布;

ACF和PACF检验残差的自相关和偏自相关,理想的结果应该在图中不存在超出蓝线的点;

最后一张QQ图是检验残差是否接近正太分布的,理想的结果中蓝点应该靠近红线。

5.预测

进行预测,并输出95%置信区间!

6.绘制结果图

最后绘制结果图,大功告成!可以看到预测效果还是非常不错的,能够反映未来的趋势~

figure('Visible','on')plot(data,'Color',[.7,.7,.7]);hold onh1 = plot(length(data):length(data)+step,[data(end);lower],'r:','LineWidth',2);plot(length(data):length(data)+step,[data(end);upper],'r:','LineWidth',2)h2 = plot(length(data):length(data)+step,[data(end);forData],'k','LineWidth',2);legend([h1 h2],'95% 置信区间','预测值',... 'Location','NorthWest')title('Forecast')hold off 完整代码:

点击下方小卡片,后台回复关键字,不区分大小写:

SARIMA

其他更多需求或想要的代码均可点击下方小卡片后后台私信,看到后会秒回~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3