DashboardHow It Works

How it works

What the page tells you each week, how far to trust it, and — further down, for the data-curious — what is inside it.

Using it ↓·Under the hood ↓

Using it
01

What this is

Every week a model reads every Premier League player — form, opponent, set-piece duty, how likely he is to play the full ninety — and works out how many points each should score. From those numbers it builds the strongest fifteen, names a captain, names the players most likely to return, and ranks who to buy for the weeks ahead.

You don't have to take its word for anything. Every prediction is frozen before the deadline and scored against what really happened, in public. Nothing is edited afterwards. The Model Scoreboard is the receipt.

The page answers two different questions and keeps them apart. This gameweek: who to captain, who to rely on, the best fifteen right now. The weeks ahead: who scores most across the next three or five gameweeks — the question a transfer answers, because whoever you buy today is still in your side a fortnight from now.

Every call wears a small tag saying which it is: GW6 means this gameweek only, GW6–8 means a run of them. A player can be the right pick for one and the wrong pick for the other.
02

How good it is

Most models quote their accuracy. That is the wrong question: FPL is a selection problem, and what matters is whether the players it names beat the ones you would have named without it. So it is judged on the question a manager actually has: of the fifteen players picked each week — two keepers, five defenders, five midfielders, three forwards — how many finish among the top scorers in their position? Every method below was replayed across 114 gameweeks of three seasons, trained only on what was known at the time, choosing from every registered player, with anyone who did not play counting zero.

MethodTop scorers, of 15What it is
This engine2.56—
Points per game so far2.10one line of code
The most-owned players2.35what everyone else owns
Fifteen names at random0.39the floor
Hindsight: each season total2.75uses the future
Hindsight + known line-ups3.50uses the future

The margin over points-per-game is +0.46 top scorers a week, 95% confidence interval [+0.21, +0.72] — a real edge, though a one-line rule gets most of the way. The last two rows are the telling ones. Knowing in advance the season total every player went on to score is statistically level with the engine (+0.19, interval [−0.08, +0.46]); knowing every line-up as well adds almost a whole top scorer a week. Thirteen different ways of training the model all landed between 2.4 and 2.7. The limit is not the maths but information — above all, who will start. (scripts/replay_team_of_the_week.py.)

Put plainly: nearly half the fifteen (47%) return each week — a goal, an assist, a clean sheet for a keeper or defender, or three saves — counting a pick who didn't play as a miss. An ordinary player who did play returns 26% of the time; fifteen picked on points-per-game, 42%.

An edge, not an oracle. One week of football is mostly luck. Anyone quoting a model's accuracy without naming what it beat — and what perfect hindsight would have managed — is not telling you the useful half.
03

The three calls

At the top are the week's three answers. Tap any name for the reasoning.

Captain — doubles your points, so it's the biggest call of the week. One name: the midfielder or forward in the eleven with the best chance of a big week — ten points or more — among those expected to play the whole match. The card shows that chance, from a model trained on exactly that outcome. A V on the pitch marks the vice-captain, from another club, who is doubled instead if the captain does not play at all. Never a defender: over four seasons a defender who started scored ten or more in 4% of his matches, a forward in 10%. Replayed over 114 gameweeks this rule averaged 7.6 captain points a week against 6.5 for the hand-weighted score it replaced (95% interval +0.0 to +2.2) — probably better, not by much.

Bring in — the best buy over the next three gameweeks, one position at a time: DEF, MID, FWD. A transfer is always a defender for a defender, so one name across every position answers a question you can't act on; as a single name, the card repeated the previous week's player 57% of the time. A blank counts as zero and a double gameweek counts twice. Replayed over four seasons, the top pick scored 11.6 points over three gameweeks for defenders (an ordinary eligible defender 8.1), 17.7 for midfielders (10.0) and 16.6 for forwards (11.9). For keepers it was 9.9 against 9.4 — no real edge — so no keeper is named.

Already have him? Tap Got him? Next and the card moves to the next best in that position; it remembers on your phone, and undo puts him back. Nothing about who else owns a player goes into this — only what you tell it about your own team.

Bankers — the three players most likely to return this gameweek, one per club. The percentage beside each is his chance of a return this week: his own share of five-point weeks, moved toward what last season implies, then up or down by the fixture.

“Banker” oversells, so here is the measured version. Replayed over four seasons and 147 gameweeks, picks like these produced a goal, an assist, a clean sheet or three saves 54% of the time. An ordinary eligible player managed 34%; ranking on points-per-game came 4.3 points of return rate behind the bankers (interval 0.2 to 8.4 — an edge that only just clears zero). At least one of the three came off in 87% of gameweeks; all three in 18%. They are the best bets on the board and each one still blanks nearly half the time.

