Financial Models in Practice · Part 16 of 16

Time-Series Forecasting Models: ARIMA and Holt-Winters for Finance Analysts

Maciej Poniewierski 6 min read

STATUS: Detailed Outline — Ready to Draft

Word target: 2,000–2,400 words Who this is for: Students with some Python experience (or willingness to learn) who want to move beyond Excel-based forecasting; junior analysts in FP&A, data science for finance, or quant-adjacent roles; MSc Finance / Financial Data Science students. Real-world question this post answers: “We have 36 months of revenue data with a clear trend and seasonal pattern. Instead of drawing a straight line from last year’s actuals, how do we build a statistically grounded forecast that captures trend, seasonality, and uncertainty?” Prerequisites: Helpful but not required: basic statistics (mean, variance, autocorrelation). All examples use pseudocode and Excel.


Learning Objectives

  1. Decompose a time series into trend, seasonality, and residual components
  2. Understand the intuition behind moving averages and exponential smoothing
  3. Build a Holt-Winters model for a seasonal time series (Excel or any tool)
  4. Understand what ARIMA is and when to use it
  5. Evaluate forecast accuracy using MAE, RMSE, and MAPE
  6. Visualise the forecast with confidence intervals

Post Outline

Introduction (~200 words)

  • Hook: most financial forecasts are built by taking last year’s numbers and adding a growth percentage. This works when trends are stable and business conditions are predictable. But what about a retail business with clear Christmas seasonality? A SaaS business whose monthly revenue has a trend plus monthly noise? A manufacturing business whose costs are correlated with commodity price cycles?
  • Statistical time-series models are purpose-built for these situations. They read the historical pattern, decompose it into structural components, and project forward with explicit uncertainty bounds.
  • This post uses ForecastCo — a UK-based subscription e-commerce business — with 36 months of monthly revenue data.

Section 1: What Is a Time Series? (~200 words)

  • Definition: a sequence of observations ordered in time, typically at equal intervals
  • The four components of a time series:
    1. Trend (T): the long-run direction (upward, downward, or flat)
    2. Seasonality (S): a regular, repeating pattern tied to the calendar (monthly, quarterly, annual)
    3. Cyclicality (C): longer irregular patterns not tied to the calendar (economic cycles)
    4. Residual / Noise (R): random variation unexplained by the above
  • Additive vs multiplicative decomposition:
    • Additive: Y = T + S + R (use when seasonal amplitude is roughly constant)
    • Multiplicative: Y = T × S × R (use when seasonal amplitude grows with the level)

Section 2: Decomposing the Time Series (~250 words)

Decomposition algorithm — multiplicative model:

LOAD  monthly revenue data (date column as index)

DECOMPOSE revenue series:
  model  = multiplicative   (use when seasonal swings grow with the level)
  period = 12               (monthly data → annual seasonal cycle)

EXTRACT components:
  trend    ← smoothed line showing long-run direction
  seasonal ← repeating monthly multiplier  (e.g. Dec ≈ 1.6×, Jan ≈ 0.7×)
  residual ← remaining unexplained noise

PLOT four panels stacked vertically:
  Row 1: Observed    Row 2: Trend
  Row 3: Seasonal    Row 4: Residual
  Y-axis label on each: "Revenue (£000)"

Interpreting the decomposition:

  • Trend: ForecastCo is growing at ~12% annually
  • Seasonal: December spike ~1.6× the average; January trough ~0.7× (post-Christmas decline)
  • Residual: mostly noise, no obvious structural pattern → good

Section 3: Holt-Winters (Exponential Smoothing) (~400 words)

Why Holt-Winters before ARIMA:

  • Intuitive to explain to non-technical stakeholders
  • Works very well for trended + seasonal data
  • No need to understand ARIMA parameter selection

The three smoothing parameters:

  • α (alpha): controls how quickly the model responds to changes in level (0 = slow; 1 = fast)
  • β (beta): controls the responsiveness of the trend component
  • γ (gamma): controls the responsiveness of the seasonal component

Holt-Winters algorithm — step by step:

SPLIT data:
  train ← first 30 months
  test  ← last 6 months  (holdout for honest evaluation)

