Почему Prophet возвращает отрицательный прогноз, когда все входные данные положительны? - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь делать прогнозы с помощью Facebook Prophet, все вводимые данные положительные, но прогнозы возвращают отрицательные. Я немного сбит с толку, я прочитал это быстрый старт , и если все входные данные будут положительными, тогда прогнозы будут, скорее всего, положительными, и форма прогноза будет похожа на вход, например, если вход равен 0,86, тогда выход будет 0,81. Почему это так? Как исправить?

covid_pr = covid[['date','acc_confirmed']].copy()
covid_pr.rename(columns = {'date':'ds', 'acc_confirmed':'y'},inplace= True)

prt = Prophet()
prt.fit(covid_pr)

future_prt = prt.make_future_dataframe(30)
forecast = prt.predict(future_prt)

Мои исходные данные

           ds     y
0  2020-03-02     2
1  2020-03-03     2
2  2020-03-04     2
3  2020-03-05     2
4  2020-03-06     4
5  2020-03-07     4
6  2020-03-08     6
7  2020-03-09    19
8  2020-03-10    27
9  2020-03-11    34
10 2020-03-12    34
etc until thousands

Прогноз fbprophet

     yhat   yhat_lower   yhat_upper
0   -261.572541  -499.409024    -4.741004
1   -208.490561  -446.503629    41.371788
2   -255.114682  -500.580393    -7.825269
3   -208.963597  -481.238870    33.707433
4   -146.566250  -394.337188    96.726382
5    -92.445918  -354.914790   150.409867
6    -38.341696  -293.639411   204.964963
7     83.483534  -158.412231   332.263619
8    136.565514   -95.174934   370.980615
9     89.941393  -153.219255   349.129866
10   136.097121   -95.508485   404.666524
etc until thousands

1 Ответ

1 голос
/ 08 мая 2020

facebook prophet saturating-minimum page - это то, что вы хотите посмотреть. Вы можете указать предел даже для каждой строки.

https://facebook.github.io/prophet/docs/saturating_forecasts.html#saturating -минимум

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

future['floor'] = 0
m = Prophet(growth='logistic')
m.fit(df)
result = m.predict(future)
...