The Overfitting Trap: Why 99% Backtest Accuracy Should Scare You

Published on: August 7, 2026 | By: Rizky Setya Maulana

In most of machine learning, a model that scores 99% on held-out data is a triumph. In trading, it is a diagnosis. Here is why financial ML inverts the usual instincts — and the validation habits that separate research from fiction.

Quantitative researcher's multi-monitor workstation with order books and model diagnostics

Markets are among the lowest signal-to-noise environments ever fed to a learning algorithm. Image models can reach near-perfect accuracy because cats reliably look like cats; prices are mostly noise around a faint, unstable signal that other participants are actively arbitraging away. A model that claims near-perfect predictive accuracy on financial data has not discovered structure the entire industry missed — it has almost always memorized noise, or been quietly fed the answer.

Where the Leakage Hides

The most dangerous leaks are the boring ones. Look-ahead bias: a feature computed over a window that ends after the prediction time — one shift(-1) in the wrong place is enough. Survivorship bias: training on today's index constituents teaches the model that companies which never went bankrupt never go bankrupt. Label leakage through overlapping windows: when consecutive training samples share most of their horizon, a random train/test split hands the model tomorrow's answer dressed as yesterday's data. And microstructure noise — the bid-ask bounce we dissected earlier — creates "predictable" reversals that are mathematically impossible to monetize.

Noise Memorization Scales Beautifully

Deep networks are memorization machines with millions of parameters, and financial datasets are small by deep-learning standards: a decade of daily data is under 3,000 observations. Given that ratio, a large model will find "patterns" with the same reliability that humans find faces in clouds. This is why the models that survive in production tend to be embarrassingly simple — regularized linear structures, shallow trees, modest feature counts — run on ruthlessly clean data.

The Validation Stack That Actually Works

Teams whose models survive live conditions converge on the same discipline. Walk-forward validation instead of random splits: train strictly on the past, test strictly on the future, roll the window. Purged cross-validation with an embargo, so overlapping-horizon samples never straddle the train/test boundary. A genuinely untouched final holdout — used once, after all iteration is finished, as a verdict rather than a tuning signal. And an honest accounting of costs: spreads, fees and impact applied to every simulated fill, because a strategy that only works at zero cost does not work.

It Starts Below the Model

Half of the leaks above are data-plumbing failures, not modeling failures. Deduplicated feeds, gapless bar series, and activity-based sampling — tick, volume and dollar bars rather than wall-clock minutes — remove whole categories of false signal before a single parameter is fit. That layer is exactly what our open-source market-data-normalizer exists for, and why we treat infrastructure and research as one problem rather than two departments.

The uncomfortable summary: in trading ML, your accuracy number is mostly a measurement of your leaks. Fix the data, distrust the beautiful backtest, and let the out-of-sample period — not the in-sample chart — tell you what you have. The code we use for the data half of that discipline is public: github.com/Harvestgroup360/market-data-normalizer.

Empowering quantitative research with high-frequency market data and analytics.