时间序列数据集可能包含趋势和季节性,在建模之前可能需要将其去除。
趋势可能导致随时间变化的均值,而季节性可能导致随时间变化的方差,两者都将时间序列定义为非平稳的。平稳数据集是指具有稳定均值和方差的数据集,因此更容易建模。
差分是一种流行且广泛使用的数据变换,用于使时间序列数据平稳。
在本教程中,您将学习如何使用 Python 将差分操作应用于您的时间序列数据。
完成本教程后,您将了解:
- 平稳时间序列和非平稳时间序列之间的对比,以及如何通过差分变换使时间序列平稳。
- 如何应用差分变换从序列中去除线性趋势。
- 如何应用差分变换从序列中去除季节性信号。
我的新书《时间序列深度学习预测》将助您启动项目,其中包括分步教程和所有示例的 Python 源代码文件。
让我们开始吧。

如何使用 Python 中的差分变换去除趋势和季节性
照片由 NOAA 拍摄,保留部分权利。
教程概述
本教程分为4个部分,它们是:
- 平稳性
- 差分变换
- 差分去除趋势
- 差分去除季节性
平稳性
时间序列不同于更传统的分类和回归预测建模问题。
时间结构为观察结果增加了顺序。这种强加的顺序意味着需要特别处理对这些观察结果一致性的重要假设。
例如,在建模时,假设观察结果的汇总统计量是一致的。在时间序列术语中,我们将这种期望称为时间序列的平稳性。
这些假设在时间序列中很容易被趋势、季节性和其他时间相关结构的添加而违反。
平稳时间序列
平稳时间序列中的观察结果不依赖于时间。
如果时间序列没有趋势或季节性效应,则它是平稳的。对时间序列计算的汇总统计量(例如观察结果的均值或方差)随时间保持一致。
当时间序列平稳时,更容易建模。统计建模方法假设或要求时间序列是平稳的。
非平稳时间序列
非平稳时间序列的观察结果显示出季节性效应、趋势以及其他依赖于时间索引的结构。
均值和方差等汇总统计量随时间变化,导致模型可能试图捕获的概念发生漂移。
经典时间序列分析和预测方法通过识别和去除趋势以及去除平稳效应来使非平稳时间序列数据平稳。
使序列数据平稳
您可以通过查看序列随时间变化的折线图来检查您的时间序列是否平稳。
序列中明显的趋势、季节性或其他系统结构是序列非平稳的指标。
更准确的方法是使用统计检验,例如迪基-富勒检验。
您应该使您的时间序列平稳吗?
一般来说,是的。
如果您的时间序列中存在明显的趋势和季节性,则对这些成分进行建模,从观测中去除它们,然后对残差训练模型。
如果我们对数据拟合一个平稳模型,我们假设我们的数据是平稳过程的实现。因此,我们分析的第一步应该是检查是否存在任何趋势或季节性效应的证据,如果存在,则将其去除。
—— 第 122 页,《R 语言时间序列入门》。
统计时间序列方法甚至现代机器学习方法都将受益于数据中更清晰的信号。
时间序列深度学习需要帮助吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
差分变换
差分是转换时间序列数据集的一种方法。
它可以用于去除序列对时间的依赖性,即所谓的时间依赖性。这包括趋势和季节性等结构。
差分可以通过去除时间序列水平的变化来帮助稳定时间序列的均值,从而消除(或减少)趋势和季节性。
—— 第 215 页,《预测:原理与实践》。
差分是通过从当前观测中减去先前观测来执行的。
1 |
差分(t) = 观测值(t) - 观测值(t-1) |
当预测必须转换回原始尺度时,需要反转该过程。
这个过程可以通过将先前时间步的观测值加到差分值上来反转。
1 |
反转(t) = 差分(t) + 观测值(t-1) |
通过这种方式,可以计算一系列差分和反转差分。
滞后差分
计算连续观测值之间的差分称为滞后 1 差分。
滞后差分可以根据特定的时间结构进行调整。
对于具有季节性成分的时间序列,滞后可能预期是季节性周期(宽度)。
差分阶数
在执行差分操作后,某些时间结构可能仍然存在,例如非线性趋势的情况。
因此,差分过程可以重复多次,直到所有时间依赖性都被去除。
执行差分操作的次数称为差分阶数。
计算差分
我们可以手动对数据集进行差分。
这涉及到开发一个新函数来创建差分数据集。该函数将遍历提供的序列,并以指定的间隔或滞后计算差分值。
下面名为 difference() 的函数实现了此过程。
1 2 3 4 5 6 7 |
# 创建差分序列 def difference(dataset, interval=1): diff = list() for i in range(interval, len(dataset)): value = dataset[i] - dataset[i -interval] diff.append(value) return Series(diff) |
我们可以看到,该函数在指定间隔后开始差分数据集,以确保可以实际计算差分值。默认的间隔或滞后值为 1。这是一个合理的默认值。
进一步的改进是能够指定执行差分操作的阶数或次数。
下面名为 inverse_difference() 的函数反转单个预测的差分操作。它要求还提供先前时间步的真实观测值。
1 2 3 |
# 反转差分预测 def inverse_difference(last_ob, value): return value + last_ob |
差分去除趋势
在本节中,我们将介绍如何使用差分变换来消除趋势。
趋势通过增加水平使时间序列非平稳。这导致时间序列均值随时间变化。
下面的示例将 difference() 函数应用于一个具有线性递增趋势的人造数据集。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 创建差分序列 def difference(dataset, interval=1): diff = list() for i in range(interval, len(dataset)): value = dataset[i] - dataset[i -interval] diff.append(value) return diff # 反转差分预测 def inverse_difference(last_ob, value): return value + last_ob # 定义一个具有线性趋势的数据集 data = [i+1 for i in range(20)] print(data) # 对数据集进行差分 diff = difference(data) print(diff) # 反转差分 inverted = [inverse_difference(data[i], diff[i]) for i in range(len(diff))] print(inverted) |
运行示例首先打印具有线性趋势的人造序列。接下来,打印差分数据集,显示每个时间步增加一个单位。此序列的长度为 19 而不是 20,因为序列中第一个值的差分无法计算,因为它没有先前的值。
最后,使用原始序列中的先前值作为每次变换的引子来反转差分序列。
1 2 3 |
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] |
差分去除季节性
在本节中,我们将介绍如何使用差分变换来去除季节性。
季节性变化,或季节性,是随时间规律性重复的循环。
一年内重复的模式称为季节性变化,尽管该术语更广泛地适用于任何固定周期内重复的模式。
—— 第 6 页,《R 语言时间序列入门》。
季节性有多种类型。一些明显的例子包括:一天中的时间、每日、每周、每月、每年等。因此,识别时间序列问题中是否存在季节性成分是主观的。
确定是否存在季节性方面的最简单方法是绘制和查看您的数据,可能以不同的尺度并添加趋势线。
下面的示例将 difference() 函数应用于一个人造季节性数据集。该数据集包括两个周期,每个周期为 360 个单位。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
from math import sin from math import radians from matplotlib import pyplot # 创建差分序列 def difference(dataset, interval=1): diff = list() for i in range(interval, len(dataset)): value = dataset[i] - dataset[i -interval] diff.append(value) return diff # 反转差分预测 def inverse_difference(last_ob, value): return value + last_ob # 定义一个具有季节性的数据集 data = [sin(radians(i)) for i in range(360)] + [sin(radians(i)) for i in range(360)] pyplot.plot(data) pyplot.show() # 对数据集进行差分 diff = difference(data, 360) pyplot.plot(diff) pyplot.show() # 反转差分 inverted = [inverse_difference(data[i], diff[i]) for i in range(len(diff))] pyplot.plot(inverted) pyplot.show() |
运行示例首先创建并绘制了 360 个时间步序列的两个周期数据集。

