Прогнозирование временных рядов с помощью Statsmodels VAR и обнаружение ValueError - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь прогнозировать будущие значения из моего месячного набора данных (данные суммируются как первый день месяца, 12 раз в год), и я сталкиваюсь с:

Предупреждение о значении: AУказатель даты предоставлен, но он не имеет соответствующей информации о частоте и поэтому будет игнорироваться, например, при прогнозировании.

Я пытался бегать вокруг Google и StackO, но не смог получить соответствующую ветку идостаточно хорошее решение.

Это заголовок (13) моего фрейма данных:

            Occupancy rate  Average Price     RevPAR
Date                                                
2013-01-01        0.579026     105.289497  60.965332
2013-02-01        0.637415     109.396682  69.731070
2013-03-01        0.714847     117.840534  84.237901
2013-04-01        0.716446     122.765139  87.954593
2013-05-01        0.771097     105.461387  81.320985
2013-06-01        0.768777     115.252163  88.603262
2013-07-01        0.677020      81.824781  55.396987
2013-08-01        0.673639      72.489988  48.832110
2013-09-01        0.783291     125.034417  97.938296
2013-10-01        0.779694     118.724648  92.568902
2013-11-01        0.771430     113.322446  87.420366
2013-12-01        0.680166     100.950857  68.663388
2014-01-01        0.573320     102.881633  58.984090

И это самый базовый пример, который я пытаюсь использовать для самого начала.

model = VAR(df)
results = model.fit(2)
results.forecast(df.values[-2:], 5)
results.summary()

Я предполагаю, что мне нужно установить какой-то частотный атрибут для кадра данных.Я пытался сделать грубый df.asfreq ('M'), но он просто испортил мои данные.

1 Ответ

1 голос
/ 07 мая 2019

Я не знаю модель, которую вы используете, однако, скорее всего, это вызвано либо отсутствующими значениями во временном ряду, либо несовпадающим freq (freq для начала месяца MS).

Итак, как я думаю, вы можете создать новый временной ряд с pd.date_range , затем reindex фрейма данных с созданным временным рядом.

если входной фрейм данных:

In [10]: df
Out[10]:
            0  1
2018-01-01  2  1
2018-03-01  0  0

, мы можем затем создать новый временной ряд:

In [12]: index = pd.date_range(start=df.index.min(), end=df.index.max(), freq='MS')

In [13]: index
Out[13]: DatetimeIndex(['2018-01-01', '2018-02-01', '2018-03-01'], dtype='datetime64[ns]', freq='MS')

, затем переиндексировать фрейм данных

In [14]: df.reindex(index)
Out[14]:
            0    1
2018-01-01  2.0  1.0
2018-02-01  NaN  NaN
2018-03-01  0.0  0.0

и дополнительно мыможет заполнить значения Nan в кадре данных некоторыми подходящими значениями для соответствия модели обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...