---
title: 'OpenFPL: Open-Source Forecasting for FPL'
url: https://www.emergentmind.com/topics/openfpl
type: topic
---

# OpenFPL: Open-Source Forecasting for FPL

Searching arXiv for the OpenFPL paper and closely related forecasting work.
OpenFPL is an open-source, data-driven forecasting method for Fantasy Premier League (FPL) that predicts player performance across future gameweeks using only public data from the official FPL API and Understat. It is presented as a transparent alternative to commercial forecasting services whose methods and data pipelines are not publicly disclosed, and is built as a set of position-specific ensemble regressors for goalkeepers, defenders, midfielders, forwards, and the “assistant manager” slot. The system is trained on four previous seasons, evaluated prospectively on the 2024–25 season, and reported to achieve accuracy comparable to a leading commercial benchmark while surpassing it for high-return players, defined as outcomes above 2 points [2508.09992].

## 1. Definition and motivation

OpenFPL is a forecasting system for FPL points per player per gameweek, using exclusively publicly available data. Its central purpose is to democratize access to high-accuracy forecasts that can support transfer planning, squad construction, captaincy, and chip deployment without reliance on proprietary data sources or subscription-only models [2508.09992].

The method is explicitly framed against the prevailing structure of the FPL forecasting ecosystem. Commercial services are described as using betting odds, expert minute projections, and premium event feeds, while withholding code, trained models, and methodological details. OpenFPL addresses these constraints by publishing both the models and the evaluation pipeline, with code and trained models released under an MIT license at `https://github.com/daniegr/OpenFPL` [2508.09992].

Within FPL decision-making, accurate forecasts function as the main quantitative input for repeated optimization under uncertainty. The paper emphasizes that rank gains depend disproportionately on identifying “high-return players (> 2 points),” rather than merely predicting low-variance appearance outcomes. This places OpenFPL’s design emphasis on separating low-return outcomes from “tickers” and “haulers,” since those outcomes carry greater strategic weight in practice [2508.09992].

## 2. Data sources, temporal scope, and feature construction

OpenFPL uses three public data resources: the FPL API, the Understat API, and an FPL historical dataset that merges historical FPL and Understat data. From the FPL API it uses player-level per-gameweek data such as position, availability, minutes played, goals, assists, saves, bonuses, cards, and FPL points, along with team-level fixture and home/away information. From Understat it uses advanced player and team metrics including expected goals (\(xG\)), expected assists (\(xA\)), shots, key passes, \(xGChain\), \(xGBuildup\), \(xGA\), Deep, and PPDA-related quantities [2508.09992].

The development set consists of the 2020–21, 2021–22, 2022–23, and 2023–24 seasons. Evaluation is prospective on the 2024–25 season, gameweeks 32–38, and these data were “not collected until after model development,” which the paper presents as genuinely out-of-sample testing [2508.09992].

Development data are partitioned by team into five folds \(C_1,\dots,C_5\). Each fold contains a mix of upper- and lower-table teams and teams present in all four seasons as well as teams present in fewer seasons because of promotion and relegation. Each fold includes 16 team-seasons. This team-based splitting is intended to test generalization to unseen teams and contexts rather than merely unseen matches or players [2508.09992].

A specific preprocessing step addresses missing Understat data in 2020–21. The paper states that “1-Nearest Neighbor was used to fill missing values by taking the most similar sample from the remaining three seasons of the development data … under assumption of minutes played and same number of assists and goals scored.” This makes the imputed advanced metrics conditional on observed output and playing time rather than unconstrained matching [2508.09992].

Feature construction is position-specific and combines historical player features \(X_p\), historical team features \(X_t\), historical opponent features \(X_o\), and current status features \(X_s\). Historical features are averaged over five horizons: 1, 3, 5, 10, and 38 previous matches. This allows the model to combine short-term form and long-term performance levels within a single representation [2508.09992].

Player-level features include FPL points, relevant FPL points, minutes played, Influence, Creativity, Threat, goals, assists, cards, BPS score, actual FPL bonus points, and position-dependent variables such as saves or shots. Team and opponent features include goals scored and conceded from FPL, and Understat-derived attacking, defensive, and pressing measures. Status features include FPL availability categories for outfield players and goalkeepers, while assistant managers use team league rank and opponent league rank derived from goals scored and conceded up to that point in the season [2508.09992].

