A method for auditing factor research from the outside: measure what a data-handling defect does to a factor cross-section on a pipeline you own, then test for that shape in tables you cannot audit. Calibrated on a point-in-time US equity study, out-of-sample 2014-01-31 → 2026-07-31 (12.5 years).
A factor table is usually all an outside reader gets. An allocator reads a manager's IC table, a referee reads a submitted backtest, a desk prices a vendor signal. None of them can run the pipeline behind the numbers, and the literature on look-ahead and survivorship bias is written for someone who can.
A defect is not a scalar amount of inflation. It is a direction in factor space, and the direction is a property of the defect rather than of the study it damages. The framework is a generator that re-runs one study under alternative data conventions, a signature per defect, an inference model that separates signature from unknown true performance, and a validation protocol of four gates that must pass before the diagnostic reports anything.
Shift in t-statistic from the point-in-time baseline, for the eight factors that move most under either defect. Both columns come from the same generator, changing one data convention at a time.
| period-end join | current membership | |
|---|---|---|
| amihud_illiquidity | 0.00 | +3.91 |
| turnover_1m | -0.10 | -2.05 |
| idio_vol_60d | 0.00 | -2.02 |
| operating_margin | +0.35 | -1.88 |
| accruals | +1.77 | +0.02 |
| vol_60d | 0.00 | -1.41 |
| earnings_yield | +0.98 | -1.28 |
| roe | +1.07 | -1.24 |
The two signatures point in near-independent directions and disagree in sign on value factors, so a table cannot be explained by both. The exact zeros carry more weight than the correlation: a factor built from price and volume never reads a filed figure, so a strong illiquidity result cannot have come from a dating defect whatever else is true of the study.
Conditioning a universe on current index membership behaves in the opposite way. Mean IC falls rather than rises, while amihud_illiquidity flips from t = -1.11 to +2.80 and the low-volatility anomaly inverts. The channel is a forward-looking growth filter, not a survival filter: the biased panel wrongly includes 203 names a day that had not yet been admitted, against 88 it wrongly excludes.
The generator the signatures are calibrated on. A 22-factor cross-section on reconstructed point-in-time index membership and SEC XBRL fundamentals keyed on filing date, over 12.5 out-of-sample years.
| mean IC | ICIR | t | |
|---|---|---|---|
| cash_flow_yield | 0.0169 | 0.1388 | 1.6970 |
| sales_to_price | 0.0174 | 0.1372 | 1.6780 |
| earnings_yield | 0.0140 | 0.1274 | 1.5580 |
| accruals | 0.0068 | 0.1002 | 1.2260 |
| roe | 0.0087 | 0.0998 | 1.2210 |
| mom_1m_reversal | 0.0109 | 0.0744 | 0.9100 |
| net_share_issuance | 0.0045 | 0.0530 | 0.6480 |
| book_to_market | 0.0067 | 0.0500 | 0.6110 |
| idio_vol_60d | 0.0059 | 0.0403 | 0.4920 |
| mom_residual_12_1 | 0.0042 | 0.0232 | 0.2830 |
| gross_profitability | 0.0015 | 0.0135 | 0.1650 |
| operating_margin | 0.0011 | 0.0110 | 0.1350 |
Cost sensitivity — Sharpe at 5bp slippage 0.30, at 10bp 0.24, at 20bp 0.12.
A decile spread with a t-statistic above 2 looks like a strategy. Regressing that spread on the market decides whether it is one.
The long decile runs a beta of 1.10 against the short decile's 0.99, a tilt positive in 73% of months over a window in which the market compounded at 13.7%. A decile-spread t-statistic reported without its beta decomposition is not a claim about stock selection, here or anywhere.
The second result is dispersion. Across six model seeds with identical economics, IC holds at 0.0164 ± 0.0008 while Sharpe ranges from 0.09 to 0.49. A single backtest Sharpe from a stochastically fitted model is a draw from that distribution, and every performance figure above should be read against its spread.
Point-in-time index membership against names that could actually be priced and traded. The gap is the residual survivorship limitation: delisted tickers are frequently unavailable from the price source, and it bounds the second signature as well as the study.
| index members | priced | tradable | with fundamentals | |
|---|---|---|---|---|
| 2004 | 351.0 | 488.0 | 1.0000 | 0.0000 |
| 2005 | 352.0 | 500.0 | 259.0 | 0.0000 |
| 2006 | 357.0 | 513.0 | 272.0 | 0.0000 |
| 2007 | 360.0 | 527.0 | 286.0 | 0.0000 |
| 2008 | 368.0 | 542.0 | 293.0 | 0.0000 |
| 2009 | 372.0 | 546.0 | 292.0 | 106.0 |
| 2010 | 375.0 | 567.0 | 315.0 | 349.0 |
| 2011 | 378.0 | 580.0 | 326.0 | 487.0 |
| 2012 | 383.0 | 594.0 | 338.0 | 519.0 |
| 2013 | 388.0 | 605.0 | 352.0 | 530.0 |
| 2014 | 391.0 | 615.0 | 361.0 | 542.0 |
| 2015 | 400.0 | 625.0 | 372.0 | 553.0 |
| 2016 | 414.0 | 635.0 | 391.0 | 562.0 |
| 2017 | 423.0 | 640.0 | 409.0 | 572.0 |
| 2018 | 429.0 | 636.0 | 419.0 | 581.0 |
| 2019 | 435.0 | 636.0 | 425.0 | 592.0 |
| 2020 | 448.0 | 643.0 | 440.0 | 602.0 |
| 2021 | 458.0 | 655.0 | 454.0 | 614.0 |
| 2022 | 468.0 | 655.0 | 465.0 | 620.0 |
| 2023 | 479.0 | 659.0 | 476.0 | 624.0 |
| 2024 | 486.0 | 664.0 | 483.0 | 633.0 |
| 2025 | 493.0 | 662.0 | 481.0 | 639.0 |
| 2026 | 500.0 | 672.0 | 489.0 | 644.0 |