当你面对一个新的时间序列预测问题时,有很多事情需要考虑。
你做出的选择直接影响项目中的每一步,从设计用于评估预测模型的测试框架,到你正在处理的预测问题的基本难度。
通过一系列关于时间序列预测问题的问题,可以非常快速地缩小选择范围。通过考虑每个主题中的几个主题和问题,你可以缩小问题的类型、测试框架,甚至是项目的算法选择。
在这篇文章中,你将发现一个框架,你可以用它来快速理解和构建你的时间序列预测问题。
通过我的新书《深度学习时间序列预测》启动你的项目,其中包括分步教程和所有示例的Python源代码文件。
让我们开始吧。

时间序列预测问题分类
图片来自Adam Meek,保留部分权利。
框架概述
时间序列预测涉及对观测之间存在有序关系的数据开发和使用预测模型。
你可以在这篇文章中了解更多关于时间序列预测的内容
在你开始项目之前,你可以回答几个问题,大大提高你对预测问题结构、所需模型结构以及如何评估它的理解。
本文中介绍的框架分为七个部分;它们是
- 输入与输出
- 内生变量与外生变量
- 非结构化与结构化
- 回归与分类
- 单变量与多变量
- 单步与多步
- 静态与动态
- 连续与非连续
我建议在开始任何时间序列预测项目之前先了解这个框架。
你第一次回答时可能不够明确,这些问题可能需要你研究数据、领域,并与专家和利益相关者交谈。
随着你了解更多,更新你的答案,这将有助于你保持专注,避免分心,并为你项目开发所需的实际模型。
时间序列深度学习需要帮助吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
1. 输入与输出
通常,预测问题涉及使用过去的观测值来预测或预报一个或多个可能的未来观测值。
目标是猜测未来可能发生的事情。
当你需要进行预测时,关键是考虑你将用来进行预测的可用数据,以及你将要猜测的未来内容。
我们可以将其概括为模型在进行单次预测时的输入和输出。
- 输入:为了进行单次预测而提供给模型的历史数据。
- 输出:超出输入数据范围的未来时间步的预测或预报。
输入数据不是用于训练模型的数据。我们还没有到那一步。它是用于进行一次预测的数据,例如,过去七天的销售数据用于预测未来一天的销售数据。
定义模型的输入和输出会迫使你思考进行预测究竟需要什么或可能需要什么。
在输入数据方面,你可能无法具体说明。例如,你可能不知道进行预测需要一个还是多个先前的时间步。但是你将能够识别可用于进行预测的变量。
预测的输入和输出是什么?
2. 内生变量与外生变量
输入数据可以进一步细分,以更好地理解其与输出变量的关系。
如果一个输入变量受到系统中其他变量的影响,并且输出变量依赖于它,那么它就是内生变量。
在时间序列中,输入变量的观测值相互依赖。例如,时间 t 的观测值依赖于时间 t-1 的观测值;t-1 可能依赖于 t-2,依此类推。
如果一个输入变量独立于系统中其他变量,并且输出变量依赖于它,那么它就是外生变量。
简而言之,内生变量受到系统中其他变量(包括它们自身)的影响,而外生变量则不受影响,并被视为系统外部变量。
- 内生变量:受到系统中其他变量影响且输出变量依赖的输入变量。
- 外生变量:不受系统中其他变量影响且输出变量依赖的输入变量。
通常,时间序列预测问题具有内生变量(例如,输出是先前某个时间步数的函数),并且可能具有也可能不具有外生变量。
通常,鉴于对时间序列的高度关注,外生变量会被忽略。明确思考这两种变量类型可能有助于识别容易被忽略的外生数据,甚至是可以改进模型的工程特征。
什么是内生变量和外生变量?
3. 回归与分类
回归预测建模问题是指预测一个数量的问题。
数量是一个数值;例如,价格、计数、数量等。如果一个时间序列预测问题中你想要预测一个或多个未来数值,那么它就是一个回归类型的预测建模问题。
分类预测建模问题是指预测一个类别的问题。
类别是来自一组定义明确的小标签集中的一个标签;例如,{“热”、“冷”}、{“上涨”、“下跌”}和{“买入”、“卖出”}都是类别。
如果一个时间序列预测问题中你想要对输入时间序列数据进行分类,那么它就是一个分类类型的预测建模问题。
- 回归:预测一个数值量。
- 分类:归类为两个或更多标签之一。
你正在处理的是回归问题还是分类预测建模问题?
这些类型之间存在一定的灵活性。
例如,回归问题可以重新定义为分类问题,分类问题也可以重新定义为回归问题。有些问题,比如预测序数值,可以同时定义为分类和回归问题。重新定义你的时间序列预测问题可能会简化它。
有哪些替代方法可以构建你的时间序列预测问题?
4. 非结构化与结构化
绘制时间序列中的每个变量并检查图表以寻找可能的模式是有用的。
单个变量的时间序列可能没有任何明显的模式。
我们可以将没有模式的序列视为非结构化的,即没有可辨别的时间依赖结构。
反之,时间序列可能具有明显的模式,例如趋势或季节性周期,这被视为结构化的。
我们通常可以通过识别和去除数据中明显的结构(例如,增长趋势或重复周期)来简化建模过程。一些经典方法甚至允许你直接指定参数来处理这些系统性结构。
- 非结构化:时间序列变量中没有明显的系统性时间依赖模式。
- 结构化:时间序列变量中存在系统性时间依赖模式(例如,趋势和/或季节性)。
时间序列变量是非结构化还是结构化的?
5. 单变量与多变量
随着时间测量的一个变量被称为单变量时间序列。单变量意味着一个变量或一个特性。
随着时间测量多个变量被称为多变量时间序列:多个变量或多个特性。
- 单变量:随着时间测量一个变量。
- 多变量:随着时间测量多个变量。
你正在处理单变量还是多变量时间序列问题?
考虑到输入和输出的这个问题可能会增加进一步的区别。输入和输出之间的变量数量可能不同,例如,数据可能不对称。
例如,你可能有多个变量作为模型的输入,但只对预测其中一个变量作为输出感兴趣。在这种情况下,模型中存在一个假设,即多个输入变量有助于并且是预测单个输出变量所必需的。
- 单变量和多变量输入:随着时间测量的一个或多个输入变量。
- 单变量和多变量输出:需要预测的一个或多个输出变量。
6. 单步与多步
需要预测下一个时间步的预测问题称为一步预测模型。
而需要预测多个时间步的预测问题称为多步预测模型。
预测的未来时间步越多,问题就越具有挑战性,因为每个预测时间步的不确定性都会累积。
- 一步:预测下一个时间步。
- 多步:预测多个未来时间步。
你需要单步预测还是多步预测?
7. 静态与动态
可以一次开发一个模型,并重复使用它进行预测。
鉴于模型在预测之间不进行更新或更改,我们可以认为这个模型是静态的。
相反,我们可能会在进行后续预测之前收到新的观测值,这些观测值可用于创建新模型或更新现有模型。我们可以将每次预测之前开发新模型或更新现有模型视为一个动态问题。
例如,如果问题要求在周初对未来一周进行预测,我们可能会在周末收到真实的观测值,我们可以使用这些观测值在进行下周预测之前更新模型。这将是一个动态模型。如果我们没有在周末得到真实的观测值,或者我们得到了但选择不重新拟合模型,这将是一个静态模型。
我们可能更喜欢动态模型,但领域限制或所选算法的局限性可能会施加使这难以实现。
- 静态。预测模型一旦拟合,就用于进行预测。
- 动态。预测模型在每次预测前都会根据新可用的数据进行拟合。
你需要静态模型还是动态更新模型?
8. 连续与非连续
观测值随时间均匀分布的时间序列可描述为连续的。
许多时间序列问题都具有连续观测值,例如每小时、每天、每月或每年一次观测。
观测值随时间不均匀分布的时间序列可描述为非连续的。
观测值的不均匀性可能由缺失或损坏的值引起。这也可能是问题的一个特征,即观测值仅零星提供,或者以递增或递减的时间间隔提供。
在观测值不均匀的情况下,在拟合某些模型时可能需要特定的数据格式化,以使观测值随时间均匀。
- 连续。观测值随时间均匀分布。
- 非连续。观测值随时间不均匀分布。
你的观测值是连续的还是非连续的?
进一步阅读
本节列出了一些供进一步阅读的资源。
总结
回顾一下,你可以问的问题和主题如下:
- 输入与输出
- 预测的输入和输出是什么?
- 内生变量与外生变量
- 什么是内生变量和外生变量?
- 非结构化与结构化
- 时间序列变量是非结构化还是结构化的?
- 回归与分类
- 你正在处理的是回归问题还是分类预测建模问题?
- 有哪些替代方法可以构建你的时间序列预测问题?
- 单变量与多变量
- 你正在处理单变量还是多变量时间序列问题?
- 单步与多步
- 你需要单步预测还是多步预测?
- 静态与动态
- 你需要静态模型还是动态更新模型?
- 连续与非连续
- 你的观测值是连续的还是非连续的?
你觉得这个框架对你的时间序列预测问题有用吗?
在下面的评论中告诉我。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
有没有流程图或其他工具可以帮助理解以上问题的答案?也就是说,一旦我们知道了以上问题的答案,我们如何选择适合我们数据的模型?
好问题詹姆斯!
下一篇预定(周五)的帖子将确切回答这个问题。
Jason博士,能否提供您在此评论中提及的帖子链接?
当然
https://machinelearning.org.cn/how-to-develop-a-skilful-time-series-forecasting-model/
好帖子。
在多步预测中,我想补充一点,我们可以预测变量在未来时间上的差异、积分等...
有一点我没有百分百理解(我想),那就是
多变量(Multivariate)与多变量(Multivariable)术语?
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3518362/
https://www.researchgate.net/post/Are_the_terms_multivariate_and_multivariable_the_same
例如,你举例的CO2“多变量”时间序列,根据这些链接,是“多变量”还是“多变量”?
很棒的工作
谢谢。
嗨,Jason,
您推荐哪种方法来预测外汇汇率?
我拥有美元-印度卢比货币对的历史数据,希望预测该汇率的短期、中期和长期走势。
我对货币不了解。
也许可以尝试这个过程
https://machinelearning.org.cn/how-to-develop-a-skilful-time-series-forecasting-model/
感谢您对时间序列的各种关键词的精彩介绍。我正在开始我的一个小时间序列项目;我正在关注您的博客。
我很高兴它有所帮助。
对于多变量、内生、连续时间序列,如果主题专家可以提供基于产品变化的未来时间序列预测的百分比影响,您会记录什么预测?也许是某种加权移动平均?
我建议测试一系列方法,以发现哪种方法最适合特定数据集。
嗨,杰森,
使用LSTM预测时间序列数据。在拟合模型之前进行预测是否可行?model.fit()...我正在使用LSTM模型预测时间序列数据。
不,模型必须在进行预测之前进行拟合。
你好,Jason!
感谢您的文章!我在哪里可以读到更多关于非连续时间序列的内容?我在谷歌上找到了更多“不连续”而不是“非连续”(((您可能知道一些文章
我没有关于这个主题的教程。
你可以尝试直接对数据进行建模。
你可以尝试填充数据以使时间间隔一致。
你可以尝试使用掩码层来跳过填充值。
你可以尝试对数据进行上采样/下采样。
希望这些能作为一个开始有所帮助。
嗨,Jason,
感谢您的文章,
训练单变量时间序列窗口时,所有有影响的变量难道不是已经嵌入到用于训练的历史数据的趋势和季节性中了吗?运行单变量难道不够吗?
你到底是什么意思?也许你可以详细说明一下?
假设我有一个2000年至2018年GDP的单变量数据集,我想预测2019年至2025年的GDP。
1. 我如何决定是使用单变量时间序列预测还是多变量时间序列预测?
2. 考虑到GDP历史数据(2000-2018)的趋势和季节性已经由于其他变量(如通货膨胀、失业率等)在时间序列中对GDP的影响而发生,那么进行单变量ARIMA或SARIMA是否足够,因为它考虑了AR、I、MA?
谢谢你。
如果你只有一个变量,它是单变量的,否则是多变量的。
如果你有多个变量,尝试先作为单变量建模,然后作为多变量建模并比较结果。
测试看看…
嗨,Jason,
感谢这篇博客,它真的帮助我首先理解了我的问题。然而,我相信可以给这篇博客增加一个补充,使其更容易理解——在最后提供2-3个例子,并针对这些例子逐一回答所有8个问题。这样我们就能更好地理解某种任务是如何在8个问题中的每个类别中归类的。
好建议!
我在这里提供了许多例子
https://machinelearning.org.cn/start-here/#deep_learning_time_series
亲爱的杰森…感谢您的精彩文章。
解释深度学习和机器学习在不断增长的时间序列数据中各自性能的比较?
当数据量增加时,机器学习技术在性能方面不足。请解释
问题与技术的映射并不那么清晰。
有时简单的模型在大量数据上表现良好,有时则不然。你必须始终测试多种方法,并发现哪种方法最适合特定数据集。
你好Jason。感谢这篇精彩的文章。建模非结构化数据的步骤是什么?我们如何确认时间序列本身不具有任何预测能力?
你说的非结构化是什么意思?
如果数据没有预测性,你需要新的/不同的数据。
Jason,
您的博客是我参考的资料之一。谢谢。
我很好奇如何用Web流量时间序列数据填充外生变量。
我有一个Web流量数据,它以每小时采样一次,共7天,持续5周。
我意识到周末的流量显著减少。
我如何在24*7*5的数据集中建模代表这个外生变量的序列?
请帮忙。
谢谢。
是的,对于大多数线性模型来说,这是预期的。
很抱歉我的打字错误。
我的意思是,我是否需要将外生变量热编码为0和1的向量,例如,对于假期和周末,每个24个数据点?
我是RNN、CNN时间序列预测的初学者。
或许可以试试看?
首先,Jason博士,您做得很好,
您能建议如何识别某个问题应该采用时间序列方法吗?例如:如果我要预测超市未来三个月的销售额。因此,如果我们要预测,我们就会使用时间序列方法。
同样,有哪些凭证可以知道是否应该通过时间序列来解决这个问题。
提前感谢
谢谢。
数据听起来像时间序列,请参阅本教程
https://machinelearning.org.cn/time-series-forecasting/
谢谢 Jason
不客气。
曲线拟合无疑是一种有用的技术,但没有理由的答案只在极少数情况下有用。在某个阶段,人们会开始对因果关系而不是相关性感兴趣。当然,曲线拟合是一个简单的答案,但它对潜在系统动力学或因果因素一无所知。
我喜欢您的文章,它展现了在曲线拟合领域深厚的知识。您是否曾研究过挖掘巧合,然后解决因果序列依赖性?例如(https://www.mybytes.de/papers/moerchen06tdm.pdf)
谢谢分享,布雷特。
不确定我是否同意
https://machinelearning.org.cn/faq/single-faq/how-do-i-interpret-the-predictions-from-my-model
不熟悉这个作品——很感谢。
谢谢您的反馈,请考虑以下内容https://www.forbes.com/sites/kalevleetaru/2019/04/18/deep-learning-and-the-limits-of-learning-by-correlation-rather-than-causation/#2bba9b4b7487
抱歉,链接错误https://www.forbes.com/sites/alexanderlavin/2019/05/06/ai-needs-more-why/#4fbc99a0156d
注意,虽然巧合挖掘对于建立独立序列非常有用,但最终得到偏序序列的项集挖掘方法并不令人满意。相反,请考虑过程挖掘领域中的启发式挖掘算法,这是处理具有噪声数据的因果序列依赖性的最佳方法。
简而言之,通过挖掘巧合来确定重叠,然后挖掘描述序列因果关系的依赖图。请查看(https://research.tue.nl/nl/publications/process-mining-with-the-heuristicsminer-algorithm)
谢谢,布雷特。