CQF study materials
CQF study resources

Plug-In Mean-Variance With Weak ML Forecasts: Signal or Optimizer?

CQF · Put your knowledge to work in context.

All case studies

Plug-In Mean-Variance With Weak ML Forecasts: Signal or Optimizer?

You manage a 250-name US equity long-only portfolio with a 6% tracking-error budget. A machine-learning team supplies monthly cross-sectional return forecasts; the historical cross-sectional information coefficient is 0.03 and forecast dispersion is modest. You currently use a mean-variance optimizer with a Ledoit-Wolf shrunk covariance matrix, gross leverage 1.0, and a 20% monthly turnover cap; transaction cost is 10 bps one-way. When you plug the raw ML forecasts into the optimizer, it puts 58% of active risk in three semiconductor names, produces 140% annualized turnover before the cap, and the realized ex-ante volatility is 1.8 times the 6% target in backtest. Net Sharpe is 0.55 versus 1.35 gross of costs. The CIO asks whether the ML signal is worthless or whether the implementation is at fault, and what to change before the next rebalance.

1. Is the ML signal worthless, or is the portfolio construction at fault? Explain the mechanism behind the 58% concentration and the 1.8x volatility.

Read the worked answer

The evidence points to implementation failure, not necessarily a worthless signal. Mean-variance optimization is an error-maximisation engine: optimal weights are proportional to the inverse covariance matrix times expected returns. With 250 names and an IC of 0.03, the forecast is weak relative to its estimation noise, and the inverse covariance amplifies small differences in estimated means into large long and short tilts. Long-only constraints convert that into corner solutions, so a handful of names with the largest estimated alpha dominate active risk. That is exactly the 58% concentration in three semiconductor names.

The 1.8x volatility overshoot has a separate cause: the covariance matrix used ex ante is inconsistent with the realised risk of the chosen portfolio, or the optimizer is running at a different risk level than the stated target because constraints and turnover caps interact. Concentration in a single sector also raises realised volatility relative to a diversified ex-ante estimate.

The 1.35 gross versus 0.55 net Sharpe shows the raw signal has some information but the implementation burns most of it in turnover and concentration. The correct conclusion is to fix construction and cost control before judging the signal.

2. Propose a revised portfolio construction and the metrics you would use to judge it.

Read the worked answer

Revised construction:

  • Shrink the forecasts. Scale the raw ML score by its estimated IC and cross-sectional volatility, or apply a Bayesian posterior mean that pulls forecasts toward zero. A simple rule is to multiply the standardised forecast by IC before using it as an expected return.
  • Constrain the optimizer. Impose name-level active weight caps, sector active-risk caps, and a turnover penalty inside the objective rather than as a hard ex-post cap. Add a transaction-cost term proportional to expected turnover.
  • Use a risk model rather than raw sample covariance. Keep Ledoit-Wolf or a factor risk model, but check that the ex-ante risk of the constrained solution matches the 6% target; scale the final portfolio to the target volatility.
  • Consider a risk-budgeting alternative. If forecast precision is too low, allocate across names by risk contribution rather than by expected return, and use the ML signal only for modest tilts.

Metrics: net information ratio after 10 bps one-way costs; realised versus target tracking error; active share and concentration; turnover; drawdown; and the ratio of net to gross Sharpe. Judge the revised construction against a zero-forecast benchmark using the same risk model and constraints, so any improvement is attributable to the signal rather than to the optimiser.

3. How would you test whether the ML forecasts add value net of costs, independent of the optimizer?

Read the worked answer

Test the signal directly before it reaches the optimizer. Sort the cross-section into deciles each month and compute the net-of-cost return spread between top and bottom deciles; this measures forecast information without covariance amplification. Report the information coefficient by month, its decay across horizons, and its stability across sectors and regimes. Then run the same optimizer twice-once with the ML forecasts and once with zero or randomised forecasts-and compare net information ratios; the difference isolates the signal's contribution from the optimiser's risk allocation.

Because this is an out-of-sample exercise with many possible specifications, deflate the resulting Sharpe ratio for the number of variants tested and use block bootstrap for confidence intervals. A signal with IC 0.03 can be economically meaningful if it is persistent and broad, but only if turnover and costs are controlled. If the decile spread is positive gross but disappears net of 10 bps one-way costs, the signal is real but not exploitable at monthly frequency, which is a different conclusion from 'worthless' and leads to a different remedy.