为什么这个趋势时间序列是固定的?

增强迪基-富勒 (ADF) 的研究 从一个奇怪的例子进行测试

照片由 扬·胡伯(Jan Huber) on Unsplash

平稳性是时间序列分析最基本的概念之一。一般来说,平稳性将为使用各种统计方法对时间序列进行建模提供出色的特性。 增强迪基-富勒 (ADF) 检验可能是检查平稳性最广泛使用的方法。

网上有大量关于这个主题的文章。我不会在基本介绍上浪费您的时间,例如平稳性的定义、如何进行 ADF 测试等。在这篇文章中,我将分享我在应用程序中遇到奇怪情况后探索 ADF 测试的旅程。

我将展示的学习路径是学习数据科学的典型学习路径。首先,我们认为我们理解了一个工具或一个概念,但我们只是承认并记住了这个术语。当我们将其应用于实际数据时,我们可能会发现意想不到的、具有挑战性的问题,从而促使我们进行更多调查和进一步理解。

再次,我将在 GitHub 上分享我的代码;请在最后的参考部分找到链接。

意想不到的旅程的开始

前几天我正在处理一些时间序列。图 1 显示了其中之一。没有双重的 存在上升趋势,方差也会随着时间而变化。有了这个清晰的可视化,我不需要测试平稳性。由于某种我不记得的原因,我仍然尝试了 ADF 测试。令人惊讶的是,p 值几乎为 0,这意味着我应该拒绝原假设并接受它是平稳的。

图 1. 有趋势的时间序列(作者提供的图片)

这很奇怪。测试结果似乎是错误的。我想调查 ADF 测试背后发生了什么。我尝试的第一步是用合成数据复制这个问题。我用以下代码生成了一些测试数据。该代码仅模仿缓慢趋势的行为,而不模仿季节性。

图 20,000 中有 1 个观测值,这意味着趋势的上升速度极其缓慢。我创建了一个斜率为 0.0005 的时间序列。经过 0 次观察后,时间序列平均值从 0.5 左右上升到 1000。然后让我们使用 adfuller() 函数进行测试 statsmodels.tsa.stattools 使用默认参数。 p 值为 0.01,“问题”再次发生。图 2 显示了结果。您可能会忽略标题,而专注于上升趋势。稍后我将解释为什么我们有来自三个不同 ADF 检验的 p 值。

图 2. 具有 ADF 测试结果的合成时间序列(图片由作者提供)

DF 测试背后的数学原理

我们必须深入了解 ADF 测试到底在做什么。事实证明它的数学背景并不复杂。首先,ADF测试只是ADF测试的高级版本 迪基-富勒检验。 有 DF 测试的三个主要版本 (来自维基百科):

版本1: 测试单位根: Δyᵢ = δyᵢ₋₁ + uᵢ

版本2: 测试常数的单位根: Δyᵢ = a₀ + δyᵢ₋₁ + uᵢ

版本3。 测试具有恒定且确定性趋势的单位根: Δyᵢ = a₀ + a₁*t + δyᵢ₋₁ + uᵢ

在每个版本中, 原假设是存在单位根 δ=0。

Statsmodels 包支持所有三个版本的参数 “回归”。

对于版本 1,回归为“n”(无常数,无趋势)。

对于版本 2,回归为“c”(仅常数);这是默认设置。

对于版本 3,回归是“ct”(常数和趋势)。

我使用三种不同的设置重新运行测试,以下是新结果。

对于版本 1,p 值为 0.09。我们不应该拒绝原假设。

对于版本 2,p 值为 0.01。我们已经将其视为一个问题,因为这是默认设置。

对于版本 3,p 值为 0.00。这是预期的,因为时间序列确实是 具有确定性趋势的平稳状态.

因此,对于此示例数据,如果我们使用版本 1(回归='n')对其进行测试,我们不会说它是平稳的。我们可能不应该使用默认设置。但您可能也想知道,为什么常数项在这里会产生如此大的差异?让我们进一步挖掘。

从 DF 检验到线性回归

根据上述定义,DF检验就是线性回归。图 3 显示了线性回归的所有点。 Y 轴为 Δyᵢ,X 轴为 yᵢ₋₁,uᵢ 为残差。版本 1 意味着我们必须拟合一条没有截距的线(没有常数)。版本 2 意味着我们必须用截距(常量)拟合一条线。

图 3. Δyᵢ 和 yᵢ₋₁(作者提供的图片)

Skitlearn 线性回归 使用参数 fit_intercept 很好地支持这两个选项。下面图 4 是两条拟合线。正如您所看到的,具有截距的线比没有截距的线拟合得更好。 R平方分数也清楚地证实了这一点。另请注意,橙色线的斜率小于蓝色线的斜率。换句话说,橙色线的斜率更接近于 0。

图 4. 线性回归结果(作者提供)

我们还可以通过可视化来思考:点不是以(0,0)为中心,因此拟合的回归线不应该通过(0,0)。截距应大于 0。因为 0 是起始均值,所以 Δy 应大于 0,因此总体均值会增加。如果我们强迫回归线经过(0,0),它就会欠拟合数据,并且由于(0)的影响,斜率会变得更接近0,0。

我们已经看到包括截距影响是否适合线性回归。为什么直线的拟合方式会影响 ADF 测试结果?p 值从何而来?

从线性回归到 p 值

现在变得有点复杂了。 DF 检验的最终 p 值并非来自线性回归的系数 p 值。 基本上,统计数据具有称为迪基-富勒表的特定分布。然后我们使用 MacKinnon 的近似 p 值进行检验统计量。您可以在以下位置找到详细信息 统计模型源代码.

