Survivorship, and the names that are not in your data
Everyone knows the term. Fewer people have actually looked at what's missing from their own dataset.
The mechanism is simple: your data provider has history for the companies that still exist. The ones that went to zero, got delisted, or were absorbed have quietly left the file. So every backtest you run is conducted on a universe pre-selected for having survived — which is precisely the outcome you were hoping to predict.
The effect is largest exactly where retail traders like to fish. Large caps rarely vanish. Small speculative names do, constantly, and a strategy tested on today's list of small caps is being tested on the ones that made it.
I don't have a clean fix to offer and I won't pretend otherwise. What I do is discount results from any universe I know is survivor-selected, and I treat a strategy that only works on small caps with more suspicion than one that works across sizes.
The honest position is knowing the bias is there and by roughly how much, not eliminating it.