facebook / prophet

Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth.
https://facebook.github.io/prophet
MIT License
18.5k stars 4.53k forks source link

why my prediction is just a linear line here #1155

Closed giabbb closed 5 years ago

giabbb commented 5 years ago

Rplot

Hi, I am pretty new to prophet, can anyone think of anyway to improve my prediction?

I am using 2017 -2018 monthly data to predict first seven months of 2019 I used this dyplot.prophet() to plot the graph and the prediction seems to be a straight line vs the actual dots varies up and down.

I am open to any thoughts and suggestions. Thanks!

vhpietil commented 5 years ago

That might very well be the best prediction based on your data. Observations seem to be quite random without clear seasonality

bletham commented 5 years ago

+1 for @vhpietil's assessment. By default Prophet will not enable yearly seasonality until there are at least 2 years of data, and this is 1 month short of that. You could do

m = Prophet(yearly_seasonality=True)

to see how it looks with yearly seasonality, but I don't see any clear patterns here and I think straight line plus random noise might be about the best forecast that can be made from these data.

(If you do enable yearly seasonality, be sure that your prediction dataframe also has monthly frequency, as described here: https://facebook.github.io/prophet/docs/non-daily_data.html#monthly-data ).

giabbb commented 5 years ago

+1 for @vhpietil's assessment. By default Prophet will not enable yearly seasonality until there are at least 2 years of data, and this is 1 month short of that. You could do

m = Prophet(yearly_seasonality=True)

to see how it looks with yearly seasonality, but I don't see any clear patterns here and I think straight line plus random noise might be about the best forecast that can be made from these data.

(If you do enable yearly seasonality, be sure that your prediction dataframe also has monthly frequency, as described here: https://facebook.github.io/prophet/docs/non-daily_data.html#monthly-data ).

Thank you for your reply! I added one more month of data and I got edgy lines instead of one straight line. I thought 201701-201812 was already two years of data when I ran it in the first place..

APramov commented 5 years ago

< Edited my answer to include some links>

@giabbb , I just want to give you my take on this (I realize that this is a prophet github issue page, but still ;) ) - it seems to me that it might be worth a try to model your data with an (s)arima type of process or an exponential smoothing model.

I don't see a clear function of time here (which is what prophet is good at). If you are using R, you might take a look at the the "forecast" package that features automatic model selection much like prophet and see if you wouldn't get something that makes you feel more comfortable with the model fit.

See more info here: https://otexts.com/fpp2/the-forecast-package-in-r.html

It seems that, at least partially, you have some functionalities that you could get in the forecast package also in Python, take a look here

https://medium.com/intive-developers/forecasting-time-series-with-multiple-seasonalities-using-tbats-in-python-398a00ac0e8a

https://machinelearningmastery.com/exponential-smoothing-for-time-series-forecasting-in-python/

paolobighignoli commented 1 year ago

+1 for @vhpietil's assessment. By default Prophet will not enable yearly seasonality until there are at least 2 years of data, and this is 1 month short of that. You could do

m = Prophet(yearly_seasonality=True)

to see how it looks with yearly seasonality, but I don't see any clear patterns here and I think straight line plus random noise might be about the best forecast that can be made from these data.

(If you do enable yearly seasonality, be sure that your prediction dataframe also has monthly frequency, as described here: https://facebook.github.io/prophet/docs/non-daily_data.html#monthly-data ).

You truly saved my life with yearly_seasonality. Thanks a lot