Modeling Volatility and GARCH Family › Volatility Forecasting

Michael BrenndoerferDecember 10, 20254 min read
Quantitative FinanceAll chapters
Part 8 of 15Econometrics and Statistical Modeling
Chapter 42Modeling Volatility and GARCH Family › Volatility Forecasting
Reading section 9 of 13 · Volatility Forecasting · 4 minSection 9 of 13 · 4 min

Book contents

Section 9 of 13 · 4 min read

Modeling Volatility and GARCH Family › Volatility ForecastingOne section · Sections in this chapter9 / 13 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

One-Step-Ahead Forecasts

The primary application of GARCH models is forecasting future volatility. For GARCH(1,1), the one-step-ahead forecast is straightforward:

σ^t+12=ω+αϵt2+βσt2\hat{\sigma}_{t+1}^2 = \omega + \alpha \epsilon_t^2 + \beta \sigma_t^2

where:

  • σ^t+12\hat{\sigma}_{t+1}^2: forecasted variance for the next period
  • ω,α,β\omega, \alpha, \beta: estimated model parameters
  • ϵt2\epsilon_t^2: today's squared return shock
  • σt2\sigma_t^2: today's conditional variance

Given today's shock ϵt\epsilon_t and variance σt2\sigma_t^2, tomorrow's variance forecast is simply the GARCH equation evaluated at current values. This forecast incorporates two sources of information: the specific return shock that just occurred and the overall volatility state. The simplicity of this calculation makes GARCH particularly attractive for real-time applications where you must update forecasts daily.

Multi-Step Forecasts

For longer horizons, you iterate the GARCH equation forward. Since the expected squared shock equals the variance (ET[ϵT+k2]=ET[σT+k2]E_T[\epsilon_{T+k}^2] = E_T[\sigma_{T+k}^2]), the forecast follows a recursive pattern:

ET[σT+k2]=ω+(α+β)ET[σT+k−12]E_T[\sigma_{T+k}^2] = \omega + (\alpha + \beta) E_T[\sigma_{T+k-1}^2]

where:

  • ET[σT+k2]E_T[\sigma_{T+k}^2]: expected variance kk steps ahead
  • ω,α,β\omega, \alpha, \beta: model parameters
  • ET[σT+k−12]E_T[\sigma_{T+k-1}^2]: expected variance at the previous step

Subtracting the unconditional variance σˉ2\bar{\sigma}^2 from both sides reveals the mean-reverting dynamic:

ET[σT+k2]−σˉ2=(α+β)(ET[σT+k−12]−σˉ2)E_T[\sigma_{T+k}^2] - \bar{\sigma}^2 = (\alpha + \beta)(E_T[\sigma_{T+k-1}^2] - \bar{\sigma}^2)

where:

  • ET[σT+k2]−σˉ2E_T[\sigma_{T+k}^2] - \bar{\sigma}^2: expected deviation of variance from the long-run average at horizon kk
  • α+β\alpha + \beta: persistence parameter determining decay rate
  • ET[σT+k−12]−σˉ2E_T[\sigma_{T+k-1}^2] - \bar{\sigma}^2: expected deviation at the previous step

This relationship shows that the expected deviation from unconditional variance shrinks by a factor of (α+β)(\alpha + \beta) each period. Starting from any initial variance, forecasts converge geometrically toward the long-run level. Iterating this relationship h−1h-1 times yields the hh-step-ahead forecast from time TT:

ET[σT+h2]=σˉ2+(α+β)h−1(σ^T+12−σˉ2)E_T[\sigma_{T+h}^2] = \bar{\sigma}^2 + (\alpha + \beta)^{h-1}(\hat{\sigma}_{T+1}^2 - \bar{\sigma}^2)

where:

  • ET[σT+h2]E_T[\sigma_{T+h}^2]: expected variance hh days ahead given info at TT
  • σˉ2\bar{\sigma}^2: unconditional long-run variance
  • α,β\alpha, \beta: persistence parameters
  • hh: forecast horizon
  • σ^T+12\hat{\sigma}_{T+1}^2: next day's variance forecast

As the horizon hh increases, the forecast converges to the unconditional variance. This is mean reversion in action. As you become increasingly uncertain about future volatility, your best guess converges to the long-run average. At very long horizons, your specific knowledge of current market conditions becomes irrelevant, and you fall back on the unconditional variance as your forecast.

In[23]:
Code
# Generate volatility forecasts
forecast_horizon = 60  # 60 trading days (roughly 3 months)
forecasts = results.forecast(horizon=forecast_horizon)

# Extract variance forecasts
variance_forecasts = forecasts.variance.iloc[-1].values
volatility_forecasts = np.sqrt(variance_forecasts) * np.sqrt(252)  # Annualize

# Calculate unconditional volatility
alpha_est = results.params["alpha[1]"]
beta_est = results.params["beta[1]"]
omega_est = results.params["omega"]
unconditional_vol = np.sqrt(omega_est / (1 - alpha_est - beta_est)) * np.sqrt(
    252
)
Out[24]:
Visualization
Line chart showing an annualized volatility forecast moving toward the unconditional level over a 60-day horizon.
GARCH(1,1) volatility term structure over 60 trading days demonstrates exponential mean reversion toward unconditional volatility, shown by the dashed reference line. Near-term forecasts reflect recent market conditions, while longer-term forecasts move toward the long-run volatility average.

The volatility term structure shows how GARCH forecasts evolve with horizon. If current volatility is above the long-run level, the forecast gradually declines; if below, it gradually rises. This mean-reverting behavior is economically sensible and distinguishes GARCH from naive historical measures that assume volatility is constant. The line shows the model's conditional mean forecast; constructing forecast intervals would require simulation or an additional distributional calculation. Traders and risk managers can use this term structure to set appropriate volatility assumptions for options and risk calculations at different maturities.