Methodology

How a KickoffHour prediction is made, step by step. Last updated 16 October 2026.

Where the data comes from

How we read the news

For each match we run several searches, read up to six pages about the match and a couple of recent club-news pages per team. An AI model turns them into a fact sheet: who is out, who is doubtful, expected lineups, form, motivation, pressure on the manager and other off-pitch events. Every fact keeps a reference to the page it came from. Pages in other languages are summarised in English; we never republish their text.

The goals model

A Poisson model estimates how many goals each team should score from the season's goals scored and conceded, adjusted for opponent strength and home advantage. Early in the season each team's numbers are pulled towards the league average until there are enough games. A small correction (Dixon–Coles) fixes the known under-count of 0–0 and 1–1 draws. The model never sees the market.

Three AI experts and the final number

The first two experts don't see the market: they start from the goals model, so the difference between their view and the model isolates the effect of the news. The sceptic's difference from the market does the same. AI models tend to squeeze probabilities towards 33/33/33, so we never use their absolute numbers, only the news effect.

Final = market probability + news adjustment. The adjustment is the experts' confidence-weighted news effect, scaled by how good the data was (thin or conflicting sources move the number less), and capped at ±8 percentage points per outcome. The market is hard to beat; the cap stops us from fooling ourselves.

Both teams to score is derived from the goals model's expected goals, rescaled to agree with our final over/under number.

How we read the market

Bookmaker prices include a margin. We convert prices to probabilities (1 ÷ price) and divide each by their sum, so they add up to 100%. That is the "market" number next to ours on every page.

When we publish and update

How we measure ourselves

Limitations

Changelog