The metrics, explained
Every number on FPL Value is either published by Fantasy Premier League or derived from FPL's own data with a formula shown on this page. Nothing is a black box. Here is what each one means, how it's calculated, and when it will mislead you.
How FPL scores a player
Everything below is built on the FPL points system, so it's worth having it to hand. A player earns 1 for playing up to 60 minutes and 2 for 60 or more. Goals are worth 6 for goalkeepers and defenders, 5 for midfielders and 4 for forwards. An assist is 3 for everyone. A clean sheet is 4 for goalkeepers and defenders, 1 for midfielders and nothing for forwards, and only counts if the player was on the pitch for 60 minutes. Goalkeepers and defenders lose 1 for every two goals their team concedes. Goalkeepers also get 1 per three saves and 5 for a penalty save. Defensive contribution pays 2 when a defender reaches 10 combined clearances, blocks, interceptions and tackles in a match, or a midfielder or forward reaches 12 including recoveries. Then there are the usual deductions for cards, own goals and missed penalties, and up to 3 bonus points per match for the top performers on the Bonus Points System.
The reason this matters: two of those components, appearance and bonus, are earned almost regardless of what a player does, while goals, assists and clean sheets are the ones that separate good picks from bad. Several metrics below exist to strip out the first group and focus on the second.
Points per game PPG
The most basic rate stat and still the most useful single number for comparing players who play similar minutes. It answers "when this player is on the pitch, what do I get?" FPL publishes its own version on the site; ours is recomputed for whatever gameweek window and venue you've selected on the dashboard, so you can ask for PPG over the last six weeks, or PPG at home only.
Its weakness is that a one-minute cameo counts as a game. A player who comes on for the final minute and scores has a PPG of 1.0 for that match, which drags his average down; conversely a sub who scores from the bench in ten minutes looks like a superstar on PPG. Per-90 figures (below) fix this at the cost of exaggerating players with tiny minutes.
Points per million PPM
How many points a player has returned for every million spent. It's the simplest value measure and the one most people mean when they say a player is "good value". A £4.0m defender on 20 points (5.0 PPM) has done more for your budget than a £15.5m forward on 15 (0.97 PPM), even though you'd obviously rather have the forward's ceiling.
PPM has two blind spots. It's a total, not a rate, so it favours players who have simply played more games. And it doesn't account for the points everyone gets for showing up: a £4.0m defender who plays 90 minutes every week and does nothing else collects 2 points a game, or 0.5 PPM per match, purely for existing. That baseline is what VAPM removes.
Examples on this page use data after GW2 of 2026/27 and will drift from the live dashboard.
Value added per million VAPM
VAPM is points per million with the appearance points removed. Subtracting 2 from a player's points per game leaves only what he actively earned — goals, assists, clean sheets, bonus, saves — and dividing by price tells you how much of that active return you're getting per million. It was popularised on r/FantasyPL as a way to find the cheap players who genuinely contribute rather than just fill a bench slot.
The subtraction changes the picture more than you'd expect. A £4.5m defender averaging 3.0 PPG looks respectable on PPM (0.67 per game per million) but has a VAPM of just 0.22: two-thirds of his points were for turning up. Meanwhile a premium on 8.0 PPG at £12.5m has a VAPM of 0.48, so despite the price he's adding more than twice as much per million above baseline. That is the comparison VAPM is designed to make.
Two practical notes. VAPM can be negative: a player averaging under 2 PPG is costing you relative to a blank. And because it's built on PPG, it inherits PPG's small-sample problem — after two gameweeks a single haul dominates. Use the minimum-minutes filter on the dashboard (90 or 180 early on, 450 or more once the season settles) before reading anything into a VAPM ranking. When the dashboard's metric basis is set to per 90, VAPM uses points per 90 instead of PPG.
Expected stats
FPL publishes Opta's expected-goals family for every player and every match. These are estimates of the quality of chances rather than the outcome — they answer "how often would a typical player score from these situations?" — which makes them the best predictor we have of what happens next, because finishing luck evens out and chance creation tends to persist.
xG, xA and xGI expected goals · assists · involvements
xG sums the probability of each shot a player took being a goal, based on shot location, angle, body part, type of assist and defensive pressure. A tap-in from two yards is worth about 0.9 xG; a speculative 30-yarder about 0.03. xA does the same for passes: the xG of the shot that followed each pass a player made. xGI adds the two and is the number to look at for attacking returns, since FPL rewards both.
The dashboard shows totals for the selected window, or per game or per 90 depending on the basis toggle. Per 90 is the fairest way to compare players with different minutes, and 0.5 xGI per 90 is roughly the line between a good attacking asset and an elite one. In the detail panel for each player you'll also see xGI against actual goals plus assists — a big positive gap means he's been finishing above his chances and is due a quieter spell; a negative gap means the reverse.
xGC expected goals conceded
The defensive equivalent: the total xG of the shots a player's team faced while he was on the pitch. It's the right lens for goalkeepers and defenders because clean sheets are noisy — a team can keep three clean sheets while conceding 4.0 xGC and it will catch up with them. Lower is better, and the dashboard shows it per 90 in the player detail. Under about 1.0 xGC per 90 is a defence you want a piece of; over 1.6 and clean sheets are a lottery.
Expected points xPts
FPL's own "expected points" figure (ep_next in its data) is, on inspection, just the player's form with a small fixture adjustment — for 94% of players it's identical to form. So FPL Value calculates its own. The idea is simple: take the points a player actually scored in each match and replace the four components that depend on finishing and defensive luck with what the underlying chances say they should have been. Everything else stays as scored.
− (goals × goal value + assists × 3 + clean sheet × CS value − ⌊conceded ÷ 2⌋)
+ (xG × goal value + xA × 3 + P(clean sheet) × CS value − xGC ÷ 2)
where goal value and clean-sheet value are the position-specific points from the scoring table above, the conceded deduction applies only to goalkeepers and defenders, and the probability of a clean sheet is estimated from xGC as e−xGC (the chance of zero goals if goals arrive at the expected rate) for players who played 60 minutes. Appearance points, bonus, saves, cards, penalties and defensive-contribution points are taken exactly as scored. Doing this per match and then summing over the window is what the dashboard calls xPts.
| Component | Actual | Expected |
|---|---|---|
| Goals | goals scored × 6 / 5 / 4 | xG × 6 / 5 / 4 |
| Assists | assists × 3 | xA × 3 |
| Clean sheet | 4 / 1 / 0 if kept and 60+ mins | e−xGC × 4 / 1 / 0 if 60+ mins |
| Conceded (GK, DEF) | −1 per 2 goals | −xGC ÷ 2 |
| Appearance, bonus, saves, cards, DefCon | as scored (not modelled) | |
What xPts is for: it tells you how many points a player's performances deserved. Two players on 25 points after four games can have very different xPts — one earned it through 3.5 xGI and steady involvement, the other through two 30-yard screamers and 0.6 xGI. The second player's 25 points are real and count, but they tell you little about his next four games. His xPts does.
Bonus points are left as scored even though they partly follow goals and assists, so a player's Δ slightly understates luck in both directions. Leaving them is more honest than inventing a bonus model.
Over- and under-performance Δ = points − xPts
The gap between what a player scored and what the model says he should have. A large positive Δ is a warning sign for anyone thinking of buying: the returns have been real, but they rest on finishing or clean-sheet luck that tends not to repeat. A large negative Δ is the more interesting case — a player generating chances and getting nothing for it is exactly who you want to buy before his price and ownership catch up.
The dashboard's Δ column and the "Most over expected" card use the same figure, and both respect the gameweek window, so you can check whether an over-performance is a two-week blip or a season-long pattern (some players — elite finishers, set-piece takers — do sustain a positive Δ, and the window view is how you tell them apart from the lucky ones).
ICT, DefCon and form
ICT index is FPL's composite of Influence (decisive actions in the match), Creativity (chance creation) and Threat (goal threat). It's a reasonable proxy for involvement when you don't want to read three columns, but it's opaque and unit-less, so use it for sorting rather than for reasoning. DefCon is the raw count of defensive actions — clearances, blocks, interceptions and tackles for defenders, plus recoveries for midfielders and forwards — that feeds the 2-point defensive contribution bonus. The per-game view is the useful one: a defender averaging 10+ is banking those 2 points most weeks, which at £4.5m is a quietly large return. Form is FPL's own figure, average points over the last 30 days; it's shown on the site for reference but the window-based PPG does the same job with control over the period.
Windows, per game and per 90
Every metric on the dashboard is computed over the gameweek window you select — the whole season, the last 3, 6 or 10 gameweeks, or a custom range — and can be restricted to home or away matches. This is worth using deliberately. Season totals reward availability; a six-week window catches a change in role or a new manager; the home/away split shows the players whose returns are heavily venue-dependent, which matters when you're deciding on a captain.
The basis toggle changes how counting stats are expressed. Total is the raw sum over the window. Per game divides by appearances (matches with at least one minute) and is the right basis for VAPM and for comparing regular starters. Per 90 divides by minutes and scales to a full match, which is the fair comparison between starters and substitutes but will produce absurd numbers for players with 20 minutes — always pair it with a minimum-minutes filter.
The xG fixture model planner · rating toggle
FPL's fixture difficulty rating is a single number per opponent, and it's built from league position, form and results — so a team that wins 4–1 from two chances looks stronger than it is. The planner's xG attack, xG defence and Blend options replace it with a rating built only from chance quality.
Team strength
defence = (Σ w × xG against + K × avg) ÷ (Σ w × avg × attackopp × home edge + K × avg) // lower is better
w = ½(matches ago ÷ 15)
Every team gets an attack and a defence rating, and each match is judged against its opponent: 1.2 xG against Arsenal counts for more than 1.2 against a leaky side, so a team that has just played the top three isn't marked down for its fixtures. The two ratings are solved together, round after round, until they settle. Recent matches count most: a match 10 games back counts half as much as the latest one, and last season's matches carry on into this one with the same weighting. xG for is the sum of the team's players' expected goals in each match; xG against is the goalkeeper's expected goals conceded, which is the same thing from the other side. Actual goals never enter the ratings — they're kept in two separate columns, finishing (goals − xG) and leak (conceded − xGC), so you can see who has been clinical or fortunate without it distorting their strength.
K is a prior worth two matches of league-average performance, enough to stop a single freak match swinging a rating. Promoted teams have no Premier League matches from last season, so their prior is the average of the sides they replaced. We chose this set-up by backtesting team ratings on ten seasons of Understat data: against ratings built from this season alone, it predicted each team's next-match xG about 5% more accurately, and short form windows (a team's last 6 or 10 matches) were clearly worse than both. Predictions ten gameweeks out kept over 90% of the accuracy of next week's.
From ratings to a fixture
away xG = avg × attack(A) × defence(H) × (2 − home edge)
P(clean sheet) = e−xG against
So each fixture gets an expected-goals figure for both sides, and from each team's point of view two difficulties. xG attack answers "how hard is it for this team's attackers to score?" — low expected goals for means a high rating. xG defence answers "how hard is it to keep a clean sheet?" — high expected goals against means a high rating. Both are mapped onto FPL's 1–5 scale by ranking every remaining fixture in the season: the easiest 10% are a 1, the next 20% a 2, the middle 40% a 3, then 20% and 10% for 4 and 5. Blend averages the FPL rating with the model's attack and defence combined.
The important difference from FPL's rating: the model includes the team's own strength, not just the opponent's. A weak attack away at an average defence is a hard fixture for its forwards even if FPL calls the opponent a 3. That is deliberate — the planner ranks teams by how likely their players are to return, which is what you're choosing between — but it means the two scales answer slightly different questions, and the planner's tooltip shows both. Each fixture in the planner also shows the team's expected goals and its clean-sheet chance, and the xG and CS columns add them up over the gameweeks you pick.
Limitations: FPL's xG includes penalties, which flatters teams awarded several. Last season's matches carry over at a reduced weight, which is right for most clubs but slow to notice a big summer rebuild. The model knows nothing about injuries, suspensions, managerial changes or European fatigue. Team ratings and the fixture model are recomputed every data refresh and published as team_ratings.csv and fixture_model.csv in the repo.
Projections projections page · Proj 5 column
The Projections page estimates how many points each player will score in each of the next five gameweeks. It is deliberately simple: every part of FPL's scoring gets its own small model, each one is an average rather than a prediction, and they're added up.
Will he play?
From the player's last ten team matches, weighted heavily toward the most recent, the model estimates the chance he starts, the chance he comes off the bench, how long he usually lasts when he starts and how often that's past 60 minutes. That is multiplied by FPL's chance-of-playing flag; where the injury news gives a return date ("expected back 10 Oct") the player counts as available from the first deadline after it. Minutes turn out to matter more than anything else: in the backtest, tuning the minutes model moved accuracy more than every other setting combined.
How much does he do per 90?
Non-penalty xG (npxG), xA, saves, bonus and yellow cards per 90 are all estimated this way. Penalties are taken out of xG first, because a penalty says more about who is on spot-kick duty than about a player's finishing chances: FPL's data has no penalty flag, so every Premier League penalty is matched from Understat's shot data to the FPL player who took it. The price prior is a straight-line fit of each rate on price within a position, because FPL's prices are a decent guide to how involved a player will be. Early in the season the prior and last season carry most of the weight; by December it's almost all this season. DefCon uses the same idea, as the share of 60-minute matches where he reached the threshold (10 for defenders, 12 for midfielders and forwards).
How good is the fixture?
The xG fixture model gives both teams' expected goals for every match. A player's rates are scaled by his team's expected goals in that fixture relative to its average, so an attacker playing a weak defence at home is projected for more than his season rate.
Adding it up
penalties = team penalties per match × fixture multiplier × P(he is the first listed taker on the pitch) × 0.80 × goal points
assists = xA/90 × fixture multiplier × expected minutes ÷ 90 × 3
clean sheet = P(60+ mins) × e−xG against × CS points
+ appearance, −goals conceded, saves, DefCon, bonus, −cards
A team's penalty rate is its penalties per match this season plus a quarter of last season's, shrunk toward the league rate (about 0.12 a match) with a 20-match prior. The share goes down FPL's penalty order: the first-choice taker gets it whenever he is on the pitch, the second choice when the first is off, and so on, and 0.80 is the long-run conversion rate of 1,175 Premier League penalties.
Calibrations from last season: FPL awards about 0.93 non-penalty goals per npxG (own goals and deflections don't count for the shooter) and 1.38 assists per xA, because FPL counts rebounds, won penalties and deflected passes as assists and Opta's xA doesn't. Clean-sheet chances use expected goals against scaled up 10%, which a four-season backtest found fits better than xG against as it is. Goals conceded and saves use the exact average of a Poisson count, so a defence expected to concede 2.1 goals costs its keeper 0.80 points on average, not the naive 2.1 ÷ 2 = 1.05.
Captaincy and the model squad
The captain ranking simulates each candidate's next gameweek 20,000 times (does he start, goals, assists, clean sheet, saves) to show a 90th-percentile score, the chance of a 10-point haul and the chance of a blank. The model squad is the best legal £100m squad for the five gameweeks, found with an integer programme: starting XI at full value (later weeks discounted 10% a week), bench at 15%, captain doubled for the next gameweek. python -m fplvalue.optimise --team-id <id> in the repo runs the same thing for your own team and suggests transfers, charging 4 points per hit.
How accurate is it?
Every week the pipeline reruns a walk-forward backtest: rewind to before each deadline, project that gameweek using only what was known then, compare with what happened. It covers all of last season and this season so far, against three baselines including FPL's own ep_next. The current numbers are at the bottom of the Projections page. Expect an average miss of around two points per player per week even when the model is working well: one goal or clean sheet either way is most of that, and nothing can predict it.
Not modelled: mid-week penalty order changes before FPL updates them, rotation around European games, managerial changes, and set-piece duties beyond what shows up in xG. The whole model is open source in the fplvalue package, with a notebook to explore it.
When not to trust the numbers
Small samples. Everything on this page is a rate, and rates from two or three games are mostly noise. Set a minimum-minutes filter of at least 180 before ranking anything, and treat any early-season list as a set of names to watch rather than a set of transfers to make.
Expected stats are about the chance, not the player. A deliberately elite finisher will outscore his xG year after year; xG models don't know who is shooting. Persistent positive Δ over a whole season is usually skill, not luck. Persistent positive Δ over three weeks usually isn't.
Penalties. A penalty is worth about 0.78 xG, so penalty takers carry structurally higher xG and xPts. That's correct — they really will score more — but it means comparing a taker's xGI to a non-taker's tells you as much about set-piece duties as about open play.
Fixtures aren't in xPts. xPts is a measure of what a player's performances were worth, not a forecast of next week; the projections are the forecast. For that, combine it with the fixture planner: a player with strong underlying numbers and a soft run of fixtures is the combination you're looking for.
Price changes. VAPM and PPM use the current price, not what you paid or what he cost at the time of the points. A player who has risen £0.5m looks slightly worse value than he was for the people who bought him early — which is the right way round if you're deciding whether to buy now.
Source data: the official Fantasy Premier League API, refreshed weekly by the fplproject pipeline. Expected stats are Opta's, as published by FPL. xPts and Δ are FPL Value's own calculations as described above.