Skip to content

Black-Litterman, From First Principles

Black & Litterman (1992) at Goldman Sachs solved the problem that mean-variance optimization produces crazy portfolios. Reverse optimization, an equilibrium prior, and Bayesian views. Full derivation.

1 of 12 ~12 min

In 1990, two Goldman Sachs fixed-income strategists. Fischer Black and Robert Litterman — got frustrated. They were using Markowitz-style mean-variance optimization to construct global asset allocations for clients, and the optimizer kept producing portfolios nobody could defend. It would put 100% in Japanese equities because Japan had the highest historical 5-year return, or zero in U.S. Treasuries because their recent returns were mediocre.

The problem wasn’t Markowitz. The problem was that nobody knew how to feed in μ\mu. Historical means are noise. Equilibrium returns are a guess. Forecasts are opinions. None of them belong directly in an optimizer.

Their 1991 working paper, “Asset Allocation: Combining Investor Views with Market Equilibrium” (Goldman Sachs Fixed Income Research), introduced a Bayesian model that has since become the de facto standard for institutional asset allocation. The 1992 follow-up, “Global Portfolio Optimization,” appeared in the Financial Analysts Journal. The model is used by the Norwegian Sovereign Wealth Fund, the Singapore GIC, Goldman Sachs Asset Management, and roughly every quant multi-asset shop that has been around more than five years.

This article is a full derivation. We’ll start with the problem Black and Litterman set out to solve, walk through reverse optimization, derive the prior from market equilibrium, fold in views using Bayes’ rule, and end with a closed-form posterior mean for μ\mu that you can plug back into MVO.

The Problem With Plain MVO

In last article we saw the issue. MVO wants expected returns μ\mu. You don’t have them. You have:

  1. Historical returns (noisy, with non-stationarity problems).
  2. Equilibrium returns (a model, like CAPM, that gives you implied returns from market weights).
  3. Your own views (“oil will outperform utilities by 3% next year”).

None of these are good direct inputs to MVO. Historical returns are unstable. Equilibrium returns are unconditional and ignore your views. Views are subjective and not on the right scale.

Black and Litterman’s insight: combine them. Use equilibrium returns as a prior. Treat your views as noisy data. Apply Bayes’ rule. The posterior mean of μ\mu is the optimal point estimate, and the posterior covariance tells you how much to trust it.

The whole machinery is essentially:

p(μ∣views)∝p(views∣μ)⋅p(μ)p(\mu | \text{views}) \propto p(\text{views} | \mu) \cdot p(\mu)

That’s it. The cleverness is in choosing the prior and the likelihood.

Step 1: Reverse Optimization

Start with market capitalization weights. These are observable: wmktw_{\text{mkt}} is publicly known for most asset universes. Assume the market portfolio is the mean-variance efficient portfolio. Then you can back out the implied μ\mu.

The tangency portfolio of MVO is wtan=Σ−1μ1⊤Σ−1μw_{\text{tan}} = \frac{\Sigma^{-1} \mu}{\mathbf{1}^\top \Sigma^{-1} \mu}. Set wtan=wmktw_{\text{tan}} = w_{\text{mkt}} and solve for μ\mu:

μimplied=δΣwmkt\mu_{\text{implied}} = \delta \Sigma w_{\text{mkt}}

where δ=1⊤Σ−1μ\delta = \mathbf{1}^\top \Sigma^{-1} \mu is the implied risk premium of the market portfolio. In practice, you set δ\delta from an external estimate of the market risk premium (say, 4% real, 6% nominal).

This is reverse optimization. You’re not saying “what does MVO give me if I feed in μ\mu?” You’re saying “given that the market is mean-variance efficient, what μ\mu must be true?”

The result is a vector μimplied\mu_{\text{implied}} that is internally consistent with the observed market weights and your covariance matrix. It is not a forecast. It’s a neutral starting point.

Black and Litterman called this the “implied equilibrium return.” The modern term is “prior expected return.” It’s the return you should expect if you have no information beyond what the market is already pricing in.

