Loading…

Textbook vs. Tape

Five distributions from every statistics course, each turned into a claim about markets and tested out-of-sample on daily S&P 500 and KOSPI returns. Forecasts for day t use only data up to t−1.

This page is showing simulated development data, not market data.
H1 Normal · H2 Student-t

How fat are the tails?

Dots are the observed frequency of daily returns, standardised by the full-sample mean and standard deviation, on a log scale so the tails are visible. Drag ν to see how many fat-tail days a Student-t with that shape predicts, scaled to the same variance.

observedNormalStudent-t, chosen ν
Where H1 and H2 meet risk management

Do the models survive a 99% VaR backtest?

Six models, each adding one ingredient (fat tails, volatility clustering, asymmetry), forecast tomorrow's 1% quantile. A breach is a day the return falls below it. A correct model breaches on 1% of days (Kupiec test) and the breaches do not bunch together (Christoffersen test).

daily return99% VaR forecastbreach
H3 Bernoulli

Is each day a coin flip?

The direction of a day carries almost no memory. Its size carries a lot. That is volatility clustering, and it is what breaks the next two hypotheses.

direction (sign)size |r|
H4 Poisson

Do big moves arrive independently?

Count the days per calendar month with a move larger than k standard deviations. Independent arrivals give a Poisson count, with variance equal to the mean. Switch to GARCH-t tails to count days the GARCH-t forecast put in the same tail probability as 2.5σ. If clustering is the whole story, those counts should look Poisson again.

observed monthsPoisson with the same mean
H5 Uniform

Are the forecasts calibrated?

Feed each realised return into the forecast's own CDF. If the forecast distribution is right, these PIT values are Uniform(0,1) and every bar sits on the line. A hump in the middle with low edges means the forecast is too wide in calm times and too narrow in the tails. A tall left edge with a short right edge means the model is symmetric but losses are not: compare GARCH-t with GJR-skew-t.

Method

How this was done