FPP3 — the forecasting method, learned
FPP3 — the forecasting method, learned
Requested by: Young (Young's Mind, 2026-09-08) — "Learn the method and research more with Echo and register to vault." Context: connecting our Pulse (market-signal dashboard). Registry tracker: task-bc6caaee.
Book: Hyndman, R.J. & Athanasopoulos, G. (2021). Forecasting: Principles and Practice, 3rd ed., OTexts. Free, online, continuously updated (online version last updated 23 Jul 2026 — verified live). The de-facto practitioner standard: 10k+ citations, 50M+ pageviews, required at Monash (ETC3550/5550), citation-of-record on Cross Validated for MASE/AICc/auto-ARIMA conventions.
Summary (3 bullets)
- The method is a discipline, not an algorithm: plot → decompose/compose → benchmark (naïve/drift/seasonal-naïve) → model (ETS/ARIMA/dynamic regression/VAR) → residual diagnostics → out-of-sample evaluation (TS cross-validation, MASE) → re-forecast as data arrives. A model that can't beat naïve "is not worth considering."
- Point forecasts without prediction intervals are of almost no value (§5.5, verbatim) — every forecast we ship in Pulse must carry its uncertainty, and for financial series the naïve/random-walk benchmark is genuinely strong.
- The stack modernised: R tidyverts (fable/feasts/tsibble) is healthy (all CRAN-current 2026), and an official Python edition now exists — fpp3, the Pythonic Way (otexts.com/fpppy, Hyndman + Nixtla team, print June 2026) — with Nixtla's statsforecast as the drop-in for fpp3's AutoETS/AutoARIMA/AutoTheta.
Key findings
1. Decomposition (Ch.3)
Additive y=S+T+R vs multiplicative y=S×T×R (proportional seasonal variation). Classical decomposition (centred MA) is fixed-seasonality with endpoint bias — a teaching baseline only. STL (Loess-based) is the workhorse: any seasonality, time-varying seasonal component, robust to outliers. Forecast components separately + reseasonalise (STLF). Pitfall: centred MAs leak future data into fitted values — fitted-value model selection is optimistic.
2. ETS family (Ch.8)
Error-correction smoothing: level (α), trend (β), seasonality (γ); taxonomy ETS(Error, Trend∈{N,A,damped}, Seasonal) — 15–30 variants. Damped trend is the most popular auto-method (Gardner-McKenzie φ bend to flat). Innovations state-space form gives prediction intervals. Pitfalls: multiplicative forms require strictly positive data; all ETS models are non-stationary.
3. ARIMA (Ch.9)
Models autocorrelation where ETS models trend/seasonality — complementary classes. Difference to stationarity; ARIMA(0,1,0)=random walk=naïve. Critical: AICc cannot choose d (different data → incomparable likelihoods) — d from plots/unit-root tests; auto-ARIMA (Hyndman-Khandakar) uses KPSS for d, stepwise AICc search for p,q. Seasonal ARIMA impractical beyond m=4/12 — weekly/complex seasonality → STL-ETS or dynamic harmonic regression instead.
4. Dynamic regression & related predictors (Ch.10–12)
Regression with ARIMA errors on the residuals separates external drivers from dynamics; main pitfall = you must know/forecast future predictor values. VAR forecasts related series jointly (atheoretical, parameters explode with #series). Granger "causality" = forecast usefulness, not causation (ice-cream ↔ drownings confounding, §7.8) — directly relevant warning for any Pulse "signal predicts market" claim.
5. Evaluation discipline (Ch.5, Ch.13) — the load-bearing part
- Benchmarks: mean, naïve, seasonal naïve, drift. Beat them or don't ship.
- Accuracy: MAE/RMSE scale-dependent; MAPE undefined at zero, unstable near zero, asymmetric, meaningless without a real zero; sMAPE can go negative — Hyndman & Koehler say don't use it. Default: MASE/RMSSE (scaled by training naïve MAE; <1 = beats naïve).
- Residuals must be uncorrelated (Ljung-Box, lags=10 non-seasonal / 2m seasonal, df-adjusted) and zero-mean; anything else "can be improved."
- Time series cross-validation (rolling forecasting origin, no future leakage) is the model-selection rule: "find the model with the smallest RMSE computed using time series cross-validation."
- Combinations: simple average of ETS+ARIMA+STL-ETS beats all components (Bates & Granger 1969; "hard to beat," Wang et al. 2023).
- Judgment: forecasting ≠ goals ≠ planning (§1.2); anchoring/optimism/agenda bias (§6.1); knowing when not to forecast (§1.1) — near-random-walk series (exchange rates) are "no better than tossing a coin"; what's assumed stable is the way things change, not the level.
6. Ecosystem status (verified 2026-09-08, live)
| Layer | Status |
|---|---|
| R tidyverts | fable 0.5.0 (Jan 26), fabletools 0.7.0 (Apr 26), feasts 0.5.0 + tsibble 1.2.0 (Feb 26), forecast 9.0.2 (Mar 26) — all CRAN-current, small core team (O'Hara-Wild/Hyndman) |
| Official Python edition | ✅ fpppy at otexts.com/fpppy (verified HTTP 200) — mirrors fpp3 ch.1–13, adds Neural Networks + Foundation Models; reviewer caveats: TimeGPT API-key friction |
| Python parity stack | statsforecast 2.1.1 (Nixtla) = closest fpp3 drop-in (AutoARIMA/AutoETS/CES/Theta, numba-fast); statsmodels 0.15.0 = inference-grade, no auto-selection; sktime 1.1.0 / Darts 0.47 = broad zoos; mlforecast = big-panel ML; gluonts = deep probabilistic |
| Process complement | Gilliland/Tashman/Sglavo, Business Forecasting (Wiley/SAS 2016) — forecastability, FVA analysis, benchmarking culture |
⚠️ Correction made during cross-check: an earlier working note cited a Hyndman/OTexts companion "TSMB at otexts.com/tsmb" — that URL is 404 and has zero Wayback snapshots (verified). It does not exist. The correct process-layer citation is the Wiley/SAS volume above. Flagged honestly per evidence discipline.
Implications for us (Pulse connection)
- Pulse signal cards should carry MASE + prediction intervals, not just directional calls. Point-only signals are the failure mode the book warns about; uncertainty is the product.
- Naïve benchmark first for prices. Financial close-prices behave like random walks — fpp3's own GOOG example shows naïve wins on RMSE. Any Pulse "model beats X" claim must state the naïve/drift comparison or it's marketing.
- Weekly/complex seasonality (retail flow, sentiment pulses) → STL-ETS or harmonic regression, not seasonal ARIMA.
- Granger caution for our causal language: correlations that forecast are not mechanisms — our moomoo/Pro-Insights-style "AI explains moves" framing needs the same guardrail moomoo states: "AI should help you think better, not think for you."
- Stack decision (for Mira/Echo lanes): fpppy/statsforecast is the pragmatic Python path that keeps fpp3 method parity — avoids adding R to the fleet while staying citation-grade.
- Forecast Value Added thinking: every added model layer must prove out-of-sample improvement over the benchmark or it's noise tax.
Collaboration status (honest flag)
Echo pinged twice via A2A (:18304, task-bc6caaee split — practical layer + adoption evidence); both sends accepted, completions returned empty text (known fleet A2A failure mode, logged for Sol). Echo's findings file not yet present; the ecosystem/adoption section above was covered by Tam's own lanes as fallback. If Echo posts to the shared workspace, her section merges with credit.
Sources
- https://otexts.com/fpp3/ (all chapter claims cite exact section URLs in the working notes; 37+ section URLs verified against live pages 2026-09-08)
- https://otexts.com/fpppy/ (verified live 2026-09-08)
- CRAN: fable, fabletools, feasts, tsibble, forecast (release dates verified)
- PyPI/GitHub: statsmodels, sktime, darts, prophet, mlforecast, statsforecast, gluonts (release dates verified)
- Hyndman & Koehler (2006) on percentage errors; Bates & Granger (1969) / Wang et al. (2023) on combinations; Gardner & McKenzie (1985) damped trend; Cleveland et al. (1990) STL
- Working notes (Tam, this study): methods synthesis, evaluation discipline, ecosystem scan — retained in profile workspace
EML + ZIP deep dive — BNPL/payments losers, Sep 8 2026
Requested by Eva (trading desk) via A2A. Angles: (1) consumer-credit health signal from BNPL bad debts; (2) follow-ups (Eva's message truncated after "2)" — covered the two obvious complements: why a beat-and-raise got sold off, and EML-specific risk reads).
moomoo's investor-education system — what they built and what Pulse can take
Requested by: Young (Young's Mind, 2026-09-08) — "Learn this content, work with Mira and Echo, to connect our Pulse." Registry context: feeds the Pulse V2 line (tasks task-8f8c4324 frontend / task-d97c1bcb backend).

