← Blog/blog/contemporaneous-r2-forecast-gap

A 0.696 R² can explain the week without forecasting it

Mouangue and Cazenave search 1,072 engineered financial features for a small linear model. Their Monte Carlo tree search (MCTS) builds a subset one feature at a time, fits ordinary least squares, and rewards validation R². It beats Lasso while using far fewer variables. That is an interesting result. It is not, however, a return forecast.

01

Tree search buys sparse, unshrunk spreads

Lasso adds an L1 penalty: it selects variables and shrinks their coefficients. The proposed L0 search instead chooses a subset, then fits its coefficients without shrinkage. That matters when correlated variables form a spread: the paper's highlighted model gives a five-day VIX mean a coefficient of −0.0621 and VIX lag five +0.0513. Shrinking both toward zero can erase the contrast.

Each search path may add an unused feature or stop. A Gibbs policy balances learned action weights with a relevance-minus-redundancy heuristic. Terminal candidates are ranked first by validation R² rounded to three decimals, then by fewer features, then by lower maximum variance inflation factor. That lexicographic rounding is not decoration: within a 0.001 R² tie, sparsity wins.

ModelFeatures / runSeconds / runMean individual R²Ensemble R²
Ridge1072<10.5250—
Lasso60<10.6313—
Elastic Net55<10.6243—
Greedy L0517.10.2489—
GNRPA fixed6052.90.64280.6855
GNRPA tuned15106.90.66480.6908
GNRPA stop18.61671.60.66820.6961
Paper-reported out-of-sample explanatory R² on the January 2024–March 2026 holdout. GNRPA bars use ensemble R² where available; convex baselines are single deterministic fits.
02

A rolling week is mostly yesterday by construction

The timing issue is easiest to see under a deliberately simple reference model. Let daily returns be independent, zero mean, and equal variance, and define Yₜ = rₜ + … + rₜ₋₄. At the end of day t−1, four of those five returns are already known. Their sum accounts for 4/5 of the target's variance. The unresolved same-day return accounts for 1/5. Past returns still forecast none of that new component under the iid assumption.

def rolling_target_shares(window):
    if window < 1 or int(window) != window:
        raise ValueError("window must be a positive integer")
    return {
        "known_before_close": (window - 1) / window,
        "same_day": 1 / window,
        "genuine_forecast": 0.0,
    }

This page runs the TypeScript version. The calculation is an analytic iid timing audit, not a reconstruction of the paper's proprietary design matrix. It does not claim the authors fed the four-return partial sum directly to the model. It shows why a high R² against an overlapping rolling target cannot be read as five-day-ahead forecast skill.

Exact variance decomposition for the paper's five-day rolling target under independent equal-variance returns. Eighty percent is already realized at t−1; zero percent of the new same-day component is forecastable from history.
already observed before closesame-day unresolved componentforecastable under iid returns
Core-computed analytic shares as the rolling window grows from 1 to 20 days. The orange curve approaches one because more of an end-at-t target is already history before t closes.
03

Out-of-sample is not the same as ahead-of-time

The post-2024 window is untouched by feature search and Optuna tuning, so the comparison between methods is genuinely out of sample. But out of sample asks whether a fitted relationship transfers to unseen rows. Ahead of time asks whether every input existed when a forecast would have been issued. A row can satisfy the first condition and fail the second.

04

What to run next

For a forecasting claim, shift the target forward: use information available at day t to predict returns from t+1through t+5. Timestamp macro releases by publication time, lag same-close market variables, and compare MCTS with Lasso over several rolling test windows and indices. Report subset stability as well as R²; the current paper's 12-run stopping ensemble uses 59 unique variables, even though one run averages 18.6.

The mechanism remains worth exploring. A small from-scratch linear regression makes coefficient shrinkage, correlated spreads, and timing alignment visible before a combinatorial search obscures them. The next decisive experiment is not a bigger search budget; it is the same search with a genuinely future target.

References

  1. C. Mouangue and T. Cazenave (2026). L0 Feature Selection via Monte Carlo Tree Search in High-Dimensional Financial Regression. ICAIF '26 / arXiv:2610.13574
  2. R. Tibshirani (1996). Regression Shrinkage and Selection via the Lasso. Journal of the Royal Statistical Society: Series B 58(1)
  3. G. C. Cawley and N. L. C. Talbot (2010). On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation. Journal of Machine Learning Research 11