BetaHow the projections are made

The projections are not a formula applied to last season's points. Every player's score is simulated thousands of times under FPL's scoring rules, from a forecast of whether he plays, what his team's match looks like, and his own underlying rates. This page sets out each step, the data behind it, and how the result is checked. Back to the projections →
See how accurate it has been

In one paragraph

For each player and each coming gameweek, the model draws a few thousand possible matches. In each one it decides whether he starts, comes off the bench or does not play; how many goals each side scores given the fixture; whether he scores, assists, keeps a clean sheet, makes enough defensive actions, picks up bonus or a card; and adds the points up by FPL's rules. The table shows the shape of those thousands of outcomes: the mean, the median, the single most likely score, the range that holds 80% of them, and the chance of a haul or a blank. A keeper is shown as "most likely 2, sometimes 6", not "4.0".

1. Data sources

Everything is read from stored data at run time. Nothing calls an external site when you load the page.

SourceWhat it gives the modelHow fresh
Official FPL APIPlayers, prices, positions, availability flags and news, set-piece order, fixtures, deadlines, team strength; every player's per-match history this season (minutes, starts, goals, assists, xG, xA, defensive contributions, saves, bonus, cards).Daily public data sync; match history after each round of fixtures.
Last season's recordEach player's starts, minutes and per-90 rates from the previous season, matched by FPL player code so a transfer keeps his record (discounted for a change of club).Loaded once; used as a prior that fades as this season's sample grows.
Market FDR (bookmaker match odds)Expected goals for and against for every fixture, derived from the match-result and total-goals markets.Imported from the odds job; the run notes when it is stale.
Bookmaker player marketsAnytime-scorer and clean-sheet prices inside 48 hours of the deadline, and only while under a day old. The scorer price moves a player's goal rate halfway towards what the market implies on a full appearance; only a very short price also counts as evidence that he starts.Loaded in the 48-hour window; the stage label says when they are in, and the match odds page shows them.
Elite managers' teamsHow often the best FPL managers who own a player start him, weighted by how many of them own him.After each deadline.
Press conferences and team newsAvailability claims extracted from club press conferences and news reports (out, doubt, fit, rested, suspended) with the source and time; rules turn them into availability adjustments.Thursday and Friday afternoons before a deadline; the team news page lists each claim.
Reviewer overridesManual availability or start-chance settings for a player and gameweek, with a reason, for cases the data does not cover.Whenever set.

The run records the state of each input (available, stale or missing, and when it was observed) and shows it on the projections page under "What this run knew".

2. Minutes

The biggest single source of error in any projection is whether the player plays. It is modelled first and separately from how good he is.

For every player and every fixture the model estimates four things: the chance he is available, the chance he starts if available, the chance a start lasts 60+ minutes, and the chance of a cameo from the bench.

  • Availability comes from the FPL flag and news. "Expected back 12 Oct" or "Suspended until" is parsed into a return date, so a player is out for the fixtures before it and ramps back over the following matches. A doubt eases as the fixture approaches. A player who has left the club is out for good.
  • Selection is his recency-weighted share of starts this season, ignoring matches he missed while flagged, blended with a prior. The prior is last season's start share when this season is thin, otherwise a position-and-price band rate. The elite managers' start rate is added, with weight that grows with how many of them own him; a low rate among a handful of owners is ignored, since a cheap keeper is bench fodder for them whether or not he starts. A short price in the anytime scorer market counts as a match or two of evidence that he starts, not a floor. Keepers' starts decay slower and lean less on the prior, because first-choice keepers are stickier than any outfielder. The second match of a double gameweek carries a rotation discount.
  • Duration is his own rate of lasting the hour when he starts, and his cameo rate when he does not, each shrunk towards the position's typical rates.

Team reconciliation. Eleven players start a match, one of them a goalkeeper, and a few substitutes come on. Each team's individual forecasts are reconciled to that shape by shifting every player's start chance by the same amount in log-odds within his position group, so a nailed starter barely moves while fringe players share the remainder. The run checks every team-fixture adds up and lists the result.

"If nailed". Every row also carries the same projection with the player forced to start and play 60+. The table's minutes forecast moves towards it rather than scaling the mixed number, so a substitute's appearance point never becomes a twelve-point projection.

3. Match context

How many goals each side is likely to score, fixture by fixture.

A team attack and defence rating is fitted on this season's team-level xG from the player match histories, shrunk towards FPL's published strength ratings when the sample is small, with a home advantage term and a goals-per-xG factor. When the Market FDR import is fresh, the bookmakers' expected goals replace the fitted numbers for that fixture, since the market has already priced the line-ups and the injuries. Each run says how many team-fixtures came from the market and how many from the fitted model.