Step 2: Specify Your Views

A view in Black-Litterman is a statement about expected returns. Two common forms:

Absolute view: “I expect asset ii to return q%q\% next year.”

Pμ=Q+ϵ,ϵ∼N(0,Ω)P \mu = Q + \epsilon, \quad \epsilon \sim \mathcal{N}(0, \Omega)

where PP is a “picking matrix” that selects asset ii (one-hot row), Q=qQ = q is the scalar view, and ϵ\epsilon is view noise with covariance Ω\Omega.

Relative view: “I expect asset ii to outperform asset jj by q%q\%.”

P=ei−ej,Q=qP = e_i - e_j, \quad Q = q

You can have multiple views stacked into P∈RK×NP \in \mathbb{R}^{K \times N} and Q∈RKQ \in \mathbb{R}^K. The view covariance Ω\Omega encodes how confident you are in each view — small Ω\Omega means high confidence.

Step 3: Bayesian Update

Now the math. The prior on μ\mu is:

μ∼N(μimplied,τΣ)\mu \sim \mathcal{N}(\mu_{\text{implied}}, \tau \Sigma)

The τΣ\tau \Sigma covariance is a heuristic. Black and Litterman argued that μ\mu shouldn’t be estimated more precisely than the returns themselves, so the variance of μ\mu should scale with the variance of returns. τ\tau is a small scalar (typically 0.05 to 0.10) reflecting that μ\mu varies less than the returns themselves.

The likelihood of views given μ\mu is:

Pμ∣μ∼N(Q,Ω)P \mu | \mu \sim \mathcal{N}(Q, \Omega)

By Bayes’ rule, the posterior is also Gaussian:

μ∣views∼N(μBL,M)\mu | \text{views} \sim \mathcal{N}(\mu_{\text{BL}}, M)

with

μBL=μimplied+τΣP⊤(PτΣP⊤+Ω)−1(Q−Pμimplied)\mu_{\text{BL}} = \mu_{\text{implied}} + \tau \Sigma P^\top \left( P \tau \Sigma P^\top + \Omega \right)^{-1} (Q - P \mu_{\text{implied}})

and

M=τΣ−τΣP⊤(PτΣP⊤+Ω)−1PτΣM = \tau \Sigma - \tau \Sigma P^\top \left( P \tau \Sigma P^\top + \Omega \right)^{-1} P \tau \Sigma

This is the formula. Let’s unpack it.

The term (Q−Pμimplied)(Q - P \mu_{\text{implied}}) is the “view residual” — how much your view differs from what the market is pricing. If your view exactly matches the implied equilibrium, the residual is zero and your posterior equals the prior.

The matrix τΣP⊤(PτΣP⊤+Ω)−1\tau \Sigma P^\top (P \tau \Sigma P^\top + \Omega)^{-1} is a Kalman-like gain. When Ω\Omega is small (high view confidence), the gain is large and your view dominates. When Ω\Omega is large (low confidence), the gain shrinks and the prior dominates.

So if you say “I’m highly confident Apple will outperform Microsoft by 5%,” the optimizer will move Apple’s weight up and Microsoft’s weight down significantly. If you say “Eh, tech will do okay,” the weights barely move from the market portfolio.

Step 4: Plug Back Into MVO

The posterior μBL\mu_{\text{BL}} is a vector of expected returns. It’s a much better estimate of μ\mu than historical averages (which it shrinks toward) or pure views (which it dilutes toward equilibrium). Now you can plug it back into standard MVO:

w⋆=1δΣ−1μBL+budget constraint adjustmentsw^\star = \frac{1}{\delta} \Sigma^{-1} \mu_{\text{BL}} + \text{budget constraint adjustments}

In practice, the standard formulation maximizes

w⊤μBL−δ2w⊤Σww^\top \mu_{\text{BL}} - \frac{\delta}{2} w^\top \Sigma w

subject to 1⊤w=1\mathbf{1}^\top w = 1 and any constraints. This is just MVO with a smarter μ\mu.

