Odds Generation
Turn a handful of vendor market quotes into fair odds for a whole scope of markets. You give the engine a Handicap and a Total quote (Malay) plus, optionally, the 1X2 (decimal) — the bookmaker's margin still in each; it strips the margins, back-solves the latent goal rates through a fixed stage pipeline (Poisson baseline, then Dixon-Coles ρ, then a draw lift φ when the 1X2 is supplied), and re-prices every market that is a pure function of the final score — all consistent with the quotes you entered.
This section is organized by score_unit · period_type. Each scope is a
self-contained model: the markets, the recovered rate, and the pricing all live
within that one scope — nothing is split or assumed across periods.
Scopes
| Scope | Status |
|---|---|
| goal · regular | Available — Poisson + Dixon-Coles |
| point · quarter (basketball) | Available — correlated Gaussian grid + OT fold (ADR-029) |
| run · inning (baseball) | Available — zero-inflated-geometric innings + endgame rules (ADR-029) |
| run · inning (cricket) | Available — ball→over→innings compound + day-form mixing + chase truncation (ADR-029) |
| game · set + set · set (tennis) | Available — nested-race DP: serve probs + serve-sum prior + τ form shock (ADR-030) |
| point · game + game · game (badminton) | Available — rally race: r + γ restoring force + κ_M match shock (ADR-030) |
More scopes reuse the same pipeline — strip margins, back-solve latent parameters, re-price the sheet — but the latent distribution is per-scope: low-count units (goals, corners) are Poisson-family; basketball points are a correlated Gaussian score grid (shared pace correlates the teams, so Poisson's one-parameter variance is structurally wrong there — see ADR-029); tennis and badminton scores are nested best-of races with win-by-2 barriers — bimodal totals and parity combs (a set never totals 11 games) that no count model can express, so one race model per sport prices both of its scopes (ADR-030).