前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >时间序列平稳性、白噪声、随机游走

时间序列平稳性、白噪声、随机游走

作者头像
Python数据科学
发布2023-03-08 16:57:08
1.9K0
发布2023-03-08 16:57:08
举报
文章被收录于专栏:Python数据科学Python数据科学

作者:东哥起飞,来源:Python数据科学

本文开启时间序列系列的相关介绍,从零梳理时序概念、相关技术、和实战案例,欢迎订阅 👉时间序列专栏 跟踪全部内容。

本篇介绍时间序列的平稳性的相关概念。很多传统时序方法比如ARMA、ARIMA都需要时序具备平稳性,那什么是时序的平稳性?为什么需要平稳性,平稳性有什么作用?

什么是平稳性?

时间序列平稳性是指一组时间序列数据看起来平坦,各阶统计特征不随时间的变化而变化。平稳性分为宽平稳和严平稳,我们分别给出定义:

严平稳

严平稳是一种条件很苛刻的定义,时间序列的所有统计性质(如均值、方差、协方差...N阶矩)都不会随时间推移而发生变化,才能被认为是平稳的。因为随机变量族统计性质完全由联合概率分布族决定,所以严平稳定义为:

{X_t}

为时间序列,对于任意正整数

m

,任取

t_1,t_2,...,t_m \in T

和任意整数

\tau

,当

t_{1+\tau},t_{2+\tau},...,t_{m+\tau}

时,有

时间序列

(X_{t_1},X_{t_2},...,X_{t_m})

(X_{t_1+\tau},X_{t_2+\tau},...,X_{t_m+\tau})

有相同的联合分布函数, 即

F_{t_1,t_2,...t_m}{(x_1,x_2,...,x_m)}=F_{t_1+\tau,t_2+\tau,...t_m+\tau}{(x_1,x_2,...,x_m)}

但现实中获取随机序列的联合分布非常难,所以一般不适用严平稳,而使用条件不算苛刻的宽平稳。

宽平稳

宽平稳,也叫弱平稳、二阶平稳,或者协方差平稳。宽平稳时间序列的统计性质主要由低阶矩(二阶矩以内)决定,所以只需保证二阶以内统计特性不随时间变化而变化即可。它的定义如下:

对于时间序列

{X_t}

,如果满足以下三个条件:

  • 均值是常数,与时间
t

无关,即

E(X_t)=E(X_{t-j})=\mu
  • 方差是常数,与时间
t

无关,即

Var(X_t)=Var(X_{t-j})=\sigma^2
  • 自协方差只与时间间隔
k

有关,与时间的起始位置

t

无关,即

Cov(X_t,X_{t+k})=Cov(X_{t-j},X_{t+k-j})=\gamma_k

则该时间序列是宽平稳的,该随机过程是平稳随机过程。

均值是一阶矩,描述符合某种分布的随机变量的取值,总是在某个值周围波动。 方差是二阶矩,描述了这种波动的大小程度或者离散程度。 自协方差也是二阶矩,是一种特殊的协方差,是时间和时间本身的特殊协方差。普通的协方差是

Cov(X,Y)

,自协方差是

Cov(X_t,X_{t+1})

,本质是一样的。 协方差描述两个变量之间的变动关系,关于协方差的理解可以参考这篇文章:如何通俗的理解协方差、相关系数?

平稳时间序列

白噪声

白噪声是最简单的平稳过程(纯随机过程)记作

\lbrace{\varepsilon_t\rbrace}

,定义如下:

E(\varepsilon_t)=0
Var(\varepsilon_t)=\sigma^2
Cov(\varepsilon_t,\varepsilon_s)=0,t\neq s

也就是均值为0,方差为

\sigma^2

,协方差为0(无自相关性)的序列

用Python代码能生成一个白噪声序列:

代码语言:javascript
复制
import numpy as np
from matplotlib import pyplot as plt

white_noise = np.random.standard_normal(size=500)
plt.figure(figsize=(15, 8))
plt.plot(white_noise)
plt.show()

上图可以看到时序前后没有任何联系(白噪声的自协方差是0,取值是完全随机的),因此对于我们想要通过历史时序数据预测未来是行不通的,不具有分析的价值。只有当序列平稳且非白噪声时,应用分析方法才有意义。

非白噪声

另一种就是非白噪声平稳时间序列,虽然现实中平稳序列不常见,但经过一些处理后也可以变成平稳的非白噪声序列。

代码语言:javascript
复制
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

df=pd.read_excel('data.xlsx',engine='openpyxl')
plt.figure(figsize=(12, 6))
plt.show()

上图来自真实数据,虽然波动不完全相同,但从均值、方差大体来看是平稳的。当然关于时间序列平稳性检测除肉眼观察还有一些量化的方法,会在后续介绍。

非平稳时间序列

现实世界大多数时间序列都是非平稳的,但可以通过差分、取对数等方法转化成平稳时间序列,但如果不能转化也就意味着不能使用平稳时间序列分析方法了。

