https://blog.csdn.net/BigData_Mining/article/details/81092750
一、概述
1.时间序列的平稳性
如果一个时间序列的统计特征不随时间推移而变化,即满足:
1.对于任意的时间t,其均值恒为一常数;
2.对于任意的时间t和s,其自协方差和自相关系数只依赖于时间间隔t-s,而与t和s的起止点无关。
这样的时间序列被称为平稳时间序列。也可以认为,如果一个时间序列无明显的上升或下降趋势,各观察值围绕其均值上下波动,这个均值相对于时间来说是一个常数,那么时间序列为平稳序列(弱平稳(Weak stationarity))。
事实上,有两种关于平稳的定义,还有一种强平稳过程:
强平稳过程(Strict stationarity):对于所有可能的n,所有可能的t1,t2,…,tnt1,t2,…,tn,如果所有可能的Zt1,Zt2,…,ZtnZt1,Zt2,…,Ztn的联合分布与Zt1−k,Zt2−k,…,Ztn−kZt1−k,Zt2−k,…,Ztn−k相同时,称其为强平稳。
两种平稳过程并没有包含关系,弱平稳不一定是强平稳,强平稳也不一定是弱平稳。强平稳是事实上的平稳,而弱平稳是统计量在观测意义上的平稳(均值、方差)。
平稳的基本思想是:时间序列的行为并不随时间改变。平稳性刻画的是时间序列的统计性质关于时间平移的不变性。我们研究时间序列很重要的一个出发点 是希望通过时间序列的历史数据来得到其未来的一些预测,换言之,我们希望时间序列在历史数据上的一些性质,在将来保持不变,这就是时间平移的不变性。反之,如果时间序列不是平稳的,由历史数据得到的统计性质对未来预测毫无意义。
2.时间序列的组成
每个时间序列的主要组成部分:
- 趋势
- 季节性
- 噪音
- 其他
趋势可以是线性或非线性的,可以是上升或者下降趋势;时间序列呈周期性变化,就叫季节性;时间序列采集过程中不可避免地存在一些干扰,称之为噪音;此外还有一些未知的成分,如异常值、丢失的数据等等。
二、时间序列的平滑处理
大部分时间序列都存在一个重要问题:存在噪音,也就是某个值的大小随机变化。消除噪音或至少减小它的影响对时序分析很重要,我们必须寻找让信号变平滑的方法。移动平均法(moving average)是我们所知道的最简单的平滑算法。
时序检测去除噪音的方法有两种,移动平均法(MA)和指数平滑,ARIMA采用的就是移动平均MA
1.移动平均法
它的基本原理:对任意奇数个连续的点,将它们最中间的点的值替换为其他点的平均值,假设{xixi}表示数据点,位置i的平滑值为sisi,则有:
si=12k+1∑j=−kkxi+j
si=12k+1∑j=−kkxi+j
这个简单的方法存在很严重的问题,这和图像处理中的均值滤波是类似的(只不过这里是一维的),采用这样简单粗暴的平滑处理会导致数据变“模糊”,当一个尖峰进入平滑窗口时,当前的数据就会被这个尖峰突然扭曲,直到异常值离开平滑窗口。即因为噪音数据,原始数据丢失了细节。在图像处理中,我们采用高斯滤波来解决这一问题,我们的平滑窗口是带权值的,越靠近中心数据的权重越大,越靠近平滑窗口边缘的点权重越小。这里同样适用,我们通过使用加权移动平均法,公式如下:
si=∑j=−kkwjxi+j,其中∑j=−kkwj=1
si=∑j=−kkwjxi+j,其中∑j=−kkwj=1
这里的wjwj是权重因数。使用高斯函数来生成权重因数公式如下:
f(x,σ)=12πσ2−−−−√exp(−12(xσ)2)
f(x,σ)=12πσ2exp(−12(xσ)2)
参数σσ决定曲线的宽度,当x大于3.5σσ时函数值为0。因此f(x,1)可以用来生成9点的权重因数,只要取f(x,1)上[-4,-3,-2,-1,0,1,2,3,4]这几个位置的函数值即可。把σσ设为2就能得到15点的权重因数,即x为-7到+7之间的所有整数时的取值,以此类推。
移动平均法存在很多问题:
- 它们都太难计算了。每个点的计算都十分耗时,不能通过之前的计算结果推算出加权移动平均值。
- 移动平均值永远不可能应用于现有的数据集边缘的数据,因为它们的窗口是有限的。然而数据集边缘的变化通常都是我们最感兴趣的部分。
- 移动平均法不能应用于现有数据集的范围之外,因此它们对预测毫无用处。
2.指数平滑法(Holt-Winters)
指数平滑法(exponential smoothing)或Holt-Winters能够避免移动平均法带来的问题。指数平滑法有几种不同形式:一次指数平滑法针对没有趋势和季节性的序列,二次指数平滑法针对有趋势但没有季节性的序列,三次指数平滑法针对有趋势也有季节性的序列。“Holt-Winters”有时特指三次指数平滑法。
所有的指数平滑法都要更新上一时间步长的计算结果,并使用当前时间步长的数据中包含的新信息。它们通过”混合“新信息和旧信息来实现,而相关的新旧信息的权重由一个可调整的参数来控制。
2.1 一次指数平滑法
一次指数平滑法的递推关系如下:
si=axi+(1−α)si−1,其中0≤α≤1
si=axi+(1−α)si−1,其中0≤α≤1
其中,sisi是时间步长i上经过平滑后的值,xixi是这个时间步长上的实际数据。αα可以是0和1之间的任意值,它控制着新旧信息之间的平衡:当αα接近1,就只保留当前数据点;当αα接近0时,就只保留前面的平滑值(整个曲线都是平的)。这个递推关系式很眼熟,cpu_load就是这样计算的!我们展开它的递推关系式:
si=αxi+(1−α)si−1=αxi+(1−α)[αxi−1+(1−α)si−2]=αxi+(1−α)[αxi−1+(1−α)[αxi−2+(1−α)si−3]]=α[xi+(1−α)xi−1+(1−α)2xi−2+(1−α)3si−3]=…=α∑j=0i(1−α)jxi−j
si=αxi+(1−α)si−1=αxi+(1−α)[αxi−1+(1−α)si−2]=αxi+(1−α)[αxi−1+(1−α)[αxi−2+(1−α)si−3]]=α[xi+(1−α)xi−1+(1−α)2xi−2+(1−α)3si−3]=…=α∑j=0i(1−α)jxi−j
可以看出,在指数平滑法中,所有先前的观测值都对当前的平滑值产生了影响,但它们所起的作用随着参数αα的幂的增大而逐渐减小。那些相对较早的观测值所起的作用相对较小。从某种程度来说,指数平滑法就像是拥有无限记忆(平滑窗口足够大)且权值呈指数级递减的移动平均法。一次指数平滑所得的计算结果可以在数据集及范围之外进行扩展,因此也就可以用来进行预测。预测方式为:
xi+h=si
xi+h=si
sisi是最后一个已经算出来的值。
2.2 二次指数平滑法
一次指数平滑法适用于没有总体趋势的时间序列。如果用来处理有总体趋势的序列,平滑值将总是滞后于原始数据,除非αα的值接近1,但这样一来就没有平滑性可言。二次指数平滑法保留了趋势的详细信息,从而改正了这个缺点。即我们保留并更新两个量的状态:平滑后的信号和平滑后的趋势。公式如下:
siti=αxi+(1−α)(si−1+ti−1)=β(si−si−1)+(1−β)ti−1
si=αxi+(1−α)(si−1+ti−1)ti=β(si−si−1)+(1−β)ti−1
第二个等式描述了平滑后的趋势。当前趋势的未平滑”值“是当前平滑值和上一个平滑值的差;也就是说,当前趋势告诉我们在上一个时间步长里平滑信号改变了多少。要想使趋势平滑,我们用一次指数平滑法对趋势进行处理,并使用参数ββ。为获得平滑信号,我们像上次那样进行一次混合,但要同时考虑到上一个平滑信号及趋势。假设单个步长时间内保持着上一个趋势,那么第一个等式的最后那项就可以对当前平滑信号进行估计。
若要利用该计算结果进行预测,就取最后那个平滑值,然后每增加一个时间步长就在该平滑值上增加一次最后那个平滑趋势:
xi+h=si+hti
xi+h=si+hti
2.3 三次指数平滑法
为了描述季节性,我们在二次指数平滑法基础上再添加一个量。公式如下:
sitipi=α(xi−pi−k)+(1−α)(si−1+ti−1)=β(si−si−1)+(1−β)ti−1=γ(xi−si)+(1−γ)pi−k
si=α(xi−pi−k)+(1−α)(si−1+ti−1)ti=β(si−si−1)+(1−β)ti−1pi=γ(xi−si)+(1−γ)pi−k
其中,pipi是指”周期性“部分,kk是这个周期的长度。预测公式如下:
xi+h=si+hti+pi−k+h
xi+h=si+hti+pi−k+h
对于三次指数平滑法,我们必须初始化一个完整的”季节“的值。至于如何选择参数αα,ββ,γγ,一个比较笨拙但可行的方法是反复试验,定义一个误差,比如平均绝对误差(Mean Absolute Error,MAE)或平均平方误差(Mean Squared Error,MSE),设定几个参数的范围,然后找到范围内误差最小的那组参数值。
三、ARIMA
ARIMA模型是时间序列分析中应用最广泛的模型之一,ARIMA(p,d,q)由三个部分组成: - AR(p):AR是autoregressive的缩写,表示自回归模型。含义是当前时间点的值等于过去若干个时间点的回归——因为不依赖与别的解释变量,只依赖于自己过去的历史值,故称为自回归;如果依赖过去最近的p个历史值,称阶数为p,记为AR(p)模型。
xt=ϕ1xt−1+ϕ2xt−2+…+ϕpxt−p+εt
xt=ϕ1xt−1+ϕ2xt−2+…+ϕpxt−p+εt
其中εtεt是零均值的随机干扰序列. - I(d):I是integrated的缩写,含义是模型对时间序列进行差分。因为时间序列分析要求平稳性,不平稳的序列需要通过一定手段转化为平稳序列,一般采用的方法就是差分,d表示差分的阶数。
如果d=0:xt=xtxt=xt
如果d=1:xt=xt−xt−1xt=xt−xt−1
如果d=2:xt=(xt−xt−1)−(xt−1−xt−2)=xt−2xt−1+xt−2xt=(xt−xt−1)−(xt−1−xt−2)=xt−2xt−1+xt−2
以此类推。 - MA(q):移动平均模型,和上面的移动平均法不同,这里本质上还是回归,含义是当前时间点的值等于过去若干个时间点的预测误差的回归;预测误差=模型预测值-真实值;如果序列依赖过去最近的q个历史预测误差值,称阶数为q,即为MA(q)模型。
xt=μ+εt+θ1εt−1+…+θqεt−q
xt=μ+εt+θ1εt−1+…+θqεt−q
其中μμ是一个常量,θ1,…,θqθ1,…,θq是模型的参数,εt,εt−1,…,εt−qεt,εt−1,…,εt−q是预测误差。
1.ARMA模型
ARMA(p,q)包含了p个自回归项和q个移动平均项,可表示为:
Xt=μ+εt+∑i=1pϕiXt−i+∑j=1qθjεt−j
Xt=μ+εt+∑i=1pϕiXt−i+∑j=1qθjεt−j
AR(p)模型很好理解,一般而言,时间序列的变量具有时序上的相关性。比如说一列火车的速度,当时间间隔足够小时,上一个时间点速度如果慢,下一个时间点往往也很慢,或许你要称它为惯性,也没什么不可,这种内在的相关性,使得我们可以根据最近几个时间点的观测值来预测下一个时间点的值。
MA(q)有点难以理解,先提出结论吧,MA模型是无穷阶AR模型的等价表示。公式推导如下:
假设有一个特殊的无穷阶的AR模型:
Xt=εt+ϕXt−1−ϕ2Xt−2+ϕ3Xt−3−ϕ4Xt−4+…(1)
(1)Xt=εt+ϕXt−1−ϕ2Xt−2+ϕ3Xt−3−ϕ4Xt−4+…
将(1)中的t用t-1替代,得到:
Xt−1=εt−1+ϕXt−2−ϕ2Xt−3+ϕ3Xt−4−ϕ4Xt−5+…(2)
(2)Xt−1=εt−1+ϕXt−2−ϕ2Xt−3+ϕ3Xt−4−ϕ4Xt−5+…
将(2)的左右两边同乘以ϕϕ:
ϕXt−1=ϕεt−1+ϕ2Xt−2−ϕ3Xt−3+ϕ4Xt−4−ϕ5Xt−5+…(3)
(3)ϕXt−1=ϕεt−1+ϕ2Xt−2−ϕ3Xt−3+ϕ4Xt−4−ϕ5Xt−5+…
将(3)代入(1)得到:
Xt=εt+ϕεt−1(4)
(4)Xt=εt+ϕεt−1
式(4)就是MA(1),注意这里没有μμ,MA模型中可以分为不带μμ和带μμ两种情形。根据式(1)和(4)可以得到MA(1)相当于一个无穷阶的AR模型。这个例子很特殊,但是可以给我们一个启发,通过调整参数,无穷阶的AR模型可转换为相应的MA模型。同样的,对于任意的q,MA(q)均可以找到一个AR模型与之对应。因此我们可以得到,时间序列数据归根到底是可以统一用AR模型来表示的。之所以需要MA模型,是因为如果只有AR模型,那么一些时间序列可能需要很高的阶数来刻画。阶数p越大,待估参数越多,付出的代价越大,因此需要用低阶的MA模型来替换高阶的AR模型。
2.ARIMA模型
ARIMA模型是在ARMA模型的基础上加上差分,差分的作用上面说了,是为了得到平稳序列。一般来说,是先对序列进行差分运算,再用自相关图检验其平稳性,得到一个d阶的差分序列,然后对差分时间序列进行ARMA模型预测,再将预测值还原。
https://blog.csdn.net/kong1287988804/article/details/78776487
假设p=1,q=2,且进行了一阶差分后,序列平稳了,那么:
X^t−Xt−1=ϕ1(Xt−1−Xt−2)+θ1εt−1+θ2εt−2
X^t−Xt−1=ϕ1(Xt−1−Xt−2)+θ1εt−1+θ2εt−2
即:
X^t=Xt−1+ϕ1(Xt−1−Xt−2)+θ1εt−1+θ2εt−2
X^t=Xt−1+ϕ1(Xt−1−Xt−2)+θ1εt−1+θ2εt−2
其中,XtXt为预测值。ARIMA(p,d,q)模型可定义为:
(1−∑i=1pϕiLi)(1−L)dXt=(1+∑i=1qθiLi)εt
(1−∑i=1pϕiLi)(1−L)dXt=(1+∑i=1qθiLi)εt
其中L是滞后算子(Lag operator),d∈Z,d>0。∈Z,d>0。
ARIMA模型运用有一个较为通用的流程,如下所示:
1.根据时间序列的散点图、自相关函数和偏自相关函数图识别其平稳性。
2.对非平稳的时间序列数据进行平稳化处理。直到处理后的自相关函数和偏自相关函数的数值非显著非零。
3.根据所识别出来的特征建立相应的时间序列模型。平稳化处理后,若偏自相关函数是截尾的,而自相关函数是拖尾的,则建立AR模型;若偏自相关函数是拖尾的,而自相关函数是截尾的,则建立MA模型;若偏自相关函数和自相关函数均是拖尾的,则序列适合ARMA模型。
4.参数估计,检验是否具有统计意义。
5.假设检验,判断(诊断)残差序列是否为白噪声序列。
6.利用已通过检验的模型进行预测。
四:判断平稳性
https://blog.csdn.net/bi_hu_man_wu/article/details/64918870
五:非平稳序列的平稳化
(1)去除趋势(针对确定趋势)
思路:yt=Tt+xtyt=Tt+xt其中TtTt是趋势xtxt平稳,我们主要找到趋势,去掉便可。通常我们采用拟合趋势,得到趋势的表达式,若去掉后仍不平稳,则是拟合错误。(找寻趋势的部分可参见下面的趋势分析-拟合与平滑)
(2)差分
一步差分Δy=yt−yt−1=(I−B)ytΔy=yt−yt−1=(I−B)yt
s步差分Δsy=(I−Bs)ytΔsy=(I−Bs)yt
比如周数据,可以选择s=7,若一次差分后得到白噪声就没有意义了,这时可以选择分数差分。但差分会使的方差变大。
(3)变换
对于方差变化的序列,可以选择log()变换,去除指数趋势。
一般情况可以考虑box-cox变换。
六:案例
https://blog.csdn.net/Fredric_2014/article/details/85699116
https://blog.csdn.net/Fredric_2014/article/details/85340339
https://blog.csdn.net/weixin_41988628/article/details/83149849
七。讨论与分析
由于良好的统计特性,ARIMA模型是应用最广泛的时间序列模型,各种指数平滑模型都可以用ARIMA模型来实现。即通过Holter-winters建立的模型,用ARIMA同样可以得到。即便ARIMA非常灵活,可以建立各种时间序列模型(AR,MA,ARMA)但是ARIMA也有局限性,最主要的局限在于ARIMA只能建立线性的模型,而现实世界中纯线性模型往往不能令人满意