Scoring a forecast honestly
A forecast is only worth what it achieves on data it did not see. The honest procedure for time series is walk-forward: fit the model on the past, forecast the next value (or block), record the error, move the window forward and repeat. Never shuffle the observations or split them at random, because a model trained on days after the one it predicts has looked into the future. The forecast error is . The common scores are the mean absolute error, , and the root mean squared error, , which punishes large errors more.
Variance is never observed, so a volatility forecast is scored against a proxy such as the squared return or the realised variance. Because the proxy is noisy, the loss must be chosen with care: the squared error on variance is dominated by a few large days, while QLIKE, , is more robust and charges more for under-predicting variance than for over-predicting it by the same factor. Always compare against a naive benchmark, for example yesterday's value or the historical mean. The out-of-sample compares sums of squared errors: it is positive only when the model beats the benchmark. To decide whether a difference in loss is real or luck, use the Diebold-Mariano statistic: with the loss difference between two models, is roughly standard normal, so is significant at 5%. When the forecasts look several steps ahead, the overlap and the standard error must allow for autocorrelation. Choosing the best of many models on the same test data overstates its skill.
- Walk-forward: fit on the past, forecast the next block, move forward; never shuffle time series.
- QLIKE is robust for variance forecasts and punishes under-prediction more; compare with a naive benchmark.
- Diebold-Mariano: tests whether two forecasts really differ; is significant.
Lab · what's graded
- Mean absolute error10 pts
- Root mean squared error15 pts
- A QLIKE loss15 pts
- Out-of-sample R squared15 pts
- A Diebold-Mariano statistic10 pts
- Why not shuffle10 pts
- Match the vocabulary15 pts
- Beating a naive benchmark10 pts