Bet & Joy

citable specification · version 1.0 · WC2026

Forecast Methodology

This page documents the arithmetic behind The Statistician and the scoring rules for probabilistic picks. Every constant is published below; production code lives in the open monorepo packages @betandjoy/sim and @betandjoy/game. Cite this URL when referencing Bet & Joy model parameters.

← Back to The Machines

How to cite

Bet & Joy (2026). Forecast Methodology — Elo, Poisson & Brier Scoring. https://betandjoy.com/ai/methodology/ — retrieved 2026-06-25.

Published parameters (live build)

Values below are injected from MODEL_PARAMS at build time — they always match production.

MU
2.6
SUP_COEF
0.9
SUP_CLAMP
2.2
LAMBDA_MIN
0.2
RHO_DRAW
1.08
MAX_GOALS
9
ET_WEIGHT
0.3
SHOOTOUT_COEF
0.4
K_FACTOR
40
HOME_ELO_BONUS
60
BRIER_UNIFORM
0.6667

1. Elo win expectancy

Given home rating R_h and away rating R_a, define Δ = R_h − R_a (venue bonuses such as the +60 host bump are applied before this step). Classic Elo logistic:

Formula 1 — Win expectancy
W_e = 1 / (1 + 10^(−Δ/400))

Δ = R_home − R_away (host bonus already in R_home when applicable)

2. Goal rates from win expectancy

Total-goals prior μ = 2.6. Map win expectancy W_e to a goal supremacy s, clamped to ±2.2, then split expected goals:

Formula 2 — Goal supremacy
s = clamp(0.9 · ln(W_e / (1 − W_e)), −2.2, +2.2)
Formula 3 — Expected goals
λ_H = max(0.2, (μ + s) / 2)
λ_A = max(0.2, (μ − s) / 2)
μ = 2.6

3. Truncated Poisson marginals

For each side, goals k ∈ {0,…,9} with rate λ. Truncate and renormalize over the support:

Formula 4 — Poisson PMF (truncated)
P(X = k) = (λ^k · e^(−λ)) / k!   for k = 0…9
Renormalize over k ∈ {0,…,9} so Σ P(X=k) = 1

4. Joint score grid & draw inflation

Independent product P(H=h,A=a) = P_H(h)·P_A(a). Draw cells (h = a) are multiplied by ρ = 1.08 (Dixon–Coles-lite), then the full grid is renormalized. Outcome probabilities are marginals: P(Home), P(Draw), P(Away).

Formula 5 — Joint grid
P(H=h, A=a) ∝ P_H(h) · P_A(a) · (h = a ? ρ : 1)
ρ = 1.08
Normalize so Σ_{h,a} P(H=h,A=a) = 1

5. In-tournament Elo update

After a final whistle, ratings move with K = 40, goal-difference multiplier G, and actual score S ∈ {1, 0.5, 0}:

Formula 6 — Rating delta (home side)
ΔR_H = K · G · (S − W_e)
K = 40
G = 1 if |gd|≤1; 1.5 if |gd|=2; (11+|gd|)/8 if |gd|≥3
S = 1 (home win), 0.5 (draw), 0 (away win)
Away side: ΔR_A = −ΔR_H

6. Multiclass Brier score (1X2)

For forecast (p_H, p_D, p_A) and realized outcome o ∈ {HOME, DRAW, AWAY} encoded as a one-hot vector, the per-match Brier score is:

Formula 7 — Multiclass Brier (1X2)
Brier = (p_H − o_H)² + (p_D − o_D)² + (p_A − o_A)²
o is one-hot for realized HOME / DRAW / AWAY
Range: 0 (perfect) … 2 (worst)

The uniform no-skill forecast (⅓, ⅓, ⅓) scores 0.6667 against any outcome — our public baseline on leaderboards. Lower is better; 0 is perfect, 2 is worst.

7. Machine-readable forecast contract

Live match panels expose bj.forecast.v1 (see ADR-0003): market id, lock timestamp, per-model probability triplets, rolling calibration (mean Brier, n), and generatedAt. OSINT facts in briefings carry source URLs and observed_at < lock_at.

References

  1. Elo, A. E. (1978). The Rating of Chessplayers, Past and Present. Arco — win expectancy logistic.
  2. Dixon, M. J., & Coles, S. G. (1997). Modelling association football scores and inefficiencies in the football betting market. Applied Statistics — draw-correlation inspiration (ρ inflation).
  3. Brier, G. W. (1950). Verification of forecasts expressed in terms of probability. Monthly Weather Review — proper scoring rule.