Model documentation & methodology
How the model works
We compute probabilities using a Dixon-Coles bivariate Poisson model. We publish every expected-goals figure, source rate, and data quality check behind every evaluation.
Recency-weighted goal rates
Every match evaluation begins with team-level scoring and conceding rates (λ for home expected goals, μ for away expected goals).
Early in a season, single-match samples are volatile. We use a recency-weighted blend against prior season data:
As the current season progresses, the weight automatically shifts from prior season stats to current season matches.
The Dixon-Coles Scoreline Engine
Standard independent Poisson models underestimate low-scoring outcomes (such as 0–0 and 1–0 draws/wins). The Dixon-Coles model introduces a low-score correlation adjustment parameters (τ) to solve this structural bias.
A single Dixon-Coles solver pass generates a 10×10 scoreline probability matrix for the fixture. From this single matrix, all supported market probabilities are derived:
- 1X2: Sum of Home Win, Draw, and Away Win cells.
- Over/Under (1.5, 2.5, 3.5): Sum of scorelines where combined goals exceed or fall below the line.
- Both Teams To Score (BTTS): Sum of scorelines where both home and away goals > 0.
- Double Chance: Combined 1X, X2, 12 probabilities.
Data Quality Audit & Component Rules
Before any match is assigned a signal tier, three underlying datasets are audited:
If any component falls short of minimum match thresholds, the fixture is flagged as Blocking or Not enough data rather than outputting misleading estimates.
Empirical Calibration & Per-Market Confidence Floors
We do not group all betting markets into single shared buckets. Because Over 1.5 Goals has a high natural occurrence (~77%) while Draw has a low natural occurrence (~25%), pooling markets distorts decile bands.
Below is our out-of-sample calibration audit evaluated strictly PER MARKET across 727 completed top-flight fixtures (2026 season). Any decile band with fewer than 50 fixtures is flagged as Insufficient sample (<50) rather than displaying a percentage a reader should not trust:
| Market | Predicted Band | Sample (N) | Model Mean | Observed Hit Rate | Delta | Headline Status |
|---|---|---|---|---|---|---|
| Over/Under 2.5 | 50–60% | 498 | 53.7% | 50.8% (253/498) | -2.9% | Suppressed (<60%) |
| Over/Under 2.5 | 60–70% | 192 | 63.5% | 66.7% (128/192) | +3.2% | Eligible (≥60% Floor) |
| Over/Under 2.5 | 70–80% | 32 | 73.1% | 75.0% (24/32) | +1.9% | Small sample (N=32) |
| Both Teams To Score | 50–60% | 480 | 54.4% | 52.9% (254/480) | -1.4% | Suppressed (<60%) |
| Both Teams To Score | 60–70% | 224 | 63.7% | 62.9% (141/224) | -0.8% | Eligible (≥60% Floor) |
| Over/Under 1.5 | 60–70% | 46 | 67.3% | 84.8% (39/46) | +17.5% | Suppressed (High Baseline Noise · N=46) |
| Over/Under 1.5 | 70–80% | 408 | 75.3% | 77.2% (315/408) | +1.9% | Eligible (≥70% Floor) |
| 1X2 (Home Win) | 50–60% | 91 | 53.5% | 56.0% (51/91) | +2.5% | Suppressed (<60%) |
| 1X2 (Home Win) | 60–70% | 24 | 64.2% | 45.8% (11/24) | -18.3% | Display-Only Excluded (N=24) |
| Over/Under 3.5 | 60–70% | 231 | 64.9% | 62.3% (144/231) | -2.5% | Display-Only Excluded |
| Over/Under 3.5 | 70–80% | 332 | 73.3% | 66.9% (222/332) | -6.5% | Display-Only Excluded |
| Team Totals 1.5 | 60–70% | 546 | 65.0% | 59.7% (326/546) | -5.3% | Display-Only Excluded |
| Team Totals 1.5 | 70–80% | 134 | 73.7% | 67.9% (91/134) | -5.8% | Display-Only Excluded |
Our Evidence-Based Selection Rules
- 1. Small Sample Protection (N < 50 Threshold): Any decile band with fewer than 50 recorded match outcomes is marked as Insufficient sample (<50). We never present un-statistically significant small-sample frequencies (like 4/5 or 4/4) as evidence.
- 2. 1X2 Moved to Display-Only: Top-flight match-winner predictions above 60% are rare (N=24 in 60-70%) and suffer from high draw/upset variance (-18.3% delta). 1X2 is strictly display-only on
/fixture/[id]until sample volume builds. - 3. Over/Under 3.5 & Team Totals Exclusion: Over/Under 3.5 displays a -6.5% overconfidence bias in the 70–80% band, while Team Totals runs -5.3% to -5.8% overconfident and lost to closing lines in backtests. Both are reserved for display-only.
- 4. Double Chance Composite Exclusion: Double Chance (1X, X2, 12) is a derivative composite of 1X2 with an inherently high base rate (~70–80%). It is kept display-only on detail views to avoid diluting primary single-outcome picks with derivative combinations.
- 5. Core Primary Market Reliability: Core primary markets (Over/Under 2.5 and BTTS) calibrate closely within -0.8% to +3.2% of predicted probabilities in the 60–70% band with large sample volume (N=192 and N=224).
In addition to our 727-fixture out-of-sample backtest, all generated predictions are stored in our Postgres database (predictions table). When live post-fixture settlements reach N ≥ 50 settled match predictions per decile band, the published calibration table dynamically updates to reflect live real-world performance from our public ledger.
What we don’t claim
No market in our model has passed Gate 2 calibration. We do not beat the bookmaker’s closing line on any market at any confidence level we can demonstrate.
Grade labels (Strong signal, Mixed signal, Contradictory signal) reflect statistical consistency across inputs — not an assertion of financial edge or guaranteed winning picks.
Every published selection is logged to our immutable public ledger before kickoff and settled automatically when results complete.