oddsx · read-only research status
Generated 2026-09-14T10:00:49Z · HEAD 9612e75

Edge-1 dossier — Favorite–Longshot bias (take the favorite / short the longshot)

Verdict: FALSIFIED (out-of-sample, net of costs, vs the favorite null). Ticket: T-0015 (powered re-run of T-0009). Script: research/02_favorite_longshot.py. Date: 2026-07-24.

> History: provisional FALSIFIED on the Apr 18–29 window (~485k bets, > TEST ≈ 1 day; T-0009) → powered FALSIFIED on the FULL 53-day window > (29.6M bets, real 15-day June OOS; T-0015). The powered run confirms and > strengthens the falsification: the sign no longer flips across cuts, and the > provisional "adversarial longshot" mirage is gone.

> Honest > profitable. The gross calibration signal is real but ~2–4× too small > to survive Polymarket taker costs; net of costs it loses in every price band, > out of sample, and it does not beat simply buying every favorite.

---

Hypothesis

From the iter-002 calibration diagnostic: Polymarket over-prices mid-priced longshots in sports — tokens in a mid price band win *less* often than their price implies. If the longshot is overpriced, its complementary favorite is under-priced, so systematically taking the favorite side (mechanically: buying the favorite outcome, which is the same position as shorting the longshot) should carry a positive edge OOS, net of costs.

Method (powered — T-0015)

TRAIN calibration scan (favorite-price buckets, powered)

The signal is real but *small and cost-swamped*: gross edge is ~+1% in the mid band, but taker cost at those prices is ~3%, so mean_net is negative in every bucket:

favorite priceNwin_ratemean_grossmean_net
0.50–0.553,101,7990.530+0.0143−0.0287
0.55–0.602,655,2860.577+0.0112−0.0278
0.60–0.652,543,7680.608−0.0214−0.0565
0.65–0.702,067,3060.673+0.0030−0.0284
0.70–0.751,711,0050.729+0.0132−0.0147
0.75–0.801,571,8710.778+0.0092−0.0152
0.80–0.851,335,9070.800−0.0257−0.0468
0.85–0.901,154,2560.882+0.0123−0.0056
0.90–0.951,129,4320.925+0.0055−0.0094
0.95–1.002,425,6200.987−0.0007−0.0115

TRAIN vs TEST — the verdict table

Edge-1: take the favorite in band [0.50, 0.95) vs buy-every-favorite (favorite null)

splitNgrossnetsharpenaive_netedge_vs_naive
TRAIN17,270,630+0.0028−0.0286−0.0394−0.0265−0.0021
TEST8,844,141−0.0114−0.0431−0.0588−0.0399−0.0032

TRAIN edge is already negative (−0.0021) and TEST stays negative (−0.0032); TEST net return is deeply negative (−0.043). Band-selection does not beat buying every favorite, and the strategy is not profitable after costs → FALSIFIED. Unlike the provisional run, there is no TRAIN→TEST sign reversal — the falsification is stable across the real OOS era.

Supporting / adversarial runs (context, not the verdict)

Tail-variance honesty

unitTEST Nmedian_netmean_netminmaxtop-1% |PnL| share
all-fills8,844,141+0.2275−0.0431−1.045+0.9550.016
per-market14,853+0.2275−0.0386−1.045+0.9550.016

vbt.pro simulation (gate L1.2)

vbt.pro 2026.4.7, hourly equal-weight book over the TEST window (376 bars across the ~15-day June era, cost-adjusted): total_return −100.0%, Sharpe(1h-ann) −32.2, max_drawdown −100.0%. Unambiguously negative and consistent with the harness verdict (the compounding book is driven to zero by a persistent ~−4%/bar mean net). Pandas equity curve emitted alongside as fallback.

Verdict

FALSIFIED (powered). "Take the favorite / short the mid-priced longshot" does not beat buying every favorite out of sample and is not profitable net of costs. The gross favorite-longshot mispricing exists (~+1% for mid favorites) but is smaller than Polymarket taker costs (~3%). On the powered 15-day OOS the result is now robust: negative on TRAIN and TEST, negative under both fill-weighting and market-weighting, and the provisional longshot mirage does not reproduce.

Caveats

  1. Cost sensitivity is the whole story. The gross edge is real but ~2–4× smaller than the ~3% taker cost. A materially cheaper execution path (maker rebates, tighter spreads) is the only thing that could revive this — a cost sensitivity sweep is the natural follow-up before fully closing the book.
  2. Fill-clustering: all-fills weights high-volume markets heavily; the de-clustered per-market run now agrees in sign (both negative), removing the provisional concern. by="market" split remains the strictest unit.
  3. Return convention: the favorite-buy transform uses the standard BUY payoff (payoff/q − 1). Both strategy and null pay the identical cost model, so edge_vs_naive is apples-to-apples.
  4. Single 53-day macro window. Apr–Jun 2026 is still one macro regime; a multi-quarter replication would harden the verdict further, but the 15-day OOS era already gives real (not ~1-day) power.

Reproduce

uv run --extra backtest python research/02_favorite_longshot.py

uv run pytest -q → green.