乐趣区

关于机器学习:时间序列的平稳性

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

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

什么是平稳性?

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

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

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

为什么平稳性很重要?

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

如何测验平稳性?

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

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

咱们将创立几个示例,应用 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

退出移动版