Skip to content

Findings

Findings / Life of a forecast

The life of a forecast

A published price reference absorbs information continuously, not all at once. This traces that process twice: how the pre-game line finishes moving before tip, and how in-game accuracy sharpens as the game resolves toward its outcome. The page reports the published line-movement and Brier measurements.

Before tip: when the line stops moving

soccer_intl completes half its pre-game line motion by 2.7h before tip; nba not until 4.8h. tennis, wnba move most of their line >6h before tip.

Move-pair counts are dense samples inside a ~30-day line-history window (2026-06-18 to 2026-07-17), not a season.

SportHalf-life (h)Frac. by 6hby 3hby 1hFinal-hour shareMove-pairs
Soccer (Intl)2.750.32120.46560.73650.261164,072
MLB3.670.33560.54740.81430.18131,307,128
NBA4.760.43050.59820.67940.3247182,054
Tennis>6.00.54260.73140.89020.107809,986
WNBA>6.00.64410.76530.88270.1176333,540

Scroll horizontally for all columns.

Fractions are cumulative share of total absolute line motion completed by that many hours before tip (0..1, not a percent).

During the game: when the forecast sharpens

The honest headline: the market's Brier score falls steadily as each game resolves, and stays BELOW the model's the whole way -- market_minus_model_brier is negative at every checkpoint shown here. The market is ahead of us throughout the game, not just at the opening line. See reliability for the same story pregame.

MLB

CheckpointnMarket BrierModel BrierNaive BrierMarket - Model
13,5890.23820.25020.2464-0.0121
22,8030.20230.23770.22-0.0353
33,0970.17780.19980.192-0.0221
43,0340.17190.19580.1788-0.0239
53,1390.12880.14080.1459-0.012
63,5790.11790.12980.1388-0.0119
73,4470.1010.11240.134-0.0114
82,8330.07780.08290.129-0.0051
91,1100.0610.0620.137-0.001
10460.16070.23920.225-0.0785
1160.10950.22730.25-0.1179

Scroll horizontally for all columns.

Soccer (Intl)

CheckpointnMarket BrierModel BrierNaive BrierMarket - Model
01500.11770.24480.23-0.1271
52130.12780.27580.2399-0.148
102030.12270.2760.2354-0.1533
152080.1270.27580.2269-0.1488
201920.13590.2690.2247-0.1331
251950.15850.29180.2295-0.1333
301920.16080.30320.2256-0.1424
351730.16730.29390.2267-0.1266
401890.17090.31230.2228-0.1414
454020.15120.28350.2185-0.1323
501890.21280.33710.2084-0.1243
551920.23260.33610.2189-0.1036
601890.22350.3290.2124-0.1055
651540.26250.38880.2253-0.1263
701520.30420.44270.224-0.1384
751320.24110.40110.2062-0.1601
801270.24070.41220.1906-0.1715
85980.2640.44520.1748-0.1811
90330.22090.32580.1778-0.1048

Scroll horizontally for all columns.

Confounds / notes

  • bucket_move sums ABSOLUTE per-tick moves -> this is churn/activity, not net price travel; back-and-forth noise and correlated consensus books inflate it.
  • Only 4 coarse horizon buckets, so the 0.50 crossing is linearly interpolated.
  • soccer EXCLUDED: all mass in the 6h+ bucket with mean_abs_move 0.0 (timestamp-coverage artifact).
  • nba is bimodal (early motion + a real 0-1h spike, final_hour_share 0.3247) which a single half-life hides -- read alongside the final_hour_movement_share column.
  • Sports whose crossing falls inside the open-ended 6h+ bucket cannot be pinned (reported as '>6h', half_life_hours=null).
  • Measured over the short observation_window of the scraped line-history feed (see observation_window); the large n_move_pairs are dense snapshots inside that window, NOT a season or multi-season history.
  • In-game checkpoints are per-inning (MLB) or per-5-minute-bucket (soccer) Brier on modest n in the late buckets -- e.g. MLB checkpoint 11 has n=18 -- so late-game values above are noisy, not a smooth trend.
  • All results are descriptive Brier and line-movement measurements from the stated windows.

The product measures calibration against the close. The Brier checkpoints show the model and reference values on the same published corpus.

Findings