The result: weights that are anchored to the market portfolio, tilted by your views proportionally to view confidence, and well-behaved because the posterior μ\mu is much more stable than historical means.

The Idzorek Extension

A practical problem: how do you set Ω\Omega? Black-Litterman proposed a heuristic based on view variances. Idzorek (2005) introduced a more intuitive approach: specify view confidence as a percentage from 0% to 100%, and convert to Ω\Omega accordingly.

For an absolute view on asset ii:

Ωii=α⋅PiΣPi⊤\Omega_{ii} = \alpha \cdot P_i \Sigma P_i^\top

where α\alpha is a confidence scaling factor derived from the percentage. For 100% confidence, α→0\alpha \to 0 (perfect view, full weight). For 0% confidence, α→∞\alpha \to \infty (ignore the view).

For relative views, the formula uses the row of PP corresponding to the view.

The exact relationship:

Ω=(1c−1)PτΣP⊤\Omega = \left( \frac{1}{c} - 1 \right) P \tau \Sigma P^\top

where c∈(0,1)c \in (0, 1) is the confidence level. This is Idzorek’s contribution and it makes Black-Litterman much easier to use in practice.

A Working Example

Let’s say we have 3 assets. Market weights are 60/30/10. We have a covariance matrix and we believe asset 1 will outperform asset 3 by 4% with 70% confidence.

import numpy as np

# Inputs
w_mkt = np.array([0.6, 0.3, 0.1])
Sigma = np.array([
    [0.04, 0.01, 0.005],
    [0.01, 0.09, 0.01],
    [0.005, 0.01, 0.16]
])
delta = 0.04  # Implied market risk premium
tau = 0.05

# Step 1: Implied equilibrium returns
mu_prior = delta * Sigma @ w_mkt

# Step 2: View. asset 1 outperforms asset 3 by 4%
P = np.array([[1, 0, -1]])
Q = np.array([0.04])

# Step 3: View covariance (70% confidence via Idzorek)
c = 0.7
P_tau_Sigma_Pt = P @ (tau * Sigma) @ P.T
Omega = (1/c - 1) * P_tau_Sigma_Pt

# Step 4: Posterior expected returns
K = tau * Sigma @ P.T @ np.linalg.inv(P_tau_Sigma_Pt + Omega)
mu_bl = mu_prior + K @ (Q - P @ mu_prior)

# Step 5: Solve MVO with posterior mu
Sigma_inv = np.linalg.inv(Sigma)
ones = np.ones(3)
w_bl = Sigma_inv @ mu_bl / (ones @ Sigma_inv @ mu_bl)

print("Implied mu:", mu_prior.round(4))
print("Posterior mu:", mu_bl.round(4))
print("Posterior weights:", w_bl.round(4))

The output: posterior weights will be slightly tilted from market weights (60/30/10) toward asset 1 and away from asset 3. If you had used historical means with confidence 100%, you’d have gotten a much more aggressive tilt, possibly 100% in asset 1. Black-Litterman keeps you anchored.

What Makes It Better

Three things matter most, in order of importance.

First, anchoring. Without views, the posterior equals the prior, which equals market weights. The optimizer’s “do nothing” answer is the market portfolio. This is sensible: don’t try to beat the market if you don’t have a view.

Second, view scaling. The confidence parameter Ω\Omega lets you express how much you trust each view. If you’re 70% confident in a relative-value view, the optimizer will tilt 70% of the way from market weights to view-implied weights. This is much more intuitive than “input a return forecast.”

Third, diversification preservation. Because the posterior is a smooth function of your views (not a step function), the resulting portfolio doesn’t concentrate in a few assets the way raw MVO does. You’ll hold most assets in most cases, just with weight tilts.

