是否可以使用 FB Prophet 进行多变量多步预测?

Abh*_*ora 24 python machine-learning time-series forecasting facebook-prophet

我正在研究一个多变量(100 多个变量)多步(t1 到 t30)预测问题,其中时间序列频率为每 1 分钟一次。该问题需要预测 100 多个变量之一作为目标。我很想知道是否可以使用 FB Prophet 的 Python API 来做到这一点。我能够仅使用目标变量和日期时间变量以单变量方式完成此操作。任何帮助和指导表示赞赏。请让我知道这个问题是否需要进一步的输入或澄清。

que*_*ise 38

您可以使用add_regressor 方法在 Prophet 中添加其他变量。

例如,如果我们还想y使用附加变量add1和的值来预测变量add2

让我们首先创建一个示例 df:

import pandas as pd
df = pd.DataFrame(pd.date_range(start="2019-09-01", end="2019-09-30", freq='D', name='ds'))
df["y"] = range(1,31)
df["add1"] = range(101,131)
df["add2"] = range(201,231)
df.head()
            ds  y   add1 add2
0   2019-09-01  1   101 201
1   2019-09-02  2   102 202
2   2019-09-03  3   103 203
3   2019-09-04  4   104 204
4   2019-09-05  5   105 205
Run Code Online (Sandbox Code Playgroud)

并拆分训练和测试:

df_train = df.loc[df["ds"]<"2019-09-21"]
df_test  = df.loc[df["ds"]>="2019-09-21"]
Run Code Online (Sandbox Code Playgroud)

在训练预测器之前,我们可以添加使用附加变量的回归量。这里的参数add_regressor是训练 df 中附加变量的列名。

from fbprophet import Prophet
m = Prophet()
m.add_regressor('add1')
m.add_regressor('add2')
m.fit(df_train)
Run Code Online (Sandbox Code Playgroud)

然后 predict 方法将使用附加变量进行预测:

forecast = m.predict(df_test.drop(columns="y"))
Run Code Online (Sandbox Code Playgroud)

请注意,附加变量应该具有用于​​您未来(测试)数据的值。如果您没有它们,您可以从预测add1add2使用单变量时间序列开始,然后y使用add_regressor预测add1add2作为附加变量的未来值进行预测。

从文档中我了解到y对于 t+1的预测将只使用add1add2在 t+1 处的值,而不是它们在 t, t-1, ..., tn 处的值,就像它对y. 如果这对您很重要,您可以使用滞后创建新的附加变量。

另请参阅此笔记本,其中包含使用天气因素作为预测自行车使用情况的额外回归量的示例。


Zee*_*han 4

要对多个因变量进行预测,您需要使用向量自回归来实现该时间序列。

在VAR模型中,每个变量都是其自身过去值和所有其他变量过去值的线性函数。

有关 VAR 的更多信息,请访问https://www.analyticsvidhya.com/blog/2018/09/multivariate-time-series-guide-forecasting-modeling-python-codes/