← Back

How It Works

SmartPlay does two things: it predicts how many FPL points each player will score (xPts), then it optimises your squad — finding the best transfers, captain, and lineup given your budget and the rules. Here's how both pieces work, how we know they're accurate, and where they fit in the broader FPL prediction landscape.

Backed by published research

SmartPlay's feature engineering is built on OpenFPL, an open-source FPL prediction framework created by Daniel Groos at Groos Analytics. His published research is one of the most rigorous open evaluations of FPL prediction models to date.

OpenFPL computes 251 features from publicly available FPL and Understat data — player rolling averages, team and opponent strength, fixture difficulty, availability signals, and more. SmartPlay uses this same feature pipeline, then applies its own model architecture on top: a multi-bucket mixture of position-specific XGBoost regressors.

The pipeline

📊
Step 1
Data

FPL + Understat APIs → 251 features per player per gameweek

⏱️
Step 2
Minutes

Starting probability model — will they play?

🎯
Step 3
Buckets

4 outcome categories × 4 positions = 28 XGBoost models

Step 4
xPts

Calibrated blend of all bucket predictions into a single number

🧩
Step 5
Solver

Optimiser finds the best transfers, captain, and lineup for your squad

Steps 1–4 produce xPts — a predicted score for every player every gameweek. Step 5, the solver, takes those predictions and works out what you should actually do with your squad.

From predictions to decisions

xPts tell you how many points each player is likely to score, but they don't tell you what to do. That's the solver's job. It takes your current squad, your budget, your free transfers, and xPts for every player across multiple upcoming gameweeks, then finds the mathematically optimal plan.

Under the hood, it's a mixed-integer linear program powered by HiGHS, a high-performance open-source optimiser. It respects every FPL rule — max 3 per team, valid formations, budget constraints, transfer costs — and looks ahead several gameweeks to avoid short-sighted moves.

Inputs
  • Your squad, bank & free transfers
  • xPts for all players (multi-GW)
  • All FPL rules & constraints
Outputs
  • Best transfers to make
  • Captain & vice-captain pick
  • Starting lineup & bench order

The solver looks several gameweeks ahead, discounting future value so it doesn't sacrifice this week for a speculative payoff in GW35. It values keeping free transfers and bank balance, handles all four chips (Wildcard, Free Hit, Bench Boost, Triple Captain), and automatically compares scenarios — rolling a transfer vs. taking a hit, playing a chip now vs. saving it — so you can see the trade-offs before committing.

How we test

We train on past seasons and test on a future season the model has never seen. No peeking at the answers. For example, the 2024-25 metrics come from a model trained on 2020–24 data and tested entirely on 2024-25 matches. Both SmartPlay and OpenFPL are always evaluated on the exact same test sets.

2020–25 training
2025-26 test

Data quality

Predictions are only as useful as the data behind them. Every pipeline run passes through four validation layers and 50+ automated checks before anything reaches you. If something goes wrong, the system rolls back to the last known good state automatically — you never see broken data.

🧪
Validate

Every incoming API response and every computed prediction is checked for completeness, valid ranges, and internal consistency before it can be published.

🔒
Guard

Hard constraints block bad data at publish time — missing values, out-of-range numbers, and duplicate records are caught and rejected automatically.

🛡️
Rollback

A post-publish contract layer re-checks the live data. If anything fails, the system atomically restores the previous good snapshot and alerts the team in real time.

All checks are defined as declarative data contracts, every result is logged for a full audit trail, and the team is alerted within seconds of any anomaly. Every step's performance is tracked so we can spot degradation before it becomes a problem.

Per-Gameweek Accuracy

SmartPlay vs the FPL baseline and OpenFPL, per gameweek. Select a season to see how ranking accuracy and prediction error evolve across the year. All metrics are computed on starters only (players with 60+ minutes).

Spearman correlation

Measures how well the model ranks players from best to worst. 1.0 means a perfect ranking, 0.0 is random. It doesn't care about exact scores — just whether the model correctly identifies who will outscore whom. Higher is better.

MAE (mean absolute error)

The average difference between predicted and actual points, in FPL points. An MAE of 2.5 means predictions are typically off by about 2–3 points per player per gameweek. Lower is better.

How we compare to the leading commercial model

How does SmartPlay compare to FPL Review, the leading commercial FPL prediction service? Daniel Groos's published paper benchmarked OpenFPL against FPL Review using bucket RMSE — prediction error grouped by outcome type. We computed SmartPlay's numbers using the same bucket definitions so all three models can be compared side by side.

CategorySmartPlayOpenFPLFPL Review
Zeros
0 points
0.890.820.69
Blanks
≤2 points
1.391.291.19
Tickers
3–4 points
1.231.521.59
Haulers
≥5 points
5.165.145.17

RMSE by outcome bucket, lower is better. All models on 2024-25 GW 32-38. OpenFPL & FPL Review: Groos, D. (2025), arXiv:2508.09992, Table 4. SmartPlay: same gameweeks, same bucket definitions.

The bottom line: SmartPlay is competitive with FPL Review, the leading commercial prediction service. SmartPlay has the lowest error on Tickers (3–4 point returns) by a wide margin — the bread-and-butter outcomes where picking the right player each week adds up over a season. Haulers are essentially a three-way tie. FPL Review has an edge on Zeros and Blanks, likely due to proprietary minute projections.

Where SmartPlay stands out further is ranking accuracy. Spearman correlation measures how well a model orders players from best to worst — and at 0.730, SmartPlay leads across all three test seasons. For FPL managers deciding between two transfers, getting the ranking right matters more than nailing the exact score.

What the model can't do

Football is inherently unpredictable. No model can foresee red cards, injuries during a match, penalty decisions, or a 30-yard screamer. Our average error is about 1 point per player per gameweek — good enough to make informed decisions, but not crystal-ball territory.

The model is strongest at ranking — identifying which players are likely to outscore others — rather than predicting exact point totals. That's why Spearman correlation (a ranking metric) is our primary measure and the one we optimise for.

We update this page as the model evolves. The full codebase is on GitHub. If you have questions, reach out at [email protected].