What the Literature Says

  • Black & Litterman (1991). “Asset Allocation: Combining Investor Views with Market Equilibrium.” Goldman Sachs Fixed Income Research. The original working paper.
  • Black & Litterman (1992). “Global Portfolio Optimization.” Financial Analysts Journal 48(5): 28-43. The published follow-up with global asset allocation examples.
  • Idzorek (2005). “A Step-by-Step Guide to the Black-Litterman Model.” Ibbotson Working Paper. The confidence parameter.
  • He & Litterman (1999). “The Intuition Behind Black-Litterman Model Portfolios.” Goldman Sachs Investment Management Research. Geometric interpretation.
  • Litterman (2003). Modern Investment Management: An Equilibrium Approach. Wiley. Book-length treatment with global asset allocation examples.
  • Meucci (2005). “Beyond Black-Litterman: Views on Non-Normal Markets.” Risk 18(9): 87-92. Extends BL to non-Gaussian returns.
  • López de Prado (2016). “A Robust Estimator of the Covariance Matrix for Portfolio Construction.” Journal of Risk Model Validation 10(1): 55-72. Recent critique and extensions.

The Full Numerical Example With Multiple Views

Let me extend the previous example with two views. Asset 2 will underperform by 2%, and we’re highly confident about that.

import numpy as np

# Inputs (3 assets, same as before)
w_mkt = np.array([0.6, 0.3, 0.1])
Sigma = np.array([
    [0.04,  0.01, 0.005],
    [0.01,  0.09, 0.01],
    [0.005, 0.01, 0.16]
])
delta = 0.04
tau = 0.05

mu_prior = delta * Sigma @ w_mkt

# Two views
# View 1: asset 1 outperforms asset 3 by 4% (70% confidence)
# View 2: asset 2 underperforms by 2% (90% confidence)
P = np.array([
    [1, 0, -1],
    [0, 1, 0]
])
Q = np.array([0.04, -0.02])

# View covariances
c = np.array([0.7, 0.9])
P_tau_Sigma_Pt = P @ (tau * Sigma) @ P.T
Omega = np.diag((1/c - 1) * np.diag(P_tau_Sigma_Pt))

# Posterior
K = tau * Sigma @ P.T @ np.linalg.inv(P_tau_Sigma_Pt + Omega)
mu_bl = mu_prior + K @ (Q - P @ mu_prior)

# Solve MVO
Sigma_inv = np.linalg.inv(Sigma)
ones = np.ones(3)
w_bl = Sigma_inv @ mu_bl / (ones @ Sigma_inv @ mu_bl)

print("Implied mu:", mu_prior.round(4))
print("Posterior mu:", mu_bl.round(4))
print("Posterior weights:", w_bl.round(4))

The output: posterior expected returns are slightly tilted from the prior, and weights are slightly tilted from market weights. Asset 1 gets more weight (positive view). Asset 2 gets less weight (negative view). Asset 3 is largely unaffected.

The magnitudes of the tilts are proportional to confidence. The 90%-confidence view on asset 2 moves its weight more than the 70%-confidence view on the relative asset 1 vs asset 3 trade.

The Meucci Extension: Beyond Gaussian

The original Black-Litterman assumes Gaussian returns. In reality, returns are non-Gaussian: heavy tails, skewness, regime switching. Meucci (2005) extended Black-Litterman to non-normal markets via “entropy pooling.”

The idea: instead of a Gaussian likelihood for views, use a more general likelihood based on entropy:

p(μ∣views)∝exp⁡(−∑kλk⋅gk(μ))p(\mu | \text{views}) \propto \exp\left(-\sum_k \lambda_k \cdot g_k(\mu)\right)

where gkg_k are functions encoding each view and λk\lambda_k are Lagrange multipliers.

For Gaussian views (the standard case), gkg_k is linear in μ\mu and you recover the standard Black-Litterman posterior. For non-Gaussian views (e.g., “the 5th percentile of asset returns will be at most -20%”), gkg_k is more complex and the posterior is non-Gaussian.

In practice, the Meucci extension is rarely used. The Gaussian approximation is good enough for most institutional portfolios. But for tail-risk-aware allocation, the extension matters.

Connection to Entropy Portfolio Theory

