A draw is just every level scoreline added up
You cannot predict "a draw" directly. What you can predict is how many goals each side is likely to score. Turn that into the chance of every possible scoreline — 0-0, 1-0, 1-1, 2-1 and so on — and the chance of a draw is simply the level ones added together. The Dixon-Coles model is that idea, plus a fix for the one place it goes wrong: low-scoring matches, which is exactly where draws live.
Every team gets two numbers from its past results: an attack strength (how many it scores against a typical opponent) and a defence strength (how many it lets in). Multiply one side's attack by the other's defence and you get that team's expected goals for the match.
Home advantage is a third number applied to the home side. Across this database the home team averages 1.60 goals and the away team 1.26 — that difference is home advantage, measured.
Recent matches count for more than old ones, so the strengths follow a team as it improves or declines, and a prediction is only ever built from matches played before the one being predicted.
Expected goals give the chance of each side scoring 0, 1, 2 … goals, and combining them gives every scoreline. Here is the real thing: how often each score happened in 540,816 matches with recorded ninety-minute scores. The green diagonal shows draws with recorded scores. The overall draw rate above also includes known draws whose score was not recorded.
| Home ↓ / Away → | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 0 | 7.39 | 7.33 | 4.69 | 2.34 | 1.05 | 0.48 |
| 1 | 9.84 | 10.74 | 6.26 | 2.75 | 1.11 | 0.41 |
| 2 | 7.34 | 8.32 | 4.54 | 1.88 | 0.65 | 0.24 |
| 3 | 4.26 | 4.21 | 2.41 | 0.92 | 0.31 | 0.10 |
| 4 | 1.99 | 1.86 | 0.99 | 0.39 | 0.13 | 0.04 |
| 5 | 0.91 | 0.78 | 0.35 | 0.14 | 0.05 | 0.01 |
Goal averages and scoreline percentages use only recorded ninety-minute scores. A real model builds this table per match from that match's two expected-goal figures; this one is the whole database at once.
The simple version assumes the two teams score independently of each other. It is close, but it is reliably wrong on the lowest scores — and those decide draws. Below, each scoreline's real frequency against what the simple model predicts from the same two averages.
| Score | Really happened | Simple model | Model is off by |
|---|---|---|---|
| 1-1 | 10.74% | 11.57% | +0.83 |
| 1-0 | 9.84% | 9.22% | −0.62 |
| 2-1 | 8.32% | 9.24% | +0.92 |
| 0-0 | 7.39% | 5.77% | −1.62 |
| 2-0 | 7.34% | 7.36% | +0.02 |
| 0-1 | 7.33% | 7.25% | −0.09 |
| 1-2 | 6.26% | 7.26% | +1.00 |
| 0-2 | 4.69% | 4.55% | −0.14 |
| 2-2 | 4.54% | 5.80% | +1.26 |
| 3-0 | 4.26% | 3.92% | −0.34 |
Look at 0-0: it really happens more often than the simple model expects, while 1-1 happens less. That is the pattern Dixon and Coles found in 1997 and fixed with a small adjustment to exactly four scorelines — 0-0, 1-0, 0-1 and 1-1 — nudging them to match reality. Everything else in the model is left alone. Two teams at 0-0 late in a match stop playing like the simple model assumes, and the correction is what puts that back.
Honest caveat: this table uses one pair of averages for every match, while a real model fits a pair per match. Part of the gap you see is that simplification rather than the effect itself — which is why the fit has to be judged per match, not in aggregate.
This database runs the model over every match it holds, always from what was known before each one. A probability is only worth anything if it comes true at the rate it claims: of the matches it gave a 27% chance of a draw, about 27% should have drawn.
| Model said | Matches | It predicted | Actually drew | Miss | With odds | Drew (those) | Market said |
|---|---|---|---|---|---|---|---|
| 5–10% | 1,025 | 8.30% | 6.54% | −1.76 | 106 | 5.66% | 7.48% |
| 10–15% | 7,036 | 13.29% | 10.63% | −2.65 | 1,104 | 10.42% | 11.39% |
| 15–20% | 48,543 | 18.12% | 15.67% | −2.45 | 6,448 | 16.52% | 16.91% |
| 20–25% | 176,849 | 22.97% | 22.02% | −0.95 | 44,432 | 23.80% | 23.87% |
| 25–30% | 264,535 | 27.22% | 26.90% | −0.32 | 92,593 | 27.72% | 27.68% |
| 30–35% | 45,686 | 31.40% | 30.16% | −1.24 | 15,648 | 30.62% | 30.56% |
| 35–40% | 1,455 | 36.17% | 32.92% | −3.25 | 525 | 33.52% | 32.91% |
Compare "It predicted" with "Actually drew" to judge the model, and "Drew (those)" with "Market said" to compare it with the bookmakers — those two columns cover the same matches, while "Actually drew" covers every match in the band, priced or not. Across 160,869 matches carrying a bookmaker's closing price, the model's average error is 0.19288 against the market's 0.19160 (lower is better, and both are "how far off, squared, on average"). So the model is close, honest about its own confidence — and still behind the people setting the prices. That is the expected outcome of a first model, and it is reported here rather than hidden: a draw tool is only worth betting when it beats the price, and this one does not yet.
The model above reads form — goals scored and conceded lately — and knows nothing about how evenly matched two sides are beyond that. Elo is the opposite: one number for the difference in strength, blind to form, and history is blunt about what it means — about a quarter of the matches inside 25 rating points end level, against half that when the two are 300 points apart. Two readings that know different things can be averaged, on the log-odds scale, into one:
blend = sigmoid( w · logit(model) + (1 − w) · logit(gap rate) )
w is not a matter of taste: every mix from 0 (the gap alone) to 100 (the model alone) is scored over the same 545,219 matches, and the lowest average error wins.
| Mix | It predicted | Actually drew | Error | Error (priced) | Market |
|---|---|---|---|---|---|
| Elo gap alone | 24.35% | 24.35% | 0.183230 | 0.193273 | 0.191605 |
| 10% model · 90% gap | 24.41% | 24.35% | 0.182974 | 0.193133 | 0.191605 |
| 20% model · 80% gap | 24.47% | 24.35% | 0.182754 | 0.193013 | 0.191605 |
| 30% model · 70% gap | 24.54% | 24.35% | 0.182571 | 0.192913 | 0.191605 |
| 40% model · 60% gap | 24.62% | 24.35% | 0.182425 | 0.192835 | 0.191605 |
| 50% model · 50% gap | 24.70% | 24.35% | 0.182316 | 0.192779 | 0.191605 |
| 60% model · 40% gap | 24.79% | 24.35% | 0.182246 | 0.192747 | 0.191605 |
| 70% model · 30% gap | 24.88% | 24.35% | 0.182215 | 0.192740 | 0.191605 |
| 75% model · 25% gap ← best | 24.93% | 24.35% | 0.182214 | 0.192746 | 0.191605 |
| 80% model · 20% gap | 24.98% | 24.35% | 0.182223 | 0.192758 | 0.191605 |
| 90% model · 10% gap | 25.08% | 24.35% | 0.182273 | 0.192805 | 0.191605 |
| goals model alone | 25.19% | 24.35% | 0.182364 | 0.192879 | 0.191605 |
The winner is 75% goals model, 25% Elo gap, and the honest size of the win is small: 0.182214 against 0.182364 for the model on its own and 0.183230 for the gap on its own. The gap carries real information the model misses — dropping to 0% model costs far more than the blend gains — but most of what it says, the goal rates already imply. Against the market it changes nothing: 0.192746 to the bookmakers' 0.191605 on 160,869 priced matches. Still behind.
One line worth reading twice: across the whole history the goals model predicts 25.19% draws where 24.35% happened — it leans too far toward the draw outside the leagues bookmakers price, where it is calibrated almost exactly. The gap rate cannot lean, because it is the historical rate. Blending pulls the model back toward it, which is most of the improvement above.
The same test as the table above, applied to the blended number: of the matches it gave this chance of a draw, how many drew.
| Blend said | Matches | It predicted | Actually drew | Miss | With odds | Drew (those) | Market said |
|---|---|---|---|---|---|---|---|
| 10–12% | 974 | 11.13% | 6.06% | −5.07 | 183 | 5.46% | 8.32% |
| 12–14% | 2,319 | 13.14% | 9.23% | −3.91 | 520 | 10.96% | 10.70% |
| 14–16% | 5,296 | 15.13% | 11.56% | −3.58 | 1,361 | 11.76% | 13.10% |
| 16–18% | 11,796 | 17.14% | 13.53% | −3.61 | 2,614 | 14.19% | 15.41% |
| 18–20% | 25,174 | 19.11% | 15.29% | −3.82 | 4,140 | 17.95% | 18.06% |
| 20–22% | 47,418 | 21.09% | 18.72% | −2.37 | 8,062 | 20.23% | 20.99% |
| 22–24% | 86,674 | 23.10% | 21.42% | −1.68 | 19,211 | 23.41% | 23.70% |
| 24–26% | 137,118 | 25.07% | 24.95% | −0.11 | 43,200 | 26.40% | 26.13% |
| 26–28% | 141,769 | 26.94% | 27.47% | +0.53 | 50,920 | 27.99% | 28.02% |
| 28–30% | 67,406 | 28.81% | 29.56% | +0.75 | 23,985 | 29.92% | 29.73% |
| 30–32% | 15,909 | 30.72% | 31.32% | +0.60 | 5,650 | 31.27% | 31.30% |
| 32–34% | 2,438 | 32.69% | 32.85% | +0.17 | 847 | 33.06% | 32.52% |
"Miss" is reality minus the claim, in points: negative means the band promised more draws than it delivered. Square each miss, weight it by the matches in the band and average, and you have the calibration half of the error score the scan above ranks mixes by — the other half is how well the figure separates one match from another, which no single row can show. Green means the band came true within two points. The blended figure is the one shown beside a fixture on the Cross predictor and on a match page.
Everything above is a fit on its own data. The gap rates were counted over all of history — including the match being scored — and the winning mix was chosen on the very matches it then reports on. That is how a model flatters itself, so the test was redone the hard way: the gap rates recounted on the 330,303 matches up to 2014-12-31, the mix chosen on those alone, and both applied unchanged to the 214,273 matches after — which drew 24.38% of the time.
| Reading | It predicted | Error | Error (priced) |
|---|---|---|---|
| Elo gap alone | 22.15% | 0.183670 | 0.194141 |
| goals model alone | 25.81% | 0.182827 | 0.192409 |
| 85% model · 15% gap ← the mix the training period chose | 25.21% | 0.182584 | 0.192366 |
| the market, same priced matches | — | — | 0.191069 |
The margin survived. Out of sample the blend still beats both of its parts, by roughly the same small amount it claimed in the fit, and the win is larger than the noise around it — the per-match difference against the goals model alone is fifteen standard errors from zero. Two things the test also says that the fit could not. The error scores are all higher here than above, because the recent period draws more often (24.38% against 23.3% across all history) and a more even outcome is harder to call. And against the market nothing has changed: 0.192366 to the bookmakers' 0.191069 on 131,231 priced matches. Still behind, exactly as the fit said.
The mix above has one number to spend and must spend all of it: its two weights add to one, so it cannot say "I believe a quarter of what the goals model tells me", and it has no intercept, so a systematic lean stays leaned. A regression can do both, and can see more than two things while it is at it. This one reads five signals at once, and the table below is what it concluded — the honest explanation of the figure, rather than the figure on its own.
| Signal | Weight | ± error | z | Reading |
|---|---|---|---|---|
| intercept | 1.23510 | 0.02800 | 44.1 | the level everything else is measured from |
| logit(goals model P(draw)) | 0.31091 | 0.03771 | 8.2 | more of it means more draws |
| logit(draw rate at this Elo gap) | 0.81206 | 0.02281 | 35.6 | more of it means more draws |
| expected total goals (λh + λa) | -0.12064 | 0.01378 | -8.8 | more of it means fewer draws |
| logit(competition base draw rate) | 0.68184 | 0.01743 | 39.1 | more of it means more draws |
Read it as a list of what the model trusts. The competition's own base draw rate is the strongest signal on the board — a 2.2-goal league and a cup do not draw alike, and neither the goals model nor the Elo gap fully carries that. The draw rate at this Elo gap comes next. The goals model's own probability is worth far less than the blend above is forced to give it, because the blend's weights must add to one and a regression's need not. Low-scoring fixtures draw more even after all of that, which is the negative weight on expected goals.
A sixth signal — the signed Elo gap, i.e. which side is favoured — was fitted and thrown out. It is nine standard errors from zero in training and worthless out of it: a home-advantage term learned on 1871–2014 and applied to a decade in which home advantage fell. It is not in the table because it did not earn its place, not because nobody tried it.
| Where the regression said | Matches | It said | Actually drew | Miss | Repaired to |
|---|---|---|---|---|---|
| 8–10% | 2,112 | 9.20% | 6.53% | −2.67 | 6.41% |
| 10–12% | 6,862 | 11.22% | 9.88% | −1.34 | 9.86% |
| 12–14% | 18,823 | 13.10% | 12.54% | −0.57 | 12.34% |
| 14–16% | 26,788 | 15.00% | 15.21% | +0.21 | 15.37% |
| 16–18% | 21,926 | 16.99% | 17.19% | +0.20 | 17.09% |
| 18–20% | 33,681 | 19.07% | 18.95% | −0.12 | 18.98% |
| 20–22% | 48,992 | 21.07% | 21.05% | −0.02 | 21.06% |
| 22–24% | 68,504 | 23.05% | 23.37% | +0.33 | 23.33% |
| 24–26% | 82,399 | 25.02% | 25.31% | +0.30 | 25.31% |
| 26–28% | 89,006 | 27.00% | 27.56% | +0.56 | 27.53% |
| 28–30% | 72,536 | 28.93% | 28.82% | −0.10 | 28.87% |
| 30–32% | 41,210 | 30.90% | 30.16% | −0.74 | 30.15% |
| 32–34% | 21,794 | 32.88% | 31.90% | −0.98 | 32.01% |
| 34–36% | 8,282 | 34.80% | 33.80% | −1.00 | 33.64% |
| 36–38% | 1,576 | 36.66% | 32.93% | −3.72 | 34.41% |
A regression gets the ordering right and the level slightly wrong, so a second, simpler step follows it: an isotonic map — the best non-decreasing staircase through the training pairs, 209 steps of it, stored knot by knot every time the model is refitted. It cannot re-rank anything and so cannot invent skill; all it does is move each band onto the rate that was actually observed, which is the last column. The bands above are the raw regression on purpose: banding the repaired figure would read ±0.00 everywhere, because the map was fitted on these very matches, and a table that can only ever agree with itself is evidence of nothing.
What this table is not. The model is fitted on all of history and applied forward, so every played match above was part of its own training set and the fit flatters itself on them. Only an upcoming fixture gets a real forecast. The two signals underneath it are leak-free by construction — each was written by a chronological pass that predicted a match before adding it to the state — but this layer is not, and the honest out-of-sample figures are the ones in the held-out panel above, produced by football:report:draw-holdout and football:report:draw-logistic. Measured there, on a decade it never saw, the logistic model scored 0.181386 against 0.182584 for the blend — the largest single improvement this model has had, and still behind the market's 0.191069. Fitted 1 hour ago over matches from 1871-11-11 to 2026-09-30.
| Date | Country | Fixture | Competition | Expected goals | Elo gap | Goals model ▾ | Blend | Logistic | Price · implies |
|---|---|---|---|---|---|---|---|---|---|
| 11 Oct 2026 | ARG | San Lorenzo v Deportivo Riestra | Liga Profesional | 0.82 – 0.57 | +85 | 39.1% | 35.3% | 34.4% | — |
| 24 Oct 2026 | UKR | Livyi Bereh Kyiv v LNZ Cherkasy | Premier League | 0.77 – 0.77 | -82 | 37.5% | 34.2% | 32.0% | — |
| 01 May 2027 | UKR | LNZ Cherkasy v Livyi Bereh Kyiv | Premier League | 0.86 – 0.69 | +212 | 37.1% | 32.5% | 28.1% | — |
| 12 Dec 2026 | UKR | LNZ Cherkasy v Bukovyna Chernivtsi | Premier League | 0.88 – 0.70 | +154 | 36.6% | 33.1% | 30.0% | — |
| 08 May 2027 | UKR | Bukovyna Chernivtsi v Livyi Bereh Kyiv | Premier League | 0.85 – 0.77 | +123 | 36.3% | 33.4% | 31.6% | — |
| 31 Oct 2026 | UKR | Livyi Bereh Kyiv v Bukovyna Chernivtsi | Premier League | 0.86 – 0.76 | +7 | 36.3% | 33.9% | 33.6% | — |
| 10 Oct 2026 | ARG | Barracas Central v Club Atlético Huracán | Liga Profesional | 0.82 – 0.81 | -2 | 36.2% | 33.9% | 34.4% | — |
| 08 Nov 2026 | ARG | San Lorenzo v Club Atlético Platense | Liga Profesional | 1.01 – 0.59 | +128 | 35.3% | 32.6% | 33.6% | — |
| 06 Mar 2027 | UKR | Chornomorets Odesa v LNZ Cherkasy | Premier League | 0.65 – 1.02 | -131 | 34.7% | 32.2% | 30.8% | — |
| 04 Jun 2027 | UKR | Kolos Kovalivka v LNZ Cherkasy | Premier League | 0.86 – 0.93 | +7 | 34.4% | 32.5% | 32.0% | — |
| 04 Jun 2027 | UKR | Chornomorets Odesa v Bukovyna Chernivtsi | Premier League | 0.73 – 1.01 | -42 | 34.3% | 32.2% | 31.6% | — |
| 13 Mar 2027 | UKR | NK Veres Rivne v LNZ Cherkasy | Premier League | 0.80 – 0.98 | -41 | 34.3% | 32.2% | 31.6% | — |
| 05 Oct 2026 | ARG | Deportivo Riestra v Central Córdoba (SdE) | Liga Profesional | 1.05 – 0.68 | +108 | 34.2% | 31.8% | 33.6% | — |
| 05 Dec 2026 | UKR | NK Veres Rivne v Livyi Bereh Kyiv | Premier League | 0.87 – 0.95 | +106 | 34.0% | 31.7% | 30.3% | — |
| 01 Oct 2026 | ARG | Club Atlético Platense v Estudiantes de La Plata | Copa Argentina | 0.87 – 0.95 | -62 | 34.0% | 31.6% | 33.6% | — |
| 01 Nov 2026 | ARG | Club Atlético Huracán v Club Atlético Tigre | Liga Profesional | 1.05 – 0.71 | +104 | 33.9% | 31.6% | 33.6% | — |
| 29 May 2027 | UKR | Kolos Kovalivka v Livyi Bereh Kyiv | Premier League | 0.94 – 0.90 | +154 | 33.8% | 31.1% | 29.5% | — |
| 01 Nov 2026 | ARG | Deportivo Riestra v Talleres de Córdoba | Liga Profesional | 1.05 – 0.74 | +83 | 33.8% | 31.5% | 33.6% | — |
| 05 Dec 2026 | UKR | LNZ Cherkasy v Kolos Kovalivka | Premier League | 1.03 – 0.77 | +123 | 33.8% | 31.5% | 30.3% | — |
| 25 Oct 2026 | ARG | San Lorenzo v Newell's Old Boys | Liga Profesional | 1.07 – 0.70 | +82 | 33.7% | 31.5% | 33.6% | — |
| 25 Oct 2026 | ARG | Rosario Central v Club Atlético Huracán | Liga Profesional | 1.06 – 0.73 | +118 | 33.7% | 31.4% | 33.6% | — |
| 28 Nov 2026 | UKR | Livyi Bereh Kyiv v Kolos Kovalivka | Premier League | 1.00 – 0.84 | -24 | 33.6% | 32.0% | 32.0% | — |
| 21 Nov 2026 | UKR | NK Veres Rivne v Bukovyna Chernivtsi | Premier League | 0.89 – 0.97 | +47 | 33.6% | 31.7% | 30.8% | — |
| 20 Mar 2027 | UKR | Livyi Bereh Kyiv v Chornomorets Odesa | Premier League | 1.11 – 0.64 | +114 | 33.4% | 31.3% | 30.3% | — |
| 15 May 2027 | UKR | Kolos Kovalivka v Bukovyna Chernivtsi | Premier League | 0.96 – 0.92 | +95 | 33.4% | 31.2% | 29.9% | — |
Expected goals are what the model thinks each side will score; the goals-model chance is every level scoreline added up. A high number here means an even, low-scoring fixture — not that the draw is good value. Where a price is shown, remember it still contains the bookmaker's margin (see the odds explainer), and on the evidence above the market prices these better than the model does.
Three readings, and the order is one of them. This table is sorted by the goals model's own chance, largest first — click any heading to sort on that column instead. Blend is the one-parameter mix the site has published since September 2026 and Logistic is the five-feature regression measured to beat it out of sample; both are shown, and neither has replaced the other. Which one the site keeps is a decision still to be made.
Out of this comes a draw probability for one specific match — not a general rule about teams "being due". That matters, because the alternative approaches do not survive contact with the data: a long run without a draw is already reflected in bookmakers' prices, and no staking plan turns a losing bet into a winning one.
A probability is only useful once it is calibrated: of all the matches where the model says 30%, close to 30% must actually finish level. Then it can be compared with the price a bookmaker offers — and it is only worth betting when the model's probability beats the price by a clear margin.
Building this needs nothing but final scores, which this database has for 545,264 matches.
A goals model predicts draws the only way a draw can honestly be predicted: by working out how many goals each side is likely to score, turning that into the probability of every scoreline, and adding up the level ones. FDB4 sets the idea against its own record of more than half a million matches — the real frequency of every score from 0-0 upwards, what a plain independent-Poisson model predicts from the same average goal rates, and where the two disagree. The gap sits on the lowest scores, which is precisely what the Dixon-Coles correction of 1997 adjusts, and precisely where draws are decided.