本文主要是介绍谈谈时间序列的平稳性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
时间序列分析中的许多方法,如ARMA、ARIMA、Granger因果检验等时序预测和分析方法,都需要时间序列具备平稳性。那么什么是时间序列的平稳性呢?什么序列是平稳的什么是非平稳的?最后再来思考一下为什么这么多时序分析方法都强调时间序列的平稳性呢?
一、平稳性的定义
时间序列的平稳性是指一组时间序列数据看起来平坦,各阶统计特征(如均值、方差、协方差…)不随时间的变化而变化。其数学定义又分为严平稳和宽平稳。
严平稳
给 定 随 机 过 程 X ( t ) , t ∈ T , 如 果 对 任 意 \small 给定随机过程 X(t),t \in T,如果对任意 给定随机过程X(t),t∈T,如果对任意
n ⩾ 1. t 1 , t 2 , . . , t n ∈ T 和 实 数 τ , \small n \geqslant 1. t_1,t_2,..,t_n \in T 和实数 \tau, n⩾1.t1,t2,..,tn∈T和实数τ,
当 t 1 + τ , t 2 + τ , . . . , t n + τ 时 , \small 当t_{1+\tau},t_{2+\tau},...,t_{n+\tau}时, 当t1+τ,t2+τ,...,tn+τ时,
随 机 向 量 ( X ( t 1 ) , X ( t 2 ) , . . . , X ( t n ) ) \small 随机向量(X(t_1),X(t_2),...,X(t_n)) 随机向量(X(t1),X(t2),...,X(tn))
与 ( X ( t 1 + τ ) , X ( t 2 + τ , . . . , X ( t n + τ ) ) ) \small 与(X(t_{1+\tau}),X(t_{2+\tau},...,X(t_{n+\tau}))) 与(X(t1+τ),X(t2+τ,...,X(tn+τ)))
有 相 同 的 联 合 分 布 函 数 , 即 \small 有相同的联合分布函数,即 有相同的联合分布函数,即
F t 1 , t 2 , . . . t n ( x 1 , x 2 , . . . , x m ) = \small F_{t_1,t_2,...t_n}(x_1,x_2,...,x_m)= Ft1,t2,...tn(x1,x2,...,xm)=
F t 1 + τ , t 2 + τ , . . . t n + τ ( x 1 , x 2 , . . . , x m ) \small F_{t_{1+\tau},t_{2+\tau},...t_{n+\tau}}(x_1,x_2,...,x_m) Ft1+τ,t2+τ,...tn+τ(x1,x2,...,xm)
则 称 随 机 过 程 X t , t ∈ T 是 严 平 稳 过 程 . \small 则称随机过程X{t},t \in T 是严平稳过程. 则称随机过程Xt,t∈T是严平稳过程.
简单点说严平稳是一种条件比较苛刻的平稳性定义,它认为只有当序列所有的统计性质都不会随着时间的推移而发生变化时,该序列才能被认为平稳。
宽平稳
假 定 某 个 时 间 序 列 是 由 某 一 随 机 过 程 \small 假定某个时间序列是由某一随机过程 假定某个时间序列是由某一随机过程
生 成 的 , 如 果 满 足 下 列 条 件 : \small 生成的,如果满足下列条件: 生成的,如果满足下列条件:
1 ) 均 值 E ( X t ) = μ 是 与 时 间 \small 1)均值E(X_t)=\mu 是与时间 1)均值E(Xt)=μ是与时间t 无 关 的 常 数 无关的常数 无关的常数
2 ) 方 差 V a r ( X t ) = σ 2 是 与 时 间 无 关 的 常 数 \small 2)方差Var(X_t)=\sigma^2是与时间无关的常数 2)方差Var(Xt)=σ2是与时间无关的常数
3 ) 协 方 差 C o v ( X t , X t + k ) = γ k 是 只 与 时 间 间 \small 3)协方差Cov(X_t,X_{t+k})=\gamma_k是只与时间间 3)协方差Cov(Xt,Xt+k)=γk是只与时间间
隔 k 有 关 , 与 时 间 t 无 关 的 常 数 \small 隔k有关,与时间t无关的常数 隔k有关,与时间t无关的常数
则 该 时 间 序 列 是 宽 平 稳 的 , \small 则该时间序列是宽平稳的, 则该时间序列是宽平稳的,
该 随 机 过 程 是 平 稳 随 机 过 程 . \small 该随机过程是平稳随机过程. 该随机过程是平稳随机过程.
平稳性的定义在不同文章中描述略有不同,但它们的意思都是一样的。比如一些定义中会强调二阶矩存在,而我们当前的这个定义中没有强调,原因在于均值、方差为常数既已表示一阶矩、二阶矩存在。
“矩”是随机分布的一种特征数,反映了一个随机分布的某种特征。
比如“数学期望”,反映了符合某种分布的随机变量的取值,总是在某个值周围波动;而“方差”,则反映了这种波动的大小程度。
矩分为原点矩和中心矩,其中一阶原点矩就是数学期望,二阶中心矩就是方差。通常2阶以内(含2阶)称为低阶矩,2阶以上称为高阶矩。如果一个随机变量的某高阶矩存在,那么低阶矩也一定存在。
宽平稳序列具有均值、方差和自相关结构不随时间变化的特性。简单理解就是一个看起来平坦的序列,没有趋势,随时间变化的方差不变,随时间变化的自相关结构不变,也没有定期波动(季节性)。
二、严平稳与宽平稳的关系
严平稳比宽平稳的要求更严格,但两者并没有包含关系。
通常情况下,低阶矩存在的严平稳能推出宽平稳成立,而宽平稳序列不能反推严平稳成立。
即便严平稳也不一定宽平稳。
不存在低阶矩的严平稳序列不满足宽平稳条件,例如服从柯西分布的严平稳序列就不是宽平稳序列(柯西分布的一阶矩、二阶矩都不存在)。
当序列服从多元正态分布时,宽平稳可以推出严平稳。因为正态过程的概率密度是由均值函数和自相关函数完全确定的,宽平稳则均值函数和自相关函数不随时间的推移而变化,那么正态过程的概率密度函数也就不会随时间的推移而变化,所以说一个宽平稳的正态过程必定是严平稳的。
一些易混的名词:柯西分布也叫做柯西-洛伦兹分布,它是以奥古斯丁-路易-柯西与亨德里克-洛伦兹名字命名的连续概率分布.
柯西分布的概率密度函数为
数学期望因积分不能绝对收敛,故而柯西分布的数学期望不存在。
柯西分布的密度函数关于y轴对称,那么它的期望不应该是0吗,为什么会不存在呢?
概率密度虽是偶函数,关于y轴对称,但在0到正无穷大上做积分,结果是正的无穷大发散;在负无穷大到0做积分,结果是负的无穷大发散。虽然和是0,但不是绝对收敛。故而期望不存在。
直观上看柯西分布的尾巴是“重(heavy)”尾巴,尾部在两个方向上的衰减不够快,故而无法使积分收敛。
宽平稳,因其定义,又叫二阶平稳,或者协方差平稳;
平稳序列,一般是指宽平稳序列,也称弱平稳序列;
严平稳序列,也可以叫做强平稳序列。
三、平稳时间序列一览
白噪声
一种最简单的平稳时间序列就是白噪声 —— 具有零均值同方差的独立同分布序列),记作 { ε t } \small \{ \varepsilon_t \} {εt}。
当 ε t \varepsilon_t εt服从均值为0的正态分布时,称 { ε t } \small \{ \varepsilon_t \} {εt}为高斯白噪声或正态白噪声。
对于任意 t ∈ T , X t \small t \in T,X_t t∈T,Xt均值相同、方差相同,独立则协方差为零,故而白噪声序列是平稳的。
简单用一行代码就能生成白噪声序列;
import numpy as np
from matplotlib import pyplot as pltwhite_noise = np.random.standard_normal(size=1000)
plt.figure(figsize=(12, 6))
plt.plot(white_noise)
plt.show()
当一个序列为白噪声时,表示序列前后没有任何相关关系。过去的行为对将来的发展没有丝毫影响,从统计分析的角度而言,已没有任何分析建模的价值。未来的趋势亦无法预测,因为白噪声的取值是完全随机的。
此时未来预测为均值就是残差最小的选择。
只有当序列平稳且非白噪声时,应用ARMA等分析方法才有意义。
通常我们在对时间序列建模之后,还会对残差序列进行白噪声检验,如果残差序列是白噪声,那么就说明原序列中所有有价值的信息已经被模型所提取;如果非白噪声就要检查模型的合理性了。
以上白噪声定义实为独立同分布白噪声,很多文章中也直接将其定义为白噪声,未作特别说明。实际白噪声的定义要更弱一些(弱白噪声),只要满足以下3个条件即可:
1 ) E ( ε t ) = μ \small 1)~~E(\varepsilon_t)=\mu 1) E(εt)=μ
2 ) V a r ( ε t ) = σ 2 \small 2)~~Var(\varepsilon_t)=\sigma^2 2) Var(εt)=σ2
3 ) C o v ( ε t , ε s ) = 0 , t ≠ s \small 3)~~Cov(\varepsilon_t,\varepsilon_s)=0,t \neq s 3) Cov(εt,εs)=0,t=s
不要求独立,只要不相关即可。独立是不相关的充分不必要条件,独立一定不相关,不相关却不一定独立。
非白噪声
平稳时间序列可不止白噪声,生活中也会有平稳的时间序列,但却是很少。别灰心,很多序列是可以经过简单处理后变为平稳的非白噪声序列。
我国06年以来的季度GDP数据季节差分后,就可以认为是一个平稳的时间序列。
import numpy as np
import pandas as pd
import akshare as ak
from matplotlib import pyplot as pltdf = ak.macro_china_gdp()
df = df.set_index('季度')
df.index = pd.to_datetime(df.index)gdp = df['国内生产总值-绝对值'][::-1].astype('float')gdp_diff = gdp.diff(4)plt.figure(figsize=(12, 6))
gdp_diff.plot()
plt.show()
数据看上去是平坦的,均值、方差直观上看也没有大的变化,故而大体上可以认为是平稳的。
大家可以自行拓展一下,用统计量化的方式检验序列是否平稳,以及是否是白噪声。我们下篇文章会具体介绍平稳性的众多检验方法。
四、非平稳时间序列一览
大多数时间序列都是非平稳的,一般可以通过差分、取对数等方法转化成平稳时间序列,若不成就不能使用平稳时间序列分析方法了。虽说还有各种非平稳时间序列的分析方法,预测好坏看各家本领,但终归不如平稳时间序列分析来的省心。
比如一些股票的收盘价数据就是非平稳的。下图是2019~2021年来伊份的每日收盘价数据,整体看上去走势无明显规律,且不同时段波动不一,就可以认为是一个非平稳的时间序列。若平稳且不是白噪声多好啊。
import pandas as pd
import akshare as ak
from matplotlib import pyplot as pltdf = ak.stock_zh_a_hist(symbol="603777", start_date="20190101", end_date='20210616')
df = df.set_index('日期')
df.index = pd.to_datetime(df.index)close = df['收盘'].astype(float)
close = close[::-1]plt.figure(figsize=(12, 6))
plt.plot(close)
plt.show()
随机游走
有一类特殊的非平稳时间序列叫随机游走,很简单,也很有意思。
一个简单随机游走过程定义为:
y t = y t − 1 + ε t y_t=y_{t-1}+\varepsilon_t yt=yt−1+εt
其中 ε \varepsilon ε是均值为零的白噪声。
用两行代码来模拟一下随机游走过程:
import numpy as np
from matplotlib import pyplot as plty = np.random.standard_normal(size=1000)
y = np.cumsum(y)plt.figure(figsize=(12, 6))
plt.plot(y)
plt.show()
金融领域中有个概念叫有效市场假说,就认为股票的价格是随机游走的,也就是说我们刚刚举的那个上证指数的例子就是随机游走的。以上随机游走的示例图和之前的股价数据走势图比较一下,是不是有点那么个意思。
一个随机游走过程对过去发生的信息具有完美的记忆,如醉汉走路,每一步都是在上一步的位置上胡乱的走,故而能够积累起点以来的每一步信息。初起离家,偶有归时,不知所终。均值为零,方差无限大。
import numpy as np
from matplotlib import pyplot as pltnp.random.seed(5)def random_walk():steps = np.random.standard_normal(size=1000)steps[0] = 0walk = np.cumsum(steps)return walkplt.figure(figsize=(12, 6))
plt.plot(random_walk())
plt.plot(random_walk())
plt.show()
生活中还有一个现象和随机游走有关,叫“久赌必输”。每次赌博时输赢总是不确定的(假设胜率50%,胜负五五开),每次赌博的输赢作为一个随机变量,可以认为是步长 ε \varepsilon ε,手里的钱数会随着每次输赢而变化,故而赌博时手中的钱服从随机游走模型。
手中累积的钱数走势就像上图中的曲线,但却不会一直延展下去。当曲线触碰到下届时(手中的钱输光时),游戏也就结束了;或当曲线触碰到上界时(庄家的钱没有了,贪心到赢钱停不下来要一直赢下去),游戏同样也会结束。庄家的钱无限多,则必然是赌徒输光。庄家的钱再少,也比赌徒的本金多的多。所以上界不知在哪,下界却很清晰,曲线游走到上界的概率几乎为零,输光的终归是赌徒,更别提胜率往往不足50%。
带漂移项的随机游走
带漂移项的随机游走,就是随机游走中加入一个常数,如此而已。
y t = c + y t − 1 + ε t y_t=c+ y_{t-1}+\varepsilon_t yt=c+yt−1+εt
其中 c c c 是常数,称作位移项或漂移项。
漂移项使得随机游走序列产生了长期趋势。长期趋势的斜率对应漂移项,漂移项为正则有增长趋势,漂移项为负则有下降趋势。
同样代码模拟一下下:
import numpy as np
from matplotlib import pyplot as pltnp.random.seed(123)y = np.random.standard_normal(size=100)
y1 = np.cumsum(0.2+y)
y2 = np.cumsum(-0.2+y)l1 = np.cumsum(0.2 * np.ones(len(y1)))
l2 = np.cumsum(-0.2 * np.ones(len(y2)))plt.figure(figsize=(12, 6))
plt.plot(y1)
plt.plot(y2)
plt.plot(l1)
plt.plot(l2)
plt.show()
无论是简单随机游走,还是带漂移项的随机游走,都可以通过差分的方式转换为纯随机的平稳时间序列–白噪声。
随机游走的一阶差分即为白噪声:
y t − y t − 1 = ε t y_t-y_{t-1}=\varepsilon_t yt−yt−1=εt
带漂移项的随机游走一阶差分为白噪声+常数 c c c:
y t − y t − 1 = c + ε t y_t-y_{t-1}=c+\varepsilon_t yt−yt−1=c+εt
所以说随机游走过程和白噪声一样也是无法预测的,既然无法根据历史走势预测未来趋势,那是否能够从其他维度信息中解释历史时序中的取值,从而能够用同样的逻辑预测未来的值,只有实践才能知道。
五、对平稳性的理解
回顾开头我们提的那个问题,为什么这么多方法都要强调时间序列的平稳性?要求平稳性的最终目标无非就是希望能够更好更准确的预测未来。非平稳时间序列太过杂乱无章,有的甚至完全无规律可循,而平稳时间序列本身存在某种分布规律,前后具有一定自相关性且能够延续下去,进而可以利用这些信息帮助预测未来。那时间序列的平稳性具体又是如何帮助预测未来的,平稳性又如何怎么理解呢?
初识时间序列一篇中我们也提到,时间序列 X 1 , X 2 , X 3 , . . . X t , . . . X N \tiny X_1,X_2,X_3,...X_t,...X_N X1,X2,X3,...Xt,...XN 中每个时刻 t \small t t 都可以认为是一个随机变量,它们都有自己的分布。时间不能倒流,时刻 t t t 的取值也不能进行反复观测,因而每个随机变量 X t \tiny X_t Xt 就只有一个观测值。这样一来,每个分布也就只有一个观测值,数目太少,无法研究分布的性质。但是通过平稳性,从不同时刻的分布之间发现内在关联,可以缓解由于样本容量少导致的估计精度低的问题。
我们先做一个无理假设,假设时间序列中的每个随机变量的分布相同(随机变量的分布不随时间 t t t 的变化而变化),那么对于这个分布我也可以说得到了 N \tiny N N 个观测值。有了多个观测值之后,就可以统计这个分布的特性了。如此一来 X N + 1 \tiny X_{N+1} XN+1 的具体分布也就知道了。
其实强平稳定义更甚,要求任意连续 k , k ∈ [ 1 , N ] \tiny k, k \in [1,N] k,k∈[1,N] 个随机变量的联合分布不变,即联合分布只与随机变量的个数有关,不随时间的推移而变化。
序列中每个随机变量的分布相同不一定是严平稳,如下表中3列数据分布一致,每列数据均有1个10、2个20、1个30,但是 X 1 , X 2 \tiny X1,X2 X1,X2和 X 2 , X 3 \tiny X2,X3 X2,X3的两个联合分布并不一致,
p ( X 1 = 10 , X 2 = 10 ) = 0.25 , p ( X 2 = 10 , X 3 = 10 ) = 0 \small p(X_1=10,X_2=10)=0.25,\small p(X_2=10,X_3=10)=0 p(X1=10,X2=10)=0.25,p(X2=10,X3=10)=0
X 1 X_1 X1 | X 2 X_2 X2 | X 3 X_3 X3 |
---|---|---|
10 | 10 | 20 |
20 | 30 | 20 |
20 | 20 | 10 |
30 | 20 | 30 |
但若序列中每个随机变量独立同分布的话,则这个序列一定是严平稳序列,而且还是白噪声。
继续顺着上文的无理假设,虽然根据历史数据知道了 X N + 1 \tiny X_{N+1} XN+1数据分布情况,其实也就只能知道均值、方差这些个统计特征,但是具体 t N + 1 \tiny t_{N+1} tN+1 时刻的取值还是无法确定。
若是严平稳, X 1 , . . . , X k \tiny X_1,...,X_k X1,...,Xk 的联合分布具有时间平移不变性,与时间 t \small t t 无关,只与 k \small k k 有关。那么 t N + 1 \tiny t_{N+1} tN+1 时刻的取值还可以根据联合分布来推断,比如表1中前2列,p(20)=50%,p(30,20)=100%。
但若是 p ( 30 , 20 ) = p ( 10 , 20 ) = p ( 20 , 20 ) = p ( 20 ) \small p(30,20)=p(10,20)=p(20,20)=p(20) p(30,20)=p(10,20)=p(20,20)=p(20)
这就又是一个白噪声过程了,除了预测为均值等统计值外,预测为其他值都不准确。
现实中的时间序列数据,我们无法知道 X 1 , . . . , X t , . . . \tiny X_1,...,X_t,... X1,...,Xt,...这些随机变量的分布到底长什么样子。我们观测得到的数据,只是服从某种未知分布的随机变量的一种取值。既然连单个随机变量的分布都难以求出,就更不用说求由一堆随机变量组成的多维随机向量的联合分布有多困难了。所以说严平稳终归太过于理想化,实际上很难检验一个时间序列的严平稳性。
那我们就放宽些条件,不在局限于严平稳,着眼于宽平稳:
1)均值 E ( X t ) = μ \small E(X_t)=\mu E(Xt)=μ是与时间 t t t无关的常数
2)方差 V a r ( X t ) = σ 2 \small Var(X_t)=\sigma^2 Var(Xt)=σ2是与时间无关的常数
3)协方差 C o v ( X t , X t + k ) = γ k \small Cov(X_t,X_{t+k})=\gamma_k Cov(Xt,Xt+k)=γk是只与时间间隔 k \small k k有关,与时间 t \small t t无关的常数
第1)、2)条,均值恒定、方差恒定,还是限制变量 X t \tiny X_t Xt的分布,围绕某一均值上下波动,且波动幅度前后一致。到这里,还是可以用均值来预测。第3)条约束协方差,是希望不仅 X t \tiny X_t Xt的整体分布不随着时间变化,而且 X t X_t Xt的条件概率分布也不随着时间变化,这样才能用以前的值来预测未来的值。
比如 X t \tiny X_t Xt 受前一时刻 X t − 1 \tiny X_{t-1} Xt−1 的影响,且前后影响程度不随时间变化,
C o v ( X t , X t − 1 ) = γ \tiny Cov(X_t,X_{t-1}) =\gamma Cov(Xt,Xt−1)=γ
C o v ( X t + 1 , X t ) = γ ( γ ≠ 0 ) \tiny Cov(X_{t+1},X_{t}) =\gamma ~~~~ (\gamma \neq 0) Cov(Xt+1,Xt)=γ (γ=0)
取第二行公式变换一下:
1 n − 1 ∑ i = 1 n ( X t + 1 i − X ˉ t + 1 ) ( X t i − X ˉ t ) = γ \tiny \frac{1}{n-1} \displaystyle\sum_{i=1}^n (X_{t+1}^{i}-\bar{X}_{t+1})(X_{t}^{i}-\bar{X}_{t})=\gamma n−11i=1∑n(Xt+1i−Xˉt+1)(Xti−Xˉt)=γ
∑ i = 1 n ( X t + 1 i − X ˉ t + 1 ) ( X t i − X ˉ t ) = ( n − 1 ) γ \tiny \displaystyle\sum_{i=1}^n (X_{t+1}^{i}-\bar{ X}_{t+1})(X_{t}^{i}-\bar{X}_{t})=(n-1)\gamma i=1∑n(Xt+1i−Xˉt+1)(Xti−Xˉt)=(n−1)γ
∑ i = 1 n ( X t + 1 i − μ ) ( X t i − μ ) = ( n − 1 ) γ \tiny \displaystyle\sum_{i=1}^n (X_{t+1}^{i}-\mu)(X_{t}^{i}-\mu)=(n-1)\gamma i=1∑n(Xt+1i−μ)(Xti−μ)=(n−1)γ
厚着脸皮约等一下下:
( x t + 1 − μ ) ( x t − μ ) = γ \small (x_{t+1}-\mu)(x_{t}-\mu)=\gamma (xt+1−μ)(xt−μ)=γ
那么将 t + 1 t+1 t+1时刻的取值预测为 γ / ( x t − μ ) + μ \small \gamma/(x_{t}-\mu)+\mu γ/(xt−μ)+μ,而非均值 μ \small \mu μ,就显得更准确一些。
但是当协方差为0的时候,就变为了一个白噪声过程。白噪声过程也是平稳的,但是却不可预测,其均值虽恒定,但具体取值却是完全随机。
综上,当时间序列具备了平稳性后(且非白噪声),预测序列相对容易,预测结果也会相对更可靠一些。
参考链接
[1] https://www.jianshu.com/p/754243217327[2] https://www.zhihu.com/question/21982358
[3] https://towardsdatascience.com/stationarity-in-time-series-analysis-90c94f27322
[4] https://zhuanlan.zhihu.com/p/50553021
[5] https://qastack.cn/stats/36027/why-does-the-cauchy-distribution-have-no-mean
[6] https://max.book118.com/html/2018/1104/7110015130001155.shtm
[7] https://www.cnblogs.com/ev2020/p/12344803.html
[8] https://www.cnblogs.com/hqczsh/p/12817912.html
[9] https://www.jianshu.com/p/76c9bf98e340
这篇关于谈谈时间序列的平稳性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!