PLdata

Model

All leagues Premier League LaLiga Bundesliga
Target: home possession %. Possession is zero-sum inside a match, so this one number defines the whole result — the away side is 100 minus it. This is a regression problem, not a win/draw/lose one. No model is trained yet; the figures below are what the modelling layer has to work with.
0
Training rows
48
Usable features
0
Fit split
0
Holdout split
280
Fixtures to score

What a model must beat — mean absolute error, percentage points

Not enough data yet.

Training set

Rows
Played matches where both sides had enough prior matches to form an average
0
Split
Chronological, never random
0 / 0
No training rows for this league yet. 26 matches played, and min_history is 3 — every row needs both sides to have 3 earlier matches to average, which nobody has until about matchday 4. Nothing is broken; the season is young. The figures below are what the model will use once there is something to fit.
48 features against 0 rows. More columns than examples means any model will fit the training data perfectly and learn nothing that generalises. Until the season fills out, prefer a handful of possession columns and strong regularisation over the full set — or widen training.season in config.yaml.

Feature inventory — 48 columns the model would use, taken from the fixture side since there is no training set yet

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 (16)

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_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 (4)

home_sot_l5home_corners_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 (2)

home_days_restaway_days_rest

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 10 settled bets in, so the ceiling is low for a while yet.

Kickoff MatchLine is about LineUnderOverModel MarketBetEdgeStakeWhy
13 Sep 15:30 ELV v FCB FC Bayern München 65.0 1.85 1.85 60.0%* 50% over UNDER +18.3% 2/10 edge alone suggests 4/10, capped at 2 by a very thin track record (10 settled)

* 1 row here did not come from a fitted model. This league has too little history to fit one, so the figure is the naive midpoint: the side's own recent possession averaged against what its opponent concedes — on as few as two matches each. That formula shrinks towards 50 by construction, so it understates a mismatch. A strong side away at a weak one reads too low, and the edge it implies against a bookmaker's line can point the wrong way entirely. The Bet, Edge and Stake columns on these rows are arithmetic, not a tested prediction.

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

KickoffMatch Home formAway formGapNaive home poss
13 Sep, 15:30 SV Elversberg v FC Bayern München 45.0% 67.0% -22.0 39.0%
18 Sep, 18:30 FC Bayern München v 1. FC Union Berlin 67.0% 48.0% +19.0 59.5%
19 Sep, 13:30 Hamburger SV v 1. FC Köln 46.3% 47.3% -1.0 49.5%
19 Sep, 13:30 SV Werder Bremen v FC Augsburg 42.7% 42.7% +0.0 50.0%
19 Sep, 13:30 Eintracht Frankfurt v Sport-Club Freiburg 53.3% 52.7% +0.7 50.3%
19 Sep, 13:30 Borussia Mönchengladbach v 1. FSV Mainz 05 46.7% 49.7% -3.0 48.5%
19 Sep, 16:30 VfB Stuttgart v Borussia Dortmund 49.3% 50.3% -1.0 49.5%
20 Sep, 13:30 Bayer 04 Leverkusen v RB Leipzig 60.7% 58.7% +2.0 51.0%
20 Sep, 15:30 FC Schalke 04 v SV Elversberg 39.3% 45.0% -5.7 47.2%
20 Sep, 17:30 SC Paderborn 07 v TSG Hoffenheim 52.7% 51.7% +1.0 50.5%