неясно, как получить единый вектор прогнозов из многомерного ARX в Statsmodels - PullRequest
1 голос
/ 11 апреля 2020

Как оговорка, у меня очень ограниченный опыт использования моделей временных рядов.

Я пытаюсь обучить модель ARX за год почасовых энергетических данных для набора из 23 зданий. Я ожидаю получить один вектор прогнозов, учитывая набор временных отметок, которые находятся в данных обучения. Исходя из этого, я могу проверить свои данные тестирования, которые охватывают подмножество тех же временных отметок. Я пытаюсь использовать statsmodels в качестве модели VAR (p), чтобы сделать первоначальную попытку, прежде чем добавить в мои экзогенные термины. Я предполагаю, что это модель VAR, так как она многомерна для отметки времени. Моя попытка использовать VARMAX с порядком (3,0) для создания модели VARX привела к очень долго работающей модели, которая не работала, поэтому я сначала прибег к простой модели VAR.

Моя конечная цель - установить модель VARX с набором данных ниже, а также средним значением каждого часа в качестве экзогенного термина. Я ожидал бы, что это приведет к единственному вектору параметров с длиной, равной члену запаздывания. Затем я использовал бы это, чтобы предсказать один вектор y_hat предсказаний для каждой строки в моем наборе обучающих данных. Затем я могу сравнить вывод этого с подмножеством тех же часов из моего набора данных тестирования.

Мой тренировочный набор данных нормализованных часовых данных о энергии выглядит следующим образом (простите форматирование после bldg5, он плохо скопировал):

start_time          Bldg1               Bldg2               Bldg3               Bldg4                    Bldg5               Bldg7  Bldg8   Bldg9   Bldg10  Bldg11  Bldg12  Bldg13  Bldg14  Bldg15  Bldg16  Bldg17  Bldg18  Bldg19  Bldg20  Bldg21  Bldg22  Bldg23 
2014-01-05 00:00:00 0.2345679012345679  0.08234295415959253 0.02127659574468085 0.006535947712418301    0.3939393939393939  0.020325203252032523    0.034013605442176874    0.11003236245954694 0.013307984790874526    0.013513513513513514    0.06734006734006734 0.02840909090909091 0.3116883116883117  0.5301204819277109  0.03793103448275862 0.058064516129032254    0.3546511627906977  0.009523809523809523    0.47887323943661975 0.9228571428571428  0.04154302670623146 0.2773109243697479
2014-01-05 01:00:00 0.2345679012345679  0.07045840407470289 0.07092198581560284 0.006535947712418301    0.3939393939393939  0.04065040650406505 0.03741496598639456 0.07119741100323625 0.020912547528517112    0.013513513513513514    0.03367003367003367 0.02840909090909091 0.5194805194805195  0.4487951807228916  0.020689655172413793    0.06451612903225806 0.4476744186046512  0.009523809523809523    0.5014084507042254  0.6914285714285714  0.03560830860534124 0.2605042016806723
2014-01-05 02:00:00 0.2345679012345679  0.07555178268251274 0.056737588652482275    0.026143790849673203    0.3636363636363636  0.020325203252032523    0.03741496598639456 0.07119741100323625 0.011406844106463879    0.013513513513513514    0.04377104377104377 0.02840909090909091 0.4675324675324675  0.4728915662650603  0.017241379310344827    0.05161290322580645 0.436046511627907   0.009523809523809523    0.4732394366197183  0.66    0.03857566765578635 0.13165266106442577
2014-01-05 03:00:00 0.2345679012345679  0.07045840407470289 0.02127659574468085 0.006535947712418301    0.25757575757575757 0.036585365853658534    0.03741496598639456 0.07119741100323625 0.020912547528517112    0.010135135135135136    0.037037037037037035    0.02840909090909091 0.4285714285714286  0.39457831325301207 0.020689655172413793    0.08387096774193549 0.19767441860465118 0.006349206349206349    0.47887323943661975 0.7771428571428572  0.04154302670623146 0.16246498599439776
2014-01-05 04:00:00 0.2345679012345679  0.07045840407470289 0.02127659574468085 0.006535947712418301    0.2727272727272727  0.02845528455284553 0.030612244897959183    0.06796116504854369 0.011406844106463879    0.010135135135135136    0.03367003367003367 0.0625  0.3766233766233766  0.009036144578313253    0.020689655172413793    0.1032258064516129  0.0872093023255814  0.009523809523809523    0.49295774647887325 0.19714285714285712 0.03264094955489614 0.12324929971988796

. . . 

Тестовый набор данных (также нормализованные данные о почасовой энергии ) выглядит следующим образом (форма 168x1):

TestTime            TestBldg
2014-09-07 00:00:00 0.09427609427609428
2014-09-07 01:00:00 0.037037037037037035
2014-09-07 02:00:00 0.0404040404040404
2014-09-07 03:00:00 0.037037037037037035
2014-09-07 04:00:00 0.037037037037037035
. . . 

, когда я подгоняю модель следующим образом:

from statsmodels.tsa.api import VAR
var_mod = VAR(train_norm.iloc[:,3:])
var_res = var_mod.fit()
var_res.summary()

Я получаю коэффициент запаздывания для каждого здания в моем наборе данных, который неожиданно Я также не понимаю, как сделать прогноз для моей модели подгонки var_res, поскольку я ожидал бы сделать var_res.predict(), как вы делаете с одномерным AR, AutoReg()

(за исключением: В чем разница между функциями прогнозирования и прогнозирования в моделях statsmode. В чем разница между прогнозированием в модели до подгонки, ie. var_mod и адаптированной моделью, var_res.predict()?)

Пожалуйста, дайте мне знаю, какие дополнительные разъяснения я могу предоставить.

1 Ответ

1 голос
/ 11 апреля 2020

Общая модель VAR допускает влияние любого из состояний K в пределах предыдущих p временных шагов (с использованием обозначения statsmodels). Похоже, что вы хотите, это вовсе не обязательно авторегрессия VECTOR (b / c, вы не хотите, чтобы одно здание полагалось на предыдущие временные шаги другого здания), а скорее просто модель AR, использующая набор данных "панель" (несколько временные ряды наблюдений). Я уверен, что в statsmodels есть способ сделать это, но, честно говоря, быстрый поиск не дал. Вы всегда можете создать свою собственную версию в качестве стандартной модели OLS, повернув набор данных таким образом, чтобы каждое наблюдение было наблюдением buildingXtime, а затем создав новые функции, использующие энергию с задержкой от t-1 до t-p. Тогда вы можете просто запустить OLS на этом. Но, вероятно, есть функция для этого в sm, которую я пропускаю.

Что касается вашего вопроса о прогнозе / прогнозе, predict выглядит так, как будто это метод объекта VAR (var_mod в ваш код), а не VARResults (var_res в вашем коде), и требует, чтобы вы указали параметры. Так что это зависит от ваших данных в выборке и, кажется, может принимать только предписанные параметры, а не использовать ваши установленные параметры. Если бы вы хотели, вы могли бы сделать что-то вроде

var_mod.predict(var_res.params, start=train_norm.index[p], end=train_norm.index[-1], lags=p)

Но я думаю, что вы ищете forecast, поскольку вы хотите применить его к произвольному зданию для тестирования.

...