GARCH Models

GARCH Models

Overview

Definition

GARCH (Generalized AutoRegressive Conditional Heteroskedasticity) models are used to estimate the volatility of a time series. While ARIMA models the conditional mean, GARCH models the conditional variance (σt2).


1. The Volatility Problem

In financial time series (stock returns), we often observe Volatility Clustering: Large changes tend to be followed by large changes, and small by small.


2. The Model Structure

GARCH(p, q):

σt2=ω+i=1qαiϵti2+j=1pβjσtj2

Where:

GARCH(1,1): The most common specification.

σt2=ω+α1ϵt12+β1σt12

Worked Example: Risk Management

Value at Risk (VaR)

You manage a portfolio.

  • Today: Return rt=2%.
  • Current Volatility: σt2=1.5.
  • Model: GARCH(1,1) with ω=0.1,α=0.2,β=0.7.

Question: Forecast tomorrow's volatility (σt+12).

Solution:

σt+12=ω+αϵt2+βσt2
  1. Identifying Terms:

    • ϵt2 is the squared shock from today. If we assume mean return is 0, ϵt2. So ϵt2=4.
    • σt2=1.5.
  2. Calculation:

    σt+12=0.1+(0.2×4)+(0.7×1.5)σt+12=0.1+0.8+1.05=1.95

Conclusion:
Volatility is predicted to increase from 1.5 to 1.95. The market is getting riskier because of today's large drop (shock).


Assumptions


Limitations

Pitfalls

  1. Explosive Models: If α+β1, the variance explodes to infinity (Integrated GARCH). Real financial data usually sums to ~0.99.
  2. Ignores Direction: Standard GARCH assumes positive shocks and negative shocks affect volatility equally. In reality, market crash (bad news) spikes volatility more than a rally (good news). Use EGARCH or GJR-GARCH for asymmetric effects.
  3. High Frequency: Does not work well on low-frequency data (e.g., yearly). Best for daily/intraday.


4. Interpretation Guide

Coefficient Meaning
α (ARCH) Reaction to new "shocks". High α = spiky volatility.
β (GARCH) Persistence of old variance. High β = volatility dies out slowly.
ω>0 Baseline variance. Essential for stability.
α+β1 High persistence (common in finance).

5. Python Implementation (arch package)

Note: The standard library statsmodels has limited GARCH support. arch is the industry standard.

from arch import arch_model
import numpy as np

# Sample Returns
returns = np.random.normal(0, 1, 1000)

# Fit GARCH(1,1)
model = arch_model(returns, vol='Garch', p=1, q=1)
results = model.fit(disp='off')

print(results.summary())

# Forecasting Volatility
forecasts = results.forecast(horizon=5)
print(forecasts.variance[-1:])