Stop using Prophet out-of-the-box — 3 examples of it going wrong

Marco Gorelli
Jun 4 · 3 min read

Instead, plot its components, and check that they make sense

Photo by Angela Compagnone on Unsplash

Many data scientists approach modelling as a feature engineering task: they gather features, do cross-validation, and if the score isn’t good enough, they keep adding more features until it is. In forecasting, where there is typically little data, this is risky. It can be much more effective to look inside your models and understand what they are doing — Prophet makes this especially easy thanks to its plot_components function. Let’s look at some examples of when using it can help diagnose poor forecasts.

Imaginary seasonality appears like a ghost!

Let’s generate some data completely at random and fit a Prophet model to it. I would not expect a time series forecast to pick any kind of pattern here. However, it does:

Image by author

It also performs worse than a naïve forecast (i.e. one that just forecasts the training set mean)!

To see why, let’s look at this Prophet model decomposed. Now, we can see that it’s picking up a weekly seasonality which doesn’t exist:

Image by author


If you don’t expect there to be a weekly trend, then you should instantiate your model withweekly_seasonality=False .

Constant trend, but with a missing day!

Prophet will not use missing data to update its components. So if your weekly trend is constant but you have a missing date (say, because your shop closed and its sales got redistributed to the other days of the week), then Prophet will pick up a trend which doesn’t exist:

Image by author

Decomposing it helps us see why:

Image by author


If it’s an event you expect to see again, fill the missing date with 0 and set a custom seasonality. Else, exclude it from training.

The trend changes, but the weekly seasonality doesn’t!

If your trend is constantly increasing but your weekly split is constant, then running Prophet out-of-the-box will deliver poor results — this is because, by default, it uses additive (rather than multiplicative) seasonality:

Image by author

Again, decomposing it helps us notice the issue:

Image by author


If you expect your daily quantities to be proportions of your weekly total, use multiplicative weekly seasonality.


Prophet is a fantastic tool, if used properly. Unfortunately, there is a trend among data scientists to approach modelling as purely a feature engineering problem: if the model doesn’t work well, they just try adding extra features until it does. However, especially in forecasting, it can pay dividends to examine what the model is doing and to adjust it accordingly. Prophet makes this very easy thanks to its plot_components function — by inspecting it, you can figure out why it might not be performing well, as well as how to fix it.

Gousto Engineering & Data

Gousto Engineering & Data Blog

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store