Free lesson · Portfolio management theory
Regime uncertainty: combine scenarios before allocating
Open interactive lessonPractice calculationsExplore labs
Start with the idea
If you are unsure whether tomorrow will be calm or stressed, keep both possibilities. A weighted average of their variances misses the extra uncertainty created by different scenario means.
Symbols, units & horizon
- k: mutually exclusive regime index
- q_k: forecast regime probability, summing to 1
- μ_k: conditional one-day expected decimal return
- v_k: conditional one-day return variance
- μ: mixture mean in decimal daily returns
- v: mixture variance in squared daily-return units
- Σ_k: sum over regimes
- (μ_k−μ)²: between-regime mean uncertainty
When and why to use this
Use uncertain regimes as inputs to portfolio risk estimates and position decisions, with all probabilities formed before the return being forecast.
A regime probability is a model estimate, not a declaration that one world is certainly active. Begin with two possible distributions for one asset. Each has its own expected return and variance. Use probabilities to combine their expected returns.
To combine risk, account for uncertainty within each regime and differences between regime means. This is the law of total variance. It explains why selecting the most likely regime, or merely averaging regime volatilities, can understate risk.
In a multi-asset model the same decomposition uses covariance matrices and outer products of mean differences. Only move to that notation after the scalar example is clear. An optimizer can then consume the resulting return and covariance estimates with turnover and exposure constraints.
A rolling regime model may rename its states after a refit. Treat state labels as arbitrary identifiers and align their meaning using past information before assigning state-specific decisions. Test soft probability weighting against hard switches and a simple volatility-targeting baseline. Measure net performance and turnover, not just how plausible the colored regime chart looks.
Regime uncertainty: combine scenarios before allocating
- Compute the probability-weighted mean μ.
- Within each regime, write return minus the mixture mean as (return−μ_k)+(μ_k−μ). Square and take the regime expectation.
- The cross term vanishes because the conditional mean of return−μ_k is zero. The remaining terms are v_k+(μ_k−μ)².
- Weight these conditional second moments by q_k and add. Taking √v gives total volatility; averaging standard deviations is a different calculation.
Equal regime probabilities, means +.01 and −.01, and variances .0001 each give μ=0. Each regime contributes .0001+.0001=.0002 before weighting, so total variance=.0002 and volatility≈1.4142% daily. Averaging the variances alone would give .0001.
Apply it in a strategy
- Compute a two-regime scalar mixture and verify it with enumerated outcomes.
- Build causal state probabilities and stable refit conventions before extending to covariance matrices.
- Compare net constrained allocation with static and volatility-based baselines across held-out regimes.
Research deliverable
Separate within-regime and between-regime risk and show how dropping the latter changes a risk budget.
Sources & evidence · reviewed 12 September 2026
Reviewed 12 September 2026: preprint, with PDF stamp 21 February 2026. Data, features, rolling inference and allocation methods reviewed. It describes daily Yahoo Finance cross-asset proxies spanning 2005–2026; exact endpoints and independently executable instrument definitions were not established here. Rolling state-identity tracking and cost-aware allocation motivate our discussion. Performance claims were not replicated, and specification ambiguities need resolution before reproduction. The paper’s displayed mixture covariance averages within-component covariances. Our lesson includes the additional between-mean term required for total mixture variance; it does not reproduce that implementation.
Further reading: Boukardagha · Explainable Regime Aware Investing · arXiv:2603.04441 ↗
Python implementation
Self-contained teaching example. Python 3.10+; dependencies and input conventions are shown in the code and notation. Run in your own Python environment.
from math import isfinite
def mixture_moments(probabilities,means,variances):
n=len(probabilities)
if not n or len(means)!=n or len(variances)!=n: raise ValueError("Regime dimensions must match")
if not all(isfinite(x) for row in [probabilities,means,variances] for x in row) or any(x<0 for x in probabilities+variances) or abs(sum(probabilities)-1)>1e-9: raise ValueError("Invalid mixture inputs")
mean=sum(q*m for q,m in zip(probabilities,means))
variance=sum(q*(v+(m-mean)**2) for q,m,v in zip(probabilities,means,variances))
return mean,variance
print(mixture_moments([.5,.5],[.01,-.01],[.0001,.0001]))Continue learning
Portfolio Theory: Estimation, Risk Budgets & Rebalancing — all lessons- Mean–variance theory and the efficient frontier
- Covariance estimation, shrinkage and fragile allocations
- Regime uncertainty: combine scenarios before allocating
- Marginal risk, risk contributions and strategy overlap
- Bayesian views, forecast uncertainty and robust decisions
- Turnover, no-trade regions and dynamic portfolio management
Quantitative finance and development glossary · Python resources and libraries · Research sources and limitations