Skip to content

Covariance Shrinkage (Robust Covariance)

One-line definition

Blending the noisy sample covariance matrix with a more stable, structured target to reduce estimation error, at the cost of some bias.

Formula

Sigma_shrunk = shrinkage * Target + (1 - shrinkage) * Sigma_sample

This repo's shrink_covariance uses a diagonal target (correlations shrunk to zero, variances preserved) — a simple, standard choice.

Why PMs care

Sample covariance from a short history is noisy, especially for large asset universes — mean_variance/minimum_variance optimizers are notoriously sensitive to that noise, often producing extreme, unstable weights ("optimizer error maximization"). Shrinkage is the cheapest fix.

Common mistakes

  • shrinking to 100% (shrinkage=1) and losing all correlation information, as blindly "safe" as full shrinkage feels
  • not shrinking at all with a small sample and short history relative to the number of assets

Limitations

This repo implements linear shrinkage to a diagonal target, chosen for a fixed shrinkage value. The Ledoit-Wolf method (which estimates the optimal shrinkage intensity from the data) is the more sophisticated standard approach and is not implemented here.