Skip to content

Scenario-Robust (Minimax) Optimization

One-line definition

Instead of optimizing against a single expected-return estimate, maximize the portfolio's worst-case return across a set of specified scenarios.

Formula

Given R (n_scenarios x n_assets, each row a scenario's asset returns):

maximize t subject to R @ w >= t, sum(w) = 1, w >= 0

Why PMs care

Mean-variance optimization is only as good as its expected-return input, which is usually the least reliable part of the model. Scenario-robust optimization sidesteps that by optimizing directly against a small set of PM-defined, defensible scenarios (e.g. from src/pm/scenarios.py) instead of a single fragile point estimate.

Worked example

Verified in tests/test_robust.py: two assets, two symmetric scenarios (each favoring one asset over the other), gives an equal-weight 50/50 solution where both scenarios bind at the same worst-case return — the minimax solution can't do better in one scenario without doing worse in the other.

Common mistakes

  • using too few scenarios, which can produce weights overfit to those specific shocks rather than genuinely robust
  • forgetting that minimax is inherently conservative — it optimizes for the worst case, not the expected case