Novel Line Half Life

Line Half-LifeLHL
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.
Measured over 2026-06-18 to 2026-07-17 (30 days of scraped line history, 175 daily files) -- a short window, not a season. The move-pair counts are dense snapshots inside it.
Per sport, the number of hours before tip by which half of the pre-game absolute line motion is complete.
bucket_move=n*mean_abs_move per horizon bucket; G(h)=cum far->near / total; half_life = h where G(h)=0.50 (interpolated).
| sport | half life hours | crossing in open bucket | half life label | final hour movement share | total abs move | cumulative fraction by boundary h / 6 / 0 | cumulative fraction by boundary h / 3 / 0 | cumulative fraction by boundary h / 1 / 0 | cumulative fraction by boundary h / 0 / 0 | n move pairs | observed |
|---|---|---|---|---|---|---|---|---|---|---|---|
| soccer_intl | 2.7461 | no | 2.75 | 0.261 | 49.3499 | 0.3212 | 0.4656 | 0.7365 | 1 | 164,072 | observed 2026-06-19 to 2026-07-17 (29 days, 29 daily files) |
| mlb | 3.6709 | no | 3.67 | 0.1813 | 168.4833 | 0.3356 | 0.5474 | 0.8143 | 1 | 1,307,128 | observed 2026-06-18 to 2026-07-17 (30 days, 30 daily files) |
| nba | 4.7567 | no | 4.76 | 0.3247 | 23.2847 | 0.4305 | 0.5982 | 0.6794 | 1 | 182,054 | observed 2026-06-18 to 2026-07-17 (30 days, 30 daily files) |
| tennis | — | yes | >6.0 | 0.107 | 83.1639 | 0.5426 | 0.7314 | 0.8902 | 1 | 809,986 | observed 2026-07-03 to 2026-07-17 (15 days, 15 daily files) |
| wnba | — | yes | >6.0 | 0.1176 | 80.6541 | 0.6441 | 0.7653 | 0.8827 | 1 | 333,540 | observed 2026-07-04 to 2026-07-17 (14 days, 14 daily files) |
We searched for prior work before claiming anything. Here is what exists:
Line-movement timing (early-sharp vs late-injury/public money) is discussed qualitatively everywhere (Boyd's Bets opening-vs-closing; PicksOffice; GamingToday); price-impact half-life is a securities-microstructure staple (Kyle 1985; Amihud 2002). The underlying line-movement concept is NOT new; only the single per-sport half-life constant is the fresh packaging.
- 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.
- kbo — only 0 pregame move pairs (< MIN_MOVES=20)
- npb — only 0 pregame move pairs (< MIN_MOVES=20)
- soccer — timestamp-coverage artifact (all mass in 6h+, mean_abs_move 0.0)