赞
踩
在深度学习中,有很多模型可以做,比如RNN,LSTM等等有时间序列特征的模型。但是它们所需的训练数据比较大,比如之前在Matorcup大数据比赛的A题我使用了LSTM预测,训练数据有9个G。对于比较小的样本集,使用传统方法进行预测效果较好。
关注点:趋势、季节变化、序列相关性(自相关性):随机噪声
时间序列分析的核心就是挖掘该时间序列中的自相关性
平稳性:经由样本时间序列得到的拟合曲线,未来一段时间内仍能顺着现有形态的“惯性”延续下去
平稳性要求序列的均值和方差不发生明显变化
(1)一个随机时间序列可以通过一个自回归移动平均模型来表示,即该序列可以由其自身的过去或滞后值以及随机扰动项来解释。
(2)如果该序列是平稳的,即它的行为并不会随着时间的推移而变化,那么我们就可以通过该序列过去的行为来预测未来。
**严平稳:**分布不随时间的改变而改变
期望始终为0,方差为1
**宽平稳:**期望与相关系数(依赖性)不变
未来某时刻的t值Xt就要依赖于它的过去信息,所以需要依赖性。
序列的统计特性不随时间的平移而变化,即均值和协方差不随时间的平移而变化
建模比赛中一般要求宽平稳
当序列不平稳时:使用差分法
自回归有序的随机变量序列与其自身相比较,自相关函数反映了同一序列在不同时序的取值之间的相关性
其中k代表滞后期数,如果k=2,则代表yt和yt-2
偏自相关函数PACF描述的是在给定中间观测值的条件下,时间序列观测值预期过去的观测值之间的线性相关性。
拖尾指序列以指数率单调递减或震荡衰减,而截尾指序列从某个时点变得非常小:
(1)什么是平稳序列?
如果时间序列在某一常数附件波动且波动范围有限,即具有常数均值和常数方差,并且延迟k期的序列变量的自协方差和自相关系数是相等的,则称该序列为平稳序列。
(2)检验平稳性
方法一:图检验
时序图检验:在某一常数附近波动且波动范围有限。
自相关图检验:平稳序列具有短期相关性,但随着延迟期数k的增加,自相关系数会快速衰减趋向于零。
方法二:单位根检验
不存在单位根即是平稳序列。
框架
一、导入数据
二、原始序列的检验
三、一阶差分序列的检验
四、定阶(参数调优)
五、建模与预测
读取xls文件使用的函数:xlsread
%% 1.导入数据
close all
clear all
%load Data_EquityIdx
len = 1200;%预测步长
data=xlsread('arima_data.xls');
plot(data)
adftest函数:1:平稳,0:不平稳
kpsstest函数:0:平稳,1:不平稳
%% 2.平稳性检验
% 原数据
y_h_adf = adftest(data)
y_h_kpss = kpsstest(data)
% 一阶差分,结果平稳。如果依旧不平稳的话,再次求差分,直至通过检验
Yd1 = diff(data);
yd1_h_adf = adftest(Yd1)
yd1_h_kpss = kpsstest(Yd1)
Y = diff(data);
结果:
y_h_adf = logical 0 y_h_kpss = logical 1 做完一阶差分后的平稳性检验 yd1_h_adf = logical 1 yd1_h_kpss = logical 0
所以阶数为1阶,所以 ARIMA(p,d,q)中的d = 1
此案例省略白噪声检验,显然销量与时间有关系。
模型阶数的确定方法主要包括两种:(1)ACF和PACF法。(2)基于准则的确定法
% ACF和PACF法,确定阶数
figure
autocorr(Y)
figure
parcorr(Y)
可以看出自相关截尾,偏自相关拖尾
人工识图判断阶数:观察几阶过后落入置信区间
AR阶数可以取1阶或者二阶,MA阶数可以取0阶
那么ARIMA(p,d,q) = ARIMA(0,1,1)
对于我们关注的ARMA(p,q),通俗地说,PACF最后一个在蓝线外(即阈值外)的Lag值就是p值;ACF最后一个在蓝线外(即阈值外)的Lag值就是q值。
首先需要确定AR和MA阶数的上限,然后调用函数
[AR阶数,MA阶数] = ARMA_Order_Select(序列,最大AR阶数,最大MA阶数,差分阶数)
% 通过AIC,BIC等准则暴力选定阶数
max_ar = 2; %最大不超过样本数/10
max_ma = 2;
[AR_Order,MA_Order] = ARMA_Order_Select(Y,max_ar,max_ma,1);
计算结果为0和2
为了确保确定的阶数合适,还需要进行残差检验。残差即原始信号减掉模型拟合出的信号后的残余信号。如果残差是随机正态分布的、不自相关的,这说明残差是一段白噪声信号,也就说明有用的信号已经都被提取到ARMA模型中了。
残差(residual)是模型的拟合值(fitted value)与实际观测值之差。
残差应该看起来像白噪声。
关于残差的重要假设:
1.残差无自相关性:自相关图应该是截尾的
2.残差均值为0:直方图关于0对称
此外,对于计算预测置信区间来说需要用到的性质:
1.残差方差恒定
2.残差为正态分布
D-W检验
德宾-沃森检验,简称D-W检验,是目前检验自相关性最常用的方法,但它只适用于检验一阶自相关性。 因为自相关系数ρ的值介于-1和1之间,所以 0≤DW≤4。
DW=O < => ρ=1 存在正自相关性
DW=4 <=> ρ=-1 存在负自相关性
DW=2 <=> ρ=0 不存在(一阶)自相关性
代码:
printf(‘D-W检验的结果为:',sm.stats.durbin_watson(resid.values))
D-W检验的结果为: 1.95
解读:不存在一阶自相关
%% 4.残差检验 Mdl = arima(AR_Order, 1, MA_Order); %第二个变量值为1,即一阶差分 EstMdl = estimate(Mdl,data); [res,~,logL] = infer(EstMdl,data); %res即残差 stdr = res/sqrt(EstMdl.Variance); figure('Name','残差检验') subplot(2,3,1) plot(stdr) title('Standardized Residuals') subplot(2,3,2) histogram(stdr,10) title('Standardized Residuals') subplot(2,3,3) autocorr(stdr) subplot(2,3,4) parcorr(stdr) subplot(2,3,5) qqplot(stdr) % Durbin-Watson 统计是计量经济学分析中最常用的自相关度量 diffRes0 = diff(res); SSE0 = res'*res; DW0 = (diffRes0'*diffRes0)/SSE0 % Durbin-Watson statistic,该值接近2,则可以认为序列不存在一阶相关性。
DW0 =
1.9592
Standardized Residuals是查看残差是否接近正态分布,理想的残差要接近正态分布;
ACF和PACF检验残差的自相关和偏自相关,理想的结果应该在图中不存在超出蓝线的点;
最后一张QQ图是检验残差是否接近正太分布的,理想的结果中蓝点应该靠近红线。
设定步长:step = 5,预测5天
黑线为未来值的预测,红线为95%置信区间上下限。也就是说未来真实值有95%的概率落在这个范围内
%% 5.预测 step = 5; [forData,YMSE] = forecast(EstMdl,step,'Y0',data); %matlab2019写为[forData,YMSE] = forecast(EstMdl,step,data); lower = forData - 1.96*sqrt(YMSE); %95置信区间下限 upper = forData + 1.96*sqrt(YMSE); %95置信区间上限 figure() plot(data,'Color',[.7,.7,.7]); hold on h1 = 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。