survivorship-biaslisted
Install: claude install-skill jefrnc/quant-llm-skills
# Survivorship bias
The companion to `lookahead-safety`: that one stops you from using
data that didn't exist yet. This one stops you from using a UNIVERSE
that didn't exist yet. Together they're the two halves of "what was
actually knowable, on what tickers, on a given date."
## Core principle
**A backtest universe must be reconstructed at every rebalance /
query date from the membership snapshot AT that date — never from
today's resolution.**
Today's S&P 500 contains companies that joined in 2024.
Today's Russell 3000 excludes companies that delisted in 2022.
Today's "all US small-caps" is filtered by who survived to today.
Using any of those for a 2018 backtest is the single most common way
to manufacture alpha that doesn't exist.
## Where survivorship bias enters silently
### 1. Universe construction
**Bug:** "Pull all small caps with mkt cap < $300M today, then run
the strategy on their 2018-2023 history."
**Why wrong:** The bankrupt, merged, and reverse-split-delisted small
caps from that period are gone. You're testing only on companies
that survived. Returns inflated, drawdowns understated.
**Fix:** point-in-time universe — at each rebalance date, query the
universe AS OF that date including names that subsequently delisted.
### 2. Ticker resolution
**Bug:** Vendor API returns "no data" for a delisted ticker, or
silently returns the SUCCESSOR entity's data.
**Why wrong:** Some yfinance / Polygon resolutions for delisted
tickers map to merger-acquirer prices, f