Skip to content

The Minimum-Variance Portfolio, and Why It's the Only MVO You Should Deploy

The minimum-variance portfolio is what remains after you decide to stop estimating $\mu$. It needs only $\Sigma$, it is a plain QP, it shrinks implicitly, and out-of-sample it routinely beats MVO built on expected returns. Here is the math and the case.

10 of 12 ~14 min

After the previous articles on estimation error, you would be forgiven for concluding that mean-variance optimization is a waste of time. But one corner of MVO has survived every criticism aimed at it since 1952, and that is the minimum-variance portfolio.

It does not estimate μ\mu. Not a little, not at all. It needs only Σ\Sigma, and it does exactly one thing: find the lowest-volatility portfolio subject to being fully invested.

That is not a compromise, it is an explicit trade. Give up estimating expected returns and you give up any return you might genuinely have predicted. What you get back is stable weights, robustness to estimation error, a closed form when short-sales are unconstrained, and out-of-sample performance that routinely beats MVO built on expected returns. Whether the trade is worth it depends on how bad your expected-return estimates really are — there is a standard-error calculation below that settles it, and the answer is usually: very bad.

The math is short. What deserves the time is the reasoning, and why most institutions that say they run MVO are in fact running minimum variance.

The Problem

NN assets, covariance matrix Σ\Sigma, find the portfolio ww that minimizes variance, fully invested, no shorting:

min⁡w12w⊤Σws.t.1⊤w=1w≥0\begin{aligned} \min_{w} \quad & \frac{1}{2} w^\top \Sigma w \\ \text{s.t.} \quad & \mathbf{1}^\top w = 1 \\ & w \geq 0 \end{aligned}

That is all of it. A budget constraint, no shorting, and — implied by non-negative weights summing to one — no leverage. The objective is convex quadratic, with NN free variables, one equality constraint and NN inequality constraints. As long as Σ\Sigma is positive definite the problem is well posed and the solution unique.

Note that μ\mu never appears.

Drop the no-shorting constraint and the problem has a closed form. The Lagrangian is

L(w,γ)=12w⊤Σw−γ(1⊤w−1)\mathcal{L}(w, \gamma) = \frac{1}{2} w^\top \Sigma w - \gamma (\mathbf{1}^\top w - 1)

with first-order condition

∇wL=Σw−γ1=0\nabla_w \mathcal{L} = \Sigma w - \gamma \mathbf{1} = 0

so w=γΣ−11w = \gamma \Sigma^{-1}\mathbf{1}, and substituting into the budget constraint pins down

γ=11⊤Σ−11\gamma = \frac{1}{\mathbf{1}^\top \Sigma^{-1} \mathbf{1}}

giving

wMV=Σ−111⊤Σ−11w_{\text{MV}} = \frac{\Sigma^{-1} \mathbf{1}}{\mathbf{1}^\top \Sigma^{-1} \mathbf{1}}

This is the global minimum-variance portfolio from the first article in the module, and no information about expected returns went into it anywhere. What is interesting is that it implicitly remains the Markowitz solution for one particular target return, namely rˉ=1⊤Σ−1μ/1⊤Σ−11\bar{r} = \mathbf{1}^\top \Sigma^{-1}\mu / \mathbf{1}^\top \Sigma^{-1}\mathbf{1} — you simply never needed to know μ\mu to find the portfolio.

Put w≥0w \geq 0 back and the closed form disappears. The Lagrangian becomes

L(w,γ,λ)=12w⊤Σw−γ(1⊤w−1)−λ⊤w\mathcal{L}(w, \gamma, \lambda) = \frac{1}{2} w^\top \Sigma w - \gamma (\mathbf{1}^\top w - 1) - \lambda^\top w

with λ≥0\lambda \geq 0 and complementary slackness λiwi=0\lambda_i w_i = 0 for each ii. In practice you never write this out; hand it to a QP solver and cvxpy, quadprog, Gurobi or Mosek returns in milliseconds.

