Factor Decay: Why Your Signal's Edge Disappears Over Time
Alpha factors don't last forever. Factor decay describes how a signal's predictive power diminishes as more participants trade it. Here's how to measure and predict decay.
The history of quant finance is littered with factors that worked brilliantly for a few years and then collapsed. Value worked beautifully in the 1980s and 1990s, then its Sharpe dropped significantly in the 2000s. Momentum worked in the 1990s, collapsed in the 2000s, came back in 2010s.
Every factor decays. The question is: how fast, and what can you do about it?
Why Factors Decay
Competition: When a factor is discovered and traded by many funds, the arbitrage activity removes the mispricing it exploits. The edge disappears.
Market microstructure changes: Decimalization, high-frequency trading, and changes in market structure can make certain factors obsolete. A factor based on bid-ask bounce that worked in the 1990s may not work in the era of electronic markets.
Regime changes: Factors that work in high-volatility regimes may not work in low-volatility regimes and vice versa. As market regimes shift, factor effectiveness shifts.
Data mining: Many “factors” found in backtests were never real edges — they were statistical artifacts that disappeared as soon as you traded them.
Measuring Factor Decay
The right way to measure decay is to look at IC (information coefficient) as a function of the horizon at which you measure returns.
For a horizon h (in days):
Plot IC(h) for h = 1, 5, 10, 20, 60 days. The shape of this curve tells you about your factor:
Fast decay (IC drops sharply at h=1): The factor’s predictive power is very short-lived. It might be capturing microstructure noise rather than a fundamental signal. Transaction costs from high turnover will likely erode the edge.
Slow decay (IC remains stable up to h=20+): The factor captures a fundamental, persistent relationship. This is the kind of factor you want.
The Half-Life Concept
A useful concept from signal processing: the half-life of a factor is the horizon h at which IC(h) = 0.5 × IC(1).
For example, if IC(1) = 0.04 and IC(10) = 0.02, the half-life is approximately 10 days.
Factors with half-lives < 5 days are microstructure-driven. They require extremely low transaction costs to be viable. Factors with half-lives > 20 days are more robust.
import numpy as np
from scipy.optimize import curve_fit
def fit_decay_curve(ic_by_horizon, horizons):
"""
Fit an exponential decay curve to IC by horizon.
IC(h) = IC_0 * exp(-lambda * h)
Half-life = ln(2) / lambda
"""
def decay_fn(h, ic0, lam):
return ic0 * np.exp(-lam * h)
popt, _ = curve_fit(decay_fn, horizons, ic_by_horizon, p0=[ic_by_horizon[0], 0.1])
ic0, lam = popt
half_life = np.log(2) / lam
return {
'ic0': ic0,
'lambda': lam,
'half_life': half_life
}
def compute_ic_by_horizon(factor_values, returns, max_horizon=60):
"""
Compute IC at multiple horizons.
"""
ic_by_horizon = []
horizons = list(range(1, max_horizon + 1))
for h in horizons:
aligned_factors = []
aligned_returns = []
for i in range(len(factor_values) - h):
fv = factor_values.iloc[i]
ret = returns.iloc[i + h]
common = fv.index.intersection(ret.index)
if len(common) > 10:
aligned_factors.extend(fv[common].values)
aligned_returns.extend(ret[common].values)
if len(aligned_factors) > 30:
ic = np.corrcoef(aligned_factors, aligned_returns)[0, 1]
ic_by_horizon.append(ic)
else:
ic_by_horizon.append(np.nan)
return np.array(ic_by_horizon), np.array(horizons)
Why Horizon Matters for Strategy Design
If your factor has fast decay (half-life = 3 days), you need to rebalance frequently to capture the signal. But frequent rebalancing means high transaction costs. The net edge might be zero or negative.
If your factor has slow decay (half-life = 30 days), you can rebalance monthly and still capture most of the signal. Lower transaction costs, more net edge.
This is why signal half-life is a critical input to strategy design. Don’t design a weekly-rebalanced portfolio around a factor with a 2-day half-life.
Common Pitfalls
Reporting IC(1) but trading at monthly rebalance. If you measure IC at the daily level but rebalance monthly, you’re not capturing the signal you’re measuring. Measure IC at the rebalancing frequency you actually use.
Ignoring decay when combining factors. If you combine a fast-decay factor (half-life = 5 days) and a slow-decay factor (half-life = 30 days), the slow-decay factor should get more weight in a monthly-rebalanced portfolio. Equal weighting ignores decay differences.
Confusing noise with signal. Very high IC at h=1 (daily) often reflects microstructure — bid-ask bounce, short-term reversal, etc. — not a real predictive signal. Check whether IC(5) and IC(10) are still significant.
Where It Fits
Factor decay is a critical input to portfolio construction. Turnover analysis measures how much your portfolio ranking changes at different horizons. Factor combination should weight factors by their decay profiles. Regime detection identifies when decay accelerates (market structure changes or crises).
References
- López de Prado, Advances in Financial Machine Learning, Ch. 4. Wiley, 2018. ISBN: 978-1-119-48208-6.
- Ang, Asset Management, Ch. 9. Oxford University Press, 2014. ISBN: 978-0-19-995932-3.
- Hsu, “What Factor Models Work in Real Markets?” Journal of Portfolio Management, 2016.