STT Statistical Foundations for Quant Finance
Telling real edge apart from lucky noise
Learning Objectives
- •Understand distributions, averages, and dispersion in a trading context
- •Learn what stationarity means and why it breaks so often in markets
- •Know how to use p-values and handle the multiple testing trap
- •Recognize fat tails and what they mean for your risk estimates
Explain Like I'm 5
Statistics answers one question: "Is this pattern real, or just luck?" If someone says they can predict coin flips, you'd want to see them do it a lot of times before believing them. Statistics gives you the tools to tell genuine skill from random chance — and in finance, that distinction is worth billions.
Think of It This Way
Statistics is the forensic lab of quant finance. Anyone can show you a backtest with a pretty equity curve. Statistical analysis examines the evidence to figure out whether the performance is real or manufactured — whether the strategy actually found patterns or just memorized noise.
1How Financial Returns Actually Behave
Empirical vs Normal Distribution — Market Returns
2Mean, Variance, and the Sharpe Ratio
3Stationarity — The Assumption That Always Breaks
4Statistical Significance and the Multiple Testing Problem
Multiple Testing: False Positive Rate vs Number of Tests
Key Formulas
Sample Standard Deviation
Measures how much returns scatter around the mean. Lower σ with the same mean = better risk-adjusted performance. This is the building block for the Sharpe ratio and most risk metrics.
Sharpe Ratio
Mean excess return divided by standard deviation. Annualize by multiplying by √252 for daily data. The standard measure of risk-adjusted performance across the industry.
Z-Score
How many standard deviations a value sits from the mean. Used in mean-reversion strategies, outlier detection, feature normalization for ML, and signal generation.
Hands-On Code
Return Distribution Analysis
import numpy as np
from scipy import stats
# Simulate realistic trade returns
np.random.seed(42)
n_trades = 4500
wins = np.random.uniform(0.5, 3.5, int(n_trades * 0.592))
losses = np.random.uniform(-2.0, -0.1, n_trades - len(wins))
returns = np.concatenate([wins, losses])
np.random.shuffle(returns)
# Descriptive statistics
print("=== Return Distribution Analysis ===")
print(f"Mean return: {returns.mean():+.3f}R")
print(f"Std dev: {returns.std():.3f}R")
print(f"Sharpe proxy: {returns.mean()/returns.std():.3f}")
print(f"Skewness: {stats.skew(returns):+.3f}")
print(f"Kurtosis: {stats.kurtosis(returns):+.3f}")
# Statistical significance test
t_stat, p_value = stats.ttest_1samp(returns, 0)
print(f"\n=== Statistical Significance ===")
print(f"t-statistic: {t_stat:.2f}")
print(f"p-value: {p_value:.2e}")
print(f"Significant at 0.01? {'YES' if p_value < 0.01 else 'NO'}")
# Normality test (Jarque-Bera)
jb_stat, jb_p = stats.jarque_bera(returns)
print(f"\n=== Normality Test (Jarque-Bera) ===")
print(f"JB statistic: {jb_stat:.2f}")
print(f"Normal? {'YES' if jb_p > 0.05 else 'NO — fat tails present'}")Three fundamental checks for any strategy: descriptive stats (what does the distribution look like?), statistical significance (is the edge real?), and normality test (are your risk assumptions valid?). Run these before trusting any backtest.
Knowledge Check
Q1.Why are fat tails particularly dangerous for risk management?
Q2.A backtest produces a Sharpe ratio of 3.5. What should your first reaction be?
Q3.What is the multiple testing problem in quantitative research?
Assignment
Download daily returns for any major instrument. Compute: mean, standard deviation, skewness, kurtosis, and annualized Sharpe. Make a Q-Q plot comparing the empirical distribution to a normal. Run a Jarque-Bera test. Write 500 words analyzing your findings, focusing on tail behavior.