The bankers and the captain are different calls. The captain is chosen for his ceiling — you want the player who might score fifteen. A banker is chosen for his floor — the player least likely to score two. Sometimes one man is both.

04

The best fifteen

Eleven to start and four on the bench, shown in formation, with a copper C on the captain and a V on the vice-captain. The captain's numbers are shown doubled, as FPL counts them — expected 7 shows as 14, a score of 6 as 12 — so the cards add up to the team's total. Tap anyone for the full breakdown. From Gameweek 2 on it is the best fifteen available, not a squad costed against the £100m budget.

You choose what each card shows; every visit opens on the opponent:

Fixture — this week's opponent. The default.
Price — what he costs, for fitting a budget.
Form · xGI — points per match over his last four, and expected goal involvements per ninety minutes. The first is what he has scored; the second is what his chances were worth. A big gap between them is luck, one way or the other.
Expected — expected points this week. Once the gameweek is being played this becomes Exp · Live: what was expected, and beside it what he has scored so far — green once he has matched it. A dash means his match hasn't kicked off.

The switch on the right turns the pitch into a ranked list: the eleven in order of expected points, then the bench. On a wide screen each player's expected points is drawn as a bar — the range the model expects, with a mark at its best guess and a dot for his live score.

Read the bars, not the order. A single player's projection is typically two or three points out either way, however good the model — that is what one game of football is like (the Scoreboard shows this season's figure). So a 6.3 and a 5.1 are the same number as far as the engine is concerned: the pitch shows a whole number, the list a range like 4–9, and neither shows “6.3”. When two bars overlap, the model is not saying one player will outscore the other. The range is read from the public record, so it moves as the engine's real accuracy moves.
05

The weeks ahead

Below the pitch is the only part of the page that looks past this weekend: the top ten players on expected points across the next three gameweeks, or the next five. It is a ledger rather than a pitch so that it is never mistaken for a team to pick this week. Each row shows the run of fixtures — green for the kinder ones, rose for the harder — and the projected total, with a thin line under it so you can see where the list drops off.

Use three gameweeks for an ordinary transfer. Use five when you are planning around a wildcard, or deciding whether a premium player is worth building toward. If nobody on the list fits your team, the strongest move is usually no move: bank the free transfer. A hit of −4 needs a big week just to break even.

The honest size of this. Replayed over four seasons and 139 gameweeks, the top row went on to score 18.6 points across the three gameweeks. Rows two to five averaged 14.3, rows six to ten 12.4, and an ordinary eligible player 9.3 — so the order means something, and the edge over picking blind is large. But ranking on season points-per-game alone got 18.5: against a manager who already knows who the good players are, this ranking is not measurably better. Over five gameweeks the picture is the same: 30.8 for the top row, 15.0 for an ordinary pick, 30.7 for points-per-game.
06

Checking its work

One gameweek per page. When a deadline passes, everything on the page freezes together — the fifteen, the captain, the bankers, the ranking — and becomes the record of what was called, not advice you can still act on. Nothing is added to a gameweek after its deadline, which is why anything new on the page first appears with the next gameweek.

The chips under the header rewind the season. Tap a past week to see the exact team named before that deadline, what everyone actually scored, and whether the eleven beat the average manager.

A finished week is scored the way FPL scores your team. A starter who did not play at all is replaced from the bench, in the order shown, by the first player who did play and keeps a legal formation; his card says OUT and stays grey, because not playing is a different zero from playing badly, and the substitute's says IN, and his points are simply added. The formation always stays legal — one keeper, at least three defenders, at least one forward — so with three defenders, a defender who didn't play is replaced by the first defender on the bench, even if a forward is ahead of him. The captain counts twice if he played; if he didn't, the vice-captain does — and only once the captain's match is over. Weeks from before the page named a vice-captain have none.

A chip marked SCORING is a week that has been played but not yet confirmed. FPL makes a gameweek's scores final at 9am (UK) the day after its last match, and scoring before then would lock in numbers that can still move — so the week shows the locked eleven with dashes where the results will go, and scores itself as soon as the official numbers land.

The Model Scoreboard is the proof, in two parts. First the long run, replayed on past seasons: how often at least one banker returned, and the captain's points beside the world's top 50 managers'. Then this season, live: points a week against the average manager and — the harder test — against a team picked on points-per-game, built and scored exactly as ours is, with a formation, a captain and substitutions. Beating the average manager is table stakes; beating the obvious shortcut is the actual claim. Some weeks it wins, some it doesn't, and the losses stay on the page.

Behind it is a ledger. The full prediction set is committed before every deadline, the official results are fetched once FPL confirms them, and the scoreboard is computed from those two files and nothing else. The system refuses to write a ledger entry after its deadline, even when that leaves a gameweek with none. When a season ends it is sealed into its own archive and the public record starts again from zero; the models keep learning across seasons.