The solution usually contains a great many zero weights. The optimizer concentrates capital in the low-variance assets and zeroes the rest. Out of a 100-stock universe, a long-only minimum-variance portfolio may hold only 30 to 50 positions. That is a feature: the zeros are regularization at work, with the optimizer performing asset selection by setting weights to zero. No machine learning pipeline required.

It Has Been Shrinking All Along

One neat identity explains where that robustness comes from. Minimum variance with an L2 penalty on weights,

min⁡ww⊤Σw+λ∥w∥2s.t. budget\min_{w} w^\top \Sigma w + \lambda \|w\|^2 \quad \text{s.t. budget}

and plain minimum variance on a perturbed covariance matrix,

min⁡ww⊤(Σ+λI)ws.t. budget\min_{w} w^\top (\Sigma + \lambda I) w \quad \text{s.t. budget}

are the same problem. The L2 penalty shrinks weights toward equal weight, and on the covariance side, adding a multiple of the identity is exactly the form of shrinkage toward F=σˉ2IF = \bar{\sigma}^2 I. The correspondence is exact: scaling an objective by a positive constant does not move the optimum, so running minimum variance on δσˉ2I+(1−δ)Σ^\delta \bar{\sigma}^2 I + (1-\delta)\hat{\Sigma} is the L2-penalized version with λ=δσˉ2/(1−δ)\lambda = \delta \bar{\sigma}^2 / (1-\delta).

Which is to say: a minimum-variance portfolio with a modest L2 penalty is mathematically Ledoit-Wolf-shrunk MVO without expected returns. Minimum variance is not robust because it does anything clever. It is robust because it has been shrinking the whole time.

Adding the penalty explicitly:

import cvxpy as cp

w = cp.Variable(n_assets)
Sigma_psd = Sigma + 1e-6 * np.eye(n_assets)  # Numerical safety

objective = cp.quad_form(w, Sigma_psd) + lam * cp.sum_squares(w)
constraints = [cp.sum(w) == 1, w >= 0]

problem = cp.Problem(cp.Minimize(objective), constraints)
problem.solve()

w_mv = w.value

Tune λ\lambda by cross-validation. For monthly returns on an equity universe, typical values run from 0.010.01 to 0.10.1.

What Dropping μ\mu Actually Buys

Minimum variance depends on Σ\Sigma alone, and Σ\Sigma estimates far better than μ\mu. Lay the two portfolios’ error sources side by side. The tangency portfolio, the one that uses expected returns, looks roughly like

E[∥w^tan−w0∥2]∝1μ02[Var(μ^)+Var(Σ^)+cross terms]\mathbb{E}[\|\hat{w}_{\text{tan}} - w_0\|^2] \propto \frac{1}{\mu_0^2} \left[ \text{Var}(\hat{\mu}) + \text{Var}(\hat{\Sigma}) + \text{cross terms} \right]

while minimum variance looks like

E[∥w^MV−w0∥2]∝Var(Σ^)\mathbb{E}[\|\hat{w}_{\text{MV}} - w_0\|^2] \propto \text{Var}(\hat{\Sigma})

These are schematic magnitude decompositions rather than proofs of a strict inequality. What they say is that the minimum-variance side loses the entire Var(μ^)\text{Var}(\hat{\mu}) term along with the 1/μ021/\mu_0^2 factor that magnifies every other error — and the term it loses is the largest one.

How much larger becomes clear with one calculation. Take five years of monthly returns (T=60T = 60) on an asset with 20% annualized volatility, so roughly 5.8% monthly. The standard error of the mean estimate is 5.8%/60≈0.77%5.8\% / \sqrt{60} \approx 0.77\% per month, about 9% annualized. If the asset’s true expected return is 10%, your estimation error is ninety percent of the quantity you are estimating. Your “expected return” is not much better than a coin flip, and MVO will take that number as a certainty, solve, and dutifully pile capital into whichever asset has the largest error.

Worth noting that more data frequency does not fix this. Move from daily to minute bars and covariance estimates improve markedly while the mean estimate barely moves — the precision of a mean estimate depends on the calendar span of the sample, not on the sampling frequency. Both Σ\Sigma and μ\mu converge at 1/T1/\sqrt{T}, but for Σ\Sigma you can grow TT by sampling faster. For μ\mu you can only wait.

