Odds Generation — point · quarter
Enter the full match's Handicap and Total quotes in Malay and its Moneyline in decimal — margins still embedded in all three. Basketball is not Poisson: shared pace correlates the two teams' scores, so the margin and the total carry different dispersions (σ_M ≈ 11.5 vs σ_T ≈ 18.3 in the NBA) where one Poisson rate would force them equal. The engine (ADR-029):
- strips each bookmaker margin (Power method — all three books are two-way) to fair probabilities;
- back-solves a correlated-Gaussian score grid — the Total fixes μ_T, the Handicap fixes μ_M, and the Moneyline fixes the margin dispersion σ_M (a fixed spread's ML price is pure dispersion information); σ_T stays a league prior and the team correlation ρ falls out derived;
- refines the grid in fixed stages — the plain Gaussian baseline, then the regulation-tie inflation ι (trailing teams play for the tie — the Dixon-Coles analog), then the ML σ fit (toggle in the Moneyline box); full-match markets settle including overtime, so tie cells fold through an OT mini-grid and the settlement margin is never 0;
- derives quarters and halves from the solved match by Brownian √t scaling — variance takes the time share, drift takes calibrated shares (the home edge front-loads into Q1, Q4 scores least) — and prices every market below off the pipeline's last stage.

Each stage re-solves the same fair targets, so the score grid's stage switcher is a true before/after — flip Gaussian / Tie ι / ML σ to see exactly what ι and the Moneyline move.
Unlike goal · regular, the sub-periods here are derived, not separately quoted — that is the point: three full-match quotes generate the whole quarter/half sheet (a period with its own quotes would simply be its own inversion). Markets needing basket order or timing (First/Last Basket) are out of scope for a score grid; see the Markets reference.
↑/↓ steps a field, Shift steps bigger; on a Malay pair the partner moves the opposite way. Quotes are the full match (incl. OT); quarters and halves derive by √t scaling with the share knobs — normalized to 100% on use.
Valid inputs: Malay in [−1, +1] and never 0, decimals above 1, each book carrying margin, σ_T > σ_M (shared pace ⇒ ρ ≥ 0), ι in (0.5, 3.5).
| A=70 | A=75 | A=80 | A=85 | A=90 | A=95 | A=100 | A=105 | A=110 | A=115 | A=120 | A=125 | A=130 | A=135 | A=140 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| H=75 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| H=80 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| H=85 | 0.0 | 0.0 | 0.0 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| H=90 | 0.0 | 0.0 | 0.1 | 0.2 | 0.2 | 0.4 | 0.3 | 0.2 | 0.1 | 0.1 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| H=95 | 0.0 | 0.0 | 0.1 | 0.3 | 0.6 | 0.6 | 0.9 | 0.7 | 0.4 | 0.2 | 0.1 | 0.0 | 0.0 | 0.0 | 0.0 |
| H=100 | 0.0 | 0.1 | 0.2 | 0.4 | 0.9 | 1.4 | 1.4 | 1.6 | 1.1 | 0.6 | 0.3 | 0.1 | 0.0 | 0.0 | 0.0 |
| H=105 | 0.0 | 0.0 | 0.2 | 0.5 | 1.1 | 1.9 | 2.6 | 2.2 | 2.2 | 1.3 | 0.6 | 0.2 | 0.1 | 0.0 | 0.0 |
| H=110 | 0.0 | 0.0 | 0.1 | 0.4 | 1.0 | 2.0 | 3.0 | 3.5 | 2.6 | 2.3 | 1.2 | 0.5 | 0.1 | 0.0 | 0.0 |
| H=115 | 0.0 | 0.0 | 0.1 | 0.3 | 0.7 | 1.6 | 2.7 | 3.5 | 3.7 | 2.5 | 1.8 | 0.8 | 0.3 | 0.1 | 0.0 |
| H=120 | 0.0 | 0.0 | 0.0 | 0.1 | 0.4 | 1.0 | 1.9 | 2.7 | 3.1 | 2.9 | 1.8 | 1.1 | 0.4 | 0.1 | 0.0 |
| H=125 | 0.0 | 0.0 | 0.0 | 0.0 | 0.2 | 0.5 | 1.0 | 1.6 | 2.1 | 2.1 | 1.8 | 1.1 | 0.6 | 0.2 | 0.0 |
| H=130 | 0.0 | 0.0 | 0.0 | 0.0 | 0.1 | 0.2 | 0.4 | 0.8 | 1.1 | 1.2 | 1.0 | 0.9 | 0.5 | 0.2 | 0.0 |
| H=135 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.1 | 0.1 | 0.3 | 0.4 | 0.5 | 0.5 | 0.4 | 0.4 | 0.2 | 0.1 |
| H=140 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.1 | 0.1 | 0.2 | 0.2 | 0.2 | 0.1 | 0.1 | 0.1 |
| H=145 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.1 | 0.1 | 0.1 | 0.0 | 0.0 | 0.0 |
| Outcome | Fair | Dec | Priced | Malay |
|---|---|---|---|---|
| Home | 72.0% | 1.388 | 1.358 | +0.36 |
| Away | 28.0% | 3.575 | 3.282 | -0.44 |
How these numbers are computed
A two-way Malay price converts to decimal ( if , else ), implying with overround ; the Power method finds the exponent deflating the pair to fair . The Moneyline is quoted in decimal, so it skips the Malay conversion but strips identically — basketball has no draw leg to Shin, the ML is a plain two-way book. These fair numbers are the three targets the solver must reproduce.
| Home | Away | |
|---|---|---|
| Malay quote | +0.96 | +0.96 |
| Decimal | 1.9600 | 1.9600 |
| Implied | 0.5102 | 0.5102 |
| Fair | 0.5000 | 0.5000 |
| Fair decimal | 2.0000 | 2.0000 |
| Over | Under | |
|---|---|---|
| Malay quote | +0.95 | +0.95 |
| Decimal | 1.9500 | 1.9500 |
| Implied | 0.5128 | 0.5128 |
| Fair | 0.5000 | 0.5000 |
| Fair decimal | 2.0000 | 2.0000 |
| Home | Away | |
|---|---|---|
| Decimal quote | 1.36 | 3.30 |
| Decimal | 1.3600 | 3.3000 |
| Implied | 0.7353 | 0.3030 |
| Fair | 0.7203 | 0.2797 |
| Fair decimal | 1.3883 | 3.5751 |
Try the strips standalone — Margin — two-way (Power): the same math on any quotes, with the bisection narrated.
Model the two teams' points as a correlated bivariate normal, discretized to integer scores — each cell gets with . Conditioning keeps parity exact ( so total and margin are always odd or even together) — Odd/Even and Last Digit depend on it. Two location knobs match the first two targets:
Those closed forms are only the seeds: full-match quotes settle including overtime, so the solver bisects each knob until the discretized, ι-tilted, OT-folded grid reproduces the fair targets exactly (final: , — regulation-scoped, slightly off the seeds because OT adds points to tied games). Line rules are goal-regular's: a push refunds, fair = ; quarter lines split ½/½.
Poisson has one dial: it forces . Basketball needs two — shared pace correlates the teams' scores, narrowing the margin and widening the total. The Total quote fixed μ_T but says nothing about σ_T (one line cannot identify a dispersion), so σ_T = 18.50 is a league prior knob. The Moneyline is the third anchor — at a fixed spread, the ML price is pure dispersion information (Polson & Stern's “implied volatility”):
The pair (σ_M, σ_T) is a complete reparameterization of the equal-variance bivariate normal — the team correlation and per-team dispersion fall out:
ρ ≈ 0.3–0.5 is the empirical NBA pace band — the model recovers it from quotes alone. σ_T is the one number the three quotes cannot pin; alternate-total or team-total quotes would (ADR-029 O4 — the Methodology-B direction).
A plain Gaussian underprices regulation ties: NBA games end regulation level ≈ 1.5–1.8× more often than the smooth curve predicts (trailing teams foul and shoot threes to force the tie; tied teams hold for the last shot). The fix is goal-regular's diagonal move — multiply every equal-score cell by ι and renormalize:
Full-match markets settle including OT, so the settlement grid folds each tie cell through an overtime mini-grid — the same bivariate machinery scaled to of regulation (, ) with the OT diagonal excluded and renormalized (a double OT — 10.6% of overtimes here — distributes like a single one). The settlement margin is never 0, which also skews totals slightly odd: P(odd) = 51.72% (parity ≡ margin parity). Every stage re-solves the same fair targets on its own grid:
| Stage | μ_M | μ_T | σ_M | reg tie | Δ cover | Δ over | Δ ML |
|---|---|---|---|---|---|---|---|
| Gaussian | 6.4445 | 224.9766 | 11.5000 | 3.0% | 1.8e-8 | 1.8e-8 | — |
| Tie ι | 6.6646 | 224.6705 | 11.5000 | 4.6% | 1.7e-8 | 1.6e-8 | — |
| ML σ | 6.6663 | 224.6662 | 11.4092 | 4.6% | 1.8e-8 | 2.2e-8 | 1.6e-7 |
Flip the grid panel's stages to see what ι moves: the tie row is the OT rate, and markets near the spread feel the redistributed mass. ι is a calibrated league knob (like Dixon-Coles' ρ), spread- dependent in reality — the empirical NBA margin histogram (|margin| 1 depressed, 5–9 elevated) is the next correction of this kind, left as a data-calibrated reweight (ADR-029).
Scoring is empirically a random walk in time, so a period spanning share of the game takes of the variance — dispersion scales by — while the drift takes calibrated shares: the home edge front-loads (≈ ⅔ of it lands in Q1) and Q4 scores least (garbage time beats the foul parade):
| share | Q1 | Q2 | Q3 | Q4 |
|---|---|---|---|---|
| drift w_M | 28.0% | 24.0% | 25.0% | 23.0% |
| total w_T | 25.4% | 25.0% | 25.5% | 24.1% |
| margin drift μ_M·w | 1.87 | 1.60 | 1.67 | 1.53 |
| total mean μ_T·w | 57.1 | 56.2 | 57.3 | 54.1 |
Period grids are regulation segments: no OT fold, and ties are real outcomes — a tied quarter pushes the 2-way moneyline, so its fair price renormalizes the tie away, (Q1 here: tie mass → fair home = ). Pick a quarter or half above to see its grid and markets.
These weights are the calibration surface: fit w from your own results/odds history per league (ADR-029 O1). A period with its own quotes needs none of this — it is its own inversion, exactly like goal-regular's periods.
With the last stage fixed, the period grid is fully determined and every market probability is a sum of its matching cells. Home sums every cell with home > away. A tied period pushes (stake refunded), so the fair two-way is W/(1−R); the full match settles through the OT fold, which leaves no tie mass.
| Outcome | Fair | Priced dec |
|---|---|---|
| Home | 72.0% | 1.358 |
| Away | 28.0% | 3.282 |
Fair probabilities are then priced with the Power ladder — , bisecting until the pair's Malay-points gap hits 0.08 (this run: ). Same margin machinery as goal-regular — nothing basketball-specific here.
targets tC = powerStrip(HCP pair) # fair P(home covers L) — step 1
tO = powerStrip(Total pair) # fair P(over T) — step 1
tW = powerStrip(ML pair) # fair P(home ML); ML stage — step 3
stage ∈ {Gaussian (ι=1), Tie ι, ML σ}: # each stage re-solves all targets
sweep ×2 + polish:
bisect μ_M until P(cover L | grid) = tC # grid = reg ± ι, OT-folded
bisect μ_T until P(over T | grid) = tO
bisect σ_M until P(home ML | grid) = tW # ML stage only
grid: bivariate normal cells on a ±7σ window, diagonal ×ι, renormalize;
tie cells fold through the OT mini-grid (f = 5/48, no OT diagonal)
periods: μ·w share, σ·√v (v = ¼ / quarter) → regulation grid, no ι, no foldEvery residual is monotone in its knob (cover ↑ μ_M, over ↑ μ_T, favourite ML ↓ σ_M), so plain bisection converges — the Δ's in step 4's table are this run's achieved errors. The window keeps each solver evaluation at ~20k cells (adjacent cells share a Φ boundary), and the renormalize absorbs both the window truncation and ι. Grids run 0..229 here; the pmf readers the solver uses are pinned to the grid readers the markets use by the test suite in docs/src/lib/odds/__tests__/basket.test.ts. Decision record: specs/adr/029-odds-generation-latent-parameter-reverse-engineering.md.