Research · published including the nulls
What was tested, and what it found
Every hypothesis this project has retired, with its interval. None of them found an edge that survives costs. That is the result, and it is published as plainly as a win would be.
Retired hypotheses
| ID | Brief | Question | Verdict | Estimate [95%] | n | Games | Why | Script |
|---|---|---|---|---|---|---|---|---|
| R01 | longshot | Do sportsbooks overprice longshot player props? realized rate in the 0.125-0.150 price bucket (priced 0.1388) | retired — no edge | +0.0898 [0.0552, 0.1429] probability | 167 | — | Every settled observation priced below 0.15 is a sacks over on a single-book 1-2 line ladder, and even there the priced value sits inside the Wilson interval. | research/longshot.py |
| R02 | S00 | Does the model's week-1 entry beat the Kalshi close? executable CLV at 1,000 contracts | retired — no edge | -13.52 [-17.06, -10.4] pp | 493 | 14 | Mid-to-mid CLV was +0.62pp [+0.13, +1.22], but the book tightened from below; where money changes hands CLV is deeply negative. | research/clv.py |
| R03 | S01 | Held to settlement, does one crossing at the touch pay? one-crossing CLV against the closing mid | retired — no edge | -3 [-3.8, -2.26] pp | — | — | Exactly mid-to-mid minus half the 7.22c entry spread; shrinking the ticket buys back slippage and nothing else. | research/clv.py |
| R04 | M01 | Would a resting maker order on the model's side have earned the spread? maker CLV conditional on a fill | retired — no edge | +0.28 [-0.34, 1] pp | 704 | 14 | Fill rate 18.0%; the fills were worth nothing while the misses were worth everything (selection gap +4.52pp [+3.58, +5.79]). | research/maker.py |
| R05 | 018 | Does the model's side selection add value over a model-free maker control? conditional maker CLV, model's own side, 100 contracts | retired — no edge | +0.67 [0.05, 1.39] pp | — | 14 | The flipped side reads +0.07pp [-0.69, +0.93]; the weekly product peaks at ~$113/week at 250 contracts - real but small. | research/maker.py |
| R06 | 019 H1 | Do Kalshi ladder rungs violate monotonicity on the touch, tradeably? violation episodes surviving taker fees on both legs | retired — no edge | +232 episodes of 892 | 892 | — | 95% are in-game rungs updating out of step; where depth could be checked the thinner leg carried a median of 1 contract, max 2. | research/structural.py |
| R07 | 019 H2 | Do first-TD-scorer partitions sum to more or less than 1? incomplete first-TD events | not testable — data does not exist | +16 events of 18 | 18 | — | 13 of 16 settled week-1 events had no No Touchdown leg, so the partition sum is undefined. | research/structural.py |
| R08 | 019 H3 | Does quoting both sides capture the spread, per series? conditional maker capture, KXNFLSPREAD | retired — no edge | -0.83 [-1.67, -0.29] pp | — | — | Negative on every tight series and zero on the prop series; spread and maker fee are collinear, so the ordering cannot separate them. | research/structural.py |
| R09 | 020 | Does Kalshi's team-market price lag the sportsbook consensus by more than it costs to cross? mean gap, Kalshi mid minus de-vigged consensus | null — no effect | -0.19 [-0.39, 0.01] pp | 1,060 | 16 | Pre-kickoff gaps above 2.5pp were three claims on minority half-point lines and CLV to Kalshi's own close was -0.9pp; in-game gaps were book clock skew. | research/consensus.py |
| R10 | 021 | Is the model's probability better than the market's on settled outcomes? Brier(model) - Brier(market) | retired — no edge | +0.0275 [0.0117, 0.041] Brier | 682 | 14 | Worse than the market, above the 0.021 minimum detectable effect, and indistinguishable from a smoothed prior-season hit rate. | research/score.py |
| R11 | 022 H1 | After a player reaches a receptions rung mid-game, is the winning side still offered? executable net per contract at 120s, 10 contracts, depth-confirmed | open — awaiting holdout | +1.81 [1.24, 2.47] pp | 16 | 8 | Passes four of five bars and awaits week-2 replication; about $17 for the week, and final-stat determination is look-ahead against the live feed. | research/sweep/h1_settlement.py |
| R12 | 022 H2 | Does order-book imbalance predict a move larger than the spread plus fee? top-decile move minus half-spread and fee | retired — no edge | — | — | — | The in-game slope is real and replicates on college football, but net of cost is negative in all 30 NFL and all 16 estimable CFB cells; the largest gross move is ~1.1pp against 1.5-24pp of cost. | research/sweep/h2_imbalance.py |
| R13 | 022 H3 | When is the Kalshi book widest and tightest? spread lifecycle (execution map, not an edge) | null — no effect | — | — | — | Cross game lines 1-6h before kickoff; never cross a prop in-game, where REC spreads reach 16c and RSHATT 63c on 1-2 contracts. | research/sweep/h3_lifecycle.py |
| R14 | 022 scan | Does an open scan of week 1 find anything that clears five pre-registered bars? findings among candidates | retired — no edge | 0 findings of 101 candidates | 101 | — | 396 search tests, 230 at nominal p<0.05 against 16.4 expected; the replicating effects all lose to cost. | research/sweep/summarize.py |
| R15 | 023 Part 1 | Walk-forward, does the model beat the de-vigged sportsbook close? Brier(model) - Brier(close), 2025 | retired — no edge | +0.0218 [0.0162, 0.0277] Brier | 5,574 | 271 | Worse in every season (2023 +0.0272, 2024 +0.0265) against an MDE of ~0.008, and in all 13 variants bracketing the model's unverified constants. | research/walkforward.py |
| R16 | 023 Part 2 | Do sportsbooks disagree enough for arbitrage or middles? historical receptions arbitrage mean size | retired — no edge | +1.09 pp | — | — | Arbs appear on 2.53% of receptions opportunities from slow books, fail replication, and are worth ~$5 per $500 instance before limiting; every middle loses. | research/bookvbook.py |
| R17 | 023 Part 3 | Do teammates' lines lag an inactive announcement? inactive events with an announcement timestamp | not testable — data does not exist | 0 events | 0 | — | No source on disk timestamps an inactive; Kalshi pulled a Friday-OUT player's markets on Saturday, removing the game-day window for known outs. | research/inactives.py |
generated Tue, Sep 15, 5:22 PM ET
Model and market calibration
NFL week 1 2026, KXNFLREC + KXNFLRSHATT, common set n=682, 14 games
model (ECE 0.0764)market (ECE 0.0387) identityhollow = n < 30, not a data point
| Series | Bin | n | Forecast | Realized | Wilson 95% | |
|---|---|---|---|---|---|---|
| model | 0.0–0.1 | 148 | 0.049 | 0.122 | [0.078, 0.184] | |
| model | 0.1–0.2 | 107 | 0.147 | 0.252 | [0.180, 0.342] | |
| model | 0.2–0.3 | 91 | 0.251 | 0.264 | [0.184, 0.362] | |
| model | 0.3–0.4 | 79 | 0.353 | 0.494 | [0.386, 0.602] | |
| model | 0.4–0.5 | 67 | 0.444 | 0.507 | [0.391, 0.624] | |
| model | 0.5–0.6 | 61 | 0.547 | 0.525 | [0.402, 0.645] | |
| model | 0.6–0.7 | 47 | 0.651 | 0.596 | [0.453, 0.724] | |
| model | 0.7–0.8 | 31 | 0.750 | 0.581 | [0.408, 0.736] | |
| model | 0.8–0.9 | 42 | 0.833 | 0.905 | [0.779, 0.962] | |
| model | 0.9–1.0 | 9 | 0.923 | 0.778 | [0.453, 0.937] | not a data point |
| market | 0.0–0.1 | 166 | 0.055 | 0.078 | [0.046, 0.129] | |
| market | 0.1–0.2 | 90 | 0.137 | 0.178 | [0.113, 0.269] | |
| market | 0.2–0.3 | 62 | 0.245 | 0.290 | [0.192, 0.413] | |
| market | 0.3–0.4 | 47 | 0.345 | 0.404 | [0.276, 0.547] | |
| market | 0.4–0.5 | 75 | 0.451 | 0.387 | [0.285, 0.500] | |
| market | 0.5–0.6 | 84 | 0.548 | 0.595 | [0.488, 0.694] | |
| market | 0.6–0.7 | 61 | 0.645 | 0.639 | [0.514, 0.748] | |
| market | 0.7–0.8 | 52 | 0.745 | 0.808 | [0.681, 0.892] | |
| market | 0.8–0.9 | 42 | 0.839 | 0.857 | [0.722, 0.933] | |
| market | 0.9–1.0 | 3 | 0.940 | 1.000 | [0.439, 1.000] | not a data point |
The execution map
Cross game lines 1-6h before kickoff; never cross a prop in-game.
| Series | >72h | 24-72h | 6-24h | 1-6h | 0-1h | in-game |
|---|---|---|---|---|---|---|
| KXNFLREC | 9¢ · — | 4¢ · — | 3¢ · — | 3¢ · 50 | 2¢ · — | 16¢ · 2 |
| KXNFLRSHATT | 6¢ · — | 13¢ · — | 10¢ · — | 9¢ · 3 | 9¢ · — | 63¢ · 1 |
| KXNFLSPREAD | 2¢ · — | 1¢ · — | 1¢ · — | 1¢ · 7,943 | 1¢ · — | 1¢ · 89 |
| KXNFLTOTAL | 2¢ · — | 1¢ · — | 1¢ · — | 1¢ · — | 1¢ · — | 1¢ · — |
| KXNFLGAME | 1¢ · — | 1¢ · — | 1¢ · — | 1¢ · — | 1¢ · — | 1¢ · — |
| Series | Ratio |
|---|---|
| CHAMP | 3.88 |
| WINSWEEK | 2.76 |
| KXNFLRSHATT | 2.51 |
| WINS | 2.13 |
| DIVISION | 1.18 |
| KXNFLREC | 1.05 |
| KXNFLTOTAL | 0.31 |
| KXNFLSPREAD | 0.30 |
| KXNFLGAME | 0.30 |
research/sweep/h3_lifecycle.py (brief 022) · generated Tue, Sep 15, 5:22 PM ET