calibrated SPORTS

Research

Findings, with
the script attached.

Every hypothesis that was registered, the verdict it came back with, and the committed script that produces it. The nulls are published with the rest.

Brier gap, model − market · positive is worse

+0.0142

The interval excludes zero, only just: its low end is +0.0007.

95% interval 0.0007 to 0.0263.

How a number gets onto a page

Four layers. Each one can only use what the layer before it hands over.

01

Facts

Source rows as published. A fact may be corrected, and a correction arrives as a new row rather than an edit in place.

02

Features

Derived from the facts layer and from nothing else, so every feature can be rebuilt from the record that produced it.

03

Beliefs

Distributions, never scalars. A median is read off the distribution rather than fitted beside it.

04

Decisions

Immutable and timestamped, so what a model said at the time survives being wrong.

The four layers, reconciled with the market findings: coming once kalshi-board-and-structural-findings.md is written and the layer rules are reconciled with it.

What a colour means here

Signed figures (CLV, the model minus market bias) are the only ones drawn in green or red, because there the colour is the sign. Categorical series never take those colours: a green bar in a category chart would read as a positive number. That rule is enforced in the token layer, not left to review.

Every figure carries an as-of time, a sample count and a source. Where one of those is missing, the figure is not filled in: the section says in one line what it is waiting on, and Sources lists it.

Settled by evidence

01
Priority markets

Targets, rush attempts, receptions.

02
Distribution families

Negative binomial for counts, zero-inflated gamma for yardage. Overdispersion, right skew and non-trivial zero mass all confirmed on an unseen holdout.

03
Tackles are three columns, not one

Pinned against real box scores: a tackle made with an assist (def_tackles_with_assist) counts as a solo tackle in the official record.

04
Retention keys on ingestion time

A backfilled row carries the timestamp of the event, so a window on it deletes purchased history on arrival. Every time-based policy keys on when the row was written.

How this is computed

Anything here has a committed script behind it. A finding that cannot be re-run is a number someone remembers.

Not settled

Open questions, stated so they cannot quietly become assumptions.

01
The season trend in over-bias

2023 is no different from its price (−0.37pp, −1.59pp to +0.89pp); 2024 is overpriced (−2.68pp, −3.76pp to −1.56pp); 2025 is overpriced (−3.75pp, −5.01pp to −2.57pp). The file publishes no interval for the change between seasons, so none is stated.

02
The CLV benchmark

Pinnacle is absent from historical US-region props, so “beat the sharp close” has no sharp to beat. The stand-in is a three-book de-vigged median covering about half of what settled.

03
Post-game price movement

Whether anything worth capturing happens between game end and settlement, sampled at 600 seconds. If it is near-zero the question closes.

The main line

The main line is one posted line per player, game and market: of the lines posted for that claim, the one whose de-vigged probability of the over was closest to 0.5 at the close. Where sportsbook closing prices exist (2023-2025, via The Odds API) they are used: the median de-vigged price across DraftKings, FanDuel and BetMGM, or across every book quoting when none of those three did, taken at the last snapshot at or before kickoff. Where no sportsbook price exists the exchange mid is used - Kalshi, else Polymarket - from the last quote in the hour before kickoff with both a bid and an ask; an exchange mid is already a probability and is not de-vigged. Sportsbook and exchange prices are never mixed within one game's ladder. Quarter lines (0.25, 0.75), which settle as two half bets, are not candidates. Ties go to the lower line. Every row carries the source and the capture time of the price that chose it. A push or a void (the player took no snap) is shown and is not counted as cleared or missed; a player who played and recorded nothing settles at 0, which is a miss on an over.

The execution map

Median quoted spread runs 1¢ to 63¢ across 5 series and 6 timing buckets.

Quoted spread and touch size

research/sweep/h3_lifecycle.py (brief 022) · generated Tue, Sep 15, 5:22 PM ET

Cross game lines 1-6h before kickoff; never cross a prop in-game.

Median quoted spread (cents) · median touch size
Series>72h24-72h6-24h1-6h0-1hin-game
KXNFLREC9¢ · —4¢ · —3¢ · —3¢ · 502¢ · —16¢ · 2
KXNFLRSHATT6¢ · —13¢ · —10¢ · —9¢ · 39¢ · —63¢ · 1
KXNFLSPREAD2¢ · —1¢ · —1¢ · —1¢ · 7,9431¢ · —1¢ · 89
KXNFLTOTAL2¢ · —1¢ · —1¢ · —1¢ · —1¢ · —1¢ · —
KXNFLGAME1¢ · —1¢ · —1¢ · —1¢ · —1¢ · —1¢ · —
Spread relative to 60-minute price volatility
SeriesRatio
CHAMP3.88
WINSWEEK2.76
KXNFLRSHATT2.51
WINS2.13
DIVISION1.18
KXNFLREC1.05
KXNFLTOTAL0.31
KXNFLSPREAD0.30
KXNFLGAME0.30
How this is computed

What it costs to trade, by how long before kickoff.