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.
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:
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:
s = clamp(0.9 · ln(W_e / (1 − W_e)), −2.2, +2.2)
λ_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:
P(X = k) = (λ^k · e^(−λ)) / k! for k = 0…9
Renormalize over k ∈ {0,…,9} so Σ P(X=k) = 14. 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).
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) = 15. 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}:
Δ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:
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
- Elo, A. E. (1978). The Rating of Chessplayers, Past and Present. Arco — win expectancy logistic.
- Dixon, M. J., & Coles, S. G. (1997). Modelling association football scores and inefficiencies in the football betting market. Applied Statistics — draw-correlation inspiration (ρ inflation).
- Brier, G. W. (1950). Verification of forecasts expressed in terms of probability. Monthly Weather Review — proper scoring rule.