23 — Performance & Attribution

Alpha Generation#

Excess ReturnDebated1 min read
◆ The PatternCapturing risk-adjusted excess returns

Alpha (α) is the intercept of a factor regression — the return not explained by systematic risk exposures. Positive alpha means the manager added value beyond factor tilts.

α = Rp − [ Rf + β1F1 + β2F2 + … ]
Sources of alpha: information edges, execution speed, behavioral exploitation, or structural advantages (tax, regulation). Alpha decays — once a signal is widely known, it gets arbitraged away.
// Alpha generation — excess return decomposition
Alpha decay. Published anomalies lose much of their return once known: on average more than half after publication (McLean & Pontiff 2016).
Pattern bridge: Alpha research is feature selection under heavy noise: permutation importance tests whether a signal does the work, and walk-forward validation tests whether it survives out of sample. The tracking error in the information ratio has its own topic: benchmark tracking.
Worked example

A manager beats the benchmark by 2% a year with 5% tracking error: an information ratio of 0.4, which is good. To show that alpha is not luck at the usual t-statistic of 2 takes 25 years of data. Grinold’s fundamental law says where IR comes from: a small edge per bet (an IC of 0.05) across 100 independent bets a year gives 0.5.

Where it misleads
  • Most measured alpha in mutual funds is what luck would produce (Fama & French 2010).
  • Published anomalies earn much less after publication — over half less on average (McLean & Pontiff 2016); alpha decays as others find and trade it.
  • Breadth is the number of independent bets; 100 positions on one theme are not 100 bets.
In code
alpha, te = 0.02, 0.05                                   # 2% a year above the benchmark, 5% tracking error
ir = alpha / te
years_for_t2 = (2 / ir) ** 2                               # t-stat = IR x sqrt(years); 2 is the usual bar
ic, breadth = 0.05, 100                                    # Grinold: skill per bet and independent bets a year
ir_fundamental = ic * np.sqrt(breadth)
Python, in your browser — edit the code and run it again

Assumes import numpy as np and import pandas as pd. Each snippet carries its own example numbers; the comments say which are made up or simulated.

Sources
  • M. C. Jensen, “The Performance of Mutual Funds in the Period 1945–1964”, Journal of Finance 23(2), 1968
  • R. C. Grinold, “The Fundamental Law of Active Management”, Journal of Portfolio Management 15(3), 1989
  • E. F. Fama & K. R. French, “Luck versus Skill in the Cross-Section of Mutual Fund Returns”, Journal of Finance 65(5), 2010
  • R. D. McLean & J. Pontiff, “Does Academic Research Destroy Stock Return Predictability?”, Journal of Finance 71(1), 2016

Last reviewed October 2026 · How this site checks its content · Report a mistake

Linked from 1
← Previous
Benchmark Tracking
Open in the full reader, with the topic sidebar