大部分股票的收盘价数据就是非平稳的,以A股上某一只股票2020-2022年的收盘价数据为例,肉眼看上去走势无明显规律,且不同时段波动很大,基本可以认为是一个非平稳的时间序列。

代码语言:javascript
复制
import pandas as pd
import akshare as ak
from matplotlib import pyplot as plt

df = ak.stock_zh_a_hist(symbol="601800", start_date="20200101", end_date='20221231')
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}+\varepsilon_t

,其中的

\varepsilon

是均值为0的白噪声。

通过公式我们能看出,随机游走是时序数据的不断累加形成的,累加的是白噪声,即一阶差分

y_t-y_{t-1}=\varepsilon_t

,而白噪声是纯随机的,因此随机游走和白噪声一样,其未来趋势也是无法预测的。

下面用Python生成的两个随机游走图形感受下。

代码语言:javascript
复制
import numpy as np
from matplotlib import pyplot as plt

np.random.seed(6)

def random_walk():
    steps = np.random.standard_normal(size=500)
    steps[0] = 0
    walk = np.cumsum(steps)
    return walk
    
plt.figure(figsize=(12, 6))
plt.plot(random_walk())
plt.plot(random_walk())
plt.show()

上图两个随机游走曲线都是纯随机生成的,因为固定了seed所以再执行代码会保持这个图形,但如果把seed注释掉再执行图形又是一个新的随机曲线了。为了增加对随机游走的理解,下面用一个经典的赌徒输光例子来解释下。

赌徒输光是说如果一个赌徒去赌,大概率会输光,有什么依据吗?假设一个项目的胜率是50%,现在我们将每一次的输赢作为一个随机变量,兜里的钱会随着每次输赢而变化,此时兜里的钱就服从随机游走模型。我们来模拟几种不同的结果,最差的情况是如果运气不好10赌8输,随机游走曲线会很快下降到赌徒底线,兜里的钱全输光;如果此时运气好10赌8赢,随机游走曲线向上,庄家给钱赌徒小赚,此刻及时止盈还是赚的;但赌徒不会止盈还会继续玩下去,出于随机性的输赢结果,曲线迟早会到赌徒底线;如果曲线上升到庄家的上线,庄家给钱关门倒闭,但这种情况几乎不会发生,因为庄家的钱是无限多的,至少比玩家多得多。所以按照50%的胜率下,赌徒是不可能赢钱的,因为随机游走曲线会以更大的概率先到达赌徒的底线。

为什么需要平稳性?

预测更容易更可靠

如前面宽平稳定义,满足三个条件,均值、方差都是常数,自协方差不随时间变化只与时间间隔k有关。如果一个时序是宽平稳的,那么时序本身肯定是存在某种分布规律的,前后具有一定自相关性且能够延续下去,利用这些信息预测未来数据才更可靠

平稳时序预测相对非平稳预测方法更容易。这就是为什么即使时序是不平稳的,一般也要先通过差分、取对数等方法转化成平稳时间序列再进行分析。

极大降低分析难度

上篇文章 时间序列基本概念、任务、预测方法 提到,时间序列中每个时刻

X_1,X_2,...,X_t

都可以认为是一个随机变量,它们都有自己的分布。但时间不能倒流,因而每个随机变量

X_t

就只有一个观测值。

这样就会造成一个问题,由于每个分布只有一个观测值,数据过少导致无法研究分布的性质。但是通过平稳性,从不同时刻的分布之间发现内在关联,可以缓解由于样本容量少导致的估计精度低的问题。

现在有一组时间序列

(X_1,X_2,X_3,X_4,X_5)

5个时序点,每个时点都只有一个观测值,按数理统计分析来讲,此时样本很少是无法进行分析的。

如果现在判断出该时序是满足宽平稳的时间序列,可知该时序均值

\mu

是个常数,即每个时点随机变量均值都为

\mu

。此时就可以认为这5个观测值都变成了常数

\mu

的样本观测值,即

\mu = \bar{x}=\frac{\sum^{n}_{i=1} x_i}{n}

,于是通过以上5个样本观测值可估算出均值

\mu = \frac{20+10+30+10+20}{5}=18

上面的一行观测样本现在转变成以下形式,每个时点的观测值互为补充其他时点的观测值,或者可以理解为

X_1,..,X_5

合并为一个均值为

\mu

的随机变量了。

这样做就可以极大的减少了随机变量的个数,同时增加了待估变量的样本容量,降低了分析的难度,二阶矩方差和协方差也同理,感兴趣可以参考[1]

参考链接 [1].《应用时间序列分析》-王燕 [2].https://mp.weixin.qq.com/s/ZnQA-wUndDLKfM08Y6ZlEA [3].https://mp.weixin.qq.com/s/-WAnD9ZXEDezy0Adrw11xw [4].https://www.jianshu.com/p/fcddbb571027/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python数据科学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是平稳性?
    • 严平稳
      • 宽平稳
      • 平稳时间序列
        • 白噪声
          • 非白噪声
          • 非平稳时间序列
            • 随机游走
            • 为什么需要平稳性?
              • 预测更容易更可靠
                • 极大降低分析难度
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档