Pradyot Bathuri

Projects

pbathuri/portfolio-risk-allocation →

Our first forecasting model lost to zero. We kept it.

Abstract

For IU's Data Science Club, I organized a small project around a testable question: can lagged international-market returns help predict the S&P return series in a historical dataset? The first real-data ridge baseline returned -0.079 zero-mean validation R-squared, below a zero-return forecast. This post explains why that result belongs in the project, what the current pipeline implements, and why the final 103 observations remain unscored.

Zero was a surprisingly competitive teammate. It also submitted its work on time.

1. A bounded research question

The project uses the public UCI Istanbul Stock Exchange dataset: 536 observations from 2009-2011. It is a small historical learning exercise, not a modern-market trading system. The target is the published S&P return series, with two-observation-lagged inputs, chronological splits, and preprocessing fitted on the training period only.

Those choices make the experiment more inspectable. They do not eliminate every issue involving market-close alignment or establish that the original observations describe a tradeable information set. That is a separate question from whether the code avoided an obvious future-data leak.

2. What a negative score says

The zero-mean score compares squared prediction errors with always forecasting zero:

R02=1−∑t(yt−y^t)2∑tyt2.R^2_0 =1-\frac{\sum_t(y_t-\hat y_t)^2}{\sum_ty_t^2}.

A score of −0.079-0.079 means the model's squared error on that validation window exceeded the zero-return benchmark by approximately 7.9%. It does not mean the program failed to execute. It means this fitted model did not earn its complexity on that comparison.

Ridge regression gives a deliberately modest starting point:

β^=arg⁡min⁡β{∥y−Xβ∥22+λ∥β∥22}.\hat\beta =\arg\min_\beta \left\{\|y-X\beta\|_2^2+\lambda\|\beta\|_2^2\right\}.

More features are not automatically more information. The next step is to compare feature sets and earlier development periods, not to try increasingly complicated models until the held-out answer looks flattering.

3. What the team has built

The repository includes data download and inspection, lagged and rolling features, four baseline forecasts, tests, and short learning notebooks. Contributors work on branches and open pull requests so another person can inspect the changes and reproduce the result.

The proposed covariance experiment compares static and adaptive estimates. It remains a next step, not a completed risk model. Likewise, the final reserved period is not part of today's result: the method should be frozen before that period is evaluated.

4. Why this is useful teaching

A finished notebook is not the whole deliverable. I want a contributor to explain the benchmark, identify the information available at prediction time, and distinguish an unsuccessful hypothesis from a broken implementation.

The broader connection to RegimeFactorZoo is direct. Replication and model selection both need an honest comparison. Keeping a negative result gives the next experiment something concrete to improve upon.

Sources and code

Status: November 2026. This project does not establish profitable trading or current-market forecasting performance.