【MATLAB第82期】基于MATLAB的季节性差分自回归滑动平均模型SARIMA时间序列预测模型含预测未来

本文主要是介绍【MATLAB第82期】基于MATLAB的季节性差分自回归滑动平均模型SARIMA时间序列预测模型含预测未来,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【MATLAB第82期】基于MATLAB的季节性差分自回归滑动平均模型SARIMA时间序列预测模型含预测未来

一、模型介绍

1、模型简介

季节性差分自回归移动平均模型(Seasonal Autoregressive Integrated Moving Average Model, SARIMA),又称为周期性差分自回归移动平均模型,是时间序列预测常用的分析方法之一,常应用于包含趋势和季节性的单变量数据的预测。SARIMA对于时间序列数据的季节性变动等周期性属性具有较高的敏感性。

2、模型参数

SARIMA结构参数有七个:(p,d,q) (P,D,Q,s)

1、季节性与非季节性差分数
d:代表时序数据需要进行几阶差分化,才是稳定的,也叫Integrated项。使用SARIMA模型要求数据平稳。SARIMA的差分项有两个,分别是季节性差分D与非季节性差分d。通常季节性差分经过一次即可,非季节性差分通常在0~3之间。确定非季节性差分数d从0至3循环,平稳后停止,当检验模型参数时d=1时数据已经平稳。

D: 周期性差分阶数。季节性差分通常在0~3之间。确定季节性差分数D从0至3循环,平稳后停止,当检验模型参数时D=1时数据已经平稳。

2、确定SARIMA模型阶数
这个步骤中需要确定的阶数有四个:AR阶数p,MA阶数q,SAR阶数P,SMA阶数Q。用基于AICBIC准则的方法定阶。
p:代表预测模型中采用的时序数据本身的滞后数(lags) ,也叫做AR/Auto-Regressive项。p通常在1~3之间,通过循环可得p=2时,AICBIC值最小。
q:代表预测模型中采用的预测误差的滞后数(lags),也叫做MA/Moving Average项。q通常在1~3之间,通过循环可得q=1时,AICBIC值最小。
P: 周期性自回归阶数。P通常在1~2之间,通过循环可得P=2时,AICBIC值最小。
Q: 周期性移动平均阶数。Q通常在1~2之间,通过循环可得Q=1时,AICBIC值最小。

3、确定周期时间间隔
s: 周期时间间隔。 过对现有数据集的观察,案例数据在3年尺度上存在一定的周期性,可以认为既定的年份的数据与其前一年的数据(也即前36个月的数据)之间存在较强的相关性,故选取36为周期时间间隔。

4、残差检测
为了确保确定的阶数合适,还需要进行残差检验。残差即原始信号减掉模型拟合出的信号后的残余信号。如果残差是随机正态分布的、不自相关的,这说明残差是一段白噪声信号,也就说明有用的信号已经都被提取到模型中了
在这里插入图片描述
上图为残差检验的结果图。Standardized Residuals是查看残差是否接近正态分布,理想的残差要接近正态分布;ACF和PACF检验残差的自相关和偏自相关,理想的结果应该在图中不存在超出蓝线的点;最后一张QQ图是检验残差是否接近正太分布的,理想的结果中蓝点应该靠近红线。
除了上述图像检验方法,还可以通过Durbin-Watson对相关性进行检验:
Durbin-Watson 统计是计量经济学分析中最常用的自相关度量,该值接近2,则可以认为序列不存在一阶相关性。
运算结果为1.96,这个值越接近2越说明残差不存在一阶相关性。
上述检验可以证明,残差接近正态分布,且相互独立,可以认为SARIMA建模符合要求。

二、预测效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
表5 SARIMA训练集和测试集预测结果评价指标
样本 RMSE MSE MAE R2
训练集 2.101 4.4143 0.88828 0.93821
测试集 1.6282 2.6511 1.1039 0.97196

从评价指标数值表的角度看,SARIMA在销量预测上有较高的精度,测试所得的误差值较小,能深入挖掘长时间序列数据的深层规律。从对比LSTM图像的角度看,SARIMA对周期性波动性的挖掘较为深入,但对整体态势的预测上表现较LSTM差,对个别点的预测不够精确,缺乏对离散数值的关注。

三、部分代码展示

close all
clear all
%% 1.加载数据
xall= importdata('经营数据2.xlsx');%导入数据
time=xall.textdata;%时间数据
xnum = datenum(time(2:end,1)); % 将日期转为数值
data= xall.data(:,2);% 时间序列数据 data1=data;
addpath('funs');
S = 36; %季节性序列变化周期
step = 12;
% 通常P和Q不大于3
%% 2.确定季节性与非季节性差分数,D取默认值1,d从03循环,平稳后停止
for d = 0:3dY = filter(D,data)%对原数据进行差分运算  if(getStatAdfKpss(dY)) %数据平稳disp(['非季节性差分数为',num2str(d),',季节性差分数为1']);break;end
end
%% 3.确定阶数ARlags,MALags,SARLags,SMALags
max_ar = 3;    %ARlags上限
max_ma = 3;    %MALags上限
max_sar = 2;   %SARLags上限
max_sma = 2;   %SMALags上限

四、代码获取

私信后台回复“82期”以及根据要求回复指令即可获取下载链接。

这篇关于【MATLAB第82期】基于MATLAB的季节性差分自回归滑动平均模型SARIMA时间序列预测模型含预测未来的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/503514

相关文章

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序