Model
What a model must beat — mean absolute error, percentage points
|
Always predict 50%
The know-nothing floor
|
10.89 | |
|
Home side's own recent average
Ignores who they are playing
|
8.52 | |
|
Naive midpoint
Home form vs what the away side concedes — the one that matters
|
7.09 |
A model is only earning its keep below 7.09 points of error. Beating "always 50" is not an achievement.
Training set
|
Rows
Played matches where both sides had enough prior matches to form an average
|
30 |
| Home possession seen | 25.9% – 73.1% |
| Mean / spread | 51.4% ± 12.7 |
| Earliest match | 22 Aug 2026 |
| Latest match | 13 Sep 2026 |
|
Split
Chronological, never random
|
24 / 6 |
training.season in config.yaml.
Feature inventory — 68 columns present in both training and fixtures
Minutes spent ahead, level and behind are deliberately not here. They are only known after the whistle, so using them to predict possession would be leakage. They are stored for explaining errors instead: a match settled early is inherently less predictable, because the leading side stops trying to keep the ball.
Possession (30)
home_poss_l5away_poss_l5home_poss_l10away_poss_l10home_poss_l20away_poss_l20home_poss_home_l5away_poss_away_l5home_pass_acc_l5away_pass_acc_l5home_passes_l5away_passes_l5home_touches_l5away_touches_l5home_long_balls_l5away_long_balls_l5home_poss_lost_l5away_poss_lost_l5home_dispossessed_l5away_dispossessed_l5home_recoveries_l5away_recoveries_l5home_poss_won_mid_l5away_poss_won_mid_l5home_passes_f3_l5away_passes_f3_l5poss_gap_l5poss_gap_l10poss_naive_l5h2h_home_poss_avg
Attacking form (7)
home_xg_l5home_xgd_l5home_xg_l10away_xg_l5away_xgd_l5away_xg_l10h2h_home_xg_avg
Defensive form (4)
home_xga_l5home_xga_l10away_xga_l5away_xga_l10
Points and results (6)
home_ppg_l5home_ppg_l10away_ppg_l5away_ppg_l10ppg_edge_l5h2h_home_ppg
Volume (6)
home_shots_l5home_sot_l5home_corners_l5away_shots_l5away_sot_l5away_corners_l5
Matchup edges (3)
xgd_edge_l5home_attack_vs_away_defenceaway_attack_vs_home_defence
Head to head (2)
h2h_meetingsh2h_home_goals_avg
Schedule and fatigue (6)
home_days_restaway_days_resthome_matches_last_14daway_matches_last_14dhome_prev_europeanaway_prev_european
Other (4)
home_matches_beforehome_finishing_gapaway_matches_beforeaway_finishing_gap
Stake guidance — open lines, rated out of 10
Two separate things have to be true before staking much: the edge must be large, and the model must have shown it can find real edges. The first is arithmetic; the second is a track record. The rating is the smaller of the two, so a big edge from a model with no record scores low — correctly. It is 14 settled bets in, so the ceiling is low for a while yet.
| Kickoff | Match | Line is about | Line | Under | Over | Model | Market | Bet | Edge | Stake | Why |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 14 Sep 20:00 | LEE v NEW | Newcastle United | 52.5 | 1.70 | 2.01 | 57.8% | 46% over | OVER | +25.0% | 2/10 | edge alone suggests 5/10, capped at 2 by a very thin track record (14 settled) |
| 13 Sep 16:30 | MUN v MCI | Manchester City | 56.5 | 2.01 | 1.70 | 58.6% | 54% over | OVER | +1.6% | 1/10 | edge of +1.6% at 1.70 |
0/10 means the price is against you — not a close call, a bet to skip. Anything above that is a fraction of what you would stake at full confidence, and quarter-Kelly is treated as the ceiling even at 10/10, because Kelly assumes the probability is exactly right and this one is an estimate.
Next fixtures — with the naive prediction to beat
| Kickoff | Match | Home form | Away form | Gap | Naive home poss |
|---|---|---|---|---|---|
| 13 Sep, 16:30 | Manchester United v Manchester City | 56.5% | 64.5% | -7.9 | 46.0% |
| 14 Sep, 20:00 | Leeds United v Newcastle United | 42.9% | 49.9% | -7.0 | 46.5% |
| 18 Sep, 20:00 | Brentford v Chelsea | 45.1% | 46.8% | -1.7 | 49.2% |
| 19 Sep, 12:30 | Tottenham Hotspur v Aston Villa | 57.8% | 48.2% | +9.6 | 54.8% |
| 19 Sep, 15:00 | Brighton and Hove Albion v Arsenal | 67.2% | 59.4% | +7.8 | 53.9% |
| 19 Sep, 15:00 | Newcastle United v Hull City | 49.9% | 29.4% | +20.5 | 60.2% |
| 19 Sep, 15:00 | Everton v Ipswich Town | 43.2% | 44.0% | -0.8 | 49.6% |
| 19 Sep, 17:30 | Nottingham Forest v Coventry City | 43.9% | 39.4% | +4.5 | 52.3% |
| 20 Sep, 14:00 | Manchester City v Sunderland | 64.5% | 48.2% | +16.3 | 58.1% |
| 20 Sep, 14:00 | Leeds United v Crystal Palace | 42.9% | 41.5% | +1.4 | 50.7% |