Why Backtesting on Revised Financial Data is "Look-Ahead Bias"

A $30M gap between reported and restated earnings shows how backtests can quietly train on information that didn't exist yet.

2:13 video3 min readWatch on YouTube

A company reports Q1 earnings of $310 million. Months later, after corrections and restatements, that same quarter shows up in the data as $340 million. If a financial model gets trained or backtested on the second number while pretending to predict the first period, it has quietly been handed information from the future. Aishwarya Patil from the Mycroft team walks through exactly how that happens and why it's a routine, ongoing problem rather than a rare edge case.

The $30 million difference

The gap between what a company reported at the time and what the same filing shows today isn't a rounding error. It's the difference between $310 million and $340 million on a single quarter, and it captures the core problem in one number. Financial data gets revised constantly after the fact: restated earnings, corrected filings, updated economic indicators. The version of a dataset you pull today often isn't the version that existed on the date it claims to describe. A model trained on today's version is being trained on a number that, at the historical date in question, nobody actually had.

How restated earnings leak the future into the past

This is the mechanism of look-ahead bias. A model trained or backtested on today's restated numbers is quietly given information from the future relative to the date it's supposedly predicting. Because restatements are a normal, continuous part of financial reporting rather than a rare correction, this isn't a hypothetical risk that shows up occasionally. It's baked into how financial data is stored and pulled by default, which means any backtest built on a live, current database is at risk unless someone has specifically guarded against it.

The fix: point-in-time data stores

The fix is a specific kind of data architecture: a point-in-time data store. Instead of overwriting a value when a correction comes in, the system stores the value as it was known on that date, and stores any later revision as a separate, dated entry alongside it, never replacing the original. A model trained on this kind of store can only ever see what someone actually could have seen at the time, because the corrected numbers are dated and separated rather than silently merged into history.

Inside Compustat's point-in-time database

This isn't a theoretical fix either. Commercial products exist specifically to solve this problem, and Compustat's point-in-time database is a clear example. It tracks both a company's originally reported numbers and every later restatement as separate, dated records, letting researchers reconstruct exactly what was known at any past month-end rather than what is known now. Its stated purpose is to help researchers avoid both survivorship bias and look-ahead bias. The fact that a dedicated commercial product exists around this one problem is itself a strong signal of how routinely restatements distort naive backtests that don't account for them.

Auditing your own data

The practical takeaway is a question you can ask about any dataset you're using for a backtest: does this reflect the value as it was reported on the date in question, or has it been silently updated with later corrections? If you can't answer that, the safest assumption is that the backtest built on it may be using information from the future. Checking this is described as something you can do directly with Claude, asking it to help audit whether a financial dataset reflects point-in-time values or restated ones.

Key takeaways

  • Restated earnings can differ from originally reported earnings by tens of millions of dollars on a single quarter.
  • Training or backtesting on today's restated data silently leaks future information into a model meant to predict the past.
  • Point-in-time data stores solve this by keeping the original reported value and storing any later correction as a separate, dated entry.
  • Compustat's point-in-time database is a commercial example built specifically to help researchers avoid survivorship and look-ahead bias.
  • Before trusting a backtest, check whether the underlying dataset was restated after the fact, and treat undated or silently updated data as a potential source of look-ahead bias.

Who this is for

This is aimed at anyone building or evaluating financial AI models, quant researchers running backtests, and Humanitarians AI Fellows working on data integrity for the Mycroft project. If you work with historical financial data at all, the audit question raised here, whether your dataset reflects what was known at the time or what's known now, is worth asking before you trust any backtest result.

Chapters

  1. 0:00The $30M difference: Naive backtests vs. historical reality
  2. 0:35How restated earnings silently leak future information
  3. 1:10The fix: Implementing point-in-time data stores
  4. 1:45Inside Compustat's Point-in-Time commercial database
Full transcript(auto-generated, with timestamps)

The $30M difference: Naive backtests vs. historical reality

[0:00]Hi, I'm Aishwarya from the Mycroft team. This video walks through why training on today's version of historical financial data can quietly teach a model information it wouldn't have actually had at the time. A company's Q1 earnings as reported today, $340 million. As reported at the time, $310 million. The model was trained on the first number. Method, financial data gets revised after the fact, restated earnings, corrected filings, updated economic indicators. The version you pull today often isn't the version that existed on

How restated earnings silently leak future information

[0:36]The date it claims to describe. Where it fails, a model trained or backtested on today's restated numbers is quietly given information from the future relative to the date it's supposedly predicting. This isn't a hypothetical edge case. Restatements are a routine, ongoing part of financial reporting. The fix, point-in-time data stores the value as it was known on that date. Alongside any later revisions as separate, dated entries, never overriding history with the corrected number. A model trained on this can only ever see what someone actually could have

The fix: Implementing point-in-time data stores

[1:11]Seen at the time. How much does this actually matter? This isn't a hypothetical concern. Commercial databases exist specifically to solve it. The Compustat point-in-time database tracks both a company's originally reported numbers and every later restatement as separate, dated records, letting researchers reconstruct exactly what was known at any past month end rather than what's known now. Its stated purpose is helping researchers avoid survivorship and look ahead bias. A dedicated product built around this one problem is a strong sign

Inside Compustat's Point-in-Time commercial database

[1:45]Of how routinely restatements actually distort naive backtests. Your turn. Take a financial data set you're using and ask Claude, "Does this reflect the value as it was reported on the date in question, or has it been silently updated with later corrections? If you can't tell, treat any backtest built on it as potentially using information from the future. Point-in-time VS restated data. Built with Claude for Humanitarian's AI.

More from Humanitarians AI Fellows

Humanitarians AI Lyrical Literacy Project