因为原假设是 δ=0,这意味着测试拟合线的斜率为 0。我们不需要详细说明如何获取 p 值。 p值和斜​​率(线性回归中的δ,而不是趋势斜率)之间关联的逻辑链是这样的:

一般来说,如果斜率远离 0,p 值应该更小,更有可能拒绝零假设并表明没有单位根和平稳。如果斜率为 0 或非常接近 0,则 p 值应该更高,更有可能接受原假设并表明单位根和非平稳。 对于第二种情况,维基百科表示,“测试的统计功效较低,因为它们通常无法区分真正的单位根过程(δ = 0)和近单位根过程(δ 接近 0)”。这就是我们首先遇到问题的原因。我们正在处理一个近单位根过程。版本 1 找到单位根,版本 2 找不到单位根。

为什么版本 1 适用于上面的示例?

版本 1 适用于图 2 中的数据,因为我们使斜率更接近 0,因此 p 值更高。

但是,我们不能使用版本 1 作为默认设置。版本 1 有两种情况(强制线路经过 (0,0) ):

情况 1:(0,0) 更接近所有数据点。如果直线必须经过 (0,0),则直线会更平坦,斜率会更接近 0。图 4 演示了这种情况。请注意,图 4 中的演示仅适合一个变量 yᵢ₋₁,实际的 ADF 将适合更多滞后变量。

情况2:(0,0)远离所有数据点。如果直线必须经过(0,0),我们可能会拟合失败;本质上,斜率是 0,这意味着我们无法找到 Δyᵢ 和 yᵢ₋₁ 的线性关系,使得一条线可以通过 (0,0) 并覆盖大部分数据点。 因此,测试结果将偏向于有根单元.

下面的图 5 显示了版本 1 检验未能拒绝原假设(p 值 0.6)的示例,并且数据平稳,平均值为 10。图 6 解释了原因。正如您所看到的,我们找不到没有截距的直线(R 平方为 0),因此拟合直线的斜率为 0(Δyᵢ 不依赖于 yᵢ₋₁)。

图 5. 版本 1 未能识别平稳时间序列(图片由作者提供)
图 6. 线性回归无法找到没有截距的直线(通过 (0,0))(图片由作者提供)

从DF测试到ADF测试

现在我们了解了 DF 检验是线性回归以及如何从线性回归中获取 p 值,让我们继续讨论 ADF。 ADF的计算公式为:

再次,线性回归。 “增强”部分是我们必须拟合更多系数。

statsmodels 包允许显示 AFT 测试的详细摘要。图 7 是结果。

图 7. ADF 测试及详细摘要(图片由作者提供)

我们看到“OLS 回归”(线性回归的默认解决方案)和 17 个系数。我没有指定最大延迟,因此测试将根据时间序列长度尝试最多一个数字,即 17。

const(截距)也已安装。该值为 0.0596。

让我们尝试在 Scikit-learn 中使用线性回归来实现 ADF 测试。图 8 是代码和输出。

图 8. 使用 Scikit-learn 进行 ADF 测试(仅线性回归部分)(图片由作者提供)

截距为 0.0596,其他系数与图 7 中的相同。Scikit-learn 中的线性回归只是普通的 OLS。我们正在做同样的事情,所以结果相同也就不足为奇了。

旅程的终点

在弄清楚如何设置参数后,我使用版本 1(回归='n')测试了图 1 中的原始时间序列,并得到了 0.08 的 p 值,表明它不是平稳的。请注意,图 1 中的数据是零均值的,因此您可以想象 (0,0) 更接近数据点 (Δyᵢ, yᵢ₋₁)。使用版本 1 测试会对我们有所帮助。

由于图 1 中的趋势斜率很小,因此我们还可以使用步骤对时间序列进行重新采样,从而增加斜率。例如,如果我用四个步骤 ( value[::4] ) 对其进行测试,则它将无法通过默认设置的 ADF 测试(对于回归='c',p 值为 0.17)。

问题解决了。

投资讯息

不要盲目相信 ADF 结果。可视化是你的朋友。

ADF测试是一个简单的线性回归,statsmodels的实现使用OLS来解决回归问题。然后,它使用 Dickey-Fuller 表提取 p 值,该 p 值验证了拟合回归中第一个滞后变量的系数为 0 的原假设。

ADF 检验在测试近单位根过程时存在局限性(δ 接近 0)。

我们需要相应地选择合适的ADF版本。例如,当您看到恒定趋势并想要测试“趋势平稳”时,您需要选择“ct”作为参数。如果您要捕捉均值应为 0 的信号的缓慢趋势(如图 1 和图 2 所示),则可能需要选择“n”作为参数以避免拟合截距的影响。 Statsmodels 还支持带有参数“ctt”的量化趋势。对于某些情况,此高级选项可能是一个不错的选择。如果您想进一步挖掘,请参阅 处理包含截距和确定性时间趋势项的不确定性.

我希望您已经了解了 ADF 测试的一些知识。

享受您的时间序列带来的乐趣!

联系我 LinkedIn.

PS:我对时间序列数据有经验和热情。如果你喜欢这篇文章,你可能会对我的其他文章感兴趣 关于时间序列的帖子.

参考资料

GitHub 上的笔记本文件

为什么这个趋势时间序列是固定的?从来源重新发布 https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 通过 https://towardsdatascience.com/feed

–>

时间戳记:

更多来自 区块链顾问