Stylized Facts of Financial Returns › Volatility Clustering

Michael BrenndoerferNovember 21, 20256 min read
Quantitative FinanceAll chapters
Part 5 of 15Stochastic Calculus and Pricing Theory
Chapter 25Stylized Facts of Financial Returns › Volatility Clustering
Reading section 5 of 14 · Volatility Clustering · 6 minSection 5 of 14 · 6 min

Book contents

Section 5 of 14 · 6 min read

Stylized Facts of Financial Returns › Volatility ClusteringOne section · Sections in this chapter5 / 14 ↓
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

Perhaps the most practically important stylized fact is volatility clustering: large returns (positive or negative) tend to be followed by large returns, and small returns tend to be followed by small returns. Markets exhibit periods of calm punctuated by periods of turbulence. This phenomenon violates the assumption that each day's return is drawn independently from the same distribution, so risk forecasts must allow return variance to change over time.

Volatility Clustering

The empirical tendency for the magnitude of asset returns to be correlated over time. Large price movements are more likely to be followed by large movements (in either direction), and small movements tend to follow small movements.

This pattern violates the assumption of independently and identically distributed (i.i.d.) returns. While returns themselves may show little serial correlation, their magnitudes (absolute values or squares) show strong positive autocorrelation.

Visualizing Volatility Clustering

A time series plot of returns immediately reveals volatility clustering.

Out[18]:
Visualization
Time series of daily log returns showing alternating calm and turbulent regimes, with shaded regions highlighting the 2008 financial crisis and 2020 COVID-19 crash.
Time series of S&P 500 daily log returns. The data shows distinct regimes of high and low variance, violating the assumption of constant volatility.
Time series of absolute daily returns serving as a volatility proxy, with the 2008 financial crisis and 2020 COVID-19 crash shown as shaded reference windows.
Time series of absolute daily returns (volatility proxy). Shaded crisis windows provide context for comparing the size and frequency of volatility spikes over time.

The clustering is unmistakable. The 2008 financial crisis and March 2020 COVID crash show prolonged periods of high volatility, followed by gradual calming. This persistence indicates that volatility is not independent over time.

Quantifying Clustering with Autocorrelation

We can quantify volatility clustering by computing autocorrelation functions for returns and squared returns. Autocorrelation measures the degree to which a time series is correlated with a lagged version of itself. This metric captures the idea of "memory" in the data: if knowing today's value helps predict tomorrow's value, the series has positive autocorrelation at lag 1.

The autocorrelation at lag kk measures the correlation between a time series and its kk-period lagged version:

ρ(k)=Cov(rt,rt−k)Var(rt)\rho(k) = \frac{\text{Cov}(r_t, r_{t-k})}{\text{Var}(r_t)}

where:

  • ρ(k)\rho(k): autocorrelation coefficient at lag kk
  • Cov(⋅,⋅)\text{Cov}(\cdot, \cdot): covariance operator
  • Var(⋅)\text{Var}(\cdot): variance operator
  • rtr_t: return at time tt
  • rt−kr_{t-k}: return at time t−kt-k

The numerator measures how returns at time tt co-move with returns from kk periods earlier. Dividing by the variance normalizes this metric to a range of [−1,1][-1, 1], making it comparable to a standard correlation coefficient. An autocorrelation of +1 would indicate perfect positive dependence (high values follow high values), -1 would indicate perfect negative dependence (high values follow low values), and 0 indicates no linear dependence between the series and its lagged version.

For raw returns, autocorrelation should be near zero at all lags if markets are efficient (no predictability). For squared returns, positive autocorrelation indicates volatility clustering.

In[19]:
Code
import numpy as np
from statsmodels.tsa.stattools import acf

# Compute autocorrelations
max_lag = 50
acf_returns = acf(log_returns, nlags=max_lag)
acf_squared = acf(log_returns**2, nlags=max_lag)
acf_abs = acf(np.abs(log_returns), nlags=max_lag)

# Calculate confidence interval for plots
n_obs_acf = len(log_returns)
ci_bound = 1.96 / np.sqrt(n_obs_acf)

# Extract specific values for reporting
acf_ret_1 = acf_returns[1]
acf_sq_1 = acf_squared[1]
acf_abs_1 = acf_abs[1]
acf_sq_10 = acf_squared[10]
acf_sq_20 = acf_squared[20]
acf_sq_50 = acf_squared[50]
Out[20]:
Visualization
Bar chart of autocorrelation coefficients for raw daily returns across 50 lags, showing values near zero consistent with market efficiency.
Autocorrelation of raw daily log returns. The lack of large correlation across 50 lags indicates that return direction is largely unpredictable, consistent with market efficiency.
Bar chart of autocorrelation coefficients for squared daily returns across 50 lags, with mostly small values and a few positive coefficients.
Autocorrelation of squared returns. Most sample coefficients are small, with a few positive lags suggesting limited short-run dependence in return magnitude.
Bar chart of autocorrelation coefficients for absolute daily returns across 50 lags, with coefficients fluctuating close to zero.
Autocorrelation of absolute returns. The sample coefficients fluctuate near zero, so this series provides little visual evidence of persistent volatility dependence.
Out[21]:
Console
Autocorrelation Summary
==================================================
Returns at lag 1:         -0.0122
Squared returns at lag 1: -0.0031
Absolute returns at lag 1:-0.0062

Squared returns at lag 10: -0.0010
Squared returns at lag 20: -0.0139
Squared returns at lag 50: 0.0060

The contrast is stark. Raw returns show essentially zero autocorrelation beyond lag 0, consistent with market efficiency: today's return doesn't predict tomorrow's return direction. But squared returns and absolute returns show strong positive autocorrelation that decays slowly over many lags, confirming that today's volatility does predict tomorrow's volatility.

The slow decay of volatility autocorrelation has practical implications. Volatility "shocks" persist for extended periods. A single turbulent day doesn't mean tomorrow will be turbulent, but an entire turbulent week suggests that volatility will remain high. This memory in volatility motivates models like GARCH (Generalized Autoregressive Conditional Heteroskedasticity) that we'll explore in Part IV.