[Time Series]
Prophet.
Facebook's forecasting tool for business time series with seasonality.
SPEC SHEET
C — How it actually works
Treat a business time series as a sum of understandable parts: a piecewise trend that can bend at changepoints, weekly and yearly seasonal curves, and holiday bumps - then fit them all at once, robustly. Built by Facebook so an analyst can produce a sane forecast (with uncertainty bands and a decomposition plot) in five lines, missing data and all.
D — The math
y(t) = g(t) + s(t) + h(t) + ε: piecewise-linear/logistic trend g with automatic changepoints, Fourier-series seasonalities s, holiday indicator effects h; fit as a Bayesian additive model (MAP via Stan).
Training
seconds per series
Inference
O(horizon)
E — When NOT to use it
- Sub-daily/high-frequency signals with autocorrelated noise (its error model is weak there)
- Series driven by covariates it cannot see (stock prices, auction dynamics)
- Thousands of series where a single global ML model can share strength
- When maximum accuracy matters more than explainability - tuned boosting/deep models usually beat it
F — Tuning that matters
- changepoint_prior_scale is the main dial (default 0.05): raise for flexible trends, lower to resist overfitting
- Feed it your real holiday/event calendar - this is where Prophet earns its keep
- seasonality_mode="multiplicative" when seasonal swings scale with the level
- Validate with the built-in cross_validation + performance_metrics utilities
G — Production pitfalls
- Using it as a black box and never opening the components plot (its best feature)
- Extrapolating an unconstrained linear trend years ahead - cap it with logistic growth
- Assuming default uncertainty intervals cover seasonality uncertainty (they mostly cover trend)
- Benchmarking nothing against it - always race a naive seasonal baseline and ARIMA
H — Minimal starting point
PYTHONfrom prophet import Prophet
m = Prophet(changepoint_prior_scale=0.05,
seasonality_mode="multiplicative")
m.add_country_holidays(country_name="IN")
m.fit(df) # df: columns ds (date), y (value)
future = m.make_future_dataframe(periods=90)
forecast = m.predict(future)
m.plot_components(forecast) # trend / weekly / yearly / holidaysI — The interview question
What does Prophet’s decomposition give you that a black-box forecaster does not?
Diagnosability and negotiation power: when the forecast moves, you can show whether trend, seasonality, or a holiday effect moved it. Analysts can override a changepoint or add an event without retraining philosophy - which is why it fits business planning loops so well.
J — In the wild
Food-delivery and e-commerce ops teams run Prophet across city-level demand series for staffing and inventory: the holiday calendar handles Diwali and IPL finals, and the components plot is what actually gets shown in the weekly planning meeting.
K — Consider instead
- ARIMA— sharper statistical control for a single well-understood series
- Gradient Boosting (XGBoost/LightGBM)— covariate-rich or many-series forecasting at scale