Прогноз временных рядов с использованием пророка (issubdtype из `float`) - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь использовать пакет пророка для предсказания временного ряда:

Сначала я объединяю месяц и день в столбец:

df1['Date'] = pd.to_datetime(df1.Ano.astype(str) + '-' + df1.Meses.astype(str))

Мой фрейм данных:

          Date     Values
11259 2017-01-01  23.818044
11286 2017-02-01  20.275252
11313 2017-03-01  22.347278
11340 2017-04-01  23.837490
11367 2017-05-01  23.460605
11394 2017-06-01  22.307115
11421 2017-07-01  23.643994
11448 2017-08-01  23.791720
11475 2017-09-01  23.643933
11502 2017-10-01  20.771269
11529 2017-11-01  21.317947
11556 2017-12-01  22.361570
33723 2018-01-01  24.336259
33750 2018-02-01  19.926928
33777 2018-03-01  22.714901
33804 2018-04-01  23.605119
33831 2018-05-01  23.653298
33858 2018-06-01  23.052182
33885 2018-07-01  24.377920
33912 2018-08-01  24.576733
33939 2018-09-01  24.376775
33966 2018-10-01  21.256970
33993 2018-11-01  21.969202
34020 2018-12-01  22.970637

Затем я попытался использовать следующую функцию:

sub_model = Prophet(interval_width=0.95)
sub_model.fit(df1)

Тогда я получил следующую ошибку:

KeyError: 'y'

During handling of the above exception, another exception occurred:

    KeyError                                  Traceback (most recent call last)
<ipython-input-6-a31a513027be> in <module>()
     31 
     32 sub_model = Prophet(interval_width=0.95)
---> 33 sub_model.fit(df1)
     34

Что-то не так с моей колонкой Год-месяц, которая противоречит функции пророка?

Обновление: первое решение, как предложил Васил, состояло в том, чтобы изменить имя столбца даты на 'ds', а столбец переменной на 'y'.

Теперь появляется сообщение об ошибке:

 INFO:fbprophet.forecaster:n_changepoints greater than number of observations.Using 18.0.

Относится к этой функции:

# the history.
hist.size <- floor(nrow(m$history) * .8)
if (m$n.changepoints + 1 > hist.size) {
  m$n.changepoints <- hist.size - 1
  message('n.changepoints greater than number of observations. Using ',
          m$n.changepoints)
}

Обновление: вторая проблема была решена добавлением аргумента n_changepoints, предложенного alec_djinn

Последняя проблема - второе сообщение:

Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.

1 Ответ

0 голосов
/ 15 мая 2018

По умолчанию пророк предполагает, что у вас есть ежедневные данные. В вашем случае это ежемесячно, хотя.

Если вы хотите прогнозировать месячные данные, вы должны написать что-то вроде этого:

sub_model  = Prophet(weekly_seasonality=False, daily_seasonality=False).fit(df1)
future = sub_model.make_future_dataframe(periods=1, freq='M')
fcst = sub_model.predict(future)

Другим важным моментом являются имена столбцов, которые вы передаете в phrophet. Ваш столбец даты должен иметь имя «ds», а переменный столбец, который вы хотите предсказать, должен быть «y»

...