07

A five-minute routine

1. Open the page a day or two before the deadline.
2. Transfer first: check Bring in and the weeks ahead against your own shortlist. Make the move — or don't, and bank it.
3. Then the team: see which of the fifteen you own, and start them.
4. Then the armband: weigh the captain call against your gut.
5. After the gameweek, rewind and see how it went.

The model sees data. It doesn't see press conferences, a new signing settling in, or a manager who's lost the dressing room. It's one strong input, not the final word — and when you know something it can't, back yourself.
08

Where it's weakest

Worth knowing so you can second-guess it in the right places.

Rotation risks are overrated. The models estimate what a player does if he plays, and the page largely treats him as though he will, so a squad player with good underlying numbers is rated as though he starts every week. The fix — a separate model for the chance of starting — has its data in place but is not built yet. If you suspect someone is being rested, trust that over the number.

Anything off the pitch is invisible. New signings, new managers, pre-season fitness, a press conference on Friday. Someone who follows a club closely will beat the model on those, reliably.

New arrivals start blind. In Gameweek 1 a player with no Premier League minutes gets no number at all rather than a guessed one; after that he is judged mostly on what an ordinary player does until he has a few games behind him. Promoted sides start from cautious priors too. Their absence from the top of a list early in the season is not a verdict.

A high clean-sheet percentage is a ranking, not a promise. Across keepers and defenders the chances now average 21.0% said against 21.5% kept, but players rated above 50% keep one only about 31% of the time.

It doesn't learn from this season's results directly. Each week's results are added to the training data, but the models are refitted on the four archived seasons; this season reaches them through the inputs — form, minutes, rolling rates. This season's rows come in once the archive is rebuilt to match them.

Under the hood

For the data-curious: what is inside, what was measured rather than assumed, and what measurement threw out.

09

From data to a team

Ingest → features → predict → score → optimise → verify. Match histories, fixtures and live results come from the official FPL API. A feature factory turns each player-fixture into 47 signals. Seven gradient-boosted models each predict one scoring event, and an eighth predicts the chance of a ten-point week, which chooses the captain. The events become points (section 10), a linear program assembles the squad, and a reconciliation job scores everything the way FPL does once results land.

Why seven models instead of one? Predicting “total points” directly buries the reasons in a black box. Predicting the events that generate points keeps every claim inspectable — you can see that the model expects a goal but no clean sheet, not just a mysterious “7.2”. Each uses an objective matched to its statistical shape:

EventObjectiveWhy
GoalsPoissoncount data with a low rate
AssistsPoissoncount data with a low rate
Clean sheetsLogisticbinary outcome per match
SavesPoissonkeeper workload is a count
Bonus pointsPoissondiscrete 0–3 award
Defensive contributionLogisticthreshold event (10+/12+ CBIT)
MinutesSquared errorcontinuous playing time

These are expectations, not classifiers whose verdicts get taken — a distinction that matters more than it sounds (section 12). Honestly, though: one model would pick as well. A single model of total points, given the same inputs, found 2.52 top scorers a week against the seven's 2.56 — no measurable difference. The seven stay because they let the page show a goal chance, an assist chance and a clean-sheet chance, not because they pick better.

The stack: Python with XGBoost for the models, PuLP for the linear program, pandas and NumPy throughout. The site is a static Next.js build — every number it shows is generated by scheduled jobs, so there is no server to fall over on deadline day — and training, prediction and scoring all run in CI on pinned versions, so the model that makes a public prediction is the model the repository describes.

10

From events to points

The event predictions are not fed to another model — they are multiplied by FPL's scoring rules, position by position: a defender's clean sheet is worth 4, a midfielder's 1; goals 4 to 6 for outfield players; a point per three saves; minus for goals conceded. Transparent arithmetic, not a second black box.

It is not exact, and that is known. The goals-conceded charge is too large, the defensive-contribution award is under-counted, and a keeper's goal is valued at 6 instead of FPL's 10. Correcting those terms one at a time made the picks measurably worse — the over-charge offsets a clean-sheet model that is too confident at the top — so they will be replaced together rather than patched.

A 2,000-run simulation turns event rates into the chance of a haul or a return shown in each player's sheet, including the real-world link that a goalscorer is likelier to collect bonus too. Its tails are too thin — bonus points don't follow the shape it assumes — which is why the captain's “chance of 10+” comes from a model trained on that outcome directly.

Gameweek 1 is solved differently. There is no form yet, but the whole budget is in play at once and the team has to survive the opening run on one free transfer a week. Solved as “who scores most this Saturday”, it spent £84.5m of £100m and owned no premium. So the opening squad is chosen on expected points over the next six gameweeks, decay-weighted, from what exists before a ball is kicked: last season's per-90 rates shrunk by sample size, how often a player returned, set-piece duty and the real fixture list. Minutes security is a gate, not a bonus; clubs are capped at two players rather than three, which costs about 0.6% of expected points and removes one team's injury crisis taking three of yours.

