FPL Analytics Dashboard
Predictive FPL engine that reinvents xG for fantasy scoring, models fixture difficulty with Bayesian updating, and frames optimal weekly transfers as a constrained optimisation problem beating naive heuristic strategies.
Skills involved
What This Is
A quantitative FPL engine that treats fantasy football as a proper optimisation problem. The average FPL manager uses gut feel and rough heuristics. We're asking: what does the data actually say, and can we beat the field consistently with a systematic approach?
FPL is a combinatorial optimisation problem with probabilistic inputs. The right framework is stochastic programming: maximise expected points subject to budget, squad, and transfer constraints, while accounting for uncertainty in player performance.
Reinventing xG for FPL
Standard xG measures shot quality for real football. FPL scoring is different: it rewards clean sheets (defender/keeper), assists, and bonus points not just goals. We build a FPL-specific expected point (xPts) metric that:
- Weights contribution types by FPL point value rather than goal probability
- Accounts for position-specific scoring (defenders get 6pts per goal, forwards 4pts)
- Incorporates clean sheet probability as a function of opponent defensive record
- Models bonus point likelihood using BPS (Bonus Point System) correlates
Fixture Difficulty and Bayesian Updating
The FDR (Fixture Difficulty Rating) that FPL provides is static and coarse. We build a dynamic difficulty estimate that updates weekly using:
- Rolling team form (goals scored/conceded over last N games)
- Home/away adjustment
- Head-to-head historical results
- Expected XI quality (accounting for injuries and rotation)
When new match results arrive, we update difficulty estimates using a Bayesian framework with a Beta prior over win probability.
Transfer Optimisation
Given xPts estimates and uncertainty bounds, the transfer decision is: which swap maximises expected points gain over the planning horizon, net of transfer penalties? We frame this as a shortest-path problem on a state graph (current squad → possible squads) with expected point differences as edge weights.
What's Next
- Reinforcement learning formulation: treat the FPL season as an MDP and train an agent
- Ensemble uncertainty: use prediction intervals, not point estimates, for safer planning
- Live automated recommendations before each deadline
Last updated Apr 12, 2025
← Back to all projects