How our predictions work

Every forecast on this site is a probability, published before the match and scored after it. This page explains how those probabilities get made, in plain language, with links to the evidence.

Probabilities, not picks

A pick says "the home team wins". A forecast says home 58%, draw 24%, away 18%, and for questions like total goals or total games it is a whole curve of outcomes, each with its own probability. We only make the second kind.

The reason is accountability. A failed pick can always be excused; a probability can be graded. When we say 70%, it either happens about 70% of the time or it doesn't, and after thousands of matches there is nowhere to hide. Everything else on this site (title odds, playoff brackets, player projections, the accuracy pages) is built on top of these probabilities.

How a forecast gets built

The pipeline behind every match is the same, whatever the sport.

1Collect and check the data

Results, box scores, lineups, injuries, schedules, surfaces. Our data ingestion runs daily, followed by quality checks on everything that arrives, because a model trained on dirty data is confidently wrong. A good share of our engineering time goes here, not into the models.

2Rate every team and player

Elo and Glicko-2 rating systems, tuned separately for each sport, track how strong everyone is right now rather than last season. Ratings answer the question raw win-loss records can't: who have you actually beaten?

3One model per question

Who wins, by how much, how many points, how many aces: these are different problems, so each gets its own neural network. A match becomes hundreds of signals (form, rest, head-to-head, surface, pace, lineup strength) and each model turns them into a probability for its question. A single tennis match is covered by seven models.

4Calibrate, then publish

Raw model outputs are calibrated on held-out matches the models never saw in training, so that 70% means 70%. Only then does a prediction reach the site, the API and Telegram.

What we model, sport by sport

Each sport keeps its own models, data sources and quirks. What they share is the discipline above.

NBA

Winner, point spread, total points, and player projections for points, rebounds, assists and threes, each as a full distribution. Predictions appear on game day, once expected starting fives and injury reports are in: we'd rather publish a few hours before tip-off than guess lineups the night before.

Euroleague

The same basketball stack tuned to the European game, including projections for PIR, the league's own performance index. The Final Four is modelled as what it is: two rounds on a neutral court.

Football · Champions League

A European club rating ladder walked over every continental tie, qualifying included, carrying over between seasons. On top of it, match result probabilities with key factors for every tournament match, and the whole competition, Swiss league phase and knockout, simulated end to end.

Football · Top leagues

Serie A, Premier League, La Liga, Bundesliga and Ligue 1. Match result (1X2), under/over 2.5 goals, both teams to score, corners, shots and goal spread, built on team ratings and expected-goals data.

Football · Second divisions

Championship, League One, League Two, Serie B, Segunda División, Ligue 2 and 2. Bundesliga. Second divisions live with heavy summer squad turnover and promotion churn, so their ratings carry over between seasons with that churn priced in.

Tennis · ATP

Seven models per match: winner, total games, game spread, aces, double faults, tiebreak likelihood and exact set score. Surface matters enormously and the models treat it that way: clay form and hard-court form are tracked separately for every player.

Tennis · WTA

The same seven questions, answered by models retrained from scratch on the women's tour rather than borrowed from the ATP. Where the tours differ (best-of-three Grand Slams, different serve dynamics) the models differ too.

Playing the season 10,000 times

Match probabilities answer tonight. Seasons ask longer questions: who wins the title, who makes the playoffs, who gets relegated. For those we run Monte Carlo simulations: play out the remaining schedule 10,000 times, one match at a time, and count what happens. Ratings update inside each simulated season, so a team on a hot run in simulation number 4,812 gets stronger there, just as it would in reality.

The result is title and relegation odds for all twelve covered football leagues, Champions League title odds from the Swiss league phase to the final, full playoff brackets for the NBA and Euroleague, and round-by-round forecasts for ATP and WTA draws, all refreshed as real results come in. When a club's title odds jump overnight, it is because yesterday's results eliminated thousands of the futures where it didn't win.

Why did the model say that?

A probability with no reasoning attached is hard to trust, even when the track record is good. So we opened the box. For winner predictions, we trace each forecast back through the network to the inputs that drove it, then group those inputs into concepts a fan actually thinks in: rating edge, recent form, rest, serve strength, home court. Match pages show the result as a short list of key factors, each with its direction and weight.

This is a faithful summary of the model, not a story written after the fact. The attribution method (Expected Gradients, from the machine-learning interpretability literature) is validated against each model before it ships; if an explanation stops tracking what the model actually does, it comes down. There is a longer walkthrough on the blog.

How we keep score

Two questions decide whether a forecaster is any good: were you right, and were you honest about your uncertainty. Accuracy answers the first. Calibration answers the second: when we say 70%, it should happen about 70% of the time.

Both are published live for every model and every season on the performance hub and the model transparency page: accuracy, error on spreads and totals, and full calibration curves, misses included. Two things we never do: quietly re-score the past with a newer model, and retire a bad season from the record. What we published is what gets graded.

How we measure club predictability

Every football club profile carries a predictability tier: On script, In line, or Chaos club. It answers one question: how often did this club's results go the way our published forecast said, weighted by how confident the forecast was?

We grade each match prediction like a weather forecast. If we said 70% and it happened, the prediction earns a small penalty (0.09); if it did not happen, a large one (0.49). The more confident we were when wrong, the worse the grade. Averaging these penalties over a club's season gives its score (statisticians call this the Brier score, computed over the three-way home/draw/away probabilities). We then compare the club's average with its league's: at least 10% better than the league is On script, at least 10% worse is a Chaos club, anything between is In line. A tier needs a minimum of 15 predicted matches, and the sample size is always shown.

Two honesty rules. First, the grades use the prediction as originally published before each match, never a retrained model re-scoring the past (the one exception is a league's first covered season, which is labelled "backtest" on the page). Second, plain accuracy is shown next to the tier but does not define it: a dominant club is easy to call without being interesting, while the Brier score rewards being right and honest about uncertainty.

The NBA team profiles use the same grading on the two-way winner call (no draws in basketball): the Brier score of the published game-day win probability, compared with the NBA-wide average over the same season. The tier thresholds and the 15-game minimum are identical.

The Euroleague team profiles grade the same way, against the Euroleague-wide average. One difference is worth stating plainly: our Euroleague model record starts with the 2025-26 season, and the team and player pages that show it label that season a backtest. The models were trained on seasons up to 2022-23 and tuned on 2023-24, so 2025-26 was never seen during training, but the predictions were produced in one pass after the season ended rather than published game by game. Seasons predicted live, from 2026-27 onward, will be labelled production.

Open data

The Elo rating histories behind our models are open data (CC BY 4.0; attribution with a link is the only requirement). Explore them on the site's rating pages, query them through the REST API, or download the full histories as CSVs from our Kaggle dataset: NBA since 1997, twelve football leagues, Euroleague since 2000, plus ATP and WTA tennis.

Predictions, simulations and calibration data are available over the same API, and through our MCP server if you'd rather ask Claude directly.

What this is for

Predixsport is built for people who want to understand games, not be told what to think about them. We publish the forecast, the reasons behind it, the full track record and the underlying data, and let you judge for yourself. The models have good months and bad ones; both stay on the record. That is the deal, and this page will keep changing as the models do.