python 是否可以使用FB Prophet进行多元多步预测?

new9mtju  于 2023-06-28  发布在  Python
关注(0)|答案(9)|浏览(151)

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

p4rjhz4m

p4rjhz4m1#

您可以使用add_regressor方法在Prophet中添加其他变量。
例如,如果我们想预测变量y,也使用附加变量add1add2的值。
让我们首先创建一个示例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"]

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

from fbprophet import Prophet
m = Prophet()
m.add_regressor('add1')
m.add_regressor('add2')
m.fit(df_train)

然后,predict方法将使用附加变量来预测:

forecast = m.predict(df_test.drop(columns="y"))

请注意附加变量应具有未来(测试)数据的值。如果你没有它们,你可以先用单变量时间序列预测add1add2,然后用add_regressor和预测的add1add2作为附加变量的未来值来预测y
从文档中,我了解到t +1的y预测将仅使用t +1时add1add2的值,而不是它们在t,t-1,...,t-n时的值,因为它使用y。如果这对你很重要,你可以用滞后创建新的附加变量。
另请参见this notebook,其中有一个使用天气因素作为自行车使用量预测的额外回归因子的示例。

pjngdqdw

pjngdqdw2#

要对多个因变量进行预测,您需要使用向量自回归来实现该时间序列。
在VAR模型中,每个变量都是其过去值和所有其他变量过去值的线性函数。
有关VAR的更多信息,请访问https://www.analyticsvidhya.com/blog/2018/09/multivariate-time-series-guide-forecasting-modeling-python-codes/

vddsk6oq

vddsk6oq3#

我很困惑,如果Prophet以多元方式工作,似乎没有协议,请参阅github问题herehere。根据一些评论,Quise的答案和一个不错的youtube教程,你可以在某种程度上围绕多元功能做一个工作,请看这里的视频:https://www.youtube.com/watch?v=XZhPO043lqU

waxmsbnn

waxmsbnn4#

这可能有点晚了,但是如果你在2019年阅读这篇文章,你可以使用LSTM,Keras实现多变量时间序列。

omqzjyyz

omqzjyyz5#

您可以使用timemachines包用一行代码完成此操作,该包将prophet Package 在函数形式中。请参见prophet skaters。下面是一个用法示例:

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设置为您想要的任何值。这是要使用的前几步。现在要小心,因为当先知说多元时,他们实际上指的是预先已知的变量(a参数)。它并没有真正解决多变量预测。但是你可以使用facebook的skater_recursive来使用prophet来预测外生变量,然后再预测你真正关心的那个变量。
说了这么多,我强烈建议你阅读先知的critique,并在愤怒地使用它之前检查它在Elo ratings上的位置。

8wigbo56

8wigbo566#

原来问题的答案是肯定的!
这里是一个链接到特定的神经预言家文档,其中有几个如何使用多变量输入的例子。对于neuralprophet,这些被称为“滞后回归”。
https://neuralprophet.com/html/lagged_covariates_energy_ercot.html

zd287kbt

zd287kbt8#

VAR是一个纯粹的计量经济学模型,但在阅读了大量关于预测的文献后,我发现VAR也无法捕捉趋势。因此,我们没有一个好的预测,但VAR仍然是多变量分析的主力模型。我认为prophet不是一个多变量的,而是使用ML模型,如RF,XGBOOST,NNET。但请记住,如果你想捕捉趋势,那么要确定哪种模式更好。否则就去深度学习

yizd12fk

yizd12fk9#

我在阅读第一个问题的所有答案。我也有类似的问题;我有一个用于时间序列预测的多变量数据,我的数据结构如下所示:data Head of Temp, Humidity and PM25 for DATATIME (each 30s)
这可能是最好的策略或方法(propheta,LSTM或Keras),并向我展示运行项目的初始代码行。
谢谢!!!

相关问题