Cover & Thomas (1991) introduced the maximum-entropy portfolio. The idea: among all portfolios consistent with constraints, choose the one with maximum entropy (i.e., the most diversified).

The Lagrangian dual of entropy maximization gives a portfolio that looks like:

wi∝exp⁡(λμi)w_i \propto \exp(\lambda \mu_i)

with λ\lambda chosen to hit the variance constraint. This is a softmax weighting of expected returns — high-μ\mu assets get exponentially more weight.

Black-Litterman can be derived from a maximum-entropy argument: the posterior distribution is the maximum-entropy distribution consistent with the prior and the views. The math is different from the Bayesian derivation but gives the same answer.

When Black-Litterman Fails

Three regimes where Black-Litterman produces bad portfolios.

Bad regime 1: Market weights are wrong. Black-Litterman anchors to market cap weights. If the market is significantly mispriced (a bubble, a sector rotation, a structural shift), the prior is biased. The posterior inherits the bias.

Bad regime 2: Views are systematically wrong. Black-Litterman trusts your views proportionally to your stated confidence. If you’re systematically overconfident, the optimizer tilts too aggressively.

Bad regime 3: Covariance matrix is wrong. Black-Litterman improves μ\mu but uses Σ\Sigma as-is. If Σ\Sigma is misestimated, the resulting portfolio has wrong risk exposures.

For all three, the fix is the same: combine Black-Litterman with shrinkage on Σ\Sigma, robust estimation of μ0\mu_0, and confidence calibration on views. The model is a building block, not a complete solution.

The Black-Litterman Versus Risk Parity Comparison

Two competing philosophies for institutional allocation:

  • Black-Litterman: anchor to market, tilt by views. The optimizer uses expected returns.
  • Risk parity: allocate by risk contribution. No expected returns used.

In practice, Black-Litterman and risk parity produce very different portfolios. Black-Litterman concentrates in assets with high Sharpe (after tilting); risk parity spreads capital evenly across risk contributions.

Which is better depends on whether your views are reliable. If yes, Black-Litterman. If no, risk parity.

Some shops run a hybrid: Black-Litterman at the asset-class level (where views are reasonable), risk parity within asset classes (where views are weak).

The He-Litterman Intuition

He & Litterman (1999) provided the most-cited intuition for the model. Their key insight: views can be decomposed into two pieces — the part that’s consistent with market equilibrium, and the part that’s “surprise” (the view residual).

The Black-Litterman posterior is the prior plus the surprise, scaled by view confidence. If your view matches what the market is already pricing, the posterior equals the prior. If your view is a strong surprise, the posterior shifts accordingly.

Mathematically:

μBL=μprior+(view surprise)×(confidence factor)\mu_{\text{BL}} = \mu_{\text{prior}} + (\text{view surprise}) \times (\text{confidence factor})

The view surprise is (Q−Pμprior)(Q - P \mu_{\text{prior}}). The confidence factor is the Kalman gain. Everything else is just matrix multiplication.

This intuition is why Black-Litterman is so popular: it matches how institutional investors think about views. “asset A will outperform by 4%, that’s 2% more than the market is pricing, and I’m 70% confident” maps directly onto the math.

What to Remember

Black-Litterman is Bayesian MVO. The prior is the market-implied equilibrium return. The likelihood is your views. The posterior is what you use.

The math is two matrix inversions and a Kalman update. The intuition is “anchor to market, tilt by views scaled by confidence.”

The full model handles multiple views with different confidences, expressed in absolute or relative terms. The Idzorek extension makes confidence specification intuitive (percentage form).

It is, by a wide margin, the most-used institutional asset allocation model. If you’re going to use Markowitz, use it with Black-Litterman inputs.

The model can be extended beyond Gaussian (Meucci’s entropy pooling), connected to maximum-entropy portfolio theory, and hybridized with risk parity. But the core Bayesian machinery is the workhorse.

Next article: risk parity. The bridgewater approach. Allocate by risk, not by capital.