This is more of a theoretical question.

I have been working on some mean-variance / Black-Litterman models and played around with Ledoit/Wolf's covariance shrinkage method (sklearn function in Python). If I shrink the covariance matrix for mean variance portfolios, I get really nice portfolios along the efficient frontier (except for corner solutions), and the same goes for Black-Litterman.

Since I am comparing mean-variance and Black-Litterman portfolios to 1/N and Risk Parity allocations, I thought let's just feed the shrunk covariance matrix into the risk-parity optimizer. What happens is that I now get equal weights for all assets (in Risk Parity). I guess that is because the covariance matrix was shrunk to the extent that the differences in covariances are now too insignificant, and hence I get equal weights?

Did anybody run into this issue, or can anybody confirm my simple assumption is the reason for this? I am just playing a bit around but found this quite interesting. Made me question a bit whether it makes much sense to apply shrinkage to mean-variance and Black-Litterman in the first place.

Cheers, have a good week guys. RSK

  • 1
    $\begingroup$ Did you find the RP weights for the shrunk covariance matrix to be exactly equal? It seems a little surprising. How do you compute them? Starting with an initial guess and then iterating? Is the initial guess "equal weights"? (That is how do it). If so, check your code carefully ;) $\endgroup$
    – nbbo2
    Jun 30, 2020 at 14:59

1 Answer 1


The Risk Parity portfolio will be equal weighted if the assets have uniform correlation and equal variance. This would be the case for the shrunk covariance matrix if the shrinkage coefficient used equals unity.

In sklearn, you can check the shrinkage coefficient for the Ledoit-Wolf shrinkage after fitting it from the instance's .shrinkage_ attribute. If the shrinkage coefficient is (sufficiently close to) 1, then the Risk Parity portfolio will have (very close to) equal weights.

You could try running a shrinkage with the sklearn.covariance.ShrunkCovariance -class and explicitly set the shrinkage parameter to be well under 1. Using the resulting shrunk covariance, the resulting Risk Parity portfolio should not have equal weights (unless your sample covariance matrix does indeed have uniform correlations and equal variances).

  • 1
    $\begingroup$ Perfect, thank you very much. That sounds like what I was suspecting, but I didn't know how to decipher the problem. I will check tonight and report if this resolved the issue. Thanks a lot, very helpful! $\endgroup$
    – Riskay
    Jul 1, 2020 at 15:25
  • $\begingroup$ Worked perfectly fine. Thank you so much for the help, much appreciated! $\endgroup$
    – Riskay
    Jul 1, 2020 at 20:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.