11

What it learns from

113,592 player-gameweeks across four seasons, 2022-23 onward — three of them rebuilt from the public archive through the same feature pipeline, so the engine has seen four seasons begin rather than one. Roughly 60% of those rows are players who did not play. They used to be discarded, which fitted the minutes model on a sample where everyone always played and scored every backtest on a universe already known to have turned out; they are kept now, which is what lets section 02 use the real universe.

Everything is computed from match history as it stood before each gameweek, never season totals, which would leak the future into the past: rolling points and expected goal involvement over 3 to 15 matches, home and away output separately, penalty and corner duty, recent minutes, and opponent strength from each team's rolling form rather than the static difficulty badge.

Price and ownership are deliberately absent. Cost is derived from past output, so using it to predict output is circular. Ownership and transfers are what other managers think of a player, not what he has done, and a model fed them drifts toward the team everyone already has. Ownership was an input until Gameweek 7 of 2026-27, and this page once claimed otherwise. Taking it out, over 114 gameweeks: 2.56 top scorers a week without it against 2.55 with it, interval [−0.13, +0.15]. What changed is who gets picked: 3.3 players a week owned by fewer than 5% of managers, up from 2.5, and more of them come in.

How fast it learns. Replaying past seasons to find the blend of last season and this one that best predicted what happened shows that minutes and points are learned at completely different speeds:

QuestionWeight on last seasonMeasured
Whether he startszerothis season beats last season by 46% after one gameweek
How much he scores0.75–0.90live points are 9–16% worse than ignoring this season, through GW3

One match settles whether a player is in the team; it says almost nothing about how good he is. So the engine moves immediately on the first and slowly on the second, and a player with no top-flight record is shrunk toward the league's ordinary return, so one big afternoon cannot pass for a rate.

The practical version for your own decisions: trust a lineup change quickly, trust a hot streak slowly. Judging a player on this season's points alone is worse than ignoring this season entirely until around Gameweek 4.
12

How changes are tested

Every change is gated on a walk-forward replay: train on what was known at the time, predict the week that follows, roll forward, measure. Every comparison is a paired bootstrap over gameweeks — a point estimate and a 95% interval — and the unit is the gameweek, so a season is 38 observations, not eleven thousand player-rows. A difference whose interval contains zero is not a result, and this page says so wherever it quotes one.

The yardstick is ranking against a baseline, not average error. Adding three seasons of history made average error worse by around 12% while lifting the average score of the top twenty predicted players in the opening weeks from 4.15 to 5.75. Tuning on error would have rejected the most useful change made that year.

The most expensive mistake. Attacking returns are outnumbered by blanks about five to one, so for a long time the rows with goals and clean sheets were up-weighted to compensate — correct for a classifier, but these models feed an expected points sum, and up-weighting biases an expectation upward by construction. Hard ceilings then capped every prediction near the level of the league's best player, tying everyone at the top of the list. Removing the weights was worth +7.0 points a week (interval +3.0 to +10.9), widening the ceilings +5.1 (+2.1 to +8.4). Before both, the engine was not statistically distinguishable from points-per-game.

A hand-tuned stack of form and fixture multipliers sits on top of the model output. On the old, distorted models it measured +5.0 points a week; on the corrected ones, +0.7, interval [−2.0, +3.4] — nothing. It was compensating for a defect one level down. It is still applied, and is next to be removed. Likewise the simulation's chance of any return looked like the natural thing to rank bankers on, until the sealed record showed players it put above 70% returned 34% of the time — so the bankers use the plainer score in section 03.
13

Small glossary

xP — expected points, the model's best estimate for the week; shown as a range because a single week is never that precise.
Return — a goal, an assist, a clean sheet for a keeper or defender, three saves, a penalty save, or the defensive-contribution award with at least four points in all.
Return chance — the probability of that this gameweek.
Banker — the game's word for a player you expect to return. Here: one of the three most likely to. Likely, not certain.
Form — points per match over the last four. (FPL's own “form” averages the last 30 days instead.)
xGI — expected goal involvements per ninety minutes: what his chances, and the chances he created, were worth.
Haul — a big single week, nine points or more. The captain card's “for 10+” is a separate, stricter figure: the chance of ten or more.
Vice-captain — doubled instead of the captain if the captain doesn't play at all; marked V.
Clean sheet — no goals conceded; four points for a defender or keeper.
Nailed — a guaranteed starter, not a rotation risk.
Defensive contribution — two points for 10+ clearances, blocks, interceptions and tackles (defenders) or 12+ including recoveries (midfielders and forwards).