The same fact explains the turnover difference. Covariance matrices change slowly and mean vectors change quickly, so minimum-variance weights drift while Markowitz weights jump around. That is not a difference in temperament between two optimizers, it is a difference in the nature of their inputs.

Ledoit-Wolf Shrinkage

Since the robustness comes from shrinkage, the standard estimator is worth writing out. Ledoit and Wolf (2004) take a convex combination of the sample covariance and a structured target:

Σ^LW=δσˉ2I+(1−δ)Σ^\hat{\Sigma}_{\text{LW}} = \delta \bar{\sigma}^2 I + (1 - \delta) \hat{\Sigma}

where Σ^\hat{\Sigma} is the sample covariance, σˉ2\bar{\sigma}^2 is the average variance (the mean of Σ^\hat{\Sigma}‘s diagonal), and δ∈[0,1]\delta \in [0,1] is the shrinkage intensity. The optimal δ\delta minimizes expected squared Frobenius loss:

δ⋆=arg⁡min⁡δE[∥δσˉ2I+(1−δ)Σ^−Σ0∥F2]\delta^\star = \arg\min_\delta \mathbb{E}\left[\|\delta \bar{\sigma}^2 I + (1-\delta)\hat{\Sigma} - \Sigma_0\|_F^2\right]

which has the closed form

δ⋆=∑i,jVar(σ^ij)/N2∑i,j(σ^ij−Fij)2/N2\delta^\star = \frac{\sum_{i,j} \text{Var}(\hat{\sigma}_{ij}) / N^2}{\sum_{i,j} \left( \hat{\sigma}_{ij} - F_{ij} \right)^2 / N^2}

with F=σˉ2IF = \bar{\sigma}^2 I the shrinkage target. The numerator measures how much the sample estimator itself wobbles; the denominator measures how far the sample covariance sits from the structured target. The less reliable the sample, or the closer the target already is, the harder it shrinks — the trade-off is visible right in the ratio. One caveat: the Var(σ^ij)\text{Var}(\hat{\sigma}_{ij}) in the numerator has to be estimated too, and it requires fourth moments of the return sample. The sample covariance matrix alone will not produce it, which is where hand-rolled implementations usually go wrong.

import numpy as np

def ledoit_wolf_shrink(returns):
    T, N = returns.shape
    returns_centered = returns - returns.mean(axis=0)
    Sigma_hat = returns_centered.T @ returns_centered / T
    
    # Structured target: scaled identity
    sigma_bar_sq = np.trace(Sigma_hat) / N
    F = sigma_bar_sq * np.eye(N)
    
    # Compute optimal shrinkage intensity
    delta = _optimal_shrinkage_intensity(returns_centered, Sigma_hat, F)
    
    return delta * F + (1 - delta) * Sigma_hat

def _optimal_shrinkage_intensity(X, Sigma_hat, F):
    T, N = X.shape
    # Estimate variance of sample covariance entries
    # ... (omitted for brevity, but straightforward)
    # See Ledoit & Wolf (2004) for exact formula
    pass

The stub above is precisely the fourth-moment part. There is no reason to write it yourself: sklearn.covariance.LedoitWolf gets it right.

What It Actually Buys You

Clarke, de Silva and Thorley (2006) studied minimum-variance portfolios systematically in the U.S. equity market and found volatility well below the cap-weighted benchmark with better risk-adjusted performance. The result reappears across sample periods and construction choices, but the specific numbers are quite sensitive to lookback window, universe and constraints, so check the methodology before quoting anyone’s figures — or just rerun it on your own data.

The reason it outperforms is not mysterious. The low-volatility anomaly documented by Haugen and Baker (1991) says low-volatility stocks earn risk-adjusted returns comparable to or better than high-volatility ones, and Frazzini and Pedersen’s (2014) betting-against-beta factor turns that into an explicit long-short: long low beta, short high beta. The minimum-variance portfolio is essentially the long-only tilted version of that factor. By minimizing portfolio variance you automatically overweight low-volatility stocks and underweight high-volatility ones.

