Sports Dashboard

MI Bivariate Poisson + Dixon-Coles + Elo

← Back to Blog
|Model Architecture|ACCEPTED

Teaching the Model to Count: How a Totals Signal Made Our Sides Bets 24% More Profitable

We added a single loss term to the solver — asking it to match the O/U 2.5 market — and AH profits jumped +90u (+24%). The O/U bets themselves are still unprofitable. The improvement came from better lambda estimates. The paradox: we failed to fix totals, but the attempt made sides dramatically better.

We added a single loss term to the solver — asking it to also match the Over/Under 2.5 market — and Asian Handicap profits jumped from +380u to +470u. The O/U bets themselves are still unprofitable. The improvement came entirely from better lambda estimates for sides.

The Paradox

We set out to fix the Over/Under market. The model was 8.7% overconfident on totals predictions vs only 4.4% on sides. We tried everything: deflation sweeps, probability shrinkage, negative binomial distributions, shot-pace regression. Nothing made O/U bets profitable.

Then we added the O/U market signal to the solver's loss function — not to fix totals betting, but because the totals market contains information about total expected goals that the sides market doesn't. The solver used that information to produce better lambdas. And better lambdas made the *sides* bets more profitable.

The Problem

Our solver estimates λ_Home and λ_Away (expected goals per team). It found these by matching 1X2 odds (who wins?) and AH lines (by how much?). But nothing constrained the *total* — λ_H + λ_A. Many lambda combinations produce the same win probability but different total goals.

Think of it like estimating two numbers that multiply to 12. Is it 3 × 4? Or 2 × 6? Both give the same ratio, but wildly different sums. The totals market resolves this ambiguity.

The Fix: One More Equation

We added a fifth loss term: ouWeight × KL(market_OU || model_OU). This penalizes the solver when its predicted Over/Under 2.5 probability diverges from the Pinnacle O/U market.

Now the solver has two constraints: the sides market tells it the ratio, the totals market tells it the sum. Two equations, two unknowns — individual lambdas pinned down precisely.

The Key Discovery: Sharp Markets Only

When we ran the 19-league backtest with uniform ouWeight=0.2, the results were split: 7 leagues improved, 4 got worse. The pattern was stark.

The O/U signal helps leagues where markets are efficient (EPL, Serie A, Bundesliga) but hurts leagues where markets are soft (Serie B, Turkish Süper). In sharp markets, the O/U closing line reflects genuine information from sophisticated bettors. In soft markets, it's noise set by risk management.

Solution: per-tier deployment. ouWeight=0.2 for 7 sharp leagues, ouWeight=0 for the rest. Capture the upside, avoid the damage.

Where It Mattered Most

LeagueOld AH ROINew AH ROIP&L Change
Championship+2.2%+6.4%**+51.0u**
EPL+2.8%+6.2%+24.7u
Serie A+0.4%+2.8%+18.4u
Ligue 1-1.3%+0.3%+10.8u
Bundesliga-0.4%+1.2%+9.6u
Scottish Prem-0.4%+1.6%+8.7u

Ligue 1 and Bundesliga flipped from negative to positive AH ROI. Championship nearly tripled.

What We Tried That Didn't Work

Before finding this, we exhausted five other approaches to fix the 8.7% totals overconfidence:

  1. Deflation sweep (0.93–1.05) — best Under ROI was still -7.5%
  2. Probability shrinkage (0–40%) — calibration error unchanged at 11–13%
  3. ZIP zero-inflation — model already over-predicts 0-0 games
  4. Negative binomial grid — 14/19 leagues improved but Brier delta only 0.000683
  5. Shot-pace regression — Brier identical to closing line; market already prices everything

The O/U prediction problem is architecturally harder than sides for a bivariate Poisson. But the *information* in the O/U market is pure gold for constraining lambda estimates. We couldn't use it to bet totals, but we could use it to bet sides better.

The Deeper Lesson

This is indirect information transfer. We didn't improve AH predictions by studying AH markets more carefully. We improved them by giving the solver a *completely different* market signal that constrains the same underlying parameters.

If you're trying to figure out someone's height and weight, knowing their BMI (a ratio) gives you one equation. Knowing their clothing size (related to the sum) gives you a second. Neither alone solves the problem, but together they pin down both numbers. The totals market is the clothing size.

The fact that this only works in sharp markets makes it even more interesting. In efficient markets, the O/U closing line is a high-quality signal — it reflects genuine information. In soft markets, the O/U line is set by risk management, not precise modeling, so it adds noise. The solver benefits from good information and gets hurt by bad information. Our job is to know which is which.

ACCEPTEDSignal: ou-loss-per-tier|2026-03-19