我已经使用 ML 工作了一段时间,尤其是深度学习,但我之前没有使用过时间序列,现在我开始在一个需求预测项目中工作。我正在研究统计/自回归方法,并试图了解如何使用 CNN 和 LSTM 来解决问题。但是我很难在脑海中整理一些东西,主要是关于如何拆分数据集并将模型投入生产。所以,这是我的两个主要疑问:
我开始使用时间序列嵌套交叉验证。好吧,我知道这不是唯一的选择,但我认为调整我的模型超参数并保证它不会过度拟合非常合适。因为在生产中我必须预测接下来的 90 天,所以我的测试集总是 90 天。但这里有一个问题:对于统计/自回归模型(如 ARIMA),当我完成参数调整后,我应该怎么做?我应该使用具有最大训练集的模型投入生产吗?但我不会错过最近 90 天的数据吗?使用整个数据和相同的参数重新训练它是否安全,这样它就不会错过这些数据?
经过大量研究以了解如何将 LSTM 和其他机器学习模型用于时间序列,我了解到需要将训练数据集转换为具有滚动窗口的样本。我的意思是,我通过数据集传递一个窗口,其中 N 个元素作为输入,M 个元素作为输出,窗口一个接一个地移动。好的,但是,如何将训练数据集拆分为训练和验证(使用 ModelCheckpoint 和 EarlyStopping)?我看过一些使用这些生成样本的随机拆分的教程。但我觉得它会在训练集和验证集之间造成数据泄漏。另一个选项似乎是在滚动窗口过程之前以时间方式拆分(例如,拥有 90 天的验证集)。这对我来说听起来更好,因为不会泄露任何数据,但是,我将如何将其投入生产?如果我只是选择使用最大数据集训练的模型,它将从测试集中缺少 90 天加上从验证集中缺少 90 天。因此,它不会选择最近的趋势。而且我认为简单地用整个数据集和相同的超参数重新训练模型是不安全的,因为我没有办法提前停止训练过程。
我知道我需要不断地重新训练我的模型,因为世界在变化,它需要选择新的数据趋势。因此,在找到最佳超参数后,我希望模型能够在给定的时间表内(例如每周)自动使用它们进行训练。但我无法解决这些疑问。我是在使用 90 天前(使用统计模型)还是 180 天前(使用 ML} 的数据来训练一个模型来预测接下来的 90 天?