Three distinct feature templates are defined: GK, DEF/MID/FWD, and AM. The reported feature counts are 196 for GK, 206 for DEF/MID/FWD, and 122 for AM [2508.09992].

## 3. Model architecture and training procedure

OpenFPL is position-specific and ensemble-based. Separate models are trained for goalkeepers, defenders, midfielders, forwards, and assistant managers. The regressors used are Random Forest and XGBoost, and each position ultimately receives a 50-member ensemble whose predictions are combined by the median [2508.09992].

The target variable is normalized FPL points in the upcoming match. The system does not decompose the problem into intermediate event forecasts such as goals, assists, or clean sheets; instead, it is a direct regressor on official FPL points. The paper also notes that OpenFPL does not use explicit probabilistic models such as Poisson or negative binomial formulations, and that uncertainty is represented implicitly through ensemble diversity rather than through an explicit predictive distribution [2508.09992].

Training begins with normalization of both features and target to \([0,1]\) using `MinMaxScaler`. The authors then apply sample weighting designed to improve performance on rare high-return outcomes. Targets are discretized into position-specific bins based on entropy of the distribution: 2 bins for GK, 3 for DEF, 4 for MID, 3 for FWD, and 5 for AM. These bins are used with `KBinsDiscretizer(..., encode="ordinal")`, followed by `compute_sample_weight(class_weight="balanced")`, clipping at the 95th percentile and rescaling to unit mean [2508.09992].

Hyperparameter optimization uses K-Best Search with population \(K = 10\), optimizing RMSE on the cross-validation folds. For Random Forest, the search space includes \(n\_estimators\), \(max\_depth\), \(min\_samples\_split\), \(min\_samples\_leaf\), \(max\_features\), and \(bootstrap\). For XGBoost, it includes \(n\_estimators\), \(max\_depth\), \(learning\_rate\), \(subsample\), \(colsample\_bytree\), \(min\_child\_weight\), \(gamma\), and \(reg\_lambda\) [2508.09992].

For each position, K-Best Search is run on each of the five folds, and the top 10 models per fold are retained. This yields \(5 \times 10 = 50\) models per position. At inference time, each model produces a predicted normalized point value, and the ensemble forecast is the median of those 50 outputs [2508.09992].

The implementation is in Python with scikit-learn and XGBoost, using `random_state = 42` and `n_jobs = -1`. XGBoost is trained with `early_stopping_rounds = 30` and `eval_metric = "rmse"` [2508.09992].

## 4. Forecast targets, horizons, and evaluation protocol

OpenFPL forecasts FPL points per player per gameweek and is evaluated on point predictions rather than full predictive distributions. The evaluation covers 1-, 2-, and 3-gameweek horizons. Operationally, on the day before a gameweek deadline, the system uses current historical and status data to forecast future player returns over the requested horizon [2508.09992].

The evaluation protocol is prospective. Models are trained only on the 2020–21 to 2023–24 seasons and then evaluated on 2024–25 gameweeks 32–38 using the state of the FPL and Understat APIs as of the day before each deadline. This prospective setup is one of the paper’s strongest methodological claims, because it is meant to avoid leakage from post-development data [2508.09992].

Two benchmarks are used. The first is FPL Review’s Massive Data Model, described as a commercial benchmark that had previously been shown to outperform other commercial services. The second is a simple “Last 5” baseline, defined as the mean of a player’s points in their last five matches [2508.09992].

Performance is measured by RMSE and MAE. The paper also evaluates separately by position and by return category, using four categories:

| Category | Definition |
|---|---|
| Zeros | player did not play → 0 points |
| Blanks | player played but earned \(\le 2\) points |
| Tickers | 3–4 points |
| Haulers | \(\ge 5\) points |

This categorization is central to the paper’s interpretation of forecasting quality. Outcomes above 2 points are treated as strategically decisive because they correspond to returns beyond routine appearance points, and thus matter more for rank gains [2508.09992].

## 5. Reported performance and comparative results

The paper reports that OpenFPL achieves accuracy comparable to FPL Review overall and surpasses it for high-return players across one-, two-, and three-gameweek horizons [2508.09992].

