Machine Learning · Linear Programming · FPL Challenge
My machine-learning xPts model generates per-player expected-point forecasts, which a linear programme then uses to find the mathematically optimal squad for each FPL Challenge constraint set. The latest three-gameweek player projections are also available on XLTHM. The pre-gameweek selection is compared against the hindsight optimal to measure how well the model performed. Spoiler: it doesn't always cover itself in glory.
How it works
Three stages run in sequence to produce a predicted optimal lineup before every challenge.
Once a gameweek's scores are confirmed, the same LP solver runs again using actual points rather than forecasts. The result is the true with-hindsight optimal: the best possible lineup anyone could have picked with perfect foreknowledge. Which, to be fair, is cheating.
It is an unreachable ceiling by design. No pre-gameweek prediction can match it, but it gives an honest upper bound to measure against. Players appearing in both lineups are highlighted in green inside each challenge view.
Each completed challenge card gives a quick summary of how the prediction performed. Here is what each element means.
Opening a completed challenge reveals both lineups side by side along with a detailed breakdown of the comparison. The totals panel at the top shows three figures: the personal submission score and gameweek rank, the model's xPts forecast for the predicted squad and the hindsight-optimal lineup's actual score with its budget usage.
The comparison panel at the bottom is where the meaningful analysis lives. It contains the following statistics.
When a personal result is available, a second block of figures appears beneath the prediction analysis.
The X/Y players figure shows how many of the predicted lineup's players also appear in the hindsight-optimal squad. The number will look small, and that is expected. The eligible player pool is around 600. Getting any meaningful fraction of the optimal selection right before a ball has been kicked is a genuinely good result.
A quick illustration. Take a simplified version: a 7-player squad built from pools of just 50 players per position, with one goalkeeper and between one and three players from each outfield position. The number of valid combinations already comes to roughly 452 billion. Real FPL Challenge has around 600 players in total, squad sizes that change every week, captaincy to assign and budget limits on top. The true search space is often orders of magnitude larger.
Granted, a fair few of those 452 billion options involve three suspended players and someone who last started a match in October. Realistic picks narrow things down considerably, but the scale illustrates why landing a meaningful share of the optimal squad, without the benefit of hindsight, is harder than it sounds.
Player overlap only tells part of the story. Two completely different squads can score nearly identical points when the market has priced in the same likely contributors. The more telling measure is how much of the hindsight ceiling the actual submission captured (the optimal capture rate), shown on each card as % of optimal.
It is calculated as the submission's actual score divided by the hindsight-optimal score, expressed as a percentage. A figure of 100% would mean the submission matched the best possible lineup's score exactly, unlikely in practice, but a useful anchor. The higher the figure, the closer the real-world result came to the theoretical ceiling the model identified.
The standing bar beneath the stats strip shows the current overall rank across all challenges played so far this season. It updates after each gameweek as results are recorded. Clicking it opens a chart of how rank has progressed gameweek by gameweek.
The chart panel also shows the season-high rank, the percentile at the current standing and the total rank movement since the first challenge. Whether that movement is upwards or downwards is, diplomatically, left as an exercise for the reader.
The overall rank is cumulative across the entire season rather than a snapshot from a single gameweek, so it tends to be a more stable and meaningful reflection of consistent performance than any individual challenge result.
Season progression