๐ŸŽฏ ๐Ÿ•

Greyhound prediction pipeline

One learning-to-rank model turns each race's field into calibrated win probabilities, then a devig โ†’ edge โ†’ Kelly chain converts those probabilities plus the live market into staked value bets. The stages below run end to end for every priced race on the board.

Objective
rank:ndcg
NDCG@1
0.3478
Features
102

EXGBoost :rank_ndcg ranker

GH_rank_ndcg

A learning-to-rank booster trained with the rank:ndcg objective. It scores every runner in a race and is optimised so the true winner ranks first (NDCG@1). Raw scores are softmax-normalised within each race into win probabilities summing to 1.

Feature families

features

Per-(race, runner) features derived point-in-time from the historical-starts table: recent-form (last-N finishes, days-since-run), career (starts / win & place strike-rate), and physical/box (barrier, distance, weight, grade). ELO is the dominant signal โ€” a per-runner strength rating updated after every start.

Devig โ†’ edge / EV

signals

Market decimal odds are de-vigged (power / Shin) into no-vig fair probabilities โ€” the benchmark. Edge = model_prob ร— decimal_odds โˆ’ 1; EV mirrors it for a 1-unit back bet. A runner is a candidate only with positive edge.

Fractional Kelly staking

kelly

Positive-edge runners are staked by fractional Kelly with slippage + CI-confidence shrinkage, then capped for per-race exposure. Selection = positive edge AND positive Kelly stake, persisted as racing_bets.

Coming later: a fitted Plackett-Luce temperature + isotonic win-calibration layer, a Benter market/model blend turned on by default, and CLV against closing TAB prices.