For one gameweek ahead, FPL Review is reported as best on Zeros and Blanks, while OpenFPL is best on Tickers and Haulers. Specifically, for Tickers the reported RMSE (MAE) values are 1.594 (1.227) for FPL Review and **1.517 (1.127)** for OpenFPL; for Haulers they are 5.172 (4.381) for FPL Review and **5.142 (4.317)** for OpenFPL. By contrast, on Zeros and Blanks, FPL Review outperforms OpenFPL [2508.09992].

The same overall pattern is reported at two and three gameweeks ahead. At two gameweeks, OpenFPL remains better on Tickers and Haulers, while FPL Review remains better on Zeros and Blanks. At three gameweeks, FPL Review is still best on Zeros and Blanks, whereas OpenFPL is best on Tickers and marginally better on Haulers by RMSE, though slightly worse by MAE in that category [2508.09992].

The paper summarizes the overall comparison by stating that both OpenFPL and FPL Review are much better than the Last 5 baseline, with a 5–34% RMSE reduction, but that their strengths differ: FPL Review is “better at predicting non-events,” whereas OpenFPL is “better at predicting high-return outcomes” [2508.09992].

Position-wise, the results are more heterogeneous. For goalkeepers, FPL Review is better on Zeros and Haulers, with mixed results on Blanks and Tickers. For defenders, FPL Review is better on lower-return outcomes, while OpenFPL is competitive to slightly better on Tickers. For midfielders, OpenFPL is reported as clearly better on Tickers and Haulers. For forwards, OpenFPL is especially strong on Blanks and Tickers, but FPL Review is better on Haulers. For assistant managers, the results are noisier because the position is new and sparsely populated; FPL Review is better on Blanks and Tickers, while OpenFPL is slightly better on Haulers [2508.09992].

A plausible implication is that OpenFPL’s direct-regression and reweighting strategy is particularly effective in the region of the target space corresponding to meaningful attacking or return-producing events, while FPL Review’s advantage on low-return outcomes likely reflects its access to stronger minutes and availability signals. The paper itself attributes FPL Review’s superiority on Zeros and Blanks to the use of proprietary availability and minutes information, which OpenFPL does not have [2508.09992].

## 6. Practical use, reproducibility, and limitations

OpenFPL is intended for direct integration into FPL workflow. The paper identifies transfer decisions, captaincy, chip timing, long-term planning over 2–3 gameweeks, and final-day decision support as primary use cases. Because forecasts are available across horizons, they can support evaluations such as whether a transfer hit is justified over multiple upcoming gameweeks or whether a captaincy option has sufficient upside in a given week [2508.09992].

The method is also positioned as a component in an end-to-end open-source optimization pipeline. The authors explicitly suggest integration with the FPL Optimization Repository, which formulates FPL team selection as a linear programming problem and has previously used FPL Review projections as input. Replacing those inputs with OpenFPL yields a public-data pipeline from data ingestion through forecast generation to squad optimization [2508.09992].

Reproducibility is a central design feature. The repository includes data access scripts for FPL and Understat, the feature engineering pipeline, model training and K-Best Search implementation, trained ensemble models, and inference scripts. The MIT license permits modification, reuse, and incorporation into other tools [2508.09992].

The paper also states several limitations. OpenFPL does not use proprietary expected minutes data and models injuries or availability only through FPL’s categorical availability tags. It has no explicit rotation model beyond historical minutes and availability, and it may be slow to adapt to tactical changes, new signings, or managerial changes because of its reliance on historical patterns. The authors also note potential overfitting risk from high-capacity ensembles over hundreds of features, even though team-based cross-validation and prospective evaluation are presented as mitigation [2508.09992].

Future directions proposed in the paper include indirect modeling of component events such as goals and assists, feature-importance and feature-search analysis, better minutes and availability modeling through crowd-sourced predictions or web-scraped news, uncertainty modeling beyond point estimates, and extension to joint optimization with price-change models [2508.09992].

Taken together, OpenFPL occupies a distinctive position in FPL forecasting research as a fully open, reproducible, position-specific ensemble system trained only on public data yet evaluated as competitive with a leading proprietary service. Its most specific empirical claim is not universal superiority across all return regimes, but a differentiated performance profile: weaker on predicting non-participation and low-return outcomes, stronger on identifying the higher-return outcomes that are most consequential for rank movement [2508.09992].

Source: https://www.emergentmind.com/topics/openfpl