时间序列的训练/测试拆分

机器算法验证 时间序列 交叉验证
2022-04-01 11:43:59

我正在使用 3 年的每日销售数据进行产品需求预测。我已经建立了一些模型,现在我想测试它们。根据Rob Hyndman 的书此资源,扩展窗口向前交叉验证是在时间序列上下文中评估模型的黄金标准。

我的问题是,最合适的拆分是什么?我应该在第一年(365 天)开始训练它,然后在剩下的 2 年(730 天)进行前瞻测试吗?我预计会发生的是,预测中的误差会随着训练集的增长而减少,这意味着当训练集较小时,误差会很大。是否可以在头两年开始训练它,然后在最后一年进行验证?

谢谢,任何见解将不胜感激。

3个回答

产品需求数据通常具有年度季节性。第一年的培训是不够的,因为您的模型将无法捕捉任何年度季节性或任何长期趋势。出于这个原因,大多数算法需要至少 2 年的数据(越多越好——但这并不总是可用于零售需求预测数据)。

同时,您要确保所有的季节性也存在于您的测试集中 - 因此您的案例中的最佳拆分是 2 年的训练和 1 年的测试。

您认为每年有显着的变化吗?

如果是,那么仅使用 1 年的数据和删除的变异源来拟合模型可能没有意义。

如果不是,由于季节性趋势,这通常不太可能,您可以尝试使用 1 年的数据。使用这么小的训练集有点不常见,并且可能不是对简约性的可靠评估。

最后,如果构建和评估模型的计算成本很低,您可以从第一年开始试验您的想法并获得相同的验证结果(加上额外的一年)。如果第一年的验证误差相对于第二年较大,则表明该模型没有考虑较大的变异来源(可能是您的年度效应),或者该模型过度拟合。如果第 1 年和第 2 年的验证误差相似,则表明可能没有大的年度变化并且模型没有过度拟合。

日常数据通常严重依赖于日常习惯,即在处理记忆效应时考虑确定性结构更为重要(例如上周的同一天)。每日数据还取决于假期影响(领先、同期和滞后)。此外,通常还有月度效应和水平位移效应和趋势效应。我们经常发现一个月中的特定日子是重要的,甚至是一个月中的一周的影响。我们建议 3-4 年的历史能够梳理出常规,同时对不规则保持稳健。

预测客户的支出是一项有趣的研究,您可能会从中受益并在这里进行更多讨论https://stats.stackexchange.com/search?q=user%3A3382+daily+data

在拆分数据方面,我最初可能会使用 80/20 拆分并测量来自多个来源的准确度,而不仅仅是 1 个来源的样本,以确保对模型性能进行全面/客观的估计,因为“一只燕子不是夏天制造的”。 .