Guide
How to Use These Predictions
What the numbers mean, how the model computes them, and how to translate the predicted distribution into an exotic-wager construction. Written for a reader comfortable with first-year probability and rank-based discrete-choice models.
1. The race page, column by column
Each row in the field grid carries seven model-derived values. Here's the provenance of each one.
Pred Fig — predicted BRIS Speed Rating ŷᵢ
A LightGBM regressor fit under Huber loss against 33 per-horse features, trained on ~3,000 (horse, prior race) observations. BRIS Speed Rating is dimensionless on roughly the same scale as Beyer; 100 ≈ top-class allowance/stakes, 90 ≈ solid claiming, 75 ≈ ordinary maiden. Walk-forward 5-fold time-based CV: MAE 5.67 fig points vs. naive baseline of 8.00 (next race ≈ last race).
Win — predicted P(i finishes 1st)
For a race with field 𝓕 = {1, …, N} and predicted strengths si = ŷi, the marginal win probability under a Plackett-Luce model with temperature T is:
P(i wins) = exp(si / T) / Σa∈𝓕 exp(sa / T)
T is the calibration temperature, fit via MLE against reconstructed mini-fields (prior races where 2+ weekend horses competed). For this meet, T̂ = 10.95 fig points. Lower T → sharper distribution; T → ∞ collapses to uniform.
ITM% — predicted P(i finishes top-3)
The marginal in-the-money probability is the sum of three Plackett-Luce marginals:
P(i ∈ top-3) = P(i = 1st) + P(i = 2nd) + P(i = 3rd)
P(i = 2nd) = Σj≠i P(j wins) · softmax(s𝓕\{j} / T)i
P(i = 3rd) = Σj≠i Σk≠{i,j} P(j wins) · P(k wins | j removed) · softmax(s𝓕\{j,k} / T)i
The triple sum has worst-case 𝒪(N³) terms but is O(N²) in practice with one
softmax per removal level — the implementation lives in brisnet/calibrate.py.
Edge — value vs. morning line
Defined as Edge = P̂(ITM) − P̃(ITM) where the implied ITM probability is computed from the BRIS morning-line decimal-to-1 odds:
P̃(win) = 1 / (1 + decimal_odds) P̃(ITM) = min(1, 3 · P̃(win) · α) with α = 0.85
The shrink factor α corrects for the empirical fact that morning-line favorites convert to the show pool at less than 3× their win rate (heavy favorites are more likely to win outright than to merely "show"). Field-wide implied probabilities are then renormalized to remove the linemaker's overround.
Chip color: ▲ if Edge ≥ +5pp, ▼ if Edge ≤ −5pp.
2. The horse page, beyond the numerals
Last-10-races chart
Dual-axis: BRIS Speed Rating (left, blue) and BRIS Speed Par for the prior race's class level (right, purple). The gap between the two is informally a class-relative performance score — a horse running figs above the par for their class is overperforming their level (likely to move up); below par means the opposite. Hover any data point for finish, beaten lengths, and the trip comment.
Why this prediction? (SHAP attributions)
For each upcoming-race row, we compute SHAP values φj(i) via TreeExplainer such that:
ŷi = φ0 + Σj φj(i) where φ0 = E[ŷ] over the training set (the "base value") and φj(i) ∈ ℝ is the contribution of feature j to row i
The "Pushing prediction up" panel shows the top-5 features with positive φj(i); "Pushing prediction down" shows the top-5 with negative. Bar widths are normalized to the maximum |φ| in either set so you can read the relative magnitudes. Values are in fig-point units — a +2.5 contribution means that feature alone raised the prediction by 2.5 fig points.
3. From marginals to joint probabilities
The marginals on the race page (Win, ITM%) are the right inputs for single-horse straight wagers (W/P/S). For exotics — exacta, trifecta, superfecta — you need the joint distribution over ordered finishes. Plackett-Luce gives this in closed form by sequential softmax with the chosen horse removed from the field at each step.
Trifecta joint (the canonical exotic)
The probability of an ordered finish (i, j, k) — 1st, 2nd, 3rd — is:
exp(si/T) exp(sj/T) exp(sk/T)
P(i,j,k) = ────────────── · ──────────────── · ──────────────────────
Σa exp(sa/T) Σa≠i exp(sa/T) Σa≠{i,j} exp(sa/T) Distribution rough magnitudes
In a typical N-horse field with our model, the most likely trifecta combo tends to be:
- N = 8: top combo ≈ 6–10%, top-10 combos cover ≈ 35–45% of the mass
- N = 12: top combo ≈ 3–6%, top-20 combos ≈ 30–40%
- N = 20 (Derby-shape): top combo ≈ 1–2%, top-50 ≈ 25–30%
The right-tail weight matters: even with a 20-horse field, ≈ 70-75% of all combos individually have probability under 0.1%, which is why blanket coverage is wasteful and structured tickets dominate.
4. Constructing exotic wagers
Three structural archetypes, ranked by sophistication. All assume base stake = $1 (substitute $0.50 where the track allows).
a. Boxed trifecta
Take a set B of horses; cover all permutations. Cost is the number of ordered triples drawn without replacement from B:
Cost(box, |B|=N, stake=s) = N · (N−1) · (N−2) · s
| |B| | Combos | $1 cost | $0.50 cost |
|---|---|---|---|
| 3 | 6 | $6 | $3 |
| 4 | 24 | $24 | $12 |
| 5 | 60 | $60 | $30 |
| 6 | 120 | $120 | $60 |
When to use: coverage maximization in chaotic fields when you have moderate confidence in a small group. Drawback: you pay a flat tax independent of which permutation hits, capping the upside on favorite-favorite-favorite combos.
b. Win-key (the pro standard)
One A horse on top; spread underneath. Structure A / B / B (with A ∈ B):
Cost(win-key, |B|, s) = |B| · (|B|−1) · s
(slot 1 = A, slots 2-3 ∈ B \ slot1) Example: A = top-1 by P̂(win), B = top-4 by P̂(ITM) including A. Cost = 4 · 3 · $1 = $12.
When to use: when your top win pick is sharp — empirically when P̂(win) ≥ 25% in an 8-horse field, ≥ 15% in 12+ horse fields. Sharper structure than the box because you're concentrating your stake on the permutations consistent with your top conviction.
c. ABC structured part-wheel
Three tiers with separate logic for each slot. The juice in trifectas comes from longshots in the place/show slots — the payoff scales roughly with the product of the three horses' tote odds, so any horse with positive Edge in those slots is +EV against the house take.
A = { top 1-2 by P̂(win) } ← chalk you trust
B = { next 2-3 by P̂(ITM) } ← solid in-the-money
C = { Edge ≥ 0.08 ∪ ML ≥ 15-1 with ITM ≥ 30% } ← price plays
Ticket structure: A / A∪B / A∪B∪C
Cost = |A| · (|A∪B| − 1) · (|A∪B∪C| − 2) · stake Example for a 10-horse race: |A|=2, |A∪B|=5, |A∪B∪C|=7 → 2 · 4 · 5 = 40 combos, $40 at $1 ($20 at $0.50).
When to use: default exotic strategy for any race where at least one C horse exists. Lower hit rate than a box but substantially higher EV when the C horse hits the board, because you're paid on a tote ticket the public underweights.
Beyond trifecta
- Exacta (1st-2nd in order): Cost(box, N, s) = N(N−1)·s. Use when you have 2-3 horses you'd accept in either slot.
- Superfecta (1st-2nd-3rd-4th): Cost(box, N, s) = N(N−1)(N−2)(N−3)·s. Box of 4 = 24 combos at $0.10 = $2.40. The minimum-stake $0.10 unit makes superfecta boxes feasible even in Derby-size fields. Required when the model says the 4th-place horse is a lock for the slot.
- Daily Double / Pick 3 / Pick 4 / Pick 5:
multi-race horizontals. The optimal coverage problem is to max the joint
probability mass per dollar — let
pr(i) = our predicted probability for horse i in race r.
For a Pick 4 covering sets Sr per race:
P(hit) ≈ Πr=1..4 Σi ∈ Sr pr(i) Cost = Πr=1..4 |Sr| · stake
This is just the product structure of the four independent (under model) race outcomes. The right strategy is greedy: in each race add horses to Sr until the marginal probability gain divided by the marginal cost increase falls below your hurdle rate.
5. Bankroll management — fractional Kelly
For a single-leg pari-mutuel wager with our predicted probability p̂ and net decimal odds b (i.e. payoff per $1 staked, post-takeout), the fraction of bankroll to wager that maximizes E[log W] is:
f* = (b · p̂ − (1 − p̂)) / b (Kelly criterion)
Full Kelly is variance-reckless and assumes the probability is exactly right. Since our predicted p̂ has finite-sample error and the pari-mutuel pool changes the effective odds at post time, halving the Kelly fraction (f → f/2) preserves long-run growth at a fraction of the variance:
fused = (1/2) · f* = (b · p̂ − (1 − p̂)) / (2b) Approximate growth rate g(f) ≈ p̂ · log(1 + bf) + (1−p̂) · log(1 − f) For f ≪ 1: g(f) ≈ f · (b·p̂ − (1−p̂)) − (1/2) · f² · (1 + b² · p̂ · (1−p̂))
For exotic tickets, the same logic applies but b is the full payoff multiple and p̂ is the joint probability of the specific permutation hitting. In practice, exotic Kelly fractions are minute (0.01–0.5% of bankroll) because p̂ for a single permutation is small.
None of this is wagering advice — it's the underlying math, presented for reference. Track takeout (typically 15–25% on exotic pools at North American tracks) is built into b post-fact, but is large enough that the average bettor's expected value is negative. Edge requires sharper-than-market probability estimates.
6. Failure modes & limitations
- Predictions are baked at build time. The site does not reflect live tote prices, late scratches (after the daily BRIS file is downloaded), surface changes, or jockey replacements registered after the morning's PP file was published.
- First-time and second-time starters are structurally undermodeled. The pedigree-rating features (BRIS Dirt/Mud/Turf/Distance) are the only signal available; expect noisier predictions for these horses, particularly in maiden races where the field is mostly new shooters.
- No knowledge of pace shape interaction. The Quirin Speed Points and run-style one-hot are per-horse, but the model has no explicit interaction between them and the field's overall run-style mix. A lone speed horse and a contested-pace horse with the same Quirin score get the same prediction.
- Trip notes ignored as features. The
pp_commentfield ("Brk in;4w 3/8;tired", "Pull1st;cue5/16;yld") encodes trouble lines that depress speed figs in ways the figure alone can't recover. Adding keyword-flag features for `bumped`, `wide`, `checked`, `eased`, etc. would tighten the regression by an estimated 0.3-0.5 fig points of MAE. - Walk-forward CV uses only the embedded last-10 races as labeled data. A meaningful upgrade would be to scrape Equibase historical charts for full-field prior race reconstructions, unlocking ~10,000+ labeled (race, horse) observations and enabling a true finishing-position ranking model rather than a speed-fig regression with Plackett-Luce conversion.