Я работаю над многомерной (более 100 переменных) многоступенчатой (от t1 до t30) задачей прогнозирования, где частота временных рядов составляет каждую 1 минуту. Задача требует спрогнозировать одну из более чем 100 переменных в качестве цели. Мне интересно узнать, можно ли это сделать с помощью Python API FB Prophet. Я смог сделать это одномерным способом, используя только целевую переменную и переменную datetime. Любая помощь и направление приветствуются. Пожалуйста, дайте мне знать, нужны ли какие-либо дополнительные комментарии или пояснения по этому вопросу.
Можно ли делать многомерное многоступенчатое прогнозирование с помощью FB Prophet?
Ответы (5)
Вы можете добавить дополнительные переменные в Prophet с помощью метода add_regressor а>.
Например, если мы хотим предсказать переменную 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
и разделить поезд и тест:
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)
Затем метод прогнозирования будет использовать дополнительные переменные для прогнозирования:
forecast = m.predict(df_test.drop(columns="y"))
Обратите внимание, что дополнительные переменные должны иметь значения для ваших будущих (тестовых) данных. Если у вас их нет, вы можете начать с прогнозирования add1
и add2
с помощью одномерных временных рядов, а затем прогнозировать y
с add_regressor
и прогнозируемыми add1
и add2
в качестве будущих значений дополнительных переменных.
Из документации я понимаю, что прогноз y
для t + 1 будет использовать только значения add1
и add2
в t + 1, а не их значения в t, t-1, ..., t-n, как это делается с y
. Если это важно для вас, вы можете создать новые дополнительные переменные с лагами.
См. Также этот блокнот с примером использование погодных факторов в качестве дополнительных регрессоров в прогнозе использования велосипедов.
Я запутался, похоже, нет согласия, работает ли Prophet многовариантным образом, см. Проблемы с github здесь и здесь. Судя по некоторым комментариям, ответу queise и хорошему руководству по YouTube, вы можете каким-то образом обойти многомерную функциональность, см. Видео здесь: https://www.youtube.com/watch?v=XZhPO043lqU
Чтобы сделать прогноз для нескольких зависимых переменных, вам необходимо реализовать этот временной ряд с помощью векторной авторегрессии.
В модели VAR каждая переменная является линейной функцией прошлых значений самой себя и прошлых значений всех других переменных.
для получения дополнительной информации о VAR перейдите на https://www.analyticsvidhya.com/blog/2018/09/multivariate-time-series-guide-forecasting-modeling-python-codes/
Это может быть поздно, однако, если вы читаете это в 2019 году, вы можете реализовать многомерные временные ряды, используя LSTM, Keras.
Вы можете сделать это одной строкой, используя пакет 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 как угодно. Это количество шагов вперед, которые нужно использовать. Теперь будьте осторожны, потому что, когда пророк говорит о многомерном, они на самом деле ссылаются на заранее известные переменные (аргумент a). На самом деле он не касается многомерного прогнозирования. Но вы можете использовать скейтер facebook под названием _recursive, чтобы использовать prophet для предсказания экзогенных переменных, прежде чем он предсказывает ту, которая вам действительно небезразлична.
Сказав все это, я настоятельно рекомендую вам прочитать этот критический анализ пророка, а также проверить его позицию. на рейтингах Эло, прежде чем использовать его в гневе.