Formula v1.0-phase0 · rules 2026-27
Two stages. A formula gives every selectable player an expected-points score for each of the next five gameweeks. An integer program then buys the fifteen-player squad that maximises a weighted sum of those scores under the game’s own rules.
A player’s score for a gameweek is the sum of nine additive components. Six add points — appearance, goals, assists, clean sheet, defensive contribution, saves — and three take them away: goals conceded, cards, and shrink. Each is an expectation, not a prediction — the goals term is the number of goals the player is expected to score on average across the many ways the fixture could go, multiplied by the points a goal is worth in his position.
Every component is conditioned on the player actually being on the pitch, through three probabilities carried alongside it: the chance he starts, the chance he plays at all, and the chance he reaches sixty minutes. This is why a nailed-on starter at a poor club frequently outscores a better footballer with a rotation risk.
The ninth component, shrink, is the one that does the least obvious work and prevents the most embarrassment. A player with very few appearances has his own scoring rate pulled back towards the average for his position, hard at first and less so as evidence accumulates. Without it, one goal in one substitute appearance in pre-season would read as a rate of a goal a game. It is always negative or zero for the players a model would otherwise fall in love with, which is the point.
The optimiser maximises, over the five-gameweek horizon, the sum of: the best legal starting eleven each week — exactly one goalkeeper, three to five defenders, two to five midfielders, one to three forwards — plus the best starter’s score a second time for the captain, plus 0.05 of the benched keeper’s score, plus 0.3, 0.1 and 0.03 of the three benched outfielders’ scores in descending order. Each week is discounted by 0.85 raised to the number of gameweeks away.
Adding up all fifteen players’ expected points is not this quantity and can differ from it by a factor of three: it charges full price for a bench that is mostly never used. Every comparison on this site uses the objective above.
These are the numbers the run was given. They are recorded in every week’s run file, so a change to any of them is visible as a change between weeks.
| Parameter | GW1 | What it does |
|---|---|---|
| horizon | 5 | Gameweeks scored ahead. Long enough that a one-week fixture swing does not dominate; short enough that transfers and injuries have not made it fiction. |
| decay | 0.85 | Weight applied per gameweek of distance. Gameweek 1 counts 1.00, gameweek 5 counts 0.52. Being wrong now costs more than being wrong later. |
| bench_gk | 0.05 | Share of the benched goalkeeper’s score that counts. Near zero: a second keeper is insurance, not a scorer. |
| bench_outfield | 0.3, 0.1, 0.03 | Shares for the three benched outfielders, best first. The first bench slot is worth real points; the fourth is worth almost nothing. |
| shrink_knee | 4 | Appearances below which a player’s own rate is pulled towards the positional prior. |
| shrink_slope | 0.685 | How hard that pull is. This is what stops forty minutes of pre-season becoming a season-long forecast. |
| rate_half_life_gw | 12 | Gameweeks over which a player’s historical rate loses half its weight. |
| rate_season_decay | 0.35 | Additional discount applied per season of age on a rate. |
| budget | £100.0m | Squad budget, the game’s own. Fifteen players, at most three per club, 2/5/5/3 by position. |
What the model cannot currently do.
Limitation 1
There is no bonus-points term at all
The formula has nine components and none of them is bonus. Bonus is roughly a tenth of a good player’s return and is systematically biased towards exactly the players a model likes least — ball-winners, aerial defenders, goalkeepers who make saves in losing sides. Judgement call five this week was a hand correction for precisely this hole.
Limitation 2
Only 81.1% of selectable players match to any history
455 of 561. The rest are priced from positional priors alone and are flagged “no history” wherever they appear. Promoted-club and newly-signed players are the bulk of the gap, and they are also where the largest mispricings live. Tzolis, this week’s most consequential disagreement, is one of them.
Limitation 3
18 of the twenty clubs are priced by the difficulty-rating fallback
The chain is chain[xgls>fdr]: expected goals where the archive supports it, the published fixture-difficulty rating where it does not. FDR is a small-integer human judgement, and it does not distinguish a hard fixture from a high-variance one. Judgement call four is an argument with an FDR-priced fixture.
Limitation 4
Cross-league transfers are a guess with a number attached
A factor is applied to a player’s scoring rate when he arrives from another league. It is not fitted — it is chosen, per transfer, by me. The Belgian factor of 0.58 this week is the single largest lever anyone pulled, and it is declared as a judgement call rather than buried in the model, because it is not really part of the model.
Limitation 5
The optimiser assumes the squad is picked fresh each week
It maximises over a five-gameweek horizon as though the whole fifteen could be rebuilt at no cost every week. Real transfers are limited and points-penalised. The horizon figure is therefore an upper bound on what the squad could deliver, not a forecast of what it will.
Limitation 6
Prices move after publication
Prices change at 23:00 UTC on the three nights before the deadline. A squad that fits when published may not fit when entered. This week left £0.5m of headroom, which absorbs one rise across the fifteen and not two.
Limitation 7
The snapshot cannot read the news
Transfers, medicals and manager remarks land hours before the official data reflects them, and sometimes it never does. George Hirst was a clean, available Ipswich forward in this week’s snapshot while he was reported to be mid-medical at Stoke. Nothing structured would have caught it.
Limitation 8
One week is not a track record
Nothing here has been scored yet. Every claim on this site is currently a claim about process, not about accuracy. The track record page is empty and says so.