Odds Generation — run · inning (baseball)
Enter the full game's Moneyline in decimal and its Total and Run Line quotes in Malay — margins still embedded. Baseball runs are counts but not Poisson: an inning is scoreless ~72% of the time yet carries a fat "big-inning" tail, so a team's game variance (~10) is more than double its mean. The engine (ADR-029):
- strips each bookmaker margin (Power method — all three books are two-way);
- models each inning as a zero-inflated geometric (mean μ/9, tail q) and back-solves (μ_H, μ_A) by nested bisection — the Total fixes the run environment, the Moneyline fixes the split;
- applies the sport's endgame rules — the corrections here are not a statistical tilt but exact stopping rules: the bottom of the 9th is skipped when home already leads, a walk-off stops play the moment the lead is taken (home wins compress toward +1), and extra innings replay until the tie breaks — then re-solves;
- optionally fits the big-inning tail q to the Run Line (toggle in the RL box) — the RL is pure dispersion information at a fixed Moneyline, exactly as the ML pins basketball's σ_M;
- derives First 5/3/7 innings and Inning 1 markets by convolving the same per-inning distributions — the inning is the period unit, no scaling knobs.

Each stage re-solves the same fair targets, so the score grid's stage switcher is a true before/after — flip Convolution / Endgame / RL q and watch the home-win-by-1 stripe fatten.
↑/↓ steps a field, Shift steps bigger; Malay pairs step their partner the opposite way. Quotes are the full game (extra innings included); First-N periods derive by convolving the same per-inning distributions.
Valid inputs: decimals above 1, Malay in [−1, +1] non-zero, each book carrying margin, q in (0.15, 0.8). The solve walks all 18 half-innings — allow it a second.
| A=0 | A=1 | A=2 | A=3 | A=4 | A=5 | A=6 | A=7 | A=8 | A=9 | A=10 | A=11 | A=12 | A=13 | A=14 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| H=0 | 0.0 | 1.8 | 1.6 | 1.4 | 1.2 | 1.0 | 0.8 | 0.7 | 0.5 | 0.4 | 0.4 | 0.3 | 0.2 | 0.2 | 0.1 |
| H=1 | 3.9 | 0.0 | 1.3 | 1.1 | 0.9 | 0.8 | 0.6 | 0.5 | 0.4 | 0.3 | 0.3 | 0.2 | 0.2 | 0.1 | 0.1 |
| H=2 | 2.4 | 2.3 | 0.0 | 1.1 | 1.0 | 0.8 | 0.7 | 0.5 | 0.4 | 0.4 | 0.3 | 0.2 | 0.2 | 0.1 | 0.1 |
| H=3 | 2.1 | 1.3 | 2.2 | 0.0 | 1.0 | 0.8 | 0.7 | 0.5 | 0.4 | 0.3 | 0.3 | 0.2 | 0.2 | 0.1 | 0.1 |
| H=4 | 1.9 | 1.1 | 1.1 | 1.8 | 0.0 | 0.8 | 0.6 | 0.5 | 0.4 | 0.3 | 0.3 | 0.2 | 0.2 | 0.1 | 0.1 |
| H=5 | 1.6 | 1.0 | 0.9 | 0.9 | 1.5 | 0.0 | 0.6 | 0.5 | 0.4 | 0.3 | 0.2 | 0.2 | 0.1 | 0.1 | 0.1 |
| H=6 | 1.4 | 0.8 | 0.8 | 0.7 | 0.7 | 1.2 | 0.0 | 0.4 | 0.4 | 0.3 | 0.2 | 0.2 | 0.1 | 0.1 | 0.1 |
| H=7 | 1.2 | 0.7 | 0.6 | 0.6 | 0.5 | 0.5 | 0.9 | 0.0 | 0.3 | 0.3 | 0.2 | 0.2 | 0.1 | 0.1 | 0.1 |
| H=8 | 1.0 | 0.6 | 0.5 | 0.5 | 0.4 | 0.4 | 0.4 | 0.6 | 0.0 | 0.2 | 0.2 | 0.1 | 0.1 | 0.1 | 0.1 |
| H=9 | 0.8 | 0.5 | 0.4 | 0.4 | 0.3 | 0.3 | 0.3 | 0.2 | 0.4 | 0.0 | 0.2 | 0.1 | 0.1 | 0.1 | 0.0 |
| H=10 | 0.7 | 0.4 | 0.4 | 0.3 | 0.3 | 0.2 | 0.2 | 0.2 | 0.2 | 0.3 | 0.0 | 0.1 | 0.1 | 0.1 | 0.0 |
| H=11 | 0.5 | 0.3 | 0.3 | 0.3 | 0.2 | 0.2 | 0.2 | 0.1 | 0.1 | 0.1 | 0.2 | 0.0 | 0.1 | 0.0 | 0.0 |
| H=12 | 0.4 | 0.3 | 0.2 | 0.2 | 0.2 | 0.2 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.0 | 0.0 | 0.0 |
| H=13 | 0.3 | 0.2 | 0.2 | 0.2 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.0 | 0.0 | 0.1 | 0.0 | 0.0 |
| H=14 | 0.3 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.0 | 0.0 | 0.0 | 0.0 | 0.1 | 0.0 |
| Outcome | Fair | Dec | Priced | Malay |
|---|---|---|---|---|
| Home | 58.7% | 1.703 | 1.667 | +0.67 |
| Away | 41.3% | 2.423 | 2.339 | -0.75 |
How these numbers are computed
| Home | Away | |
|---|---|---|
| Decimal quote | 1.65 | 2.30 |
| Decimal | 1.6500 | 2.3000 |
| Implied | 0.6061 | 0.4348 |
| Fair | 0.5873 | 0.4127 |
| Fair decimal | 1.7026 | 2.4233 |
| Over | Under | |
|---|---|---|
| Malay quote | +0.90 | +0.92 |
| Decimal | 1.9000 | 1.9200 |
| Implied | 0.5263 | 0.5208 |
| Fair | 0.5028 | 0.4972 |
| Fair decimal | 1.9888 | 2.0113 |
| Home | Away | |
|---|---|---|
| Malay quote | -0.80 | +0.72 |
| Decimal | 2.2500 | 1.7200 |
| Implied | 0.4444 | 0.5814 |
| Fair | 0.4307 | 0.5693 |
| Fair decimal | 2.3218 | 1.7565 |
Standalone strips: Margin — two-way (Power).
Runs are not Poisson: an inning is scoreless ≈ 72% of the time yet carries a fat “big inning” tail, so a team's game variance (≈ 10) is more than double its mean (≈ 4.6). Each inning draws
— the mean per inning carries the team rate and the tail is the big-inning knob (this run: home , q = 0.667). A team's nine innings convolve into its runs distribution, and the two teams multiply into the score grid. The Total is the size and the Moneyline is the split — the same nested bisection as goal-regular recovers so both fair targets hold on the settlement grid.
Basketball needed a tie-inflation ι; baseball's corrections are deterministic rules, applied on the inning walk: the bottom of the 9th is skipped when home already leads (49.6% here — the home total is truncated); a walk-off stops play the moment home takes the lead, compressing home wins toward +1 (margin mix {1: 75%, 2: 14%, 3: 6%, 4: 5%}); extra innings (8.6%) replay until the tie breaks, at 2.00× the inning rate (the ghost-runner era). Every stage re-solves the same fair targets:
| Stage | μ_H | μ_A | q | skip-9 | walk-off | extras | Δ ML | Δ total | Δ RL |
|---|---|---|---|---|---|---|---|---|---|
| Convolution | 4.952 | 4.108 | 0.460 | 0.0% | 0.0% | 0.0% | 8.9e-9 | 1.1e-8 | 1.2e-3 |
| Endgame | 4.948 | 4.091 | 0.460 | 48.0% | 10.8% | 9.7% | 6.1e-9 | 1.9e-9 | 4.2e-2 |
| RL q | 5.609 | 4.382 | 0.667 | 49.6% | 9.2% | 8.6% | 5.0e-9 | 5.5e-9 | 1.2e-6 |
The RL stage bisects q until the grid reproduces the stripped Run Line — the RL is pure dispersion information at a fixed ML, exactly as the ML pins basketball’s σ_M. Note μ's are hypothetical full-nine rates: the settled total mean sits below them because skipped bottom-9s and walk-offs remove runs.
Baseball's period model needs no scaling knobs: the inning is the unit. First-5 markets convolve the same per-inning distributions five times; ties are real outcomes there, so the F5 moneyline pushes on a tie (R = 18.2% here, fair home = = 57.68%). The endgame rules never touch innings 1–8, so first-N grids are rule-free by construction. Inning weights (starters vs bullpen, top of the order in inning 1) are a calibration refinement — ADR-029 O1.
Home sums cells with h > a. Full game: the endgame construction leaves no tie mass. First-N periods: a tie pushes, fair = W/(1−R). Fair groups are re-margined exactly as in goal-regular (Power ladder two-way, Shin multi-way).
targets tW = powerStrip(ML pair) tO = powerStrip(Total pair) tR = powerStrip(RL pair)
stage ∈ {Convolution, Endgame, RL q}: # each re-solves the same targets
bisect μ_total (size) until P(over T | grid) = tO # outer — goal-regular's solveLambdas
bisect μ_H (split) until P(home ML | grid) = tW # inner
RL stage: bisect q until P(home covers | grid) = tR
grid: per-inning ZIG(m = μ/9, q) → innings 1–8 convolve → top 9 → bottom 9
skipped if home leads · walk-off stops play (margin mix 1–4) · extras ×2.00
periods: first-N convolutions of the same inning pmfs (no endgame rules)Grid runs 0..34 runs a side (tail mass clamps into the last cell). Engine + invariants: docs/src/lib/odds/baseball.ts, __tests__/baseball.test.ts; decision record ADR-029.