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

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

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

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

什么是平稳性?

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

严平稳

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

为时间序列,对于任意正整数,任取 和任意整数,当时,有

时间序列有相同的联合分布函数, 即

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

宽平稳

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

对于时间序列,如果满足以下三个条件:

  • 均值是常数,与时间 无关,即

  • 方差是常数,与时间 无关,即

  • 自协方差只与时间间隔 有关,与时间的起始位置 无关,即

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

均值是一阶矩,描述符合某种分布的随机变量的取值,总是在某个值周围波动。

方差是二阶矩,描述了这种波动的大小程度或者离散程度。

自协方差也是二阶矩,是一种特殊的协方差,是时间和时间本身的特殊协方差。普通的协方差是,自协方差是,本质是一样的。

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

平稳时间序列

白噪声

白噪声是最简单的平稳过程(纯随机过程)记作 ,定义如下:

也就是均值为0,方差为,协方差为0(无自相关性)的序列

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

import numpy as np
from matplotlib import pyplot as plt

white_noise = np.random.standard_normal(size=500)
plt.figure(figsize=(158))
plt.plot(white_noise)
plt.show()

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

非白噪声

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

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=(126))
plt.show()

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

非平稳时间序列

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

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

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=(126))
plt.plot(close)
plt.show()

随机游走

非平稳时序中有一种特殊的时序叫随机游走,定义为:

,其中的 是均值为0的白噪声。

通过公式我们能看出,随机游走是时序数据的不断累加形成的,累加的是白噪声,即一阶差分 ,而白噪声是纯随机的,因此随机游走和白噪声一样,其未来趋势也是无法预测的。

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

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=(126))
plt.plot(random_walk())
plt.plot(random_walk())
plt.show()

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

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

为什么需要平稳性?

预测更容易更可靠

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

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

极大降低分析难度

上篇文章 时间序列基本概念、任务、预测方法 提到,时间序列中每个时刻 都可以认为是一个随机变量,它们都有自己的分布。但时间不能倒流,因而每个随机变量 就只有一个观测值。

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

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

如果现在判断出该时序是满足宽平稳的时间序列,可知该时序均值 是个常数,即每个时点随机变量均值都为 。此时就可以认为这5个观测值都变成了常数 的样本观测值,即 ,于是通过以上5个样本观测值可估算出均值

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

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

请使用浏览器的分享功能分享到微信等