How our model works

The full reasoning our prediction engine applies to every match — no black box.

1. Score matrix first (Dixon–Coles)

Expected goals for each side come from decaying attack/defence, rolling last-3/5/10 and season windows (weights learned on earlier seasons), and dynamic Elo with time decay. Those rates feed a Dixon–Coles score matrix (not independent Poisson), which specially adjusts 0–0, 1–0, 0–1 and 1–1. 1X2, over/under and BTTS are all derived from that matrix. The default action is NO BET; only a selection passing agreement, sample, freshness, and probability thresholds is a bet. Odds and movement are neutral because no reliable timestamped production series is retained. There is no unrestricted 70% 1X2 target and no live in-play engine.

2. Home advantage

Every home side gets a fixed baseline boost, reflecting the general edge home teams have across football. This number self-adjusts slightly over time (see "Self-learning" below) based on how home teams have actually performed against our predictions.

3. Head-to-head history

We look at the two teams' past meetings, weighted by recency and by whether the match was at the same venue as the one being predicted (home-ground meetings count more for a home-side prediction). The more meetings on file, the more this factor counts.

  • Dominance rule: if a team has won 4 or more of the last 5 meetings between these two sides, that's treated as a real, repeatable pattern — it adds a full, fixed boost to that team on top of the regular weighted score.
  • Draw pattern rule: if 3 or more of the last 4 meetings ended in a draw, both teams get a boost toward a draw prediction for this one too.

4. Expected goals (xG)

We separately track each team's scoring rate at home and away, and their conceding rate at home and away, both season-long and recency-weighted toward the last 5 matches. The projected score for a match blends each side's own scoring rate against the opponent's own conceding rate — not the two teams' raw output compared directly. The gap between the two sides' projected goals feeds into the edge, but deliberately with less weight than form and h2h, so no single number can dominate the call.

5. Draw probability

Draws are modelled separately from the win/loss edge, blending four things: how close the match looks overall, each team's own real draw rate this season, the head-to-head draw rate (once there are enough meetings on file), and a Poisson-distribution estimate — the mathematical probability of low, matching scorelines (0-0, 1-1, 2-2) given both teams' expected-goals rates. Small extra nudges apply when projected scores are almost identical, when total expected goals is low, or when both teams are on short rest (fatigue tends to produce more draws).

6. Missing key players

Each side's list of injured/suspended key players (impact-rated, minimum 10 appearances) is factored in as a penalty to that team's edge — losing a starting striker or goalkeeper matters more than a squad player.

7. Corners & cards

Predicted for each side separately (not as one combined number), first half and second half, using the same venue-split, season-long, recency-weighted approach as expected goals: each team's own corners/cards rate blended against the opponent's own rate at conceding them. Confirmed match officials (where available) adjust the cards prediction — some referees run a noticeably stricter or looser game.

8. Self-learning

Every prediction we show is logged. Each night, a job checks which of those fixtures now have a final result and grades whether our top pick was right. Based on the pattern of hits and misses, two things adjust automatically over time: the home-advantage baseline (if home teams are consistently over- or under-rated) and an overall confidence scale (if the model is too sure of itself and getting burned, or not confident enough when it's actually right). See the past predictions page for the full track record this produces.