如何查看工夫序列是否安稳,如果它是非安稳的,咱们能够怎么解决

当将来的数据与当初类似时,它更容易建模。平稳性形容了工夫序列的统计特色不随工夫变动的概念。因而一些工夫序列预测模型,如自回归模型,依赖于工夫序列的平稳性。

什么是平稳性?

平稳性形容了工夫序列如何将来放弃不变的概念。用数学术语来说,当工夫序列的统计个性与工夫无关时,它是安稳的,包含

  • 均值不变(为常数)
  • 方差不变
  • 协方差与工夫无关

这就是平稳性的弱模式的定义。另一种平稳性是严格平稳性。这意味着雷同大小的样本具备雷同的散布。因为严格平稳性具备局限性和常见性,所以本文仅关注弱模式平稳性。

为什么平稳性很重要?

一些工夫序列预测模型(例如,自回归模型)须要安稳的工夫序列,因为它们更容易建模,因为它们具备恒定的统计属性。因而如果工夫序列不是安稳的,就应该尽量让它安稳。

如何测验平稳性?

你能够用两种办法来测试工夫序列的平稳性:

  • 直观的办法:肉眼评估
  • 统计办法:单位根测验

咱们将创立几个示例,应用Hyndman 和 Athanasopoulos的工夫序列剖析教材《Forecasting: principles and practice》中提到办法解释平稳性的视觉评估,并扩大它们的用法,并解释应用单位根测试进行的平稳性测试。数据来自R的fma 包。

1、直观地评估平稳性

最简略的办法是将工夫序列分成两半,并比拟工夫序列的前半部分到后半局部的平均值、振幅和周期长度。

  • 均值常数-工夫序列前半段的均值应该与后半段的均值类似。
  • 方差常数-工夫序列的前半段的振幅应该与后半段类似。
  • 协方差与工夫无关——工夫序列前半部分的周期长度应该与后半局部的周期长度类似。周期应该在工夫上是独立的(例如,不是每周或每月等)。

对于咱们的例子,评估后果如下图所示:

2、统计评估平稳性——单位根测验

单位根是一种随机趋势,称为“带漂移的随机游走”。因为随机性无奈预测,这意味着:

单位根存在:不稳固(不可预测),单位根不存在:安稳的

为了用单位根测验平稳性,能够将两个这两个假如作为初始假如:

  • 零假如(H0) -工夫序列是安稳的(没有单位根存在)
  • 备择假如(H1) -工夫序列不是安稳的(存在单位根)

而后依据以下两种办法评估是否回绝零假如:

p 值办法:

如果 p 值 > 0.05,则无奈回绝原假如。如果 p 值 ≤ 0.05,则回绝零假如。

临界值法:

如果测验统计量没有临界值那么极其,则无奈回绝原假如。如果测验统计量比临界值更极其,则回绝原假如。当 p 值靠近0.05时,应应用临界值法 。

有几个单位根测试能够用来查看平稳性。本文将重点介绍最风行的2个:

Augmented Dickey-Fuller test 和 Kwiatkowski-Phillips-Schmidt-Shin test

3、Augmented Dickey-Fuller test

Augmented Dickey-Fuller test的假如为:

H0:工夫序列不是安稳的,因为有一个单位根(如果p值> 0.05)

H1:工夫序列是安稳的,因为没有单位根(如果p值≤0.05)

在Python中,咱们能够间接应用statsmodels.tsa.stattools库中的adfuller办法。

 from statsmodels.tsa.stattools import adfuller result = adfuller(df["example"].values)

如果咱们能够回绝ADF测验的零假如,则工夫序列是安稳的:

上面是样本数据集的ADF测试后果:

4、Kwiatkowski-Phillips-Schmidt-Shin test

Kwiatkowski-Phillips-Schmidt-Shin (KPSS)测验的假如是[4]:

H0:工夫序列是安稳的,因为没有单位根(如果p值> 0.05)

H1:工夫序列不是安稳的,因为有一个单位根(如果p值≤0.05)

statsmodels.tsa.stattools库中的kpss办法,咱们须要应用参数regression = 'ct'来指定测验的零假如是数据是趋势安稳的。

 from statsmodels.tsa.stattools import kpss  result = kpss(df["example"].values,                regression = "ct")

如果咱们不能回绝KPSS测验的零假如,则工夫序列是安稳的:

上面是样本数据集的KPSS测试后果:

非安稳工夫序列数据处理

咱们能够对一个非安稳工夫序列利用不同的变换,使其靠近安稳:因为有几种平稳性类型,所以咱们能够联合ADF和KPSS测试来确定要进行哪些变换:

  • 如果ADF测试后果是安稳的,而KPSS测试后果是非安稳的,则工夫序列是差分安稳的-对工夫序列利用差分,并再次查看安稳。
  • 如果ADF测验后果是非平稳性的,而KPSS测验后果是平稳性的,则该工夫序列为趋势安稳的-须要去掉去趋势,并再次查看平稳性。

1、差分

差分计算两个间断观测值之间的差值。它稳固了工夫序列的平均值,从而升高了趋势

 df["example_diff"] = df["example"].diff()

2、同过模型拟合去趋势

从非安稳工夫序列中去除趋势的一种办法是将一个简略的模型(例如,线性回归)拟合到数据上,而后对该拟合的残差进行建模。

 from sklearn.linear_model import LinearRegression  # Fit model (e.g., linear model) X = [i for i in range(0, len(airpass_df))] X = numpy.reshape(X, (len(X), 1)) y = df["example"].values model = LinearRegression() model.fit(X, y)  # Calculate trend trend = model.predict(X)  # Detrend df["example_detrend"] = df["example"].values - trend

后果如下:

3、对数变换

对数变换能够稳固工夫序列的方差。

 df["example_diff"] = np.log(df["example"].value)

后果如下:

正如你所看到的,模型拟合的去趋势和对数变换都不能使咱们的例子工夫序列安稳。所以须要联合不同的技术使工夫序列安稳。

总结

在工夫序列预测中,具备恒定统计属性(均值、方差和协方差)且与工夫无关的工夫序列被形容为安稳的。因为稳固的统计特色,安稳工夫序列比非安稳工夫序列更容易建模。所以很多工夫序列预测模型都假如了平稳性。

平稳性能够通过目测或统计办法进行查看。统计办法查看单位根,最风行的两种单位根测试是ADF和KPSS。这两种工具都能够在Python stattools库中找到。

如果工夫序列是非安稳的,能够尝试通过差分、对数转换或去除趋势来使其靠近安稳。

https://avoid.overfit.cn/post/88bce32903cd4aa4a04ad4fe58777372

作者:Leonie Monigatti