SARIMA模型基于季节性ARIMA(SARIMA)模型的时间序列预测 Matlab语言 1.时间序列单列预测,可预测未来值,输出样本以外的多步预测结果,注释清晰,如图3所示,完全满足您的需求~ 2.数据要求要有周期性,样本量不能少于10个, 可以出残差分布图、ACF和PACF图,用于检验残差的相关和偏自相关,以及QQ图 3.附赠示例Excel时间序列数据,如图4所示替换Excel数据即可用,注释清晰,适合新手小白运行main一键出图
<咱直接上干货,不整虚的>
最近在折腾时间序列预测,发现Matlab里的SARIMA模型真是宝藏工具。特别是当数据有明显周期性时,比如月度销量、季度气温这种,用它做预测准得离谱。今天手把手教你怎么用Matlab玩转SARIMA,附带全套诊断图,小白也能立马上手。
先看实战效果(图3):蓝色是原始数据,红色是预测部分。重点是预测结果自带置信区间,能直观看到预测的靠谱程度。下面这段代码直接喂数据就能跑:
% 导入数据(Excel格式,见图4示例) data = readtable('your_data.xlsx'); ts = data.Value; % 单列时间序列 % 拆分训练集和验证集 train = ts(1:end-6); test = ts(end-5:end); % 配置SARIMA参数 (p,d,q) × (P,D,Q,s) model = arima('Constant',0, 'D',1, 'Seasonality',12,... 'MALags',1, 'SMALags',12); % 季节周期设为12 % 模型拟合 [fit,~,logL] = estimate(model, train, 'Display','off'); % 预测未来6步 [ypred, yci] = forecast(fit, 6, 'Y0', train); % 可视化输出 plot(ts, 'b'); hold on; plot(length(train)+1:length(ts), ypred, 'r--', 'LineWidth',2); plot(length(train)+1:length(ts), yci, 'k:');代码里有个关键点:Seasonality参数必须和数据的周期匹配。比如月度数据年周期就设12,季度数据设4。不知道怎么定周期?用findpeaks(autocorr(ts))找自相关峰值的位置。
残差检验三件套(ACF/PACF/QQ图)才是模型诊断的灵魂。加上这几行代码:
res = infer(fit, train); % 获取残差 % 残差分布直方图 subplot(2,2,1) histfit(res) title('残差分布') % ACF/PACF subplot(2,2,2) autocorr(res) subplot(2,2,3) parcorr(res) % QQ图 subplot(2,2,4) qqplot(res)重点看ACF/PACF里有没有显著超出置信区间的尖峰。理想情况下残差应该像白噪声——所有滞后阶数的相关性都不显著。QQ图要是近似直线,说明残差符合正态分布假设。
避坑指南:
- 样本量至少10个周期以上,否则季节差分(D参数)会跪
- 遇到报错"非平稳",先做一阶差分:
dts = diff(ts); - 预测结果出现迷之波动?检查季节阶数Q是否过大
最后给新手的福利:示例数据里故意加了缺失值和异常点,运行时会自动处理。替换数据时保持时间列在A列,数值列在B列,时间间隔要等长。点击main.m直接出图,连调试都不用。
<全文完,不写总结,就是这么任性>