如何分割数据集以进行时间序列预测?


22

我有一家面包店的历史销售数据(每天3年以上)。现在,我想构建一个模型来预测未来的销售量(使用工作日,天气变量等功能)。

我应该如何分割数据集以拟合和评估模型?

  1. 是否需要按时间顺序进行训练/验证/测试拆分?
  2. 然后,我将对火车和验证集进行超参数调整吗?
  3. (嵌套)交叉验证是否是解决时序问题的错误策略?


编辑

这是我跟随@ ene100建议的URL之后遇到的一些链接:

  • 罗布·海恩德曼(Rob Hyndman)在理论上实践中(使用R代码)描述“滚动预测的起源”
  • 滚动预测原点的其他术语是“前行优化”(此处此处),“滚动范围”或“移动原点”
  • 似乎这些技术在不久的将来不会集成到scikit-learn中,因为“这些技术的需求和符号性尚不清楚”(在此处说明)。

是时间序列交叉验证其他建议。

Answers:


8

Rob Hyndman的博客中的此链接提供了一些有用的信息:http : //robjhyndman.com/hyndsight/crossvalidation/

以我的经验,将数据分成按时间顺序排列的集合(第1年,第2年等),并检查参数随时间的稳定性对于构建可靠的对象非常有用。此外,如果您的数据是季节性的,或者有另一种明显的划分方式(例如地理区域)的方法,那么检查这些子组中的参数稳定性还可以帮助确定模型的稳健性以及是否适合拟合用于不同类别数据的单独模型。

我认为统计测试可能有用,但最终结果也应通过“气味测试”。


3

1)从技术上讲,如果您使用AIC和类似的标准,则不需要进行样品测试,因为它们有助于避免过拟合。

3)我看不到如何执行标准CV,因为这意味着训练带有一些缺失值的时间序列模型。相反,请尝试使用滚动窗口进行训练,并预测跟随窗口的一个或多个点的响应。


3
时间序列中的AIC通常基于一个周期的提前预测误差。它没有提供太多关于动态n周期超前预测性能的信息。因此,这绝对是不够的。
Aksakal,2015年

您能提供参考吗?
詹姆斯

1

我经常从贝叶斯角度处理问题。在这种情况下,我会考虑将过度投入作为一种策略。这意味着为数据设置可能性,但忽略一些结果。将这些值视为缺失,并使用其对应的协变量对那些缺失的结果进行建模。然后旋转以忽略数据。您可以在例如10倍CV程序内部执行此操作。

在采样程序中实施时,这意味着在每个步骤中(与参数一起)都将绘制省略数据值的候选值,并根据提议的模型评估其可能性。达到平稳状态后,您将获得给定模型的反事实采样值,可以用来评估预测误差:这些采样回答了以下问题:“如果没有这些值,我的模型会是什么样?” 请注意,这些预测也会从系数估算中存在的不确定性中继承不确定性,因此,当您收集所有的预测值(例如2010年3月1日)时,该日期的预测分布

对这些值进行采样的事实意味着,由于每个步骤都有可用的采样结果值,因此您仍然可以使用依赖于完整数据序列(例如移动平均值)的误差项。


1

就您而言,您没有太多选择。看来,您只有一家面包店。因此,要进行样本外测试,唯一的选择是时间间隔,即训练样本将从开始到最近的某个时间点,而从该时间点到今天的保留时间。

yt=f(t)+εtf(t)ys<Ť


听起来很有前途。y_s <= t中的下标“ s”是什么?
tobip

tyss<t

我想我的面包店销售取决于外在因素。我认为这不是严格的动态时间序列模型,例如股价。在我的数据中,通常的5倍CV的平均平均误差仅比保留了折叠的时间顺序的5倍时间序列CV稍大(例如,此处为30.7对33.8,对于ExtraTreesRegressor) 。不确定这是否是通过经验测试动态模型的有效方法吗?
tobip

诸如ARIMA之类的东西将是一个动态模型。销售通常是持久性的,即今天的销售与昨天的一样。
Aksakal,2015年

0

免责声明:此处描述的方法不是基于对文献的透彻阅读。我的最佳尝试是针对输入窗口长度相对较短(假设在较长的时间跨度内无/低相关性)的多变量时间序列分析改进K折CV方法,其中存在数据源不均匀存在的问题。数据收集期。

首先,将一系列观察转换为一系列观察历史窗口,它们的长度为window_length,并且在窗口之间具有第1步(无步幅)。然后,原理是将窗口数据集拆分为“碎片”,其长度比window_length长很多倍(但比模型实例的数量大很多),然后将碎片(如扑克牌)作为验证数据分配给单独的模型实例。为了使模型更清晰地分离,在所有训练中都将每个分片开头的隔离窗口window_length保留。

对所有模型(除了它们自己的)上的模型进行训练,然后对他们自己的碎片进行验证。通过汇总所有分片上的验证错误来完成模型集合/集合的验证,其中每个分片均由其相应的子模型处理。可以使用所有训练模型的输出的平均值(或其他合适的组合)来完成对看不见的数据的测试。

此方法旨在减少在整个数据收集期间对系统(和数据源)相同的依赖性。它还旨在使数据的每个粗糙部分对模型具有相同的影响。请注意,为防止隔离窗口损害培训,有一点是,分片长度与(预期)出现在数据中的时间段(例如(通常)每天,每周和每年的周期)不太吻合。

集成模型可能无法正确处理全新数据。(我还不知道。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.