FIT Holt-Winters model on train:
  trend    = additive
  seasonal = multiplicative   (amplitude grows with the level)
  periods  = 12

FORECAST 12 months ahead

EVALUATE model on holdout:
  MAE  = average( |forecast − actual| )
  MAPE = average( |forecast − actual| / actual ) × 100
  RMSE = sqrt( average( (forecast − actual)² ) )

PLOT:
  ─── Historical (solid)
  - - Actual holdout (dashed)
  ─── Forecast (red)
  ░░░ Approx. 80% confidence band (±10% of forecast)

Evaluating the model on the holdout:

  • MAE (Mean Absolute Error): average absolute error in £
  • MAPE (Mean Absolute Percentage Error): % error — easier to communicate to non-technical stakeholders
  • RMSE: penalises large errors more heavily than MAE

Section 4: ARIMA — When and Why (~400 words)

ARIMA stands for AutoRegressive Integrated Moving Average. It is a flexible family of models for stationary time series.

Three parameters: p (AR order), d (differencing), q (MA order)

  • AR(p): current value depends on the previous p values
  • I(d): differencing the series d times to achieve stationarity
  • MA(q): current value depends on the previous q forecast errors

When to use ARIMA over Holt-Winters:

  • Series without clear regular seasonality
  • Series where autocorrelation structure is complex
  • When you want statistically rigorous confidence intervals

Step-by-step ARIMA:

  1. Check stationarity: ADF test (from statsmodels.tsa.stattools import adfuller)
  2. If non-stationary: apply differencing (d = 1 usually sufficient for financial series)
  3. Inspect ACF and PACF plots to choose p and q
  4. Fit the model: from statsmodels.tsa.arima.model import ARIMA
  5. Auto-select ARIMA parameters using an information criterion:
AUTO-SELECT ARIMA parameters:
  seasonal  = true
  m         = 12              (monthly data)
  criterion = AIC             (penalises unnecessary complexity)
  method    = stepwise search

OUTPUT:
  Selected order: (p, d, q)(P, D, Q)[12]
  model summary with AIC score
  12-period forecast with confidence intervals

Section 5: Choosing Between Models and Presenting Results (~200 words)

Model selection guide:

SituationRecommended model
Clear trend + regular seasonalityHolt-Winters
No clear seasonality, autocorrelatedARIMA
Seasonal + complex autocorrelationSARIMA or Facebook Prophet
Uncertainty quantification importantAny model + Monte Carlo (see Monte Carlo DCF post)

Presenting forecasts to non-technical stakeholders:

  • Always show the historical data alongside the forecast (context is everything)
  • Always show a confidence interval — a single-line forecast implies false precision
  • Accompany with a plain-English narrative: “The model expects revenue to grow from £X to £Y over the next 12 months, with the main uncertainty driven by the seasonal amplitude in Q4”

Key Takeaways

  • Decompose the series first: understanding trend and seasonality before modelling is not optional
  • Holt-Winters is the go-to for trended + seasonal financial series — intuitive and robust
  • ARIMA is more flexible and statistically rigorous but requires more careful parameter selection
  • Always evaluate on a holdout sample; never judge a forecast model on its fit to training data
  • Communicate uncertainty explicitly — a point forecast without a confidence interval is not a forecast

Practice Suggestion

Download the ForecastCo dataset (36 months of monthly revenue). Fit both a Holt-Winters and an ARIMA model using the first 30 months as training data. Evaluate both on the last 6 months (holdout). Which model has the lower MAPE? Plot both forecasts alongside the actual holdout data.

CTAs

  • Inline: Download the ForecastCo dataset and worked Excel template
  • End: Book a session if you are building statistical forecasting into an FP&A or analytics role

SEO & Internal Linking Notes

  • Internal links: ← Monte Carlo DCF; → P&L Planning; → Budget Model
  • Diagram: Time series decomposition chart (4 panels) + Holt-Winters forecast with confidence interval
  • Table: Model selection guide + forecast accuracy metrics comparison

Topics

time series forecasting ARIMA Holt-Winters Excel statistical forecasting financial modelling