Why do we need
GARCH models
GA RCH MODELS IN P YTH ON
Chelsea Yang
Data Science Instructor
Course overview
GARCH: Generalized AutoRegressive Conditional Heteroskedasticity
Chapter 1: GARCH Model Fundamentals
Chapter 2: GARCH Model Con guration
Chapter 3: Model Performance Evaluation
Chapter 4: GARCH in Action
GARCH MODELS IN PYTHON
What is volatility
Describe the dispersion of nancial asset returns over time
Often computed as the standard deviation or variance of price returns
The higher the volatility, the riskier a nancial asset
GARCH MODELS IN PYTHON
How to compute volatility
Step 1: Calculate returns as percentage of price changes
P1 − P0
return =
P0
Step 2: Calculate the sample mean return
∑ni=1 returni
mean =
n
Step 3: Calculate the sample standard deviation
√
2
∑n
(returni − mean)
volatility = i=1
= √variance
n−1
GARCH MODELS IN PYTHON
Compute volatility in Python
Use pandas pct_change() method:
return_data = price_data.pct_change()
Use pandas std() method:
volatility = return_data.std()
GARCH MODELS IN PYTHON
Volatility conversion
Convert to monthly volatility from daily:
(assume 21 trading days in a month)
σmonthly = √21 ∗ σd
Convert to annual volatility from daily:
(assume 252 trading days in a year)
σannual = √252 ∗ σd
GARCH MODELS IN PYTHON
The challenge of volatility modeling
Heteroskedasticity:
In ancient Greek: "different" (hetero) + "dispersion" (skedasis)
A time series demonstrates varying volatility systematically over time
GARCH MODELS IN PYTHON
Detect heteroskedasticity
Homoskedasticity vs Heteroskedasticity
GARCH MODELS IN PYTHON
Volatility clustering
VIX historical prices:
GARCH MODELS IN PYTHON
Let's practice!
GA RCH MODELS IN P YTH ON
What are ARCH and
GARCH
GA RCH MODELS IN P YTH ON
Chelsea Yang
Data Science Instructor
First came the ARCH
Auto Regressive Conditional Heteroskedasticity
Developed by Robert F. Engle (Nobel prize laureate 2003)
GARCH MODELS IN PYTHON
Then came the GARCH
"Generalized" ARCH
Developed by Tim Bollerslev (Robert F. Engle's student)
GARCH MODELS IN PYTHON
Related statistical terms
White noise (z): Uncorrelated random variables with a zero mean and a nite variance
Residual = predicted value - observed value
GARCH MODELS IN PYTHON
Model notations
Expected return: Expected volatility:
μt = Expected[rt ∣I(t − 1)] σ 2 = Expected[(rt − μt )2 ∣I(t − 1)]
Residual (prediction error): Volatility is related to the residuals:
rt = μt + ϵt ϵt = σt ∗ ζ(W hiteNoise)
GARCH MODELS IN PYTHON
Model equations: ARCH
GARCH MODELS IN PYTHON
Model equations: GARCH
GARCH MODELS IN PYTHON
Model intuition
Autoregressive: predict future behavior based on past behavior
Volatility as a weighted average of past information
GARCH MODELS IN PYTHON
GARCH(1,1) parameter constraints
To make the GARCH(1,1) process realistic, it requires:
All parameters are non-negative, so the variance cannot be negative.
ω, α, β >= 0
Model estimations are "mean-reverting" to the long-run variance.
α+β < 1
long-run variance:
ω/(1 − α − β)
GARCH MODELS IN PYTHON
GARCH(1,1) parameter dynamics
The larger the α, the bigger the immediate impact of the shock
The larger the β , the longer the duration of the impact
GARCH MODELS IN PYTHON
Let's practice!
GA RCH MODELS IN P YTH ON
How to implement
GARCH models in
Python
GA RCH MODELS IN P YTH ON
Chelsea Yang
Data Science Instructor
Python "arch" package
from arch import arch_model
1 Kevin Sheppard. (2019, March 28). bashtage/arch: Release 4.8.1 (Version 4.8.1). Zenodo.
http://doi.org/10.5281/zenodo.2613877
GARCH MODELS IN PYTHON
Work ow
Develop a GARCH model in three steps:
1. Specify the model
2. Fit the model
3. Make a forecast
GARCH MODELS IN PYTHON
Model speci cation
Model assumptions:
Distribution: "normal" (default), "t" , "skewt"
Mean model: "constant" (default), "zero" , "AR"
Volatility model: "GARCH" (default), "ARCH" , "EGARCH"
basic_gm = arch_model(sp_data['Return'], p = 1, q = 1,
mean = 'constant', vol = 'GARCH', dist = 'normal')
GARCH MODELS IN PYTHON
Model tting
Display model tting output after every n iterations:
gm_result = gm_model.fit(update_freq = 4)
Turn off the display:
gm_result = gm_model.fit(disp = 'off')
GARCH MODELS IN PYTHON
Fitted results: parameters
Estimated by "maximum likelihood method"
print(gm_result.params)
GARCH MODELS IN PYTHON
Fitted results: summary
print(gm_result.summary())
GARCH MODELS IN PYTHON
Fitted results: plots
gm_result.plot()
GARCH MODELS IN PYTHON
Model forecasting
# Make 5-period ahead forecast
gm_forecast = gm_result.forecast(horizon = 5)
# Print out the last row of variance forecast
print(gm_forecast.variance[-1:])
h.1 in row "2019-10-10": 1-step ahead forecast made using data up to and including that date
GARCH MODELS IN PYTHON
Let's practice!
GA RCH MODELS IN P YTH ON