Even modest variation in input parameters produces wide variation in the “optimal” allocation.
Chapter 1 introduced the tangency portfolio as the framework’s answer to “which allocation is optimal?” The geometry is clean, the math is closed-form, and the slider on the primer widget shows a specific number — the tangency portfolio is, say, 41% stocks and 59% bonds. That’s a precise answer.
But the answer depends on what you put in. Change the expected return of stocks from 8% to 7%, and the tangency portfolio shifts. Change the correlation from 0.1 to 0.3, and it shifts again. Change the volatility of bonds, and again. The framework treats every input as exact, then produces an exact-looking output.
The question this chapter examines is: how much does the output depend on the inputs?
The parameters fed into mean-variance optimization — expected returns, volatilities, correlations — have to come from somewhere. In practice, they’re typically derived from historical data, often with adjustments for forward-looking judgment. You’d compute the average return of stocks over some past window, the standard deviation of that return series, the correlation between stock and bond returns over the same window. Then you’d plug these numbers into the framework as if they were the parameters.
The trouble is that those summaries are uncertain. Different historical windows give different summaries. Different methods of computing the summaries (arithmetic vs. geometric averages, raw vs. log returns, equal-weighted vs. decay-weighted) give different answers. Different judgments about how to adjust historical data for current conditions give different answers. There’s no single “right” set of inputs — there’s a range of defensible choices, and the framework treats every choice as exact.
This is what’s commonly called parameter uncertainty: not the variability of outcomes given fixed parameters (which the main simulator addresses), but the uncertainty about the parameters themselves. (The animated cartoon on the landing page visualizes this distinction directly — a fixed parameter value produces one outcome distribution; allowing that parameter value to vary produces a wider combined distribution. The widget below addresses parameter uncertainty specifically — the spread in the framework’s “optimal” answer across plausible inputs. It doesn’t combine that with the outcome variation each input would produce, which is what the cartoon’s full right-side picture would require.)
The widget below takes the two-asset framework from Chapter 1 and adds an outer layer: instead of fixing each parameter at a single value, it lets you specify a central value and an uncertainty range for each parameter. It then runs many Monte Carlo draws — each draw samples a complete set of parameters from your specified ranges, computes the resulting frontier and tangency portfolio, and plots both.
Start with the Realistic uncertainty preset. The frontier becomes a cloud of curves; the tangency portfolios scatter widely across the cloud. The single answer the framework was producing is now visibly a range of answers. Each Monte Carlo draw is an equally-defensible set of parameters; each produces its own “optimal” allocation; together they span a wide region.
The preset captions explain what each scenario shows. Low uncertainty demonstrates that when the inputs are pinned down tightly, the optimization is well-behaved and the answer is precise. Realistic uncertainty shows what happens at the kind of uncertainty levels you’d actually have when estimating from historical data. Correlation crisis isolates the effect of correlation alone, demonstrating that uncertainty in just one parameter — correlation — can produce wide spreads in optimal allocations. Return uncertainty does the same for expected returns, which are notoriously hard to estimate from historical data.
In all four cases, the qualitative picture is the same: the framework’s “optimal” answer is far less precise than it appears.
The framework isn’t broken. Mean-variance optimization does exactly what it’s designed to do — given a specific set of inputs, it produces the allocation that maximizes Sharpe ratio. The trouble is that the inputs aren’t actually specific. They’re estimates with uncertainty, and the framework’s apparent precision comes from treating the estimates as if they were exact.
When you propagate the uncertainty through, the “optimal” portfolio becomes a region rather than a point. Different defensible inputs produce different defensible answers. The framework doesn’t tell you which one is right — it can’t, because the question doesn’t have a single answer once you take the input uncertainty seriously.
This has practical consequences. If your “optimal” allocation under one set of plausible inputs is 40% stocks, and under another set of equally plausible inputs is 70% stocks, the framework isn’t really recommending either one. It’s saying: under these specific inputs, this is the answer. Pick different inputs, get a different answer.
This chapter isn’t arguing that you should ignore the framework’s outputs. The qualitative shape of the results — that diversification matters, that the tradeoff between return and risk is real, that correlations affect how strongly diversification helps — is robust across the parameter cloud. You can take the framework seriously as a guide to how to think about portfolio construction without taking its specific numerical outputs as recommendations.
But it does argue against treating the outputs as more precise than they are. A tangency portfolio computed from one set of historical estimates is one point in a cloud of equally-defensible answers. Reporting it as “the optimal allocation” overclaims what the framework can support.
The next chapter takes this one step further. So far the parameters have been treated as uncertain but stable — we’ve shown wide variation in the optimization’s answer when the parameters are allowed to vary, but the variation has been around a fixed center. The next chapter looks at what happens when the parameters themselves shift over time. Whatever the “right” inputs are, they’re not the same inputs in every era — and there’s no reason to assume the future will use or be represented by the same inputs as the past. The framework has no built-in way to handle this.