Stylized Facts of Financial Returns › Heavy Tails and Excess Kurtosis
Quantitative FinanceAll chapters Stylized Facts of Financial Returns › Heavy Tails and Excess KurtosisOne section · Sections in this chapter3 / 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
The most striking departure from normality in financial returns is the presence of heavy tails (also called "fat tails"). Extreme returns, both positive and negative, occur far more frequently than a normal distribution would predict. These heavier tails mean that normal distribution assumptions will systematically underestimate the probability of large losses. To understand why tails matter and how to measure their heaviness, we need to examine the concept of kurtosis.
Measuring Tail Heaviness with Kurtosis
Kurtosis quantifies the weight in the tails of a distribution relative to a normal distribution. Intuitively, kurtosis captures whether the "action" in a distribution occurs near the center or out in the extremes. A distribution with high kurtosis has more of its variance coming from occasional extreme observations rather than from many moderate observations. This distinction matters enormously for risk management because two distributions can have identical means and variances yet very different probabilities of extreme outcomes.
For a random variable with mean and standard deviation , kurtosis is defined as:
where:
- : kurtosis of random variable
- : expected value operator
- : random variable representing returns
- : mean of
- : standard deviation of
The formula computes the fourth moment of the standardized distribution. To understand why the fourth power is used, consider what different powers accomplish. The first power gives us the mean, measuring central tendency. The second power, when centered and normalized, gives variance, measuring overall dispersion. The third power gives skewness, measuring asymmetry. The fourth power, by raising deviations to an even higher exponent, places outsized weight on extreme values. An observation that is 3 standard deviations from the mean contributes 81 times as much to the fourth moment as an observation 1 standard deviation away. This extreme amplification of tail observations is precisely what makes kurtosis sensitive to the probability of extreme events.
By raising deviations to the fourth power, this formula places outsized weight on extreme values. Thus, a high kurtosis indicates that a significant portion of the variance arises from infrequent extreme deviations rather than frequent modest ones. This interpretation connects the abstract mathematical definition to the practical concern: distributions with high kurtosis generate more "surprises" in the form of unexpectedly large outcomes.
The normal distribution has kurtosis of exactly 3. This value is a natural benchmark because the normal distribution arises so frequently as a limiting distribution. Excess kurtosis subtracts this baseline to create a measure centered at zero for the normal case:
where:
- : kurtosis as defined above
- : kurtosis of a standard normal distribution
Subtracting 3 makes interpretation straightforward: positive excess kurtosis means heavier tails than normal, zero means normal-like tails, and negative excess kurtosis (rarely observed in financial data) means lighter tails than normal.
A distribution with positive excess kurtosis is called leptokurtic. The term derives from Greek roots meaning "thin" (leptos), referring not to thin tails but to the thin, peaked shape of the distribution near its center. Such distributions have:
- More probability mass concentrated near the mean
- Less probability in the "shoulders" of the distribution
- Much more probability in the extreme tails
This combination creates a characteristic shape: tall and narrow in the center with extended tails. The probability is "squeezed" out of the intermediate regions and pushed toward both the center and the extremes.


The log-scale plot makes the tail differences dramatic. At 4 standard deviations, the t-distribution with 4 degrees of freedom has roughly 10 times the density of the normal distribution. This translates directly to more frequent extreme events.
Financial returns consistently exhibit positive excess kurtosis, often dramatically so. Let's quantify this for our S&P 500 data.
import numpy as np
from scipy import stats
# Calculate moments for log returns
mean_return = log_returns.mean()
std_return = log_returns.std()
skewness = stats.skew(log_returns)
kurtosis = stats.kurtosis(
log_returns
) # scipy returns excess kurtosis by default
# Annualize for display
mean_annualized = mean_return * 252
std_annualized = std_return * np.sqrt(252)S&P 500 Daily Log Returns - Distributional Statistics ======================================================= Mean: 0.000186 (4.69% annualized) Std Dev: 0.009002 (14.29% annualized) Skewness: 0.0423 Excess Kurtosis: 0.1299 For comparison, Normal distribution: Skewness: 0.0000 Excess Kurtosis: 0.0000
The excess kurtosis of approximately 10 or higher indicates that extreme events are far more common than the normal distribution predicts. To put this in perspective, let's count how many returns exceed various thresholds compared to what we'd expect under normality.
import numpy as np
import pandas as pd
from scipy import stats
# Count extreme observations
n = len(log_returns)
std = log_returns.std()
thresholds = [2, 3, 4, 5]
results = []
for k in thresholds:
# Actual count of returns exceeding k standard deviations
actual = np.sum(np.abs(log_returns) > k * std)
# Expected count under normal distribution
# P(|Z| > k) = 2 * (1 - Phi(k))
expected = n * 2 * (1 - stats.norm.cdf(k))
results.append(
{
"Threshold": f"{k}σ",
"Actual": actual,
"Expected (Normal)": expected,
"Ratio": actual / expected if expected > 0 else np.inf,
}
)
results_df = pd.DataFrame(results)Extreme Return Frequencies: Actual vs. Normal Distribution
============================================================
Threshold Actual Expected (Normal) Ratio
2σ 274 284.831652 0.961972
3σ 20 16.900723 1.183381
4σ 1 0.396524 2.521916
5σ 0 0.003589 0.000000The ratio column reveals the essence of heavy tails. Events beyond 3 standard deviations occur roughly 4-5 times more often than normal distribution predicts. Beyond 4 standard deviations, the ratio becomes even more extreme. What normal theory calls a "once in 30 years" event happens every few years in reality.

Visualizing Heavy Tails
A histogram comparison against the normal distribution makes the heavy tails visually apparent.
# Prepare data for normal distribution comparison
x_axis = np.linspace(log_returns.min(), log_returns.max(), 1000)
normal_pdf = stats.norm.pdf(x_axis, mean_return, std_return)

The log-scale plot on the right is particularly revealing. Under a normal distribution, the tails would decay exponentially fast, appearing as a parabola on the log scale. Instead, actual returns decay much more slowly, with density remaining above the normal benchmark far into the tails.
Q-Q Plots for Tail Analysis
A quantile-quantile (Q-Q) plot provides another powerful diagnostic. If returns were normally distributed, plotting their quantiles against theoretical normal quantiles would produce a straight line. Deviations reveal where the actual distribution differs.
# Generate Q-Q plot data
sorted_returns = np.sort(log_returns)
n_qq = len(sorted_returns)
theoretical_quantiles = stats.norm.ppf(np.linspace(0.001, 0.999, n_qq))
# Standardize actual returns for comparison
standardized_returns = (sorted_returns - mean_return) / std_return
The S-shape in the Q-Q plot is the signature of heavy tails. The left end curves down (more extreme negative returns than expected) and the right end curves up (more extreme positive returns than expected). If returns were normal, points would follow the dashed line throughout.