使用随机森林的单变量自回归预测提前 4 步

问题描述 投票:0回答:0

我一直在尝试按照 thisthis 等示例使用随机森林进行时间序列预测。但是,我仍然不清楚如何预测超出时间序列中最后一个数据点的值。

我有一个单变量时间序列,每周频率约为 5 年的历史数据,只有

date
value
字段,我想用它来预测提前 4 步(时间范围 = 4),使用过去的值(自回归)。我已经处理了数据集,因此值的原始向量变成了矩阵,其中第一列是原始数据,其他列是它的滞后版本(例如
t-1
t-2
,...,
t-n
,其中
n
是我可以决定的滞后)。

lag = 4
的例子:

date,value,value.l1,value.l2,value.l3,value.l4
2017-01-01,1070,NA,NA,NA,NA
2017-01-08,603,1070,NA,NA,NA
2017-01-15,1788,603,1070,NA,NA
2017-01-22,38,1788,603,1070,NA
2017-01-29,1894,38,1788,603,1070
...
2023-02-26,2420,5550,871,623,1059

实际上,由于我的最后一个数据点是

2023-02-26
,我想预测
2023-03-05
2023-03-12
2023-03-19
2023-03-26
的值。

我明白我应该使用滞后值作为随机森林的特征(或预测变量),但我不清楚这种数据结构如何让我预测最后一个数据点之后的数据点(

2023-02-26
) .

我最初的想法是将滞后数设置为等于所需的时间范围(如上例所示),扩展原始矩阵以包括我感兴趣的未来日期,并使用每个日期中可用的滞后值来使用基于过去数据的模型进行预测。但是,这样我在前进的过程中会丢失一些数据。

扩展矩阵的例子(第一列是我要预测的目标,其他是预测变量):

date,value,value.l1,value.l2,value.l3,value.l4
2023-03-05,NA,2420,5550,871,623
2023-03-12,NA,NA,2420,5550,871
2023-03-19,NA,NA,NA,2420,5550
2023-03-26,NA,NA,NA,NA,2420

如您所见,在

2023-03-26
中我只有
value.l4
来进行预测。

另一个想法是一次只预测 1 步提前 4 次,并将每一步的预测值用作下一个时间步的(滞后)预测变量(基本上,用预测填充缺失值)。但是,我认为这可能会使预测恶化,具体取决于算法的准确性。

我不确定这是正确的方法,所以我寻求帮助以解决这个问题。

我知道还有其他技术可以解决这类问题(例如 ARIMA),但我真的想用机器学习技术对此进行测试,这样我就有希望应用随机森林以外的其他算法。

编辑

实际上,我只是试了一下,它并没有像我想的那样工作,因为一旦我到达超出原始时间序列的日期,随机森林就会正确地抱怨训练集中没有响应值。

因此,我现在的想法是,即使对于过去的值,也要提前计算 1 步预测,以便我有数据来计算误差指标。对于数据集中的每个日期,我会循环执行此操作:

  1. 使用大量过去的观察(比如 100)训练模型,使用滞后特征作为预测变量
  2. 使用拟合模型和滞后的预测变量提前预测 1 步
    t+1

一旦我到达响应列中没有可用数据的日期,我将使用在前一个循环迭代中计算的预测来填充这些缺失值,这将在下一个循环中成为训练集的(一小部分)迭代。

我会用结果更新这篇文章。

machine-learning time-series random-forest forecasting
© www.soinside.com 2019 - 2024. All rights reserved.