What we predict
For every upcoming match in our football predictions hub, NeatSports publishes four probabilistic forecasts before kick-off:
- Full-time result (1X2): probability of home win, draw, away win, summing to 100%.
- Both teams to score (BTTS): probability that each side scores at least one goal.
- Over / under 2.5 goals: probability that the match ends with 3 or more total goals.
- Most likely correct score: the single scoreline with the highest probability under the model.
Every probability is shown next to the prediction. We never publish a “pick” without the underlying probability so you can judge our confidence yourself.
How the model works
The NeatSports model is an in-house implementation that combines two well-understood ideas from sports analytics:
1. ELO-style team strength ratings
Every team has a numeric strength rating. After each finished match, both teams’ ratings are updated based on the result and the rating differential entering the match. Strong teams that beat weak teams gain little; weak teams that beat strong teams gain a lot. The K-factor controls how quickly ratings respond to new results; we use a higher K-factor for newly tracked teams and decay it as the sample of matches per team grows.
The rating differential between two teams maps to a baseline win probability via the standard ELO logistic curve. A team rated 100 ELO points above its opponent has roughly a 64% baseline win probability on neutral ground.
2. Poisson goal-scoring model
On top of the ELO-derived strength differential, expected goals for each side are drawn from a Poisson distribution whose mean is derived from the league average (current season) modulated by attack/defence factors implied by the rating gap and adjusted for home-field advantage. Convolving the two Poisson distributions gives a full probability matrix over every possible scoreline (0-0, 1-0, 1-1, …). From that matrix we sum over the relevant cells to derive:
- 1X2 by summing scorelines where home goals > / = / < away goals
- BTTS by summing scorelines where both sides scored at least once
- Over 2.5 by summing scorelines where total goals ≥ 3
- Correct-score pick by taking the argmax of the matrix
The full probability matrix is what we display, not an opinion on top of it. There is no manual override.
Features the model uses
- Current ELO rating of each side (the strongest single feature).
- Recent form: last 5 matches per team. Form is implicit in the ELO update path rather than a separately weighted feature.
- Home-field advantage: a league-specific additive bonus to the home team’s expected goals, recalibrated when seasons turn over.
- League scoring environment: the running average goals-per-match in the current season of the relevant competition, used as the Poisson base rate.
- National / international flag: international fixtures (friendlies, qualifiers, World Cup) use a separate rating pool because club and international strengths don’t transfer.
Features we deliberately don’t use
- Bookmaker odds. We don’t reverse-engineer market probabilities. Our forecasts are derived from match data only, which is what makes them comparable to (and gradable against) the market.
- Injury news. Squad availability would meaningfully improve forecasts but our pipeline doesn’t yet ingest a reliable injury feed. We flag this as a known limitation below.
- Weather. Effects are small and noisy at the population level.
- Manager identity. We track managers for content reasons but don’t use them as a model feature.
When the model retrains
- ELO ratings update after every finished match the moment the final whistle is reflected in our data feed (typically within ~60 seconds).
- League scoring environment (Poisson base rate) recalculates daily from completed fixtures in the running season.
- K-factors and home-advantage constants are reviewed at the start of each major competition season and after every international tournament. The current values, with their last review date, live in the plugin source so an audit is reproducible.
There is no model retraining in the deep-learning sense. The model is parametric and updates continuously rather than in periodic batches.
Track record
Every finished fixture with a pre-match prediction is graded into our database and aggregated into the snapshot below. We do not edit historical predictions. The number we showed the day before a match is the number we score ourselves against. You can browse every live forecast we have published on the football predictions page.
| Market | Sample | Top-pick hit rate | Naive baseline | Brier score |
|---|---|---|---|---|
| 1X2 (full-time result) | 1307 | 50.3% | 33.3% | 0.631 |
| Both teams to score | 1307 | 53.3% | 50.0% | — |
| Over / under 2.5 goals | 1307 | 53.1% | 50.0% | — |
| Correct score | 1307 | 12.2% | ~8% (1/12) | — |
How to read these numbers
- Top-pick hit rate is the percentage of finished matches where the outcome we assigned the highest probability to is the outcome that actually happened. A coin-flip on three outcomes would average 33.3%.
- Brier score measures the squared distance between the probabilities we issued and the binary outcome that actually occurred, summed over Home/Draw/Away. Lower is better. A uniform “always 1/3 each” prior scores ~0.667; bookmaker odds typically score 0.55-0.60 once converted to probabilities.
- Sample is the count of finished fixtures we’ve graded since outcomes started being recorded. The model improves as the sample grows. We do not retroactively edit historical predictions; you can grade us on the same numbers we showed before kick-off.
- Raw per-fixture data is available via the
/wp-json/sm/v1/predictions/accuracyREST endpoint for anyone wanting to audit the calculation.
Source data: /wp-json/sm/v1/predictions/accuracy. Snapshot table backs every number on this page; nothing here is hand-curated.
Limitations we want you to know
- Sample size is still small. We started graded snapshots after the predictions feature shipped. The numbers above will become more reliable as the sample grows. Treat the current Brier score as preliminary.
- Home-pick bias. The current parameter set tends to over-pick home wins on close matchups in lower-volume leagues. We’re aware of this and recalibrating.
- No injury / suspension data. A starting goalkeeper out for cup-tie reasons can move a fair price by 10-15%; our model won’t know about it.
- Cold-start teams. Newly promoted or international teams with few matches in our sample get higher uncertainty until the ELO settles.
- Cup competitions. Single-leg cup ties (especially with significant rotation) are harder than league fixtures. Expect wider error bands.
Disclaimer
NeatSports football predictions are statistical estimates, not advice and not tips. They reflect what a published model believes the probability of each outcome is, given the inputs listed above. They do not constitute a recommendation to place a bet of any kind. Past performance does not predict future results; a 60% probability win can and routinely does lose.
Football is intrinsically uncertain. Any single match can defy any model. If you choose to use these probabilities to inform a wager, please:
- Bet only what you can afford to lose.
- Set deposit and time limits with your operator before you start.
- If your gambling stops feeling fun or you’re chasing losses, stop and talk to someone.
Free, confidential gambling support:
- UK: GambleAware / National Gambling Helpline 0808 8020 133
- Republic of Ireland: Problem Gambling Ireland / 089 241 5401
- USA: National Council on Problem Gambling / 1-800-GAMBLER
- Australia: Gambling Help Online / 1800 858 858
NeatSports has no commercial partnerships with bookmakers, no affiliate odds links and earns nothing if you choose to wager. Our incentive is to publish accurate probabilities, not to drive bet volume.