expected goals for  = attack(team) × defence(opponent) × home advantage × league average
goals in a match    ~ Poisson(expected goals), with 8% of 0-goal draws moved to 1 (the Poisson
                      gives too many clean sheets), drawn once per fixture and shared by both teams

4. Player rates

What he does per 90 minutes, and how much to trust it.

Each per-90 rate (non-penalty xG, penalty xG, xA, defensive contributions, saves, cards) is a recency-weighted average of this season's matches with a half-life of four, shrunk towards a prior worth three matches. The prior is last season's own rate when he has one, discounted for a change of club and capped at fifteen matches' worth, otherwise the position-and-price band.

rate = (Σ wᵢ · xᵢ + K · prior) / (Σ wᵢ · minutesᵢ/90 + K),   wᵢ = 0.5^(matches ago / 4),  K = 3
  • Penalties are split out: a first-choice taker gets the team's penalty xG on top of his open-play rate, and loses it when the order changes.
  • Set pieces add an xA term from the current corner and free-kick order, fitted by position as a quarter of the gap between takers and non-takers last season, entering through the prior so it matters most when a duty has just changed.
  • Finishing is a mild adjustment of goals to xG, shrunk hard, so a hot streak lifts a player only a little.

5. The simulation

Thousands of gameweeks, scored by FPL's rules.

For every simulated match the player's minutes are drawn from his forecast. Given the goals drawn for the fixture, his goals are a share of his team's (his xG against the team's usual xG, adjusted for time on the pitch), his assists a share of the remaining goals, a clean sheet follows from the opponent's goals, and the defensive contribution is a threshold event on his own hit rate. Bonus is drawn from tables fitted on last season by position and what happened in the match. Yellow cards, own goals and penalty misses are drawn at their rates. Points are added up by the rulebook, including the 60-minute appearance point and the goals-conceded deduction.

  • Shared draws. Every player in a fixture sees the same simulated scoreline, and the team's goals are shared out across the players on the pitch one at a time in proportion to their rates, each with at most one assister. A 1–0 has one scorer, two team-mates never score the same goal, and two squads compared on the same simulation see the same scorers.
  • Horizons. Each player's per-gameweek draws are summed across the simulation, so "next six gameweeks" is a true distribution of the total, with the chance of at least one haul and of blanking every week.
  • What is reported. The mean, median and mode; the 10th and 90th percentiles; the chances of 10+ (haul), 2 or fewer (blank) and zero; and the full probability of every score from −4 upwards, which the player drawer draws.

6. Stages of the week

A run says what it knew.

Runs happen every few hours, more often as the deadline nears, and each is labelled with its stage: Early look (form, fixtures and availability only), Odds in (bookmaker markets loaded, usually 48 hours out), Post press conference (the day before, availability read from press claims and flags) and Deadline (the last two hours). Every run is kept with its stage, and once the gameweek has been played each is scored against the real points, so the accuracy page shows how much the forecast sharpens as information arrives.

7. How it is checked

Walk-forward backtests, then the live archive.

Before going live the model was run over the whole of last season gameweek by gameweek, each time using only the matches before it. For likely starters over 5,264 player-gameweeks, the mean's average error was 2.35 points against 2.78 for a naive season-average forecast, the rank correlation with actual points 0.22 against 0.13, the P10–P90 range held 88% of outcomes, and the whole-distribution score (CRPS) was 1.605. Parameters were chosen on that score, with everything within 0.02 of it treated as equal and the simpler setting kept. Several ideas were tested and rejected the same way, including a Poisson treatment of defensive contributions and a low-score adjustment that four gameweeks of this season had suggested and the full season did not.

Because those parameters were chosen on that season, a second season was scored with nothing tuned on it: 2024/25 walked forward with priors fitted on 2023/24. Likely starters, 5,408 player-gameweeks: average error 2.27 against 2.66 for the last-three-matches baseline and 2.38 for the season average, rank correlation 0.30 against 0.19, P10–P90 coverage 86%, CRPS 1.505, with clean sheets and goals within 3% of what was scored.

Live, every run is scored once its gameweek finishes, by stage, by weeks ahead and by position, and the results are on the accuracy page. A run is only scored if it finished before the deadline it was for.

8. What it does not do, yet

  • It does not read confirmed line-ups an hour before kick-off; the deadline run is the last pre-deadline information.
  • It does not model managers' tactical changes mid-match, or substitutions beyond the cameo rate.
  • Possession and pressing styles are not yet an input to the defensive-contribution rate; a backtest of an opponent adjustment showed little gain, so it is parked until there is match-event data to test it properly.
  • Bonus is drawn from last season's tables by position and match events rather than from a BPS simulation.