时间序列预测过程是一系列步骤或一个方案,它指导您从定义问题到获得时间序列预测模型或一组预测结果。
在这篇文章中,您将了解到可用于指导您完成预测项目的时间序列预测过程。
阅读本文后,你将了解:
- 由Hyndman和Athanasopoulos提出的5步预测任务,旨在指导您从问题定义到使用和评估预测模型。
- 由Shmueli和Lichtendahl提出的迭代预测开发过程,旨在指导您从定义目标到实施预测。
- 关于如何完成您自己的时间序列预测项目的建议和技巧。
通过我的新书《使用Python进行时间序列预测》启动您的项目,其中包括逐步教程和所有示例的Python源代码文件。
让我们开始吧。

如何完成一个时间序列预测项目
图片由TravelingOtter提供,保留部分权利。
5步预测任务
Hyndman和Athanasopoulos在他们的书《预测:原理与实践》中总结了预测任务的5个基本步骤。这些步骤是:
- 问题定义。仔细考虑谁需要预测以及预测将如何使用。这被描述为过程中最困难的部分,很可能是因为它完全取决于具体问题且具有主观性。
- 收集信息。收集历史数据以进行分析和建模。这还包括获取领域专家的帮助,并收集有助于最佳解释历史信息以及最终将做出的预测的信息。
- 初步探索性分析。使用简单工具(如绘图和汇总统计)来更好地理解数据。审阅图表,总结并注意明显的时序结构,如趋势、季节性、异常情况(如缺失数据、损坏和异常值),以及任何其他可能影响预测的结构。
- 选择和拟合模型。针对问题评估两三个或一套不同类型的模型。可以根据模型的假设以及数据集是否符合这些假设来选择模型进行评估。模型将被配置并拟合到历史数据。
- 使用和评估预测模型。模型用于进行预测,并评估这些预测的性能和模型的能力。这可能涉及使用历史数据进行回溯测试,或等待新的观测数据可用于比较。
这个5步过程提供了一个从想法或问题陈述开始,到可以用来进行预测的模型完成的强大概述。
该过程的重点是理解问题并拟合一个好的模型。
每个模型本身都是一个基于一系列假设(显性和隐性)的人工构建,通常涉及一个或多个参数,这些参数必须使用已知的历史数据进行“拟合”。
— 第22页,《预测:原理与实践》
停止以**慢速**学习时间序列预测!
参加我的免费7天电子邮件课程,了解如何入门(附带示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
迭代预测开发过程
作者Shmueli和Lichtendahl在他们的书《使用R进行实用时间序列预测:动手指南》中提出了一个8步过程。
这个过程超越了模型开发和预测,涉及迭代循环。
他们的过程可以概括如下:
- 定义目标。
- 获取数据。
- 探索和可视化序列。
- 预处理数据。
- 分割序列。
- 应用预测方法。
- 评估和比较性能。
- 实施预测/系统。
以下是过程中的迭代循环:
- 探索和可视化序列 => 获取数据。数据探索可能引发需要访问新数据的问题。
- 评估和比较性能 => 应用预测方法。模型评估可能提出新方法或新方法配置的问题或想法。
该过程更侧重于对问题的一个或多个模型进行持续开发和完善,直到达到可接受的性能水平。
这个过程可以持续进行,随着新数据和新见解的出现,模型会进行修订和更新。
当然,一旦生成预测,这个过程并不会结束,因为预测通常是一个持续的目标。因此,预测准确性会受到监控,有时预测方法会根据目标或数据随时间的变化进行调整或更改
— 第16页,《使用R进行实用时间序列预测:动手指南》
建议和技巧
本节列出了在进行时间序列预测项目时需要考虑的10条建议和技巧。
这些建议的核心在于,你无法预先知道什么会起作用,更不用说哪种方法对你的问题会有效。而预测项目最佳的知识来源来自于对真实历史数据进行试错的结果。
- 选择或设计一个适合您项目、工具、团队和专业水平的时间序列预测流程。
- 在分析和预测工作中记下所有假设和问题,然后稍后回顾它们,并尝试通过对历史数据进行小型实验来回答它们。
- 查看大量以不同时间尺度、缩放和观测值变换形式绘制的数据图,以帮助您清晰地发现数据中存在的、可利用的结构。
- 开发一个稳健的测试工具,使用有意义的性能度量和可靠的测试策略(例如滚动预测的“步进验证”)来评估模型。
- 从简单的朴素预测模型开始,为更复杂的改进方法提供性能基线。
- 创建大量关于您的时间序列数据的视角或视图,包括一套自动化转换,并使用一个或一套模型对每个视图进行评估,以帮助自动发现非直观的表示和模型组合,从而为您的任务带来良好的预测。
- 针对您的问题,尝试使用一套不同类型的模型,从简单到更高级的方法。
- 尝试针对给定问题的一系列配置,包括在其他问题上表现良好的配置。
- 尝试模型的自动化超参数优化方法,以筛选出一套表现良好的模型以及您手动无法尝试的非直观模型配置。
- 设计自动化的性能和技能测试,用于持续预测,以帮助自动确定模型何时过时以及需要审查或重新训练。
进一步阅读
本节列出了一些您可以用来学习更多时间序列预测过程的资源。
- 第1.3节 预测过程,《使用R进行实用时间序列预测:动手指南》。
- 第1.6节 预测任务的基本步骤,《预测:原理与实践》
您知道哪些关于时间序列预测过程的好资源吗?
请在下面的评论中分享。
总结
在这篇文章中,您了解了可以用来解决时间序列预测问题的过程。
具体来说,你学到了:
- Hyndman和Athanasopoulos提出的处理时间序列预测任务的5个步骤。
- Shmueli和Lichtendahl提出的定义目标和实施预测系统的8步迭代过程。
- 在进行时间序列预测项目时要考虑的10条建议和实用技巧。
您对时间序列预测过程或本文有任何疑问吗?
请在下面的评论中提出您的问题。
我可以推荐这个GitHub页面,它讨论了时间序列过程。
https://github.com/rouseguy/TimeSeriesAnalysiswithPython
谢谢John提供的有用预测技巧。我有一个问题,请帮忙——我有学校往年的招生数据。预测未来招生的最佳算法是什么?
尝试一系列算法,发现最适合您特定数据集的算法。
嗨,Jason,
我对数据预处理和训练测试划分的顺序感到困惑。你能解释一下它们先后进行的原因,以及你能在缩放之前进行划分吗?谢谢
我建议
1. 幂变换
2. 差分
3. 标准化
4. 归一化
在相关的情况下,按照这个顺序进行。
嗨,先生,我正在处理时间序列数据集,但数据列只有时间值,格式为hh:mm::ss,而不是日期值,如yy::mm::dd。你能帮我如何根据时间[hh:mm:ss](比如23:32:12)进行预测吗?请帮我。
其实没什么区别,模型更关注连续观测值,而不是时间的具体增量。
现在,在当前项目中,我将把所有这些知识应用到真实生活数据集中。我将从头到尾完成一个时间序列预测项目,从收集或导入数据集,分析和转换时间序列到训练模型,以及对新数据进行预测。
我如何使用 R 来完成这些?
这些书将帮助您在R中进行时间序列预测。
https://machinelearning.org.cn/books-on-time-series-forecasting-with-r/
嗨,Jason,
非常感谢您帮助机器学习社区提升技能。我目前正在研究空集装箱量的预测,这是一个时间序列问题,需要您的帮助来找到解决方案。我建立了多个模型,包括ARIMA、ARMA、LASSO、RIDGE、MLP和CNN——使用这些模型,我能够预测给定港口数据(例如,运输类型(进口/出口)、过去3个月的空集装箱数量、带有经纬度的交货港口/仓库)下的空集装箱。我发现一些港口由于高出口而面临空集装箱量问题——集装箱从交货港口空载返回。
现在,我有兴趣利用每个港口空集装箱的预测需求,优化空集装箱到服务于所述港口最近的仓库的分配,目标是在给定时间范围内最小化集装箱移动次数:1)进口:卡车运载一个满载集装箱 -> 在客户处卸货 -> 卡车运走空集装箱 -> 将空集装箱存放到最近的港口/仓库。2)出口:卡车从最近的港口/仓库收集一个空集装箱 -> 卡车将空集装箱运到客户处 -> 在客户处装载集装箱 -> 卡车将装载好的集装箱运到港口。
不客气!
这听起来像是一个有趣的项目!感谢您分享您的进展。
由于我不了解您问题的细节,因此很难给出具体建议。也许您可以尝试原型化几种不同的问题框架,看看哪种有效/合理?
非常感谢您的及时回复,杰森。我实际上在思考如何将港口空集装箱预测与优化结合起来时遇到了困难。原始数据包含集装箱数量、状态(空、待授权等)以及各个港口信息,例如(经度、纬度)距离、进出口和交货港口。任何与我问题类似的链接或推荐都将非常有帮助。:)
也许这会给你一些想法
https://machinelearning.org.cn/faq/single-faq/how-to-develop-forecast-models-for-multiple-sites
非常感谢这篇有用的文章。
在我的数据集中,我有个体,每个个体都有他们自己的相同测量的时间序列。
纵向预测通常是如何进行的?
我对纵向(面板)数据分析略知一二,但我尚未进行过纵向数据预测。
你好 RT… 不客气!您可以研究使用深度学习方法进行多元预测。
https://machinelearning.org.cn/multivariate-time-series-forecasting-lstms-keras/