Lesson 5 - Guided Project: The Final Report
Welcome to the Guided Project
Every module in this course has ended with a forecast. This is the last one, and it closes the loop this whole course opened: not just fitting a model, but reporting it the way an honest analyst actually would, with every pipeline stage accounted for and every claim backed by a number you can trace back to real code.
By the end of this project, you will be able to:
- Retrain a validated model on the complete series for a genuine forward forecast
- Distinguish a seasonal pattern from a real trend change in a fresh forecast
- Compare a forecast against the correct prior period, not just the most recent one
- Write a forecasting result up as a complete, honest report
Let’s finish the pipeline.
Stage 1: Retrain on Everything
import numpy as np
import pandas as pd
from statsmodels.tsa.holtwinters import ExponentialSmoothing
def lantern_vine():
idx = pd.date_range("2020-01-06", periods=208, freq="W-MON")
t = np.arange(208)
rng = np.random.default_rng(7)
growth_rate = np.where(t < 104, 0.008, 0.003)
log_level = np.cumsum(growth_rate)
level = 500 * np.exp(log_level)
seasonal_factor = 1 + 0.35 * np.sin(2 * np.pi * (t - 35) / 52)
noise_factor = rng.normal(1, 0.04, 208)
y = level * seasonal_factor * noise_factor
return pd.Series(np.round(y).astype(int), index=idx, name="units_sold")
y = lantern_vine()
production = ExponentialSmoothing(
y, trend="add", seasonal="mul", seasonal_periods=52,
initialization_method="estimated",
).fit()
print({k: float(round(v, 4)) for k, v in production.params.items()
if k in ("smoothing_level", "smoothing_trend", "smoothing_seasonal")}){'smoothing_level': 0.0971, 'smoothing_trend': 0.0971, 'smoothing_seasonal': 0.0}Unlike Cyclepath, where every Holt-Winters smoothing parameter optimized to exactly 0, here level and trend both land at about 0.097, genuine, if modest, adaptation. That makes sense: Cyclepath’s trend never changed pace, so a single fixed rate fit perfectly. Lantern & Vine’s trend did change pace, and a small amount of ongoing adaptation lets the model track that shift rather than lock in one rate for the whole series. The seasonal parameter still lands at 0, since the seasonal shape itself never changed, only its scale, which the multiplicative structure already accounts for automatically.
Stage 2: Forecast the Next Six Months
fc = production.forecast(26)
fc.index = pd.date_range("2024-01-01", periods=26, freq="W-MON")
print(round(fc.iloc[0], 1), fc.index[0].date())
print(round(fc.iloc[-1], 1), fc.index[-1].date())
print(round(fc.sum(), 1))2037.8 2024-01-01
1142.6 2024-06-24
38593.6The forecast opens 2024 at 2,037.8 units, still riding the tail of the holiday season, and eases down to 1,142.6 by late June, the seasonal summer lull Lesson 2’s decomposition already identified. Total forecast volume for the first half of 2024: 38,593.6 units.
Stage 3: Comparing Against the Right Prior Period
A naive comparison against the second half of 2023 (43,665 units, a mean of 1,679.4 a week) makes the forecast look like an 11.6% decline. That comparison is misleading, because it compares a holiday-season half of the year against a summer-lull half, exactly the seasonal swing this series always has. The honest comparison is the same half of the year, one year earlier:
h1_2023 = y.iloc[-52:-26]
print(h1_2023.sum(), round(h1_2023.mean(), 1))
print(round(fc.mean() / h1_2023.mean() * 100 - 100, 1))32496 1249.8
18.8First-half 2023 totaled 32,496 units, a weekly mean of 1,249.8. The 2024 first-half forecast’s weekly mean, 1,484.4, is 18.8% higher, year over year. That figure lines up closely with 2023’s own most recent annual growth rate from Lesson 1 (18.0%), a reassuring consistency check: the forecast is not inventing a new growth story, it is extending the pace the business had actually settled into by the end of the observed data.
Stage 4: The Final Report
Series: Lantern & Vine, weekly unit sales, 208 weeks (January 2020 through December 2023).
Exploration (Lesson 1): Weekly sales average 1,070.8 units, ranging from 362 to 2,258. Yearly totals climb from 32,464 to 76,161, but year-over-year growth decelerates: 52.6%, then 30.3%, then 18.0%.
Structure (Lesson 2): STL’s seasonal component grows every year (775.8 to 1,218.2), confirming multiplicative seasonality, opposite to Cyclepath’s additive structure. A regime change in the trend is confirmed directly: growth decelerates from about 0.78% a week to about 0.36% a week, close to the series’ midpoint.
Stationarity (Lesson 3): Working in log space, first differencing alone stationarizes the series (ADF p = 0.0000, lowest variance among options tested). Seasonal differencing alone fails outright (p = 0.8451), the opposite of Cyclepath, because it compares across the regime-change boundary. Leftover autocorrelation at the seasonal lag (0.154) still justifies a SARIMA seasonal term.
Model selection (Lesson 4): A SARIMA with seasonal terms scored 3.74% MAPE on a single held-out block, far ahead of four non-seasonal candidates (23% or worse). A multiplicative Holt-Winters model scored a close 3.85%. Backtested across six origins, Holt-Winters won on both accuracy (mean 3.76% versus 4.39%) and stability (standard deviation 0.66 versus 1.10), the same reversal Module 8 found on Cyclepath.
Forecast (this lesson): Retrained on all 208 weeks, Holt-Winters projects the first half of 2024 opening at 2,037.8 units and easing to 1,142.6 by late June, a total of 38,593.6 units, 18.8% above the same half of 2023, consistent with the business’s most recent observed growth rate.
Every claim in this report traces to a number
Nothing in the report above is asserted without a specific, reproducible calculation behind it, the standard this entire course has held to from Module 1’s first naive baseline onward. That traceability, not any single technique, is the real skill this course has been teaching: a forecast is only as trustworthy as the chain of verified evidence supporting every step that produced it.
Practice Exercises
Exercise 1: What would you flag as a risk in this forecast?
Given everything this module found, what is the single biggest risk to trust in this 2024 forecast?
Hint
The regime change itself. This series has already changed its growth rate once, and nothing in the data guarantees it will not change again, whether accelerating, decelerating further, or flattening out entirely, before or during the forecast period. Holt-Winters’ modest adaptation (alpha and beta near 0.097) can track a gradual drift but would need several new weeks of data before fully reacting to a sudden new shift, the same limitation Module 8’s rolling-versus-expanding window discussion raised for any series that is not perfectly stable.
Exercise 2: Why report the growth-rate consistency check?
Stage 3 noted the forecast’s implied 18.8% growth is close to 2023’s own 18.0% year-over-year rate. Why include that comparison in a final report at all?
Hint
It is a sanity check a reader can verify independently, without needing to trust the model’s internals. A forecast that quietly implied 50% growth, or a decline, when the business’s own most recent trajectory was 18%, would be a signal to question the model before acting on it. Reporting this kind of consistency check is exactly the honest, verifiable communication this course has modeled throughout, rather than presenting a forecast number as if it needed no further scrutiny.
Exercise 3: What would you do differently for a real deployment?
If Lantern & Vine were a real business asking you to keep this forecast updated monthly, what from this course would you put in place beyond the single report you just wrote?
Hint
You would put Module 8’s walk-forward backtesting into an ongoing process rather than a one-time check, re-running it as new weeks of real data arrive, to catch early if the model’s accuracy starts drifting or if a new regime change emerges. You would also keep monitoring forecast interval coverage over time, the same empirical check Module 8 introduced, rather than trusting a single historical calibration forever. A real deployment treats evaluation as continuous, not as a one-time hurdle cleared before shipping.
Summary
Retrained on all 208 weeks, Holt-Winters multiplicative forecasts the first half of 2024 opening at 2,037.8 units and easing to 1,142.6 by late June, a total of 38,593.6, following the same seasonal shape every prior year showed. Compared honestly against the same half of the prior year, not the more recent but seasonally mismatched second half of 2023, the forecast implies 18.8% year-over-year growth, closely consistent with the business’s own most recently observed pace. The final report traces every stage of this module’s pipeline, exploration, structural diagnosis, stationarity, model selection, and backtesting, back to a specific, reproducible number.
Key Concepts
- Retrain on everything for the real forecast — the same principle from Module 6, applied here on a new series.
- Compare against the matching prior period — a forecast should be checked against the same phase of the seasonal cycle, not simply the most recent data.
- A growth-rate consistency check — comparing a forecast’s implied growth against the series’ own recent trajectory is a verifiable sanity check any reader can perform.
- A traceable final report — every claim backed by a specific calculation, the standard held throughout this entire course.
Why This Matters
This capstone was never really about Lantern & Vine specifically. It was about finding out whether the tools built across eight modules, on one carefully chosen series, actually transfer to a new one that does not match its structure. They did, with real, verified adjustments at nearly every stage: a different seasonal period, a genuinely different additive-versus-multiplicative answer, a differencing recipe that reversed Cyclepath’s, and a model comparison that, once properly backtested, confirmed the same conclusion Module 8 reached independently. That combination, tools that generalize and a discipline that catches exactly where they need to be re-verified rather than assumed, is what this course has been building toward from its first lesson. You now have both.
Next Steps
Back to Course Overview
Review the full Time Series Forecasting course, all nine modules, from foundations through this capstone.
Back to Module Overview
Return to the Capstone module overview
Continue Building Your Skills
You have carried a complete forecasting pipeline, exploration, decomposition, stationarity, model identification, fitting, backtesting, and honest reporting, from a first line plot all the way to a genuine, defensible forecast on a series you had never seen before this module began. That is the entire arc of this course, and it is now yours to apply to the next series you encounter, whichever structure it turns out to have.