Arte SheetsLearn. Try. Understand.

Portfolio Construction & Risk

Ledoit-Wolf Constant-Correlation Shrinkage Covariance Formula

Stabilize noisy sample covariance matrices in Excel and Arte Sheets using Ledoit-Wolf convex shrinkage Sigma_LW = (1 - delta)*S + delta*F toward a constant-correlation prior.

Prevent Markowitz extreme leverage caused by noisy sample correlations

When sample size T is small relative to asset count N, extreme sample correlations (such as r_12 = 0.92 from a brief market spike) make the sample covariance matrix S nearly singular, causing mean-variance optimizers to take huge offsetting long-short bets on estimation error. Ledoit and Wolf (2004) pull off-diagonal covariances toward structured constant-correlation target F_ij = rho_bar * sig_i * sig_j via shrinkage weight delta in [0, 1] while keeping diagonal variances s_ii intact.

Check by hand for two assets with sample volatilities sig_1 = 0.20 (B2), sig_2 = 0.30 (B3), noisy sample correlation r_12 = 0.85 (B4, sample cov = 0.0510), grand-mean correlation prior rho_bar = 0.35 (B5, target cov = 0.0210), and shrinkage intensity delta = 0.40 (B6): shrunk covariance is 0.60 * 0.0510 + 0.40 * 0.0210 = 0.0306 + 0.0084 = 0.0390 (shrunk correlation = 0.6500), nearly doubling the 2x2 matrix determinant from 0.000999 to 0.002079!

Matrix QuantityLedoit-Wolf ExpressionSample Output
Sample Off-Diagonal Cov s_12r_12 * sig_1 * sig_2 = 0.85 * 0.060.0510
Constant-Corr Target F_12rho_bar * sig_1 * sig_2 = 0.35 * 0.060.0210
Shrunk Covariance Sigma_LW,12(1 - delta) * s_12 + delta * F_120.0390 (r_LW = 0.6500)
2x2 Determinant Conditioning(sig_1^2)*(sig_2^2) - Sigma_LW,12^20.002079 (vs 0.000999 raw)

Ledoit-Wolf Shrunk Off-Diagonal Covariance Formula

Enforce valid shrinkage weight 0 <= delta <= 1 and valid correlation bounds (-1 < r, rho_bar < 1) before blending S and F.

=LET(sd_a, B2, sd_b, B3, r_obs, B4, r_bar, B5, del_w, B6, IF(OR(sd_a <= 0, sd_b <= 0, ABS(r_obs) >= 1, ABS(r_bar) >= 1, del_w < 0, del_w > 1), "Invalid Shrinkage Input", LET(s_ab, r_obs * sd_a * sd_b, f_ab, r_bar * sd_a * sd_b, ROUND((1 - del_w) * s_ab + del_w * f_ab, 6))))

2x2 Covariance Determinant Conditioning Check Formula

Verify matrix invertibility via det(Sigma_LW) = sig_1^2 * sig_2^2 - Sigma_LW,12^2. Setting delta = 0 recovers raw sample cov 0.0510; setting delta = 1 collapses fully to prior cov 0.0210.

=ROUND((B2^2) * (B3^2) - (E4^2), 6)

Try the example

Use the original values or change them to test your understanding.

Further reading