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

Python 是否可以使用FB Prophet进行多变量多步预测?,python,machine-learning,time-series,forecasting,facebook-prophet,Python,Machine Learning,Time Series,Forecasting,Facebook Prophet,我正在研究一个多变量(100+变量)多步(t1到t30)预测问题,其中时间序列频率为每1分钟一次。这个问题需要预测100多个变量中的一个作为目标。 我很想知道是否可以使用FB Prophet的Python API来实现。我可以用单变量的方式,只使用目标变量和日期时间变量。感谢您的帮助和指导。请告诉我是否需要进一步的输入或澄清问题。要对多个因变量进行预测,您需要使用向量自回归实现该时间序列 在VAR模型中,每个变量都是自身过去值和所有其他变量过去值的线性函数 有关VAR的更多信息,请转到这可能会晚

我正在研究一个多变量(100+变量)多步(t1到t30)预测问题,其中时间序列频率为每1分钟一次。这个问题需要预测100多个变量中的一个作为目标。
我很想知道是否可以使用FB Prophet的Python API来实现。我可以用单变量的方式,只使用目标变量和日期时间变量。感谢您的帮助和指导。请告诉我是否需要进一步的输入或澄清问题。

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

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


有关VAR的更多信息,请转到

这可能会晚些时候,但是如果您在2019年阅读此内容,您可以使用LSTM、Keras实现多变量时间序列。

您可以使用

例如,如果我们希望同时使用附加变量
add1
add2
的值来预测变量
y

让我们首先创建一个示例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
和拆分列车和测试:

df_train = df.loc[df["ds"]<"2019-09-21"]
df_test  = df.loc[df["ds"]>="2019-09-21"]
然后,预测方法将使用其他变量进行预测:

forecast = m.predict(df_test.drop(columns="y"))
请注意,附加变量应具有未来(测试)数据的值。如果没有,可以先用单变量时间序列预测
add1
add2
,然后用
add\u回归器预测
y
,预测的
add1
add2
作为附加变量的未来值

从文档中我了解到,t+1的
y
预测将只使用t+1处的
add1
add2
的值,而不是使用
y
时在t,t-1,…,t-n处的值。若这对你们来说很重要的话,你们可以创建新的带有滞后的附加变量


另请参见在自行车使用量预测中使用天气因素作为额外回归的示例。

我感到困惑,如果Prophet以多元方式工作,似乎没有一致意见,请参见github问题和。根据一些评论、queise的答案和youtube教程判断,您可以通过某种方式绕过多元功能,请参见此处的视频:

您可以使用timemachines软件包(以函数形式包装prophet)的一行代码来实现这一点。看得准一点。下面是一个使用示例:

from timemachines.skatertools.data import hospital_with_exog
from timemachines.skatertools.visualization.priorplot import prior_plot
import matplotlib.pyplot as plt
k = 11
y, a = hospital_with_exog(k=k, n=450, offset=True)
f = fbprophet_exogenous
err2 = prior_plot(f=f, k=k, y=y, n=450, n_plot=50)
print(err2)
plt.show()
请注意,您可以将k设置为您想要的任何值。这就是要使用的步骤数。现在要小心,因为当prophet说多元变量时,它们实际上是指预先知道的变量(a参数)。它并没有真正解决多元预测问题。但是你可以使用facebook的滑板者,叫做_recursive,在预测你真正关心的变量之前,使用prophet来预测外生变量


说了这么多,我强烈建议你阅读《先知》的这篇文章,并在愤怒地使用它之前检查它在地图上的位置。

谢谢。这真的很有帮助。不过我有一个问题。我听从了你的指示。并使用Train_Test_Split创建列车测试数据,并注意到它从包括最后一行在内的所有数据中获取了随机数据。我打算预测数据集的后半部分。。。。。这是做预测的好方法吗。或者我应该按索引分割数据@提问
from timemachines.skatertools.data import hospital_with_exog
from timemachines.skatertools.visualization.priorplot import prior_plot
import matplotlib.pyplot as plt
k = 11
y, a = hospital_with_exog(k=k, n=450, offset=True)
f = fbprophet_exogenous
err2 = prior_plot(f=f, k=k, y=y, n=450, n_plot=50)
print(err2)
plt.show()