Football in probabilities
xbol combines several models, ratings and bookmaker odds into a single match report: probabilities for the score, the outcome, totals and both teams to score.
Sample report
This is a real report, generated before the match.
Show sample report
| Team | Pos | Form | Pyth | Elo | Row |
|---|---|---|---|---|---|
| Ajax | 3 | 75 | 68.28 | 1574 | 58% |
| Excelsior | 11 | 58.33 | 45.89 | 1485 | 40% |
| ↓\→ | 0 | 1 | 2 | 3 | 4 | 5+ |
|---|---|---|---|---|---|---|
| 0 | 3.6 | 4.2 | 5.7 | 2.9 | 1.4 | 0.8 |
| 1 | 3.6 | 9.2 | 9.6 | 4.9 | 2.3 | 1.3 |
| 2 | 4.4 | 7.4 | 7.5 | 4.8 | 2.3 | 1.3 |
| 3 | 2.0 | 3.9 | 4.2 | 2.3 | 1.1 | 0.6 |
| 4 | 0.9 | 1.6 | 1.8 | 1.0 | 0.5 | 0.3 |
| 5+ | 0.4 | 0.8 | 0.8 | 0.5 | 0.2 | 0.1 |
| 1 | X | 2 | |
|---|---|---|---|
| market | 1.33 | 5.25 | 7.5 |
| 69.9% | 17.71% | 12.4% | |
| model | 33.4% | 23.17% | 43.43% |
| Ajax | Excelsior | |||||
|---|---|---|---|---|---|---|
| All | Home | Away | All | Home | Away | |
| scores | 6 in a row | 3 in a row | 3 in a row | 11 in a row | 5 in a row | 10 in a row |
| concedes | 3 in a row | 3 in a row | - | - | 4 in a row | - |
| Source | % str | H | G | T | D | B | R |
|---|---|---|---|---|---|---|---|
| HF · a | 77.3% | - | - | - | - | 2 (100%) | 2 (100%) |
| HF · a | 59.1% | 2 (100%) | 0 (50%) | - | 2 (50%) | - | - |
| HF · a | 54.5% | - | - | 1 (25%) | - | - | - |
| GF · a | 80% | - | - | - | - | 2 (100%) | - |
| GF · a | 65% | 2 (100%) | - | - | 2 (100%) | - | 1 (67%) |
| GF · a | 60% | - | 2 (50%) | - | - | - | - |
| GF · a | 55% | - | - | 1 (50%) | - | - | - |
| HF · g | — | 1 | 1 | 3 | 2 | — | 0 |
| GF · g | — | 2 | 2 | 4 | 0 | 0 | 2 |
Methodology and limitations
Where the project is heading
- What it is
- A research project on football match forecasting. Each match is examined in several ways: goal distribution, Elo rating, team form, bookmaker odds and forecasts from other algorithms, including genetic ones. The result is a single report where everything sits side by side.
- Now
- Preview. Experimental match reports are available at test.xbol.org. The project is open to the public but remains an experiment, and a lot will change.
- Next
- Plans are still a sketch: bring data and algorithms into one architecture. Right now a lot has to be done by hand, since full automation is not feasible at this stage. In the future — add more leagues and matches, regular reports and a check of forecasts against real results. At the same time, keep tuning and refining the forecasting algorithms. For example, analysing one match with the HF/GF algorithms takes 1–3 minutes (comparing a million different formulas); the whole list of supplied matches takes 5–10 hours of continuous tool runtime.
Why the numbers may differ from 'official' sites.
We use our own experimental original models. This means that even the underlying statistical series (xG, attack/defense strength) are calculated differently than by major providers. Hence the discrepancies with the market and professional analytical services — this is not an error, it's a different approach.
The problem with new teams.
For teams that were not in the league last season and appeared only this season, we do not yet have enough match history. Models work with less confidence in such cases. We are working with data providers to solve this problem.
How the result is formed.
The final report is a consensus of several models: Poisson + Dixon–Coles (score matrix), Elo ratings, team form, market odds and genetic algorithms (HF/GF). No single model is decisive — the decision is made by majority vote.
The report is created before the match.
All numbers are fixed before kickoff. After the match, the report is not rewritten — this allows honest verification of forecast accuracy over time. Ajax — Excelsior from the sample report ended with a score of 2:2 — this score was the third most likely in the report (7.49%).
Why the odds may differ from the exchanges.
A snapshot of the odds is taken once, before the calculations start. While the models are running, the market may already have moved — so the final numbers in the report sometimes do not match the current quotes.
Where new reports appear.
Links to finished reports are posted in the Telegram channel (see footer). A little later, the list of links on the test page is updated.
Proprietary algorithms (HF/GF)
What they are. HF and GF are genetic algorithms. They search through millions of formula combinations linking team indicators to match outcomes and keep only the stable patterns. This is why the analysis takes time: 1–3 minutes per match until working links are found.
Two types of rows. The · a suffix (HF · a, GF · a) is the analytical position (HomeFan / GuestFan): the algorithm returns probabilities across the columns. The · g suffix (HF · g, GF · g) is a different algorithm, built on a fundamentally different principle: it returns concrete forecasts as numbers, not percentages.
Table columns. H — home goals. G — away goals. T — total. D — goal difference. B — goals by either team. R — outcome: 1 = home win, 2 = away win, 0 = draw. Any other value in the R column is a technical bug; such rows are not counted.
How to read a row. Example: HF · a | 59.1% | 2 (100%) | 0 (50%) | - | 2 (50%) | - | -. The first number (59.1%) is the 'row percentage' — the highest overall confidence level at which the algorithm produced any values for this row. Then the columns: H = 2 (100%) — at 59.1% confidence, a single value '2' was found with 100% match. G = 0 (50%) — at the same confidence level, several options were found, and '0' leads with 50%. A dash - means no value was produced for that column (or discarded).
Disclaimer
⚠️ Experimental analytics, for informational purposes only.
Not a business plan. Not a solicitation to gamble.
Decisions and risks are your own.
Support the project
xbol is an experiment without monetization. If you liked the project and want it to develop, support the author. Donation is not a purchase of a forecast, but just a thank you.