Quant Memo
Core

Regressing Realised on Predicted

Running a simple regression of what actually happened against what a model predicted is the fastest honest check of a forecast — and the slope it returns is rarely exactly one.

Prerequisites: The Classical Linear Regression Assumptions

The single most useful diagnostic for a forecasting model is embarrassingly simple: take every prediction the model made, take what actually happened next, and regress one on the other. This is the Mincer-Zarnowitz regression, and despite its plainness it catches problems that fancier metrics like correlation or Sharpe ratio routinely miss — because it checks not just whether the model is directionally right, but whether its predictions are the right size.

Regressing realized returns on predicted returns should, for a well-calibrated forecast, produce an intercept near zero and a slope near one. A slope well below one means the model's predictions are systematically too extreme; a slope above one means the model is too timid.

Setting up the regression

rt+1=α+βr^t+1+εtr_{t+1} = \alpha + \beta \, \hat{r}_{t+1} + \varepsilon_t

In words: regress the return that actually happened, rt+1r_{t+1}, on the model's prediction of it, r^t+1\hat{r}_{t+1}, made in advance. A model with no systematic bias and correctly scaled predictions should return α0\alpha \approx 0 and β1\beta \approx 1; anything else is a specific, fixable diagnosis rather than a vague "the model isn't great."

What each parameter reveals

An intercept α\alpha meaningfully different from zero means the model has a constant bias — it's predicting returns that are, on average, too high or too low, independent of the actual signal content, often because the training sample's average return doesn't match the live period. A slope β\beta below one means the model's predictions swing too far: when it predicts a big move, the actual move tends to be smaller, which is the classic signature of overfitting — the model has learned to be confident on noise. A slope above one is rarer and means the opposite: the model is under-stating genuinely large moves.

Worked example

A researcher regresses realized 5-day returns on a model's predicted 5-day returns across 400 out-of-sample predictions and gets r^t+1=0.0004+0.62r^t+1model\hat{r}_{t+1} = 0.0004 + 0.62\,\hat{r}_{t+1}^{model}, with R2=0.04R^2 = 0.04. The slope of 0.62 says that for every 1% the model predicts, the market only delivers about 0.62% on average — the model's predictions are about 60% too extreme. Rather than discard the model, the practical fix is to keep using its direction and relative ranking of predictions but multiply every future prediction by 0.62 before sizing trades off it, which corrects the scale without needing to refit the whole model.

Regression explorer
amber = residuals
fitted slope 1.133true slope 1.00 0.642SSres 42.0

The explorer above shows an OLS line fit to a scatter with visible residuals — imagine the x-axis as predicted return and the y-axis as realized return; a flatter-than-45° fitted line is exactly the overconfident-model pattern described here.

What this means in practice

This regression is cheap to run and should be a standard part of evaluating any return forecast before it goes live, alongside (not instead of) hit rate and correlation. A model can have a respectable correlation with future returns and still be badly miscalibrated in scale — correlation only measures co-movement, not whether the magnitude of the prediction matches the magnitude of the outcome.

A low R2R^2 in this regression is normal and not itself a problem — return forecasting is noisy, so an R2R^2 of a few percent can still be economically valuable. What matters is the slope β\beta, not the fit quality; conflating the two is a common evaluation mistake.

Related concepts

Practice in interviews

Further reading

  • Mincer & Zarnowitz, 'The Evaluation of Economic Forecasts'
  • Diebold, Elements of Forecasting (ch. on forecast evaluation)
ShareTwitterLinkedIn