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.
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 same arithmetic applies to strategy search rather than model fitting: try enough variants and the best one scores well by construction, which is what the deflated Sharpe ratio exists to correct for.
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.