人造季节性数据集的折线图
接下来,应用差分变换并绘制结果。该图显示了 360 个零值,所有季节性信号均已去除。
在上面的去趋势示例中,差分以滞后 1 应用,这意味着第一个值被牺牲。这里使用整个周期进行差分,即 360 个时间步。结果是整个第一个周期被牺牲,以便对第二个周期进行差分。

差分季节性数据集的折线图
最后,反转变换,显示第二个周期并恢复季节性。

差分数据集与反向差分变换的折线图
进一步阅读
- 维基百科上的平稳过程
- 维基百科上的季节性调整
- 如何使用 Python 检查时间序列数据是否平稳
- 如何使用 Python 差分时间序列数据集
- 如何使用 Python 识别和去除时间序列数据中的季节性
- 使用 Python 进行季节性持续性预测
总结
在本教程中,您了解了平稳和非平稳时间序列之间的区别,以及如何使用 Python 中的差分变换去除趋势和季节性。
具体来说,你学到了:
- 平稳时间序列和非平稳时间序列之间的对比,以及如何通过差分变换使时间序列平稳。
- 如何应用差分变换从序列中去除线性趋势。
- 如何应用差分变换从序列中去除季节性信号。
您对使时间序列平稳有任何疑问吗?
在评论中提出您的问题,我将尽力回答。
优秀的文章,解释了很多。刚学习了标准差,所以这是一个很好的补充。
我发现有趣的是,去除趋势和季节性类似于某些网络(如卷积网络)如何将输入转换为(平移)不变输出。
关于这一点,有一篇我认为您可能会喜欢的切题文章——http://news.mit.edu/2012/brain-waves-encode-rules-for-behavior-1121
Earl Miller 正在做一些非常了不起的工作,您也是。
太棒了!
非常有帮助——谢谢!
谢谢,听到这个我很高兴。
在时间序列中,如果趋势和季节性都存在,那么我们是先去除趋势然后去除季节性,还是反之,以适应模型。
先去除季节性,然后去除趋势。
为什么先去除哪个会有区别?
因为它们线性交互。
我如何在不知道周期滞后的情况下去除季节性?
为什么不直接找出季节性的结构呢?
你能举一个例子说明你如何找到结构或理想的滞后宽度吗?如果上面有,我很抱歉……
是的,使用网格搜索不同的滞后值,并使用在您的测试平台中表现最佳的值。
嗨,Jason!
首先,祝您新年快乐,再次感谢您有用的帖子。
我有一个关于预测一阶差分和恢复初始数据的问题。
我有一个面板数据,其中自相关因变量 y 滞后 12 个时间步,自变量为 X。
在进行一阶差分后,我根据差分的自变量预测新的因变量,我们称之为 y' 和 X'。
y'_{i, t+1} = y_{i, t+1} – y_{i, t}
X'_{i, t} = X_{i, t} – X_{i, t-1}
和
y'_{i, t} = f(X_{i, t-1})
我运行我的回归模型,发现 R 方为 27%。
要恢复我的初始因变量的预测,我的操作是
\hat{y}'{i, t} = y_{i, t-12} + \sum_{s=t-11}^{t}\hat{y}’_{i, s}
(因为我不应该知道 t-11 到 t 月的真实 y 值)
我的 R 方降至 -8%,而 \sum_{s=t-11}^{t}\hat{y}’_{i, s} 的 R 方约为 30%。
我想知道您是否能发现这种推理中的错误,或者这是否正常。
此外,有没有办法处理非平稳数据并在最后调整残差以考虑自相关。我还有一些其他问题,其中因变量可以在几个时间步内保持不变(基于每日观测值计算的风险度量,计算时间窗口为一年,时间步为一个月)。
谢谢!
您可以使用真实或预测的观测值(取决于可用情况)来反转差分预测。
嗨,Jason,
如何使用科学确定的趋势近似值去除趋势。
在我的案例中,我有一个名为:GHI 的测量值,简单来说:地面从太阳接收到的太阳光量。用于能源领域的研究,特别是太阳能。
因此,真实 GHI 使用传感器测量,而 clear_GHI 则根据 The Ineichen 和 Perez 清空天空模型估算。
趋势非常明显,正如你在这里看到的:https://pvlib-python.readthedocs.io/en/latest/clearsky.html 至少在我感兴趣的位置是这样。
首先,我计算了
ghi / clear_ghi
但这看起来很糟糕,因为在日出和日落时接近零的值对除法非常脆弱,因为这些值可能不太正确。
我想的是
clear_ghi – ghi
非常感谢!
也许你指的是季节性循环而不是趋势?
你可以通过季节性差分来去除季节性循环。
非常感谢 Jason,你的博客非常棒。我会尝试一下。
谢谢。
嗨,Jason,
感谢您的解释,这非常有益。
我的问题是为什么我们需要去除季节性和趋势……您能用清晰的要点总结一下原因吗?
它使问题建模变得简单得多。
趋势和季节性是容易的部分,容易到我们现在就想去除它们,这样我们就可以专注于问题的困难部分。
嗨,Jason,
感谢这篇精彩的文章。我有一些疑问,我将尝试用语言表达出来
1)大多数实际时间序列都具有季节性模式和趋势。为了使其平稳,我们需要同时去除季节性和趋势。这正确吗?
2)SARIMAX(季节性 ARIMA)等模型有一个用于差分的参数“d”和一个季节性参数。那么这是否意味着原始时间序列数据可以直接输入到此模型中,并让“d”差分项去除趋势和季节性参数来处理季节性因素。
3)这里变得令人困惑,因为我们一方面说要去除趋势和季节性,然后又谈论可以处理非平稳数据的 SARIMAX 模型。
我希望你能理解我困惑的思绪。期待您的回复。
此致
Chandan
是的,如果数据具有趋势和季节性,在使用线性算法建模之前应将两者都去除。
是的,使用 SARIMA 时无需使数据平稳,因为您将指定如何在模型配置中去趋势和去季节化。如果您愿意,可以事先使其平稳。
希望这能有所帮助。
谢谢您的回复,先生。
所以如果我理解得好,我们通常通过差分(滞后=1 或滞后=季节性)、对数变换等来去除趋势和季节性,主要有两个目的
– 通过验证残差没有模式且平稳
– ACF 和 PACF 没有显示出高波动
然后通过查看 ACF 和 PACF,我们选择在使用 SARIMA 时输入到原始数据系列中的参数。
SARIMA 可以直接对趋势和季节性进行建模。
我明白了,先生。但是 SARIMA 需要输入参数,我看到您的帖子中,您使用 ACF 和 PACF 图来推导它们。
您也可以使用网格搜索
https://machinelearning.org.cn/how-to-grid-search-sarima-model-hyperparameters-for-time-series-forecasting-in-python/
嗨,Jason,
首先,非常感谢您创建这些帖子!
我还阅读了您这篇关于使用 SciKit 管道的帖子(https://machinelearning.org.cn/regression-tutorial-keras-deep-learning-library-python/),并想知道是否有用于对序列进行差分的估计器,在这种情况下,在管道中使用它是否有益甚至是一种好做法。
诚挚的问候,
João
说得好。
我没见过,但这会很有价值!
为什么我们总是倾向于使用平稳数据进行时间序列分析?
是什么阻止我们分析非平稳数据?
平稳时间序列建模起来简单得多。
Jason,
在线搜索结果相互矛盾,我想知道您的意见。如果我们使用 MLP,是否需要去除趋势和季节性?如果是,那么如果简单的 ARIMA(或 ARMA)可以完成工作,那么实际使用 ANN 的意义何在?
这通常是个好主意,并且会使数据集更容易建模。
针对您的数据和模型,尝试使用和不使用并比较结果。
嗨,Jason,
您能帮我找出一下——在进行残差预测后,如何反转差分以获得包含已差分出去的趋势和季节性的预测?在对原始数据集进行 1 次差分并完成预测后,我如何反转或撤销差分,以便我可以获得没有差分的预测数据?
您可以通过添加删除的值并将此值沿序列传播来反转差分。
我这里有一个您可以使用的示例
https://machinelearning.org.cn/machine-learning-data-transforms-for-time-series-forecasting/
你好先生,差分和滑动窗口是一样的吗?如果不是,有没有链接可以学习它?
不,滑动窗口是一种构建时间序列问题的方法,差分是一种从时间序列数据中去除趋势/季节性的方法。
我不确定我的时间序列数据是否具有季节性或趋势,因为它看起来有点像随机噪声。所以我假设数据已经是平稳的了。在训练之前对平稳数据进行差分是否有害,还是我应该省略差分?
尝试使用和不使用差分进行建模,并比较模型误差。
精彩文章……
1. 如果我们的数据集有趋势和季节性,但模型在没有去除趋势和季节性的情况下表现良好。那么问题是,我们是否应该为该模型去除季节性和趋势?
2. 如果有的话,请提供您关于去除模型季节性和趋势的完整项目文章链接。
如果你通过不使序列平稳获得更好的性能,那么就不要使它平稳。但请确保你对这两个模型进行了公平的比较。
是的,请看这篇文章
https://machinelearning.org.cn/time-series-forecast-study-python-monthly-sales-french-champagne/
精彩的片段。
不过我想知道,我能否将相同的程序应用于同时具有季节性和趋势的数据,例如股票数据?
是的——一般来说。至于股票,它们是不可预测的。
你好
我有一个 65 年的时间序列数据。我不知道确切的周期性。我应该如何从数据集中去除季节性?
以几种不同的方式绘制数据?
测试它是否平稳,并尝试以几种不同的方式去除循环,看看结果是否会改变?
这是一个每日时间尺度数据。它是平稳的。您能建议一些去除循环的方法吗?
如果可能的话,也请推荐一些文献。
季节性差分。
嗨,Jason,
感谢这些非常有用的文章!
我正在开发一个用于 15 分钟数据的时间序列预测应用程序。我想尝试差分(一直在应用更传统的缩放),但也要排除异常值(不适用或数据会破坏训练的整天),但这会在差分集中引入异常值!
您建议我如何处理使用差分的异常值?
非常感谢。
不客气。
在差分中……嗯。可能会移除它们或用均值或最后一个合理值替换它们。
如何使用 R 对时间序列数据进行差分
抱歉,我没有在 R 中处理时间序列的示例。
嗨,Jason!
我有一个包含 200 条记录的每日时间尺度数据序列。为了绘制季节性,我应该将频率保持为 1 吗?当我将其设置为 1 时,我观察到一条直线;当我将其设置为 7 时,我看到一个交流电模式。您能指导一下,我应该依赖哪个频率值?
你说的“频率”是什么意思?
嗨,Jason,
感谢您的精彩文章和网站。您为此付出了大量心血。
我只是想知道您是否总是从数据中去除季节性。难道您的算法不会从了解这种季节性模式中获得一些洞察力,以便进行预测吗,还是我遗漏了什么?
谢谢
Michael
谢谢。
是的,总是删除。它对模型来说太简单和分散注意力了。让模型预测问题的难点。
那么我们一直进行差分直到注意到线性趋势?顺便说一下,在输入标签周围添加一个灰色的边框,使其可见。如果你愿意,我可以帮助编写代码。
不,我们进行差分直到数据被报告为平稳。
请解释白噪声和平稳序列之间的区别...
白噪声没有信号。希望平稳序列中存在一些我们可以建模的信号。
如果一个变量在多元预测问题中进行了差分,那么在使用模型进行预测之前是否应该将该变量反转回去?
为什么?抱歉,我不理解其中的原理。
通常,您可以按您希望的任何方式对问题进行建模,发现最适合您数据集的方法。
我想你会将差分变量输入你的模型,然后反转它提供的预测。
感谢您的所有精彩资料。在标题“差分去除季节性”下的第一个代码块的第 17 行中可能有一个错字。它写着……
# 定义一个具有线性趋势的数据集
但也许应该这样写
# 定义一个具有季节性的数据集
谢谢!已修复。
你好 Jason,感谢您提供宝贵的信息!
我有一个问题
如果我使用傅里叶变换或小波变换而不是差分变换来去噪我的非平稳数据,是否可以认为我也使其平稳了?或者是否需要差分变换才能使数据平稳?
我不记得 FFT 是否使序列平稳。
嗨,Jason,
感谢您的精彩帖子。我有一个小问题,如果您能帮助我。
我正在处理的时间序列数据显然具有季节性变化,但 ADF 检验表明数据确实是平稳的。这意味着我可以从 d=0 和 D=0 开始吗?
请帮忙!
谢谢你
也许尝试使用原始数据以及季节性差分后的数据或使用 SARIMA 进行建模,并比较它们的预测能力。
感谢这篇精彩的文章!
我不得不对我的序列进行两次差分才能使其平稳。
然后我将双重差分后的序列输入我的模型并获得了预测。
现在我很难将预测转换回来,因为我没有一次差分序列的值。
我假设这应该可以通过递归方法实现,但无法正确实现。您有什么建议吗?
我最终通过从原始系列中获取更多输入来实现了这一点,即获取训练的前 n 个元素并从那里向上推。
干得好!
您必须按相反的顺序执行操作。
如果您不确定,请参阅此内容
https://machinelearning.org.cn/machine-learning-data-transforms-for-time-series-forecasting/
谢谢!
不客气。
你好 Jason,感谢这篇精彩的文章!
我有一个小问题,我是否应该认为典型的直流电机电流消耗图(电流 vs 时间)中存在趋势,就像这个 http://tiny.cc/xoqtsz
这可以帮助您创建图表
https://machinelearning.org.cn/time-series-data-visualization-with-python/
嗨,Jason,
如果数据集需要差分。你是否也必须进行差分变换?或者什么时候需要除了差分数据集之外还使用变换?
是否应该只尝试差分和差分变换,看看哪个结果看起来最好?
您可以手动进行差分。一些模型会自动为您进行差分,例如 SARIMA/ARIMA。
嗨,Jason,
如果我使用了 Python auto ARIMA `pmdarima`,您知道它会自动对数据进行差分吗?我知道它可以选择不同的 ARIMA 模型,包括 SARIMA。
import pmdarima as pm
model = pm.auto_arima(need_to_train, seasonal=True)
我猜如果使用它,我应该不对数据进行差分,您有什么建议吗?
ARIMA 的输入参数“d”控制差分。
我不了解“auto_arima”,但我猜测它会测试不同的 d 值。
嗨,Jason,
我注意到在您关于使用机器学习进行时间序列的另一篇帖子(LSTM)中,您也对洗发水销售数据集进行了差分。差分数据对机器学习也有好处吗?我可能会尝试对机器学习和 Arima 的数据集进行差分。出于某种原因,我以为差分数据集只适用于 VAR、ARIMA、SARIMA 等统计模型,而不适用于机器学习实践……
是的,在建模之前使时间序列平稳是个好主意,尽管每个模型/数据集都不同。请测试以确认。
ARIMA/SARIMA 将作为模型配置的一部分为您执行差分。
人们是否应该根据相同的策略(即增强迪基富勒 P 值)对时间序列数据集进行差分,无论它是用于机器学习还是 ARIMA?
是的,尽管 ARIMA 会为您进行差分。
你好 Jason,
感谢您非常有帮助的文章。
我有一个包含多个特征的时间序列数据集:有些特征是平稳的,有些特征是非平稳的。
我想我只需要对非平稳特征进行差分,对吗?平稳特征不需要修改?
谢谢!
不客气。
是的,在建模之前使特征平稳是一个好主意。差分是实现这一目标的好方法。
嗨,Jason,
我拥有的数据集是来自建筑物电表的电力类型数据集,我发现我可以通过包含大量天气数据以及大量用于周内时间(日、小时、月份数等)的独热编码虚拟变量来训练一个不错的神经网络模型。
我正在用 Python 和 Tensorflow Keras 库进行实验,我知道在训练过程中默认会随机打乱数据。这对于时间序列类型问题来说是否是一个禁忌,因为随机打乱会去除数据中的季节性(平稳/非平稳)?乍一看,打乱数据的结果并不是那么糟糕,但非随机打乱数据对 MLP 神经网络的结果很差,就像模型训练不好一样。
我知道一些其他时间序列预测方法可以包括 ARIMA、LSTM 等,但我想知道 MLP 是否也可以用于这些目的?我最终需要的是一种短期预测方法,可以结合每小时天气预报(来自网络 API)来预测未来的每小时建筑物电力。非常感谢任何提示。
是的,您可以使用 MLP、CNN 和 LSTM。它首先需要使用滑动窗口将数据转换为监督学习问题
https://machinelearning.org.cn/time-series-forecasting-supervised-learning/
然后以尊重观察时间顺序的方式评估模型,称为步进验证
https://machinelearning.org.cn/backtest-machine-learning-models-time-series-forecasting/
您可以在这里找到数十个教程和我的书
https://machinelearning.org.cn/start-here/#deep_learning_time_series
酷,谢谢所有的信息。所以如果我使用多变量滑动窗口进行 MLP NN,在训练模型时 `shuffle_data == True` 可以吗?还是我不应该打乱训练数据……?非常感谢!
是的,只要训练数据集中的所有数据都比测试集中的数据早。
嗨,Jason,
我有一些关于如何对我的多变量数据集进行去季节化的问题。
数据包含一些分类特征和一些连续特征。我可以看到我的目标列值中存在每周和每日周期——我将如何执行两种不同的季节性差分?
一个额外的复杂性是其他特征具有不同的季节周期——例如,我的“温度”列与我的能源“千瓦时使用量”列具有不同的周期。在这种情况下您会如何处理?您能否简单地独立地对特征进行季节性调整,然后在建模时将所有特征重新组合在一起?
感谢您的文章和您对问题的持续回答——在这个项目中我一直在大量参考它们!
您可以先进行每周差分,绘制图表,如果每日周期仍然明显,则进行每日差分。
您将根据您观察到的该变量的周期对每个变量应用差分。
感谢 Jason 的帮助!我还有另一个相关问题——我的一些特征是“星期几”之类的,这是一个分类值。我有点困惑如何对这类数据进行去季节化,因为它本质上是周期性的——我应该直接删除整个特征本身吗?
无需对分类数据进行差分,我认为这个概念没有意义。
嗨,Jason,
我想通过基于我的目标计算滞后和统计特征来将数据转换为监督学习问题。在这种情况下,我们是否应该首先对目标列进行差分以使其平稳,然后再生成额外的滞后特征?
先谢谢您了。
你好 Amine……您可能会对以下资源感兴趣
https://machinelearning.org.cn/convert-time-series-supervised-learning-problem-python/#:~:text=A%20key%20function%20to%20help,values%20added%20to%20the%20end).
谢谢你的回复。
我实际上想知道基于残差时间序列(即差分时间序列)生成滞后特征对于监督学习问题是否是正确的方法,因为我还没有在实践中看到过。
为了找到季节性并进行预测
1_ 我们可以对序列进行傅里叶变换,找到频率分量,将它们相加,对相加的分量进行逆傅里叶变换以获得季节性,从序列中减去季节性,预测减去的序列,然后将季节性加回预测中吗?
2_ 既然我们可以很容易地从分解中获得季节性成分,为什么人们要采用其他方法来找到它呢?它不准确吗?
简单的季节性差分效果也很好。
你好。这些帖子对我很有用。
在我的研究中,我有一个多元时间序列,有些变量是平稳的,有些则不是。当用简单差分(df.diff())转换整个数据时,我问自己:转换已经平稳的数据是否不好?但只转换一部分似乎不合理……另一件事是,转换后,一些变量变得平坦(几乎在整个时间上保持不变)。这是否意味着我应该用例如更多的滞后进行数据转换?每年?
不客气。
没有必要对已经平稳的数据进行差分。这并不坏,但您增加了不必要的复杂性。
是的,但是有些变量不是平稳的。因此我的想法是,当只有一些变量不是平稳时,我是否应该转换整个数据集?
非常感谢。
可能不需要,如果某些变量不是平稳的,请考虑使它们平稳,并比较直接在原始数据上拟合的模型性能。
我不断阅读关于时间序列预测背景下的平稳性检验。您是否只需要在时间序列分类背景下检验和考虑平稳性?还是只是一个试探性的场景?我似乎找不到任何权威文献说明分类模型需要平稳性的基本假设。
平稳性通常是我们应用 ARMA 模型时的假设,例如。在简单回归中,我们也关心平稳性,因为有独立同分布的假设。
如何从一阶差分中恢复原始值?我正在尝试使用ARIMA预测商品价格的未来值,由于数据集是非平稳的,我取了价格的一阶差分并用一阶差分训练了模型。从预测输出中,如何恢复原始预测价格?我对此部分感到非常困惑。
你好 Anupam……以下讨论可能会有所帮助
https://stats.stackexchange.com/questions/130448/how-to-undifference-a-time-series-variable
你好。当我用这种方法使我的数据平稳时,我有很多零,我的预测是平坦的(LSTM),但如果我多次运行它,我的p值变为0(可能四舍五入),我的预测会好得多。你如何解释这一点?
谢谢!
你好 McanP……请查看以下内容以获取更多见解
https://machinelearning.org.cn/get-the-most-out-of-lstms/