So a substantial part of the minimum-variance portfolio’s excess return over a cap-weighted benchmark is implicit harvesting of the low-volatility factor. That is not a coincidence, it is two descriptions of one thing — and it has a practical consequence. If your portfolio already carries an explicit low-volatility or BAB sleeve, stacking a minimum-variance portfolio on top diversifies less than you would expect.

What It Costs

Minimum-variance portfolios tend to have low absolute returns. On a stock universe, minimum variance will underperform the equal-weighted universe in absolute terms. Giving up asset selection means giving up expected return, and there is no free version of that.

Seen this way, minimum variance is the opposite extreme from expected-return MVO. MVO overweights high-return assets at the cost of higher variance; minimum variance underweights high-volatility assets at the cost of lower return. Both are corner solutions, and the truth sits between them — Black-Litterman, shrinkage on μ\mu, Bayesian priors are all attempts to recombine minimum variance’s robustness with the return information it deliberately threw away.

Three specific regimes make it uncomfortable. The first is a strong uptrend: in a bull market minimum variance lags equal weight because it never participated in the high-volatility upside, which is the standard criticism. The second is style rotation: when value, growth and momentum trade places, minimum variance adapts slowly, because its weights come from covariances and covariances move slowly by construction. The third is a mixed stock-bond universe in a low-rate environment: bonds have low volatility, so minimum variance tilts heavily into them, and their expected return may be low enough to drag the whole portfolio down.

All three share one root cause. Minimum variance does not look at expected returns; it is pure risk allocation. If you genuinely have strong views on expected returns, you need a different model rather than a patch on this one.

There is also a less visible cost. Although minimum variance uses no expected returns, it still takes active risk against a benchmark: if the benchmark is cap-weighted and your weights tilt toward low-volatility stocks, you are actively underweighting high-beta stocks. That active risk is hidden only in the sense that you never declared an expected return, and it shows up in tracking error regardless. For a benchmarked institutional manager this is arguably a selling point — active risk without having to claim alpha. For an unbenchmarked long-only allocator it is not an issue at all; low volatility is what they came for.

What Production Looks Like

A deployable minimum-variance portfolio looks roughly like this:

import numpy as np
import pandas as pd
import cvxpy as cp

def long_only_min_var(returns, lam=0.05):
    Sigma = returns.cov().values
    Sigma_shrunk = shrunk_cov(returns, method='ledoit_wolf')
    n = Sigma_shrunk.shape[0]
    
    w = cp.Variable(n)
    objective = cp.quad_form(w, Sigma_shrunk) + lam * cp.sum_squares(w)
    constraints = [cp.sum(w) == 1, w >= 0, w <= 0.10]  # Cap at 10% per asset
    
    problem = cp.Problem(cp.Minimize(objective), constraints)
    problem.solve()
    
    return pd.Series(w.value, index=returns.columns)

The 10% per-asset cap is a practical constraint. Without it the optimizer piles into two or three exceptionally low-volatility names — mathematically correct, unacceptable as a portfolio.

Three more parameters need deciding. Rebalancing frequency is usually monthly or quarterly; more often than monthly adds transaction costs without visible improvement. The covariance lookback window takes the most judgment: one year (252 trading days) captures the current regime but is noisy, two to three years is the institutional standard, five years or more is quieter but mixes in regimes that are over. Most institutional risk systems use two to three years, some roll the window daily, some use an exponentially weighted moving average that leans on recent observations. There is no theoretically correct answer here — different windows give different portfolios, and that should be acknowledged in the backtest rather than papered over. The third is re-estimation cadence: re-estimate Σ\Sigma at every rebalance rather than riding one fixed historical window forever.

A real institutional pipeline layers more on top. Estimate Σ\Sigma from three to five years of daily returns with Ledoit-Wolf shrinkage; form μ\mu as a Black-Litterman posterior combining equilibrium returns with portfolio manager views; solve an optimization with a target return, risk constraints, no shorting and sector caps; penalize turnover against the current portfolio; output a trade list for execution. The objective is usually written

