⚽ League Average Goals
Advanced — Select League or Override
Using defaults: Home 1.50 | Away 1.20 (toggle Advanced to change)
📋 Full Match — Team Statistics
| Team | Games Played | Goals Scored | Goals Conceded |
|---|---|---|---|
Recent Form [Last 5 Matches · Points / Goal-Based Index]
| Team | ⚽ GF L5 | 🥅 GA L5 | 🏆 PTS L5 | Form | State |
|---|---|---|---|---|---|
| HOME | — |
|
|||
| AWAY | — |
|
ℹ️ Form = tanh((Pts−7.5)/5) + tanh(GD/6) · FormMult = 1 + 0.15×Form · Range: 0.70× → 1.30× on λ
Calculating...
Enter team data on the Inputs tab and press Calculate.
Enter team data on the Inputs tab and press Calculate.
Calculate predictions first, then enter bookmaker odds to find value bets.
📐 Methodology & FAQ
What model does ScoreMatrix use?
ScoreMatrix uses an adaptive combination of two models:
Dixon-Coles (DC) — the foundation. Models each team's goals as an independent Poisson process, then applies a τ (tau) correction to the four low-score cells (0–0, 1–0, 0–1, 1–1) which plain Poisson systematically underestimates.
Bivariate Poisson — an extension that adds a covariance term ρ (rho) to model the positive correlation between both teams' scoring. Open, high-scoring games tend to produce goals for both sides — Bivariate Poisson captures this structural dependency that independent Poisson misses.
Both models are blended adaptively: ρ and τ are calibrated together using league GPG and matches played via getCorrelationParams(leagueGPG, minMP). The top-right badge always shows the live values.
Dixon-Coles (DC) — the foundation. Models each team's goals as an independent Poisson process, then applies a τ (tau) correction to the four low-score cells (0–0, 1–0, 0–1, 1–1) which plain Poisson systematically underestimates.
Bivariate Poisson — an extension that adds a covariance term ρ (rho) to model the positive correlation between both teams' scoring. Open, high-scoring games tend to produce goals for both sides — Bivariate Poisson captures this structural dependency that independent Poisson misses.
Both models are blended adaptively: ρ and τ are calibrated together using league GPG and matches played via getCorrelationParams(leagueGPG, minMP). The top-right badge always shows the live values.
What is Bivariate Poisson and why does it matter?
Standard Poisson assumes the two teams' goal tallies are independent — Arsenal scoring has no bearing on Chelsea's goals. In reality, open games where one team scores often allow the other to score too (high-scoring leagues, attacking teams, tactical contexts).
Bivariate Poisson adds a covariance parameter ρ (rho):
P(h,a) = Σk [ Poisson(k,λ₃) × Poisson(h−k,λ₁) × Poisson(a−k,λ₂) ]
where λ₃ = ρ√(λH·λA) captures shared scoring momentum.
Effect on outputs: Bivariate raises BTTS Yes probability slightly, raises scorelines like 2–2 and 3–2, and marginally lowers clean-sheet probabilities — all in the correct direction for open attacking matches.
When it activates: ρ scales in smoothly from game 1 using the league GPG context. High-scoring leagues (Bundesliga, Eredivisie) get a lower ρ base since goals are already baked into the lambdas; low-scoring leagues (Serie A) get a higher ρ base to capture their tighter score correlation patterns.
Bivariate Poisson adds a covariance parameter ρ (rho):
P(h,a) = Σk [ Poisson(k,λ₃) × Poisson(h−k,λ₁) × Poisson(a−k,λ₂) ]
where λ₃ = ρ√(λH·λA) captures shared scoring momentum.
Effect on outputs: Bivariate raises BTTS Yes probability slightly, raises scorelines like 2–2 and 3–2, and marginally lowers clean-sheet probabilities — all in the correct direction for open attacking matches.
When it activates: ρ scales in smoothly from game 1 using the league GPG context. High-scoring leagues (Bundesliga, Eredivisie) get a lower ρ base since goals are already baked into the lambdas; low-scoring leagues (Serie A) get a higher ρ base to capture their tighter score correlation patterns.
How are λ (expected goals) calculated?
Attack Rating = Goals Scored/MP ÷ League Avg. Defence Rating = Goals Conceded/MP ÷ opponent's league avg (cross-division). λH = AttH × DefA × lgH. Home/away asymmetry is captured purely by lgH vs lgA.
What is the Dixon-Coles τ (tau) correction?
The τ correction adjusts the four low-score cells (0–0, 1–0, 0–1, 1–1) which independent Poisson models systematically underestimate. τ=0.13 is the default — a higher value gives more weight to low-scoring outcomes. τ is always active regardless of which model mode is running.
What is the Elo adjustment and where do I get Elo ratings?
Elo ratings measure team strength on a single numerical scale. The formula is:
eloFactor = 10^((HomeElo − AwayElo) / 400)
Capped at ±20% effect on lambdas. A 200-point gap (mid-table vs top-4) gives approximately ×1.12 / ×0.89.
Sources: club-elo.com (European clubs) · eloratings.net (international) · FIFA Ranking · Leave blank to skip.
eloFactor = 10^((HomeElo − AwayElo) / 400)
Capped at ±20% effect on lambdas. A 200-point gap (mid-table vs top-4) gives approximately ×1.12 / ×0.89.
Sources: club-elo.com (European clubs) · eloratings.net (international) · FIFA Ranking · Leave blank to skip.
What is recency weighting?
When you enter Last 5 GF/GA in the Recent Form section, ScoreMatrix blends recent and season rates:
adjRate = 70% × recent(per game) + 30% × season(per game)
The blended rate then feeds into Bayesian shrinkage. If no recent stats are entered, season stats are used — no change from before.
adjRate = 70% × recent(per game) + 30% × season(per game)
The blended rate then feeds into Bayesian shrinkage. If no recent stats are entered, season stats are used — no change from before.
What statistical refinements does ScoreMatrix v2.2 use?
ScoreMatrix applies five statistical refinements beyond the base Dixon-Coles model:
1. Bayesian Shrinkage — Attack and defence ratings are shrunk toward the league average using an 8-game prior. A team with 4 games and 12 goals is rated closer to 2.0 goals/game (not 3.0) — preventing extreme early-season overreaction.
2. League-average fallback — If inputs produce an invalid lambda, the model falls back to lgH/lgA (league average) rather than 0.5, giving a sensible neutral estimate.
3. Continuous form multiplier — The tanh form index is applied as a precise decimal multiplier (e.g. ×1.23) rather than being bucketed into Bad/Neutral/Good. A team at Form +0.55 and Form +1.90 are now treated differently.
4. Confidence bands — Model confidence is classified as LOW (<50%), MEDIUM (50–80%), or HIGH (>80%) based on matches played, so users know when to trust the output.
5. Dynamic matrix size — The score matrix expands automatically for high-scoring teams: maxGoals = max(10, ceil(λH + λA + 5)), capturing more tail probability instead of clipping at a fixed ceiling.
1. Bayesian Shrinkage — Attack and defence ratings are shrunk toward the league average using an 8-game prior. A team with 4 games and 12 goals is rated closer to 2.0 goals/game (not 3.0) — preventing extreme early-season overreaction.
2. League-average fallback — If inputs produce an invalid lambda, the model falls back to lgH/lgA (league average) rather than 0.5, giving a sensible neutral estimate.
3. Continuous form multiplier — The tanh form index is applied as a precise decimal multiplier (e.g. ×1.23) rather than being bucketed into Bad/Neutral/Good. A team at Form +0.55 and Form +1.90 are now treated differently.
4. Confidence bands — Model confidence is classified as LOW (<50%), MEDIUM (50–80%), or HIGH (>80%) based on matches played, so users know when to trust the output.
5. Dynamic matrix size — The score matrix expands automatically for high-scoring teams: maxGoals = max(10, ceil(λH + λA + 5)), capturing more tail probability instead of clipping at a fixed ceiling.
How does the Adaptive Model work?
ScoreMatrix v2.2 uses a fully league-aware, sample-size-scaled calibration for both ρ (rho) and τ (tau) simultaneously — no hard thresholds or cliffs.
leagueGPG = lgH + lgA — the total goals per game context of the league. Higher GPG (Bundesliga, Eredivisie) → lower rho and tau base values, because open high-scoring leagues have less low-score clustering. Lower GPG (Serie A, Ligue 1) → higher base values.
Confidence curve — both parameters scale together from game 1 using: confidence = (min(homeMP, awayMP) / 15) ^ 0.85. This smooth power curve reaches full calibration at 15 games. At 5 games confidence≈39%, at 10 games≈71%, at 15 games=100%.
Why both parameters together? — A high-scoring league not only needs less bivariate covariance (ρ) but also less DC low-score correction (τ), because 0-0 and 1-0 results are genuinely rarer. Calibrating them independently would be inconsistent.
The live ρ, τ, and confidence % are always shown in the top-right badge and Results context bar after you calculate.
leagueGPG = lgH + lgA — the total goals per game context of the league. Higher GPG (Bundesliga, Eredivisie) → lower rho and tau base values, because open high-scoring leagues have less low-score clustering. Lower GPG (Serie A, Ligue 1) → higher base values.
Confidence curve — both parameters scale together from game 1 using: confidence = (min(homeMP, awayMP) / 15) ^ 0.85. This smooth power curve reaches full calibration at 15 games. At 5 games confidence≈39%, at 10 games≈71%, at 15 games=100%.
Why both parameters together? — A high-scoring league not only needs less bivariate covariance (ρ) but also less DC low-score correction (τ), because 0-0 and 1-0 results are genuinely rarer. Calibrating them independently would be inconsistent.
The live ρ, τ, and confidence % are always shown in the top-right badge and Results context bar after you calculate.
What are the default league averages?
Home = 1.50, Away = 1.20 goals/match. Toggle Advanced on the Inputs tab to enter custom league averages for your specific league.
Ideal Dixon-Coles τ (Tau)?
τ = 0.13 is recommended for multi-league use. Provides balanced correction for low-scoring scorelines without over-weighting them.
What about Half Time & 2nd Half?
HT league averages = 43% of full-match averages; 2H = 57%. 2nd half goals are auto-derived as Full Time minus 1st Half. Half-period models are independent — refer to Full Match for final result accuracy.
What is the EV Finder?
EV% = (Model Prob × Bookie Odds − 1) × 100. Positive EV = bookmaker offering above fair value. Margin-adjusted EV corrects for bookmaker overround — a more realistic measure of true edge.
What do the EV row highlight colours mean?
After entering bookmaker odds in the EV Finder tab, rows are highlighted by edge strength:
No highlight — edge between 0–3%. Marginal value, within typical model variance.
Blue highlight — edge >3%. Meaningful value worth considering.
🔥 Strong badge — edge >7%. Strong value signal — the model sees a significant mispricing.
These thresholds are guides, not guarantees. Always consider sample size and context.
No highlight — edge between 0–3%. Marginal value, within typical model variance.
Blue highlight — edge >3%. Meaningful value worth considering.
🔥 Strong badge — edge >7%. Strong value signal — the model sees a significant mispricing.
These thresholds are guides, not guarantees. Always consider sample size and context.
What is the Results context bar?
The thin bar at the top of the Results tab shows exactly which settings produced the current output — model mode (Pure DC or DC+Bivariate), τ and ρ values, and both teams' form adjustments. If you changed form or model inputs, it updates on the next Calculate press so you always know what generated the numbers you're looking at.
Disclaimer
ScoreMatrix is a research and statistical tool. Predictions are probabilistic — not guarantees. Please bet responsibly. — by Victor Korir