Skip to Content

Prophet, Revisited: Practical Time-Series Forecasting at Scale

Inside Meta's open-source forecasting library for Python and R, built on Stan and designed for messy, real-world data
Facebook

Get All The Latest Research & News!

Thanks for registering!

Some tools become classics because they solve a stubborn, everyday problem with just the right mix of automation and control. Prophet is one of them: an open-source procedure for forecasting time series that blends a flexible trend with weekly, yearly, and daily seasonality, plus holiday effects, and keeps working when your data has gaps, outliers, or regime changes. It is available in both Python and R, and the project's documentation and source live in the same repository.

For teams that need reliable forecasts across hundreds or thousands of series but don't have a resident time-series PhD for every project, Prophet offers a pragmatic answer. It wraps a Bayesian model in a familiar API, uses Stan under the hood for speed and statistical rigor, and gives analysts understandable controls instead of opaque knobs.

Key Features

  • Additive model with automatic changepoints for trend, plus yearly, weekly, and daily seasonality; switch to multiplicative seasonality when needed. See python/prophet/forecaster.py and python/stan.

  • Holidays and events via built-in country calendars (Python relies on the holidays package) or custom dataframes. R exposes similar functionality in R/.

  • Cross-validation utilities and diagnostics in Python and R to choose horizons and quantify error; components plots and interactive Plotly output in Python.

  • Backend powered by Stan: Python uses cmdstanpy with prepackaged binaries on PyPI; R supports rstan and an experimental cmdstanr path.

  • Battle-tested examples and notebooks, including the Peyton Manning pageviews dataset used across the docs. See examples/ and notebooks/.

The Problem and the Solution

Forecasting at scale is hard: different series show different seasonalities, trends drift or break, holidays matter in some markets and not others, and messy real-world collection leads to missing data and outliers. Specialist models exist for each nuance, but maintaining bespoke models for every series is brittle and expensive.

Prophet addresses this with an additive, modular design: a piecewise-linear or logistic trend with automatic changepoints, Fourier terms for seasonality, and holiday regressors you can turn on or extend. The result is interpretable components that map to business intuition and a workflow where analysts can inject domain knowledge without rewriting the model. The approach is laid out in the project's paper, (Taylor and Letham, 2018).

Why I Like It

Two things stand out in day-to-day use. First, the API is delightfully simple: a dataframe with ds and y, a Prophet() object, and fit/predict

Second, the defaults are sensible yet editable: you can add holidays, extra regressors, or switch to multiplicative seasonality when it makes sense. 

Recent releases modernized the backend by moving to cmdstan via cmdstanpy, added performance tweaks (notably a faster predict path), and improved platform support.

from prophet import Prophet
import pandas as pd

# Load the classic example series
url = "https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv"
df = pd.read_csv(url)

m = Prophet()                 # additive model with sensible defaults
m.fit(df)                     # ds (date) and y (value)

future = m.make_future_dataframe(periods=365)
forecast = m.predict(future)
print(forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail())

Under the Hood

Prophet's Python package lives in python/, with the core forecaster in prophet/forecaster.py and the Stan model files in python/stan

Build and packaging details are in python/pyproject.toml and python/setup.py. R users will find a conventional package layout under R/ with DESCRIPTION, R/R, and R/vignettes.

The math is fitted with Stan, a platform for probabilistic programming that makes Bayesian inference practical at interactive speeds. 

Prophet's move to cmdstan modernized installation and performance, including support for Apple Silicon and Windows toolchains. If you want to peek beyond Prophet into classic time-series models in Stan, the Stan Users Guide is an excellent companion (Stan Dev Team, 2024).

Design choices emphasize interpretability and guardrails. Trend changepoints are regularized to prevent overfitting; seasonalities are represented with Fourier series; and holidays enter as binary regressors. 

The Python API mirrors scikit-learn's fit/predict flow, and you can add domain knowledge with add_seasonality, add_regressor, and custom holiday frames. The docs' Quick Start shows these pieces succinctly in both languages: see Quick Start.

Use Cases

Prophet shines when you need quick, defensible forecasts for metrics with clear seasonal structure and occasional shifts: retail demand with holiday spikes, web traffic with day-of-week and yearly cycles, staffing and capacity planning, or product growth metrics with trend changes after launches or pricing moves. Its component plots make it straightforward to explain what the model captured and where to add domain-specific regressors (for example, promotions or weather).

Community and Contribution

The repository's issue tracker is active across installation help, modeling questions, and feature requests, and the maintainers post periodic updates (see the 2023 roadmap linked from README.md). Contribution guidelines live in the docs, with a CODE_OF_CONDUCT.md at the root. Because Prophet spans Python and R, issues often become cross-language discussions, which is a strength for users adopting it across stacks.

Usage and License Terms

Prophet is released under the MIT License. You can use, copy, modify, merge, publish, distribute, sublicense, and sell copies with attribution and without warranty. The Python package is published as prophet on PyPI (formerly fbprophet prior to v1.0), and the R package is on CRAN. For installation quirks (especially compilers on Windows and the cmdstan toolchain), the top-level README.md and the installation guide cover the details.

Impact and What's Next

Prophet's biggest impact is cultural: it makes principled forecasting accessible to a wide audience and standardizes a process that used to depend on specialists. Under the hood, Stan provides credible intervals and component decomposition that analysts can defend to stakeholders. 

The project continues to evolve: recent changelog entries note faster vectorized prediction, upgraded cmdstan versions, platform wheels, and holiday data refreshes. It is also easy to extend Prophet's outputs with modern analytics stacks: component plots integrate with Plotly, and cross-validation results slot into MLOps dashboards. 

For deeper exploration of Bayesian time-series modeling, complementary tools like cmdstanpy and the Stan examples in the Users Guide provide context and alternatives.

As the ecosystem shifts toward probabilistic forecasting (think quantiles and uncertainty-aware decisions), Prophet's interpretable structure remains a durable starting point. Future opportunities include tighter integrations with distributed compute, enriched diagnostics, and continued parity between Python and R APIs.

About Meta's Open Source

Prophet was created by Meta's Core Data Science team and is one of many projects the company stewards in the open. You can explore more at Meta Open Source and the research page for the Prophet paper.

Conclusion

If you need forecasts that are fast to build, easy to explain, and robust to the messiness of real data, Prophet belongs in your toolkit. Start with the Quick Start, browse the examples, and skim the license. When you want to peek inside, the Stan models and forecaster are right there. And when you have domain nuance to add, the model makes room for it.

References: (Taylor and Letham, 2018); (Stan Dev Team, 2024); (Prophet Docs, 2025).


Authors:
Facebook
Prophet, Revisited: Practical Time-Series Forecasting at Scale
Joshua Berkowitz August 20, 2025
Share this post
Sign in to leave a comment