min⁡w w⊤Σ^LWw−λw⊤μBL\min_w \ w^\top \hat{\Sigma}_{\text{LW}} w - \lambda w^\top \mu_{\text{BL}}

where λ\lambda is the trade-off parameter, larger values leaning further toward return. The resulting portfolio is anchored to the market through Black-Litterman, low-turnover because of the shrinkage, and respectful of concentration limits because of the constraints. Theoretically impure, practically effective — this is the mainstream institutional allocation model.

Every step has its own software (Axioma, Barra, Bloomberg PORT) and its own assumptions and failure modes. The clean Markowitz formula is the theoretical foundation; what ships is a heavily engineered pipeline with many parameters and a long tuning history, and the distance between the two is larger than most textbooks let on.

Against 1/N

The famous result from DeMiguel, Garlappi and Uppal (2009) is that equal weighting beat 14 sophisticated portfolio optimization methods out-of-sample, on average, across seven datasets. Minimum variance was among the methods tested.

So how do the two compare head to head? Minimum variance has lower ex-ante volatility than 1/N by construction. 1/N has lower turnover, no estimation error at all, and a surprisingly good Sharpe. Minimum variance wins on absolute risk-adjusted return in most periods. 1/N is more robust to model misspecification.

The practical conclusion is that they are roughly tied on out-of-sample Sharpe and differ in absolute volatility, where minimum variance is lower. If you run a volatility target, minimum variance reaches it with less leverage, which matters whenever leverage costs something. If you have no volatility target, 1/N is fine.

Kritzman, Page and Turkington (2010) argue the other side: with sensible inputs — particularly covariances estimated over long enough samples — optimized portfolios do beat 1/N reliably, and 1/N’s advantage has been overstated. Put both bodies of evidence together and the pragmatic move is to run a blend, half 1/N and half minimum variance, which generally avoids the worst case of either. You do not know which method will be right over the next decade, and diversifying across methods is the same regularization as diversifying across assets.

So When Should You Use It

If you are building a portfolio and do not trust your expected-return estimates — which, after that 90%-relative-error calculation, should be the default state — the defensible recipe is: shrink Σ\Sigma with Ledoit-Wolf, solve the long-only minimum-variance QP, add a modest L2 penalty, and tilt selectively toward Black-Litterman implied returns only if you genuinely have views.

None of that is glamorous. It sidesteps the largest error source in MVO, shrinks what error remains, implicitly harvests the low-volatility factor, and holds up out-of-sample. Not many MVO variants manage all four.

Literature

  • Markowitz (1952). “Portfolio Selection.” Journal of Finance 7(1): 77-91. The original paper; the minimum-variance portfolio is a special case.
  • Clarke, de Silva & Thorley (2006). “Minimum-Variance Portfolios in the U.S. Equity Market.” Journal of Portfolio Management 33(1): 10-24. The foundational empirical study.
  • Ledoit & Wolf (2004). “A Well-Conditioned Estimator for Large-Dimensional Covariance Matrices.” Journal of Multivariate Analysis 88(2): 365-411. The shrinkage estimator that makes minimum variance robust.
  • Haugen & Baker (1991). “The Efficient Market Inefficiency of Capitalization-Weighted Stock Portfolios.” Journal of Portfolio Management 17(3): 35-40. The low-volatility anomaly.
  • Frazzini & Pedersen (2014). “Betting Against Beta.” Journal of Financial Economics 111(1): 1-25. The BAB factor.
  • DeMiguel, Garlappi & Uppal (2009). “Optimal Versus Naive Diversification: How Inefficient is the 1/N Portfolio Strategy?” Review of Financial Studies 22(5): 1915-1953.
  • Kritzman, Page & Turkington (2010). “In Defense of Optimization: The Fallacy of 1/N.” Financial Analysts Journal 66(2): 31-39.
  • Broadie (1993). “Computing Efficient Frontiers Using Estimated Parameters.” Annals of Operations Research 45(1): 21-58. Estimation error in mean-variance.

Next article: CVaR optimization, replacing variance with a tail risk measure.