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 line-up 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 provides the core rolling features from publicly available FPL and Understat data. Dastan extends that pipeline to 286 deadline-safe inputs, including defensive workload, fixture congestion, opponent defensive contributions allowed, FPL's pre-deadline projection, and official availability. Its position-specific multibucket base is blended with a direct points model using a separately fitted weight for each position.
Dastan is transparent by design. We publish the code, trained weights, six-season training data, feature contract, evaluation harness and negative results in the open Dastan repository. The checked-in evidence includes row counts, hashes and the exact commands needed to reproduce the published scores.
The pipeline
Builds 286 deadline-safe features per player from FPL and Understat data
Estimates how likely each player is to start and play significant minutes
Runs position-specific models for appearance and points outcomes
Blends the base with a direct points model for outfield players
Finds the best transfers, captain, and line-up for your squad and budget
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 mathematical optimiser powered by HiGHS, a high-performance open-source solver. 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.
Captain selection is baked into the optimisation itself, not bolted on as an afterthought. The solver uses conditional xPts — expected points given the player starts and plays significant minutes — so it naturally favours nailed-on starters for the armband. Bench order is also adaptive: when your starters are rotation risks, the solver values a strong bench more highly.
- Your squad, bank & free transfers
- xPts for all players (multi-GW)
- All FPL rules & constraints
- Best transfers to make
- Captain & vice-captain pick
- Starting line-up & bench order
The solver looks several gameweeks ahead, weighting this week more heavily so it doesn't sacrifice short-term points for a speculative payoff in GW35. It 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. Results come back in seconds.
How we test
Dastan was tested in three non-overlapping clean walk-forward blocks covering 24 gameweeks of 2024-25. For each block, it trains only on rows available before the test window, then predicts those later matches. Every result is averaged over three random seeds. Later-season data is removed entirely when these blocks are scored, so no test result can reach its own features or training labels.
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.
Every incoming API response and every computed prediction is checked for completeness, valid ranges, and internal consistency before it can be published.
Hard constraints block bad data at publish time — missing values, out-of-range numbers, and duplicate records are caught and rejected automatically.
After publishing, the system re-checks the live data. If anything looks wrong, it automatically restores the previous good version and alerts the team.
Every check is logged, every result is traceable, and the team is alerted within seconds of any anomaly. We track performance at every step so we can spot issues before they become a problem.
Walk-forward accuracy
How the production model scored across the clean eight-gameweek blocks. Use the switch to choose who gets counted: the whole player pool, or only the players who actually started. The second is the harder read and the one closer to picking a captain — on the full pool, most players in any gameweek never come on and score nothing, which makes the average error look smaller than the model's real work.
Did the model correctly predict who would outscore whom? 1.0 means perfect ranking, 0.0 is random. It doesn't care about exact scores — just the order. Higher is better.
How far off were the predictions, on average? Measured in FPL points. Dastan averages about 0.92 across the clean walk-forward windows. Lower is better.
Did the players with the strongest actual returns appear near the top of the model's list? Higher is better.
The same model, on players who actually played
Roughly three in five rows in the pool above are players who never came on. Predicting zero for them is easy and correct, and it pulls the average error down. Scored only on players who reached 60 minutes, the numbers look very different — and this is the harder cut, the one that describes choosing a captain.
| Scored on | Spearman | MAE | Rows |
|---|---|---|---|
| Every player24 walk-forward gameweeks | 0.746 | 0.918 | 17,622 |
| Starters only (60+ mins)same 24 walk-forward gameweeks | 0.288 | 2.171 | 4,849 |
These are two cuts of the same Dastan predictions and the same clean test blocks. The starters row removes player-gameweeks below 60 minutes; it does not substitute an older live model or a different season.
Accuracy benchmarks: 2024-25 and 2025-26
A model score only becomes useful when it is compared with alternatives. We test Dastan against FPL's official projection, OpenFPL, recent points, and player price. Every comparison below uses the same player-gameweek rows on both sides; when a baseline is missing, Dastan is removed from that row too.
The number shown is the decision score: 0.5 × Spearman + 0.5 × NDCG@10. Higher is better. It measures ranking quality and is not a percentage.
Against FPL's official projection
Clean 2024-25 walk-forward blocks · 17,307 identical player-gameweeks · 98.2% coverage
| Cohort | Dastan | FPL ep_next | Delta |
|---|---|---|---|
| Every player | 0.6097 | 0.5321 | +0.0776 |
| 60+ minutes | 0.3963 | 0.3139 | +0.0824 |
On those same rows, all-player MAE is 0.930 for Dastan and 1.070 for FPL. Missing official forecasts are excluded from both sides, never filled with zero.
Controlled head-to-head with OpenFPL
2025-26 GW1-24 · 18,173 identical player-gameweeks · Dastan mean of seeds 42, 7, 2026
| Cohort | Dastan | OpenFPL | Delta |
|---|---|---|---|
| Every player | 0.5641 | 0.5044 | +0.0597 |
| 60+ minutes | 0.2626 | 0.2564 | +0.0062 |
Paired 95% gameweek interval: +0.0412 to +0.0798 for every player, and -0.0093 to +0.0224 for 60+ minutes. The full-pool advantage is clear; the starter-only comparison is a tie on this sample.
Simple baselines
Clean walk-forward decision score. Each row rescored Dastan on that baseline's eligible rows.
| Reference | Rows | Dastan | Reference |
|---|---|---|---|
| Previous-five mean | 17,547 | 0.6093 | 0.5317 |
| Last-match points | 17,547 | 0.6093 | 0.4978 |
| Player pricerank-only | 17,622 | 0.6090 | 0.3571 |
Price is deliberately rank-only: cost and points use different units, so a price MAE would be meaningless.
Where the OpenFPL difference comes from
RMSE by realised return, following OpenFPL's published categories. Lower is better.
| Return | Rows | Dastan | OpenFPL |
|---|---|---|---|
| 0 minutes | 10,902 | 0.583 | 0.964 |
| Played, ≤2 pts | 4,562 | 1.381 | 1.518 |
| 3–4 pts | 1,112 | 1.442 | 1.304 |
| ≥5 pts | 1,597 | 5.756 | 5.675 |
Dastan wins on non-players and low returns. OpenFPL is slightly better on 3–4 point returns and hauls. That is why we publish the split, not only the overall score.
Evidence and full caveats: public Dastan accuracy report. FPL Review is not shown because synchronised proprietary predictions are not available for these rows; copying its score from a different sample would not be a controlled comparison.
Where FPL Review's Massive Data model fits
FPL Review's Massive Data model is a closed, premium projection system. We cannot reproduce its internals, and we do not have its synchronised forecasts for Dastan's test rows. The evidence instead forms two carefully labelled comparisons:
Published 2024-25 test
OpenFPL ≈ Massive Data
OpenFPL reported comparable prospective accuracy to FPL Review.
Controlled 2025-26 test
Dastan > OpenFPL, full pool
Dastan improved ranking and error on 18,173 identical rows.
Supported conclusion
A credible open competitor
Not proof that Dastan directly beats Massive Data.
Read the OpenFPL paper and inspect or reproduce the Dastan release on GitHub. A direct winner would require both models' pre-deadline forecasts on the same players and gameweeks; we will not disguise a cross-season chain as that test.
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. In the published walk-forward suite, average absolute error is 0.918 points per player-gameweek, while the 60-minute cohort is 2.171. Football outcomes remain noisy. These numbers support comparisons across the player pool, not exact-score promises.
The model is strongest at ranking — identifying which players are likely to outscore others — rather than predicting exact point totals. That's why ranking accuracy is the metric we care about most. The research score balances full-pool Spearman with NDCG@10 so improvements at the top of the ranking are not hidden by a season-wide average.
The clean walk-forward evaluation covers 24 gameweeks of 2024-25. A separate controlled OpenFPL test covers 24 gameweeks of 2025-26, but it uses a different training regime, so its numbers are shown separately. Newly promoted clubs, transfers without Premier League history, and early-season minutes uncertainty remain the main live risks.
We update this page as the model evolves. The full codebase is on GitHub. If you have questions, reach out at [email protected].