{
  "schemaVersion": 1,
  "generatedAt": "2026-09-08T12:12:50.759Z",
  "targetGW": 4,
  "source": "https://fantasy.premierleague.com/api/",
  "sampleSize": 654,
  "protocol": {
    "name": "Local execution · v1",
    "rounds": 7,
    "warmupRounds": 1,
    "seed": 20260908,
    "cache": "Cleared before each batch; shared calculations may be reused within a batch",
    "environment": "v24.14.0 · win32 x64 · Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz",
    "scope": "All players whose club has a fixture in the target gameweek, including unavailable players. Model execution only; network and rendering excluded. Timings depend on this machine and workload."
  },
  "sourceHashes": {
    "v6-engine.js": "a267cfeb719977737ace0d694121991266df97426b80a3c56d28f51fb2800ade",
    "ai-bonus.js": "1cbc815e52eb2f1799aeb959ea6e37047a29820aa219f2d3a1e872a4c6495f3b"
  },
  "inputHash": "c8454b150d1bb9fa330efc0110e54e6cbf17e53813c22473867453bc84ef3dc4",
  "models": [
    {
      "id": "v8",
      "name": "V8 Projections",
      "category": "Points",
      "kind": "Engine",
      "unit": "FPL points",
      "description": "Probabilistic component model with simulated minutes, attacking returns, clean sheets, bonus and discipline.",
      "source": "v6-engine.js",
      "status": "Measured",
      "runtime": {
        "medianBatchMs": 9113.995700000001,
        "minBatchMs": 9057.925799999997,
        "maxBatchMs": 11735.1823,
        "batches": [
          9113.995700000001,
          9057.925799999997,
          9094.252000000004,
          9072.140500000001,
          10071.478199999998,
          11319.257600000004,
          11735.1823
        ]
      },
      "sampleSize": 654,
      "validOutputs": 654,
      "accuracy": null
    },
    {
      "id": "v6",
      "name": "V6 Projections",
      "category": "Points",
      "kind": "Compatibility name",
      "unit": "FPL points",
      "status": "Shared engine",
      "aliasOf": "v8",
      "source": "app_v119.js",
      "description": "The V6 projection interface currently calls the V8 component engine. It is not an independently measured model version.",
      "runtime": null,
      "accuracy": null
    },
    {
      "id": "xpts",
      "name": "xPts Model · normal FDR",
      "category": "Points",
      "kind": "Output",
      "unit": "FPL points",
      "status": "Shared engine",
      "aliasOf": "v8",
      "fdr": "official",
      "source": "app_v119.js",
      "description": "The analyzer's expected points with the official FPL fixture difficulty (FDR). This is the default xPts; it runs on the V8 engine.",
      "runtime": null,
      "accuracy": null
    },
    {
      "id": "xpts_posfdr",
      "name": "xPts Model · Position FDR",
      "category": "Points",
      "kind": "Output",
      "unit": "FPL points",
      "status": "Shared engine",
      "aliasOf": "v8",
      "fdr": "position",
      "source": "position-fdr.js",
      "description": "The same xPts with Position FDR switched on: each fixture is rated by the opponent's last five matches, attack for goalkeepers and defenders, defence for midfielders and forwards, adjusted for home and away (the venue adjustment applies from Gameweek 6). Archived and scored exactly like the normal-FDR version.",
      "runtime": null,
      "accuracy": null
    },
    {
      "id": "xmins",
      "name": "xMins Model",
      "category": "Minutes",
      "kind": "Component",
      "unit": "Probability",
      "description": "Appearance probabilities for 60+ minutes and a shorter appearance. This interface returns probabilities, not a minute count.",
      "source": "v6-engine.js",
      "status": "Measured",
      "runtime": {
        "medianBatchMs": 6.311499999996158,
        "minBatchMs": 5.018100000001141,
        "maxBatchMs": 7.377599999992526,
        "batches": [
          5.529599999994389,
          5.018100000001141,
          5.91809999999532,
          6.363200000007055,
          6.311499999996158,
          6.85899999999674,
          7.377599999992526
        ]
      },
      "sampleSize": 654,
      "validOutputs": 654,
      "accuracy": null
    },
    {
      "id": "xbps",
      "name": "BPS Model",
      "category": "Bonus",
      "kind": "Engine",
      "unit": "BPS",
      "description": "Expected BPS from a shrunk positional rate, expected playing share and opponent/venue adjustment. Measured for each player’s first fixture in the target gameweek.",
      "source": "ai-bonus.js",
      "status": "Measured",
      "runtime": {
        "medianBatchMs": 2.5442000000039116,
        "minBatchMs": 2.031300000002375,
        "maxBatchMs": 4.165500000002794,
        "batches": [
          2.6875,
          2.5359000000025844,
          4.165500000002794,
          2.5442000000039116,
          2.5843000000022585,
          2.5005999999993946,
          2.031300000002375
        ]
      },
      "sampleSize": 654,
      "validOutputs": 654,
      "accuracy": null
    },
    {
      "id": "xbonus",
      "name": "xBonus Component",
      "category": "Bonus",
      "kind": "Component",
      "unit": "FPL bonus points",
      "status": "Not measured separately",
      "source": "v6-engine.js",
      "description": "Bonus contribution inside the V8 simulation. Separate bonus-award accuracy has not been published.",
      "runtime": null,
      "accuracy": null
    },
    {
      "id": "xcs",
      "name": "Clean-sheet Component",
      "category": "Defence",
      "kind": "Component",
      "unit": "Probability / points",
      "status": "Not measured separately",
      "source": "v6-engine.js",
      "description": "Fixture-difficulty and team-context clean-sheet contribution inside V8. Separate calibration results have not been published.",
      "runtime": null,
      "accuracy": null
    }
  ],
  "distribution": {
    "modelId": "v8",
    "label": "V8 expected points",
    "buckets": [
      {
        "label": "0–1",
        "count": 297
      },
      {
        "label": "1–2",
        "count": 94
      },
      {
        "label": "2–3",
        "count": 104
      },
      {
        "label": "3–4",
        "count": 110
      },
      {
        "label": "4–5",
        "count": 41
      },
      {
        "label": "5–6",
        "count": 5
      },
      {
        "label": "6–7",
        "count": 3
      },
      {
        "label": "7+",
        "count": 0
      }
    ]
  },
  "results": []
}
