FPL Vault
Methodology
What the engine actually does. Every threshold, formula, and decision rule — documented from the code.
xPts Model
Expected points per player per fixture, aggregated across a configurable GW horizon (1/3/5/8 weeks).
| Component | Formula | Pts by Position |
|---|---|---|
| Appearance | avail% × projected minutes | 2 (60+ min) or 1 (< 60 min) |
| xGoals | xG/90 × proj_min/90 × pos_mult | GKP 10 · DEF 6 · MID 5 · FWD 4 |
| xAssists | xA/90 × proj_min/90 × 3 | All positions: 3 |
| Clean Sheet | cs_prob × pos_mult | GKP/DEF 4 · MID 1 · FWD 0 |
| Bonus | bonus/90 × proj_min/90 | 1-3 per game (BPS) |
| Defensive Contribution | dc_prob × 2 | DEF (10/90) · MID/FWD (12/90) · GKP 0 |
| Saves | saves/90 × proj_min/90 ÷ 3 | GKP only — 1pt per 3 saves |
CS probability: (fixture_prob × 0.5) + (form_prob × 0.5)
fixture_prob = (5 - diffScore) / 4 · form_prob = 1 - teamGcPerGame / 2
Transfer Engine
| Feature | How It Works |
|---|---|
| Per-transfer hit evaluation | Each hit transfer must independently justify itself. A strong free transfer cannot carry a weak hit. |
| xPts-per-fixture ranking | Squad ranked by xPts/fixture (not raw xPts) — prevents BGW teams from being unfairly penalised. |
| Outs pool | Bottom ~8 squad players by xPts, sorted worst first. |
| GK contamination prevention | GKs excluded from outs pool by default. A low-xPts GK would push outfield candidates out of the pool. |
| Signal tiebreaker | When xPts diff < 0.5, Value Radar signal (buy > watch > hold > sell) breaks the tie. |
| Flagged player exclusion | Red/yellow flagged players excluded from outs pool (distorted xPts). UI override available. |
| Combo generation | Singles (1+ FT): top 5 · Doubles (2+ FT): top 5 · Triples (3+ FT): top 3 · Quads (4+ FT): top 3 · Quints (5+ FT): top 3. |
Transfer Regime Matrix
| Regime | Gameweeks | Hit Recommend | Hit Marginal | Notes |
|---|---|---|---|---|
| Early | 1-5 | 6 xPts | 4 xPts | Same as normal (future-proofed) |
| Normal | 6-29 | 6 xPts | 4 xPts | Default thresholds |
| Endgame | 30-36 | 3 xPts | 1 xPts | BGW/DGW cluster — banking nudge active |
| Final | 37-38 | 0 xPts | 0 xPts | Any positive gain = recommend |
Early-trigger: GW28-29 enters Endgame if a BGW/DGW is confirmed within 3 GWs.
Banking nudge: Endgame only — surfaces when BGW/DGW is within 3 GWs ahead.
Season Decision Matrix Framework
| Regime | Primary Signal | Bank Bias | Hit Threshold | Key Rule |
|---|---|---|---|---|
| Early | Minutes / price / ownership | Low | High | Use if squad health at risk, preserve WC |
| Normal | xPts persistence | Low | Medium | Use unless specific future opportunity > persistence cost |
| Endgame | Fixture structure (BGW/DGW) | High | Low | Bank for blanks/doubles, hits are cheap |
| Final | Raw single-week xPts | None | Any positive | Use everything, no tomorrow |
Engine Configuration
| Parameter | Value | Purpose |
|---|---|---|
| hitCost | 4 pts | FPL points cost per extra transfer |
| hitRecommendThreshold | 6 xPts | Min net gain for green Recommend verdict |
| hitMarginalThreshold | 4 xPts | Min net gain for amber Marginal verdict |
| gkSwapMaxAvgFdr | 2.3 | Max avg fixture difficulty for incoming GK |
| gkSwapRequiresBGWOrFlag | true | Only swap GK if current has BGW or injury flag |
| minIncomingOwnership | 0.5% | Filter out extremely low-owned targets |
| minIncomingBaseXpts | 3.0 | Minimum base xPts floor for incoming candidates |
| maxPlausibleSingleGain | 20 | Sanity cap — filter implausible gains (bad data) |
| starterPenaltyMultiplier | 2.0 | Weight for underperforming starters in ranking |
| flaggedPlayerExclusion | true | Exclude red/yellow flagged from outs pool |
Bench Boost Thresholds
| Parameter | Value |
|---|---|
| DGW viable (bench total) | 20 xPts |
| DGW strong recommend | 25 xPts |
| SGW expiring | 16 xPts |
| Per-player strong | 4.0 xPts |
| Per-player viable | 3.0 xPts |
| Per-player expiring | 2.5 xPts |
| Min starts % | 50% |
Fixture Calendar
| Feature | Description |
|---|---|
| DGW detection | Teams with 2+ fixtures in a GW from FPL API data. |
| BGW detection | Teams with 0 fixtures in a GW. |
| Prediction merging | Manual DGW/BGW predictions for unconfirmed GWs. API data always overrides. |
| Centralised | Single source of truth — replaces duplicated detection across the codebase. |
Transfer Value — Banking vs Using
How the engine values banked transfers at each FT level. These are implied by the engine's combo gates, regime thresholds, and Transfer Capital tiers — not externally validated.
| FTs | Implied Uplift | Engine Gate | Transfer Capital Tier |
|---|---|---|---|
| 1 | 0% | Singles free, doubles cost a hit | Low — use it |
| 2 | ~25% | Doubles free, banking nudge fires in endgame | Building — combinations emerging |
| 3 | ~40% | Triples unlocked (hard gate at FT >= 3) | Optimal — peak flexibility |
| 4 | ~30% | Quads unlocked (hard gate at FT >= 4) | Warning — diminishing returns |
| 5 | ~15% | Quints unlocked (hard gate at FT >= 5) | Damaged — capped, next FT wasted |
Uplift is bell-shaped: peaks at 3 FTs, falls on both sides. Each combo size gate (triples/quads/quints) adds genuine combinatorial value, but longer banking means more weeks of squad degradation. The engine doesn't hardcode these percentages — they emerge from how the combo gates, hit thresholds, and capital tiers interact.
Roadmap
| Feature | Status | Notes |
|---|---|---|
| xPts Model | Live | Per-player per-fixture expected points across configurable horizons |
| Transfer Engine | Live | Per-transfer hit evaluation, regime-aware thresholds, singles through quints |
| Transfer Regime Matrix | Live | Four regimes (Early/Normal/Endgame/Final) with adjusted thresholds |
| Fixture Calendar | Live | Centralised DGW/BGW detection with prediction merging |
| Transfer Capital | Live | FT value model — combo gates at 3/4/5, capital tier warnings |
| Value Radar | Live | Buy/watch/hold/sell signals based on form, fixtures, value trends |
| Chip Advisor | Planned | Chip timing recommendations with DGW/BGW awareness |
| FDR Model Improvements | Planned | Dynamic fixture difficulty based on team form |
| Captain Analysis | Planned | Retrospective captain pick evaluation |
| Persistence Model | Next Season | Player form persistence prediction |
| Early Season Regime | Next Season | GW1-5 specific thresholds |
| Price Band Filtering | Planned | Value Radar — filter by price brackets |
| Mobile Redesign | Planned | 91% of traffic is mobile |