Where Prophet sits on the ladder
We have climbed from baselines (b2) through exponential smoothing (b3) to ARIMA/SARIMA (b4). Prophet, from Facebook's Taylor & Letham, takes a different path: instead of modelling the autocorrelation structure, it fits a decomposable curve - a trend, one or more seasonal cycles, and a holiday effect - and adds them up. It is fast to a good result, forgiving of missing data and outliers, and every part is something an analyst can read and explain. The trade: it is a curve-fitter, not automatically the most accurate model. So we do the same thing we do to every model in this course - we backtest it against the baseline before we trust it.
ds/y frame, a fitted model with a forecast for the next H days plus its yhat_lower/yhat_upper interval, the decomposed trend and weekly components read straight off plot_components, a holidays table that teaches the model about a Lumen sale day, and a backtested MAPE you can set beside the b1 seasonal-naive baseline.
A forecast built from readable parts 6 min live
Prophet writes the series as y(t) = g(t) + s(t) + h(t) + ε: a trend g, seasonality s, holidays h, and an error term. Each part is estimated and then stacked back together. Because the pieces are additive, you can plot each one on its own and say exactly why the forecast bends where it does - that interpretability is the whole selling point.
LiveThe four parts, one at a time3 min▶
- Trend g(t) - a piecewise-linear (or logistic) growth curve. Prophet places changepoints automatically and lets the slope shift at each, so a series that speeds up or flattens is captured without you naming the dates.
- Seasonality s(t) - repeating cycles built from Fourier terms (sines and cosines). Weekly and yearly are the defaults; each is a smooth periodic curve, not a lookup table.
- Holidays h(t) - a table of known special days (sales, launches, public holidays) that get their own effect, with optional windows around them.
- Error ε - the irregular part Prophet does not try to predict, which drives the width of the uncertainty interval.
plot_components shows you the trend, the weekly shape, and the holiday bumps as separate panels. When a stakeholder asks "why does the forecast dip on Saturdays?", you point at the weekly panel. That explain-ability is why analyst teams reach for Prophet first.
Self-studyStrengths, cautions, and when to reach for it2 min read▶
Prophet earns its popularity, but it is a tool with a shape:
- Strengths - fast to a good result, handles missing days and outliers gracefully, needs little tuning, and produces interpretable components plus an interval out of the box.
- Cautions - it is fundamentally a curve-fitter. It does not model autocorrelation the way ARIMA does, and on some series a well-tuned SARIMA or a gradient-boosting model (b6) will beat it. It can also over-fit wiggly trends if you loosen the changepoint prior too far.
- Reach for it when you have strong multiple seasonalities, known holiday effects, and want a defensible, explainable forecast quickly - then backtest it against the baseline like everything else.
Prophet was built for exactly Lumen's problem. Taylor & Letham designed it at Facebook for business time series with human-scale seasonality and holiday spikes, forecast by analysts who are not time-series specialists. Lumen's daily sessions - a weekly rhythm plus sale-day spikes - is squarely in that sweet spot.
Changepoints: where the trend is allowed to bend 5 min live
A straight-line trend cannot describe a series that accelerates then plateaus. Prophet solves this by putting a set of candidate changepoints along the history and letting the slope change at each. It shrinks most of those changes toward zero, so only the changepoints that really matter bend the line. The result is a flexible-but-not-jumpy trend you can point at.
LiveThe two knobs you will actually touch3 min▶
Prophet is deliberately low-config, but two settings control most of its behaviour:
changepoint_prior_scale- how freely the trend may bend. Higher = more flexible (risk of over-fitting); lower = stiffer, smoother trend. This is your first dial when the trend looks too wiggly or too rigid.seasonality_mode-"additive"when the weekly swing is a constant size,"multiplicative"when the swing grows with the level (a bigger site has bigger Saturday dips in absolute terms). Same additive-vs-multiplicative call you met in b3.interval_width- the coverage of the uncertainty band (default 0.8). Set it to the interval your decision needs, and remember it widens with the horizon.
predict always returns yhat with yhat_lower and yhat_upper. Report the band, not just the line. A forecast without an interval is a guess wearing false confidence.
Reshape, fit, and forecast H days ★ 12 min · everyone builds
Prophet has one hard requirement: a dataframe with a ds (datestamp) column and a y (value) column. Reshape the Lumen series into that shape, fit, extend the calendar by H days, and read the forecast plus its interval.
Rebuild the Lumen daily series from b1 and keep the training slice (everything but the last H days).
Reset the index into a two-column frame and rename the columns to ds and y.
Fit a Prophet model with weekly seasonality on, then make_future_dataframe(periods=H) to extend the calendar.
predict, and read yhat, yhat_lower, yhat_upper for the H forecast days.
yhat is the point forecast; yhat_lower/yhat_upper are the 90% interval we asked for with interval_width=0.9. When you plot or hand this off, carry all three - the interval is what makes the forecast honest.
Read the components, add a holiday, and score it ★ 10 min · build your own
First look inside the model with plot_components - the trend and the weekly shape drawn separately. Then teach Prophet about a Lumen sale day with a holidays table, refit, and score its MAPE on the holdout against the b1 seasonal-naive baseline.
Call m.plot_components(forecast) to see the trend panel and the weekly-seasonality panel.
Build a small holidays dataframe for a Lumen sale day, with a one-day spill-over window.
Refit with holidays=, forecast H days, and compute MAPE on the test slice.
Compare that MAPE to the seasonal-naive baseline from b1 - did the complexity earn its place?
The holidays table is where domain knowledge enters. You know Lumen's sale calendar; the model does not. Giving it those dates - with a window for the day-after spill - lets it separate the sale spike from the ordinary weekly rhythm, so the underlying trend stays clean. But the verdict is still the backtest: if Prophet cannot beat seasonal-naive on the holdout, the seasonal-naive line ships and Prophet goes back for tuning. That is the M-competition humility, applied to every model in this course.
Try it yourself - this week ◐ 30-45 min total
- Fit Prophet on your own daily series (the one from b1). Print
yhat,yhat_lower,yhat_upperfor your real horizon. - Run
plot_componentsand write one sentence describing the trend and the weekly shape in plain English. - Build a holidays table for the two or three special days you actually know about, refit, and note whether the forecast improved.
- Score Prophet's MAPE on the holdout and put it in the same table as your seasonal-naive and Holt-Winters (b3) numbers. Which is winning so far?
- Try one value of
changepoint_prior_scalehigher and one lower; look at how wiggly the trend becomes. - Optional: skim Taylor & Letham (2018), "Forecasting at Scale" - the paper behind the tool.
Sources covered (cited)
Taught from the Prophet paper and the forecasting canon. This session covers:
Three questions before you go 🎯 ◐ 90 seconds
1 · How does Prophet model a series?
Prophet writes y(t) = g(t) + s(t) + h(t) + error. Each part is estimated and summed, which is why the components are individually readable.
2 · What are changepoints in Prophet?
Prophet puts candidate changepoints along the history and lets the trend slope shift at each, shrinking most toward zero so only the ones that matter bend the line.
3 · Prophet gives a fast, interpretable forecast. Do you ship it?
Prophet is a curve-fitter, not automatically the most accurate model. The M-competition rule holds: complexity must beat the baseline on a backtest, or the baseline ships.