{
  "schema_version": "kronaxis-scorecard-v1",
  "description": "Public, append-only ledger of every Kronaxis prediction. Each row is a falsifiable claim with a hash, timestamp, methodology version, and (when available) actual outcome. Misses are reported alongside hits.",
  "principle": "Trust through falsifiability. We publish predictions before events with cryptographic hashes; we publish outcomes when known; we publish misses with the same prominence as hits. The methodology code is open-source and any prediction can be independently re-run and verified.",
  "last_updated": "2026-05-11T12:44:09Z",
  "predictions": [
    {
      "id": "kpm1-2026-05-07-english-locals-council-lincoln",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Lincoln",
      "subject_id": "lincoln",
      "region": "East Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.0,
      "vote_shares_predicted": {
        "Reform UK": 25.9,
        "Independent": 1.0,
        "Green": 10.8,
        "Labour": 23.3,
        "Conservative": 24.6,
        "Liberal Democrat": 12.5,
        "The Liberal Party (Liberal Party Candidate And Local Resident)": 1.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-basildon",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Basildon",
      "subject_id": "basildon",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 9.6,
      "vote_shares_predicted": {
        "Reform UK": 34.4,
        "Independent": 0.8,
        "British Democratic Party (British Democrats)": 0.8,
        "Green": 13.9,
        "Labour": 17.1,
        "Conservative": 21.8,
        "Liberal Democrat": 11.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-brentwood",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Brentwood",
      "subject_id": "brentwood",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.6,
      "vote_shares_predicted": {
        "Reform UK": 27.9,
        "Independent": 1.1,
        "Green": 10.4,
        "Labour": 13.5,
        "Conservative": 25.1,
        "Liberal Democrat": 22.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-broxbourne",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Broxbourne",
      "subject_id": "broxbourne",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.6,
      "vote_shares_predicted": {
        "Reform UK": 31.1,
        "Green": 12.5,
        "TUSC": 0.7,
        "Labour": 16.4,
        "Conservative": 30.6,
        "Liberal Democrat": 8.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-cambridge",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Cambridge",
      "subject_id": "cambridge",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.9,
      "vote_shares_predicted": {
        "Other": 0.4,
        "Communist": 0.7,
        "Reform UK": 13.4,
        "Independent": 0.7,
        "Green": 17.0,
        "Labour": 14.0,
        "Conservative": 25.6,
        "Liberal Democrat": 28.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-colchester",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Colchester",
      "subject_id": "colchester",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.1,
      "vote_shares_predicted": {
        "Reform UK": 28.9,
        "Independent": 0.7,
        "Green": 12.0,
        "Labour": 11.5,
        "Conservative": 25.4,
        "Liberal Democrat": 21.4
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-epping-forest",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Epping Forest",
      "subject_id": "epping-forest",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.8,
      "vote_shares_predicted": {
        "English Democrats": 0.6,
        "Reform UK": 30.1,
        "Independent": 0.6,
        "Green": 13.0,
        "TUSC": 0.6,
        "Labour": 9.3,
        "Conservative": 30.9,
        "Liberal Democrat": 14.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-essex",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Essex",
      "subject_id": "essex",
      "region": "East of England",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.6,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "English Democrats": 0.6,
        "Advance UK": 0.6,
        "Residents for Uttlesford": 0.6,
        "Reform UK": 31.2,
        "Labour": 8.3,
        "Conservative": 30.7,
        "South Woodham Ferrers Residents Party": 0.6,
        "Liberal Democrat": 13.1,
        "TUSC": 0.6,
        "Green": 12.5,
        "Rochford District Residents": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-harlow",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Harlow",
      "subject_id": "harlow",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.6,
      "vote_shares_predicted": {
        "Reform UK": 31.0,
        "Independent": 0.7,
        "Green": 12.4,
        "TUSC": 0.7,
        "Labour": 15.1,
        "Conservative": 30.5,
        "Liberal Democrat": 9.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-huntingdonshire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Huntingdonshire",
      "subject_id": "huntingdonshire",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 0.5,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Party Of Women": 0.6,
        "Animal Welfare": 0.6,
        "Reform UK": 29.5,
        "Labour": 9.0,
        "Conservative": 27.7,
        "Liberal Democrat": 19.4,
        "Green": 12.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-ipswich",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Ipswich",
      "subject_id": "ipswich",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.7,
      "vote_shares_predicted": {
        "Reform UK": 32.8,
        "Labour": 26.1,
        "Conservative": 20.9,
        "Liberal Democrat": 9.1,
        "Green": 11.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-norfolk",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Norfolk",
      "subject_id": "norfolk",
      "region": "East of England",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.3,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "The Official Monster Raving Loony Party (Official Monster Raving Loony Party)": 0.6,
        "Heritage": 0.6,
        "Great Yarmouth First": 0.6,
        "Reform UK": 31.8,
        "Labour": 9.5,
        "Communist": 0.6,
        "Conservative": 32.0,
        "Liberal Democrat": 10.9,
        "Green": 12.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-norwich",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Norwich",
      "subject_id": "norwich",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.0,
      "vote_shares_predicted": {
        "Communist": 0.6,
        "Reform UK": 22.4,
        "Green": 15.5,
        "Labour": 25.7,
        "Conservative": 20.8,
        "Liberal Democrat": 14.3,
        "British Democratic Party": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Green",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-peterborough",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Peterborough",
      "subject_id": "peterborough",
      "region": "East of England",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.5,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Other": 0.3,
        "Your Party": 0.7,
        "Reform UK": 29.8,
        "Labour": 13.8,
        "Conservative": 26.2,
        "Liberal Democrat": 13.9,
        "TUSC": 0.7,
        "Green": 13.9
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-rochford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Rochford",
      "subject_id": "rochford",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.2,
      "vote_shares_predicted": {
        "Reform UK": 29.3,
        "Independent": 0.6,
        "Heritage": 0.6,
        "Green": 12.2,
        "Labour": 11.0,
        "Conservative": 29.4,
        "Liberal Democrat": 16.2,
        "Rochford District Residents": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-south-cambridgeshire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "South Cambridgeshire",
      "subject_id": "south-cambridgeshire",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.6,
      "vote_shares_predicted": {
        "Reform UK": 24.7,
        "Independent": 0.7,
        "Green": 12.5,
        "Labour": 10.1,
        "Conservative": 26.5,
        "Liberal Democrat": 25.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-southend-on-sea",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Southend-on-Sea",
      "subject_id": "southend-on-sea",
      "region": "East of England",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.9,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Liberal Democrat": 13.4,
        "Confelicity": 0.6,
        "Reform UK": 30.3,
        "Labour": 14.1,
        "Conservative": 27.3,
        "Heritage": 0.6,
        "The Moon And Serpent Party": 0.6,
        "Green": 12.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-st-albans",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "St Albans",
      "subject_id": "st-albans",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 23.3,
        "Labour": 7.3,
        "Communist": 0.6,
        "Conservative": 26.1,
        "Liberal Democrat": 30.4,
        "Green": 11.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-stevenage",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Stevenage",
      "subject_id": "stevenage",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.2,
      "vote_shares_predicted": {
        "Reform UK": 32.4,
        "Labour": 28.1,
        "Conservative": 18.0,
        "Liberal Democrat": 9.1,
        "TUSC": 0.7,
        "Green": 11.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-suffolk",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Suffolk",
      "subject_id": "suffolk",
      "region": "East of England",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.6,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "The Official Monster Raving Loony Party (Official Monster Raving Loony Party)": 0.6,
        "Reform UK": 31.0,
        "Labour": 10.3,
        "Communist": 0.6,
        "Conservative": 32.6,
        "Liberal Democrat": 11.7,
        "Green": 12.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-three-rivers",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Three Rivers",
      "subject_id": "three-rivers",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.0,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Other": 0.5,
        "Reform UK": 25.2,
        "Labour": 10.6,
        "Conservative": 24.7,
        "Liberal Democrat": 25.7,
        "TUSC": 0.7,
        "Green": 11.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-thurrock",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Thurrock",
      "subject_id": "thurrock",
      "region": "East of England",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 6.9,
      "vote_shares_predicted": {
        "Reform UK": 33.8,
        "Independent": 0.8,
        "Green": 12.7,
        "Labour": 20.0,
        "Conservative": 21.7,
        "Liberal Democrat": 11.1
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-watford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Watford",
      "subject_id": "watford",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.0,
      "vote_shares_predicted": {
        "Other": 1.3,
        "Reform UK": 27.5,
        "Heritage": 0.6,
        "Green": 11.0,
        "TUSC": 0.6,
        "Labour": 13.1,
        "Conservative": 23.8,
        "Liberal Democrat": 22.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-welwyn-hatfield",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Welwyn Hatfield",
      "subject_id": "welwyn-hatfield",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.3,
      "vote_shares_predicted": {
        "Liberal Democrat": 14.2,
        "Reform UK": 29.8,
        "Labour": 13.8,
        "Conservative": 28.9,
        "Heritage": 0.7,
        "Green": 12.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-barking-and-dagenham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Barking and Dagenham",
      "subject_id": "barking-and-dagenham",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 10.1,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "Workers Party": 0.5,
        "Other": 1.4,
        "Reform UK": 25.2,
        "Labour": 32.4,
        "Conservative": 17.8,
        "Christian Peoples Alliance": 0.5,
        "Liberal Democrat": 8.5,
        "Green": 13.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-barnet",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Barnet",
      "subject_id": "barnet",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.3,
      "vote_shares_predicted": {
        "Other": 0.8,
        "Rejoin EU": 0.6,
        "Reform UK": 26.4,
        "Independent": 0.6,
        "Green": 13.3,
        "TUSC": 0.6,
        "Labour": 28.3,
        "Conservative": 20.9,
        "Liberal Democrat": 8.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-bexley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Bexley",
      "subject_id": "bexley",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.5,
      "vote_shares_predicted": {
        "Reform UK": 22.6,
        "Independent": 0.6,
        "Working for Sidcup (Working for Sidcup - Not Party HQ)": 0.6,
        "Green": 12.8,
        "TUSC": 0.6,
        "Labour": 25.1,
        "Conservative": 24.4,
        "Liberal Democrat": 13.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-brent",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Brent",
      "subject_id": "brent",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 8.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Workers Party": 0.6,
        "Other": 2.0,
        "Reform UK": 22.3,
        "Labour": 29.5,
        "Conservative": 20.0,
        "Liberal Democrat": 10.3,
        "UKIP": 0.6,
        "Green": 14.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-bromley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Bromley",
      "subject_id": "bromley",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.7,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Chislehurst Matters": 0.6,
        "Reform UK": 27.0,
        "Labour": 16.8,
        "Better Bromley": 0.6,
        "Conservative": 26.7,
        "Liberal Democrat": 13.5,
        "Green": 14.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-camden",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Camden",
      "subject_id": "camden",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 11.9,
      "vote_shares_predicted": {
        "National Housing Party United Kingdom (National Housing Party Camden People First)": 1.6,
        "Independent": 0.6,
        "National Housing Party United Kingdom (National Housing Party No More Refugees)": 0.6,
        "Other": 0.7,
        "Reform UK": 19.2,
        "Labour": 29.8,
        "Camden People&#x27;s Alliance": 0.6,
        "Conservative": 7.5,
        "Liberal Democrat": 18.4,
        "Green": 20.9
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-croydon",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Croydon",
      "subject_id": "croydon",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "SDP": 0.0,
        "Taking The Initiative Party (Taking the Initiative Party of Britain)": 0.5,
        "The Motoring Party": 0.0,
        "Reform UK": 24.3,
        "Labour": 27.7,
        "Communist": 0.0,
        "Conservative": 20.4,
        "Equality Party": 0.5,
        "TUSC": 0.8,
        "Other": 0.6,
        "Climate Party": 0.0,
        "The Christian Party Christian Peoples Alliance": 0.0,
        "Christian Peoples Alliance": 0.0,
        "Liberal Democrat": 9.9,
        "The Socialist Party of Great Britain (The Socialist Party (GB))": 0.0,
        "Chislehurst Matters": 0.0,
        "Green": 13.7,
        "Workers Party": 0.5,
        "Your Party": 0.5,
        "Better Bromley": 0.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-ealing",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Ealing",
      "subject_id": "ealing",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Rejoin EU": 0.6,
        "Other": 1.9,
        "SDP": 0.6,
        "Reform UK": 23.8,
        "Labour": 27.8,
        "Conservative": 18.9,
        "Liberal Democrat": 10.6,
        "TUSC": 0.6,
        "Green": 14.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-enfield",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Enfield",
      "subject_id": "enfield",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.6,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 24.1,
        "Labour": 28.0,
        "Haringey Socialist Alliance": 0.1,
        "Conservative": 18.8,
        "Christian Peoples Alliance": 0.6,
        "Liberal Democrat": 11.2,
        "TUSC": 1.0,
        "Communist League Election Campaign": 0.5,
        "Green": 15.1
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-greenwich",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Greenwich",
      "subject_id": "greenwich",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 7.4,
      "vote_shares_predicted": {
        "Reform UK": 26.3,
        "Independent": 0.6,
        "The Official Monster Raving Loony Party": 0.6,
        "Green": 14.0,
        "Labour": 31.3,
        "Your Party": 0.6,
        "Conservative": 18.2,
        "Liberal Democrat": 8.3
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-hackney",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hackney",
      "subject_id": "hackney",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 13.3,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 24.7,
        "Labour": 35.2,
        "Conservative": 8.1,
        "Liberal Democrat": 10.9,
        "TUSC": 0.9,
        "Green": 19.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Green",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-hammersmith-and-fulham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hammersmith and Fulham",
      "subject_id": "hammersmith-and-fulham",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.1,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 22.7,
        "Labour": 27.2,
        "Conservative": 21.8,
        "Liberal Democrat": 13.4,
        "Green": 14.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-haringey",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Haringey",
      "subject_id": "haringey",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 12.8,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Liberal Democrat": 15.8,
        "Reform UK": 21.7,
        "Labour": 32.0,
        "Conservative": 8.2,
        "Christian Peoples Alliance": 0.6,
        "Haringey Socialist Alliance": 0.6,
        "TUSC": 1.0,
        "Green": 19.4
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-harrow",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Harrow",
      "subject_id": "harrow",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 16.0,
      "vote_shares_predicted": {
        "Labour": 39.0,
        "Reform UK": 23.0,
        "Conservative": 17.0,
        "Liberal Democrat": 9.0,
        "Green": 7.0,
        "Independent": 3.0,
        "Other": 2.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-havering",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Havering",
      "subject_id": "havering",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 5.4,
      "vote_shares_predicted": {
        "Reform UK": 29.7,
        "Conservative": 24.3,
        "Labour": 17.3,
        "Green": 10.6,
        "Liberal Democrat": 6.1,
        "Havering Residents Association": 9.5,
        "Independent": 1.9,
        "Other": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-hillingdon",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hillingdon",
      "subject_id": "hillingdon",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.4,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Other": 1.6,
        "UKIP": 0.6,
        "SDP": 0.6,
        "Reform UK": 25.3,
        "Labour": 25.2,
        "Conservative": 25.0,
        "Liberal Democrat": 9.4,
        "TUSC": 0.6,
        "Green": 11.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-hounslow",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hounslow",
      "subject_id": "hounslow",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 5.2,
      "vote_shares_predicted": {
        "Other": 2.3,
        "Reform UK": 23.8,
        "Independent": 0.6,
        "Green": 13.4,
        "TUSC": 0.6,
        "Labour": 27.7,
        "Conservative": 19.9,
        "Liberal Democrat": 11.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-islington",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Islington",
      "subject_id": "islington",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 16.7,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "National Housing Party United Kingdom (National Housing Party No More Refugees)": 0.6,
        "SDP": 0.6,
        "Reform UK": 13.8,
        "Labour": 34.6,
        "Conservative": 7.6,
        "Christian Peoples Alliance": 0.6,
        "Liberal Democrat": 18.5,
        "Green": 23.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-kensington-and-chelsea",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Kensington and Chelsea",
      "subject_id": "kensington-and-chelsea",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.1,
      "vote_shares_predicted": {
        "Reform UK": 22.6,
        "Independent": 0.6,
        "Green": 10.9,
        "Labour": 23.6,
        "Conservative": 25.9,
        "Liberal Democrat": 16.3
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-kingston-upon-thames",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Thames",
      "subject_id": "kingston-upon-thames",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 14.1,
      "vote_shares_predicted": {
        "Other": 0.7,
        "Reform UK": 14.6,
        "Independent": 0.6,
        "Heritage": 0.6,
        "Green": 14.9,
        "The Official Monster Raving Loony Party (Official Monster Raving Loony Party)": 0.6,
        "Labour": 15.2,
        "Conservative": 19.1,
        "Liberal Democrat": 33.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-lambeth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Lambeth",
      "subject_id": "lambeth",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 15.5,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "SDP": 0.5,
        "Reform UK": 20.2,
        "Labour": 33.1,
        "Christian Peoples Alliance": 0.5,
        "Conservative": 7.5,
        "Liberal Democrat": 14.8,
        "The Socialist Party of Great Britain (The Socialist Party (GB))": 0.5,
        "TUSC": 1.2,
        "Green": 21.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-lewisham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Lewisham",
      "subject_id": "lewisham",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 15.5,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "Your Party": 0.5,
        "Climate Party": 0.5,
        "The Motoring Party": 0.5,
        "Reform UK": 20.3,
        "Labour": 33.9,
        "Communist": 0.5,
        "Christian Peoples Alliance": 0.5,
        "Conservative": 7.0,
        "Liberal Democrat": 12.3,
        "TUSC": 0.5,
        "Green": 22.9
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Green",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-merton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Merton",
      "subject_id": "merton",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 8.2,
      "vote_shares_predicted": {
        "Other": 9.1,
        "Animal Welfare": 0.6,
        "Reform UK": 14.6,
        "Independent": 9.1,
        "Green": 13.5,
        "Labour": 24.1,
        "Conservative": 14.9,
        "Liberal Democrat": 13.7,
        "Libertarian Party": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-newham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Newham",
      "subject_id": "newham",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 19.7,
      "vote_shares_predicted": {
        "Other": 2.5,
        "Communities United Party": 0.5,
        "Reform UK": 24.1,
        "Independent": 0.5,
        "Green": 14.2,
        "TUSC": 0.8,
        "Workers Party": 0.5,
        "Labour": 42.0,
        "Conservative": 5.2,
        "Liberal Democrat": 9.1,
        "Christian Peoples Alliance": 0.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-redbridge",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Redbridge",
      "subject_id": "redbridge",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.5,
      "vote_shares_predicted": {
        "Havering Residents Association (Havering Residents Association - Rush Green / Crowlands)": 0.3,
        "Havering Residents Association (Havering Residents Association - South Hornchurch)": 0.3,
        "Reform UK": 21.9,
        "Harold Wood Hill Park Residents Association": 0.3,
        "Hornchurch Residents Association": 0.3,
        "Green": 14.7,
        "Labour": 27.1,
        "Your Party": 0.0,
        "Havering Residents Association (Havering Residents Association - Havering - atte-Bower)": 0.3,
        "Christian Peoples Alliance": 0.0,
        "Havering Residents Association (Havering Residents Association - Marshalls/Rise Park)": 0.3,
        "Havering Residents Association (Havering Residents Association - Romford)": 0.3,
        "TUSC": 0.2,
        "Redbridge Trade Union Party": 0.5,
        "Havering Residents Association (Havering Residents Association - Squirrels Heath)": 0.3,
        "Havering Residents Association (Havering Residents Association - Harold Hill)": 0.3,
        "Havering Residents Association (Havering Residents Association - Emerson Park)": 0.3,
        "Independent": 0.9,
        "Havering Residents Association (Havering Residents Association - Beam Park)": 0.3,
        "Havering Residents Association (Havering Residents Association - Mawneys)": 0.3,
        "Conservative": 16.4,
        "Other": 2.3,
        "Communities United Party": 0.0,
        "Upminster and Cranham Residents Association": 0.3,
        "Havering Residents Association": 0.3,
        "Workers Party": 0.0,
        "Liberal Democrat": 11.5,
        "Havering Residents Association (Havering Residents Association - Rainham/Wennington)": 0.3
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-richmond-upon-thames",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Richmond upon Thames",
      "subject_id": "richmond-upon-thames",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 17.6,
      "vote_shares_predicted": {
        "Reform UK": 17.2,
        "Independent": 0.6,
        "Green": 14.2,
        "Labour": 13.7,
        "Conservative": 17.4,
        "Liberal Democrat": 37.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-southwark",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Southwark",
      "subject_id": "southwark",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 12.9,
      "vote_shares_predicted": {
        "Reform UK": 23.4,
        "Independent": 0.6,
        "Green": 19.1,
        "Build (Build - Homes, Infrastructure, A Future)": 0.6,
        "Labour": 34.2,
        "Conservative": 7.6,
        "Liberal Democrat": 13.8,
        "Communist League Election Campaign (Communist League)": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-sutton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Sutton",
      "subject_id": "sutton",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 12.4,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Other": 0.5,
        "Reform UK": 21.4,
        "Labour": 12.7,
        "The Christian Party Christian Peoples Alliance": 0.6,
        "Conservative": 16.7,
        "Liberal Democrat": 33.0,
        "Green": 14.4
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-tower-hamlets",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Tower Hamlets",
      "subject_id": "tower-hamlets",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 13.8,
      "vote_shares_predicted": {
        "Forward Party (The Forward Party)": 0.5,
        "Aspire": 0.9,
        "Independent": 0.5,
        "Other": 2.6,
        "Reform UK": 22.8,
        "Labour": 33.9,
        "Conservative": 6.8,
        "Liberal Democrat": 13.1,
        "TUSC": 0.9,
        "Green": 17.9
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      }
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-waltham-forest",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Waltham Forest",
      "subject_id": "waltham-forest",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 9.9,
      "vote_shares_predicted": {
        "Other": 0.9,
        "Reform UK": 21.6,
        "Independent": 0.6,
        "Green": 22.1,
        "TUSC": 1.0,
        "Labour": 30.1,
        "Your Party": 0.6,
        "Conservative": 6.7,
        "Liberal Democrat": 16.3
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Green",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-wandsworth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Wandsworth",
      "subject_id": "wandsworth",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.1,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 20.6,
        "Labour": 27.6,
        "Conservative": 22.4,
        "Liberal Democrat": 13.1,
        "TUSC": 1.0,
        "Green": 14.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-westminster",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Westminster",
      "subject_id": "westminster",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.1,
      "vote_shares_predicted": {
        "Other": 0.6,
        "Reform UK": 22.4,
        "Independent": 0.6,
        "Green": 13.8,
        "Workers Party": 0.6,
        "Labour": 23.1,
        "Conservative": 20.9,
        "Liberal Democrat": 17.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-gateshead",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Gateshead",
      "subject_id": "gateshead",
      "region": "North East",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.4,
      "vote_shares_predicted": {
        "Party Of Women": 0.1,
        "Communist": 0.1,
        "Reform UK": 30.4,
        "Independent": 0.6,
        "Green": 12.0,
        "Conservative": 12.6,
        "Save Us Now": 0.5,
        "TUSC": 1.6,
        "Labour": 31.8,
        "Imagine": 0.1,
        "Liberal Democrat": 10.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-hartlepool",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hartlepool",
      "subject_id": "hartlepool",
      "region": "North East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.8,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Reform UK": 31.4,
        "Labour": 33.2,
        "Conservative": 16.8,
        "Liberal Democrat": 7.6,
        "Green": 10.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-newcastle-upon-tyne",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Newcastle upon Tyne",
      "subject_id": "newcastle-upon-tyne",
      "region": "North East",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.8,
      "vote_shares_predicted": {
        "Party Of Women": 0.5,
        "Communist": 0.5,
        "Reform UK": 28.1,
        "Independent": 0.6,
        "Green": 13.3,
        "Conservative": 12.7,
        "Save Us Now": 0.1,
        "TUSC": 1.5,
        "Labour": 31.9,
        "Imagine": 0.5,
        "Liberal Democrat": 10.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-north-tyneside",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "North Tyneside",
      "subject_id": "north-tyneside",
      "region": "North East",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Workers Party": 0.6,
        "SDP": 0.6,
        "Reform UK": 30.0,
        "Labour": 29.9,
        "Conservative": 19.7,
        "Liberal Democrat": 7.4,
        "Green": 11.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-south-tyneside",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "South Tyneside",
      "subject_id": "south-tyneside",
      "region": "North East",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.2,
      "vote_shares_predicted": {
        "Independent": 1.5,
        "Reform UK": 31.1,
        "Labour": 31.1,
        "Conservative": 19.4,
        "Liberal Democrat": 6.4,
        "Green": 10.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-sunderland",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Sunderland",
      "subject_id": "sunderland",
      "region": "North East",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.0,
      "vote_shares_predicted": {
        "Reform UK": 31.4,
        "Independent": 0.6,
        "Green": 9.4,
        "Save Us Now": 0.1,
        "TUSC": 0.4,
        "Labour": 31.9,
        "Conservative": 14.3,
        "Liberal Democrat": 11.9
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-blackburn-with-darwen",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Blackburn with Darwen",
      "subject_id": "blackburn-with-darwen",
      "region": "North West",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 13.0,
      "vote_shares_predicted": {
        "Labour": 38.0,
        "Reform UK": 25.0,
        "Conservative": 15.0,
        "Liberal Democrat": 7.0,
        "Green": 8.0,
        "Independent": 4.0,
        "Other": 3.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-bolton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Bolton",
      "subject_id": "bolton",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.5,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Workers Party": 0.0,
        "Other": 0.9,
        "Your Party": 0.0,
        "Liberal Democrat": 6.8,
        "SDP": 0.0,
        "Farnworth and Kearsley First Party": 0.6,
        "Labour": 32.2,
        "Reform UK": 30.7,
        "Conservative": 16.8,
        "Advance UK": 0.6,
        "TUSC": 0.6,
        "Green": 10.1
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-burnley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Burnley",
      "subject_id": "burnley",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.1,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Other": 0.4,
        "Reform UK": 31.0,
        "Labour": 32.0,
        "Conservative": 18.0,
        "Liberal Democrat": 7.4,
        "Green": 10.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-bury",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Bury",
      "subject_id": "bury",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.4,
      "vote_shares_predicted": {
        "English Democrats": 0.6,
        "Communist": 0.6,
        "Reform UK": 28.9,
        "Together for Bury": 0.6,
        "Independent": 1.0,
        "Green": 10.9,
        "Radcliffe First": 0.6,
        "Workers Party": 0.6,
        "Labour": 29.9,
        "Conservative": 18.7,
        "Liberal Democrat": 7.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-chorley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Chorley",
      "subject_id": "chorley",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 5.1,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 29.7,
        "Labour": 31.7,
        "Conservative": 19.2,
        "Liberal Democrat": 8.6,
        "TUSC": 0.6,
        "Green": 9.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-halton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Halton",
      "subject_id": "halton",
      "region": "North West",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 8.4,
      "vote_shares_predicted": {
        "Reform UK": 27.5,
        "Independent": 0.6,
        "Green": 11.4,
        "Labour": 33.7,
        "Conservative": 16.9,
        "Liberal Democrat": 9.2,
        "Libertarian Party": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-hyndburn",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hyndburn",
      "subject_id": "hyndburn",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 0.7,
      "vote_shares_predicted": {
        "Other": 0.5,
        "Reform UK": 32.6,
        "Independent": 0.9,
        "Green": 14.2,
        "Labour": 30.6,
        "Conservative": 21.1
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-knowsley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Knowsley",
      "subject_id": "knowsley",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 17.6,
      "vote_shares_predicted": {
        "Reform UK": 25.6,
        "Independent": 0.6,
        "Green": 11.6,
        "Labour": 37.7,
        "Conservative": 16.8,
        "Liberal Democrat": 7.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-manchester",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Manchester",
      "subject_id": "manchester",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 14.2,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "Workers Party": 0.5,
        "Other": 0.8,
        "Your Party": 0.1,
        "The Official Monster Raving Loony Party": 0.1,
        "Liberal Democrat": 8.0,
        "SDP": 0.4,
        "Communist League Election Campaign (Communist League)": 0.4,
        "Reform UK": 23.6,
        "Labour": 33.1,
        "Communist": 0.4,
        "Conservative": 10.8,
        "Advance UK": 0.1,
        "TUSC": 0.8,
        "Green": 20.3
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-oldham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Oldham",
      "subject_id": "oldham",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.7,
      "vote_shares_predicted": {
        "Other": 1.3,
        "The Oldham Group Party": 0.6,
        "Reform UK": 29.9,
        "Independent": 0.6,
        "Green": 9.7,
        "Workers Party": 0.6,
        "Labour": 32.1,
        "Conservative": 17.4,
        "Liberal Democrat": 6.7,
        "National Housing Party United Kingdom (National Housing Party Oldham People First)": 1.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-pendle",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Pendle",
      "subject_id": "pendle",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.2,
      "vote_shares_predicted": {
        "Other": 1.7,
        "Reform UK": 29.4,
        "Independent": 2.3,
        "Green": 10.0,
        "Labour": 16.5,
        "Conservative": 17.3,
        "Liberal Democrat": 22.9
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-preston",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Preston",
      "subject_id": "preston",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.5,
      "vote_shares_predicted": {
        "Other": 1.0,
        "Reform UK": 30.3,
        "Independent": 0.7,
        "Green": 11.8,
        "TUSC": 0.7,
        "Labour": 30.3,
        "Conservative": 16.1,
        "Liberal Democrat": 9.1
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-rochdale",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Rochdale",
      "subject_id": "rochdale",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.6,
      "vote_shares_predicted": {
        "Independent": 0.9,
        "Workers Party": 0.8,
        "Other": 0.8,
        "Liberal Democrat": 6.8,
        "Farnworth and Kearsley First Party": 0.1,
        "Labour": 31.6,
        "Reform UK": 30.1,
        "Conservative": 18.4,
        "Advance UK": 0.6,
        "TUSC": 0.1,
        "Green": 9.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-salford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Salford",
      "subject_id": "salford",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 7.3,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "Workers Party": 0.0,
        "Other": 0.1,
        "Your Party": 0.4,
        "Liberal Democrat": 11.2,
        "SDP": 0.1,
        "Communist League Election Campaign (Communist League)": 0.0,
        "Farnworth and Kearsley First Party": 0.0,
        "Labour": 30.7,
        "Communist": 0.0,
        "Reform UK": 26.3,
        "Conservative": 15.8,
        "Advance UK": 0.4,
        "TUSC": 0.5,
        "Green": 13.9
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-sefton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Sefton",
      "subject_id": "sefton",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.4,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Formby Residents Action Group": 0.6,
        "The Official Monster Raving Loony Party": 0.6,
        "Reform UK": 27.1,
        "Labour": 28.4,
        "Conservative": 20.1,
        "Liberal Democrat": 9.8,
        "TUSC": 1.0,
        "Green": 11.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-st-helens",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "St Helens",
      "subject_id": "st-helens",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 0.5,
      "vote_shares_predicted": {
        "Reform UK": 29.2,
        "Independent": 0.7,
        "Green": 12.3,
        "Labour": 30.6,
        "Conservative": 17.8,
        "Liberal Democrat": 9.3
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-stockport",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Stockport",
      "subject_id": "stockport",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.4,
      "vote_shares_predicted": {
        "SDP": 0.1,
        "Advance UK": 0.1,
        "Party Of Women": 0.5,
        "Reform UK": 26.1,
        "Independent": 0.9,
        "Green": 9.8,
        "TUSC": 0.5,
        "Labour": 18.4,
        "Edgeley Community Association": 0.5,
        "Conservative": 17.6,
        "Liberal Democrat": 25.0,
        "Your Party": 0.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-tameside",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Tameside",
      "subject_id": "tameside",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 0.4,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Workers Party": 0.6,
        "Other": 0.2,
        "Your Party": 0.5,
        "The Official Monster Raving Loony Party": 0.5,
        "SDP": 0.1,
        "Communist League Election Campaign (Communist League)": 0.1,
        "Reform UK": 28.9,
        "Labour": 28.9,
        "Communist": 0.1,
        "Conservative": 16.1,
        "Liberal Democrat": 8.9,
        "TUSC": 0.2,
        "Green": 14.3
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-trafford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Trafford",
      "subject_id": "trafford",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 5.8,
      "vote_shares_predicted": {
        "SDP": 0.5,
        "Advance UK": 0.5,
        "Party Of Women": 0.1,
        "Reform UK": 24.2,
        "Independent": 0.7,
        "Green": 11.7,
        "TUSC": 0.1,
        "Labour": 24.9,
        "Edgeley Community Association": 0.1,
        "Conservative": 19.4,
        "Liberal Democrat": 17.6,
        "Your Party": 0.1
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-west-lancashire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "West Lancashire",
      "subject_id": "west-lancashire",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 5.3,
      "vote_shares_predicted": {
        "Our West Lancashire": 0.6,
        "Reform UK": 29.4,
        "Green": 9.6,
        "Labour": 32.4,
        "Your Party": 0.6,
        "Conservative": 19.2,
        "Liberal Democrat": 8.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-wigan",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Wigan",
      "subject_id": "wigan",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.9,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Other": 0.1,
        "Your Party": 0.1,
        "Liberal Democrat": 6.5,
        "SDP": 0.5,
        "Farnworth and Kearsley First Party": 0.1,
        "Labour": 33.9,
        "Reform UK": 32.6,
        "Conservative": 15.6,
        "Advance UK": 0.1,
        "TUSC": 0.1,
        "Green": 9.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-adur",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Adur",
      "subject_id": "adur",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.5,
      "vote_shares_predicted": {
        "Reform UK": 30.5,
        "Independent": 1.1,
        "Green": 12.5,
        "Labour": 11.3,
        "Conservative": 27.8,
        "Liberal Democrat": 16.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-basingstoke-and-deane",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Basingstoke and Deane",
      "subject_id": "basingstoke-and-deane",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.4,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "The All In Party": 0.7,
        "Reform UK": 27.4,
        "Labour": 8.3,
        "Conservative": 27.5,
        "Liberal Democrat": 22.8,
        "Green": 12.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-cherwell",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Cherwell",
      "subject_id": "cherwell",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.9,
      "vote_shares_predicted": {
        "SDP": 0.7,
        "Animal Welfare": 0.7,
        "Reform UK": 26.8,
        "Independent": 0.7,
        "Green": 12.6,
        "Labour": 9.6,
        "Conservative": 27.6,
        "Liberal Democrat": 21.3
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-crawley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Crawley",
      "subject_id": "crawley",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.2,
      "vote_shares_predicted": {
        "Other": 0.2,
        "Reform UK": 28.5,
        "Independent": 0.7,
        "Green": 11.8,
        "TUSC": 0.7,
        "Labour": 15.1,
        "Conservative": 26.7,
        "Liberal Democrat": 16.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-east-surrey",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "East Surrey",
      "subject_id": "east-surrey",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 10.2,
      "vote_shares_predicted": {
        "SDP": 0.6,
        "Nork &amp; Tattenhams Residents&#x27; Associations": 0.6,
        "Reform UK": 22.1,
        "Independent": 0.6,
        "Heritage": 0.6,
        "Green": 12.6,
        "Residents Associations of Epsom and Ewell": 0.6,
        "The Molesey Residents Association": 0.6,
        "Hinchley Wood Residents (Hinchley Wood Residents - Weston, Long Ditton)": 0.6,
        "Labour": 5.7,
        "Thames Ditton / Weston Green Residents&#x27; Association (Thames Ditton Residents&#x27; Association)": 0.6,
        "The Walton Society": 0.6,
        "Liberal Democrat": 20.7,
        "Conservative": 33.4
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      }
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-east-sussex",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "East Sussex",
      "subject_id": "east-sussex",
      "region": "South East",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.5,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "UKIP": 0.6,
        "Liberal Democrat": 17.0,
        "Reform UK": 30.5,
        "Labour": 6.5,
        "Conservative": 30.9,
        "Heritage": 0.6,
        "TUSC": 0.6,
        "Green": 12.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-eastleigh",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Eastleigh",
      "subject_id": "eastleigh",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 5.0,
      "vote_shares_predicted": {
        "Reform UK": 25.0,
        "Independent": 0.7,
        "Green": 12.7,
        "TUSC": 0.7,
        "Labour": 10.8,
        "Conservative": 20.4,
        "Liberal Democrat": 29.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-fareham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Fareham",
      "subject_id": "fareham",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.0,
      "vote_shares_predicted": {
        "Reform UK": 29.5,
        "Labour": 11.2,
        "Conservative": 29.5,
        "Liberal Democrat": 17.1,
        "Green": 12.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-gosport",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Gosport",
      "subject_id": "gosport",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.2,
      "vote_shares_predicted": {
        "Reform UK": 29.8,
        "Labour": 13.6,
        "Conservative": 24.9,
        "Liberal Democrat": 20.6,
        "Green": 11.1
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-hampshire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hampshire",
      "subject_id": "hampshire",
      "region": "South East",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.8,
      "vote_shares_predicted": {
        "SDP": 0.6,
        "Reform UK": 24.3,
        "Whitehill &amp; Bordon Community Party": 0.6,
        "Libertarian Party (Libertarian Party UK)": 1.0,
        "Independent": 0.6,
        "The All In Party": 0.6,
        "The Official Monster Raving Loony Party": 0.6,
        "Green": 13.4,
        "Wessex Regionalists": 0.6,
        "Labour": 8.1,
        "Your Party": 0.6,
        "Conservative": 29.2,
        "Liberal Democrat": 19.1,
        "Community Campaign (Hart)": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-hart",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hart",
      "subject_id": "hart",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 6.0,
      "vote_shares_predicted": {
        "Reform UK": 26.3,
        "The Official Monster Raving Loony Party": 0.6,
        "Green": 13.7,
        "Labour": 8.2,
        "Conservative": 30.3,
        "Liberal Democrat": 20.4,
        "Community Campaign (Hart)": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-hastings",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hastings",
      "subject_id": "hastings",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Green",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.8,
      "vote_shares_predicted": {
        "Reform UK": 25.0,
        "Libertarian Party (Libertarian Party UK)": 0.6,
        "Independent": 0.6,
        "Green": 35.5,
        "Labour": 6.0,
        "Conservative": 23.3,
        "Liberal Democrat": 9.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Green",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-havant",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Havant",
      "subject_id": "havant",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.5,
      "vote_shares_predicted": {
        "Reform UK": 30.8,
        "Labour": 20.4,
        "Conservative": 21.8,
        "Liberal Democrat": 15.7,
        "Green": 11.3
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-isle-of-wight",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Isle of Wight",
      "subject_id": "isle-of-wight",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.8,
      "vote_shares_predicted": {
        "Reform UK": 29.9,
        "Vectis Party": 1.1,
        "Independent": 2.3,
        "Green": 12.6,
        "Labour": 11.9,
        "Conservative": 27.1,
        "Liberal Democrat": 15.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      }
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-milton-keynes",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Milton Keynes",
      "subject_id": "milton-keynes",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.4,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Workers Party": 0.6,
        "Liberal Democrat": 24.2,
        "Reform UK": 27.4,
        "Labour": 10.7,
        "Conservative": 24.8,
        "Heritage": 0.6,
        "Green": 11.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      }
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-oxford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Oxford",
      "subject_id": "oxford",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.7,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Workers Party": 0.7,
        "Other": 0.2,
        "Reform UK": 15.4,
        "Labour": 7.5,
        "Conservative": 25.6,
        "Liberal Democrat": 29.6,
        "TUSC": 0.7,
        "Green": 19.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-portsmouth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Portsmouth",
      "subject_id": "portsmouth",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.2,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Liberal Democrat": 20.5,
        "Reform UK": 29.2,
        "Labour": 13.8,
        "Conservative": 23.9,
        "Heritage": 0.7,
        "Green": 11.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-reading",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Reading",
      "subject_id": "reading",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.8,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Other": 0.8,
        "Liberal Democrat": 27.2,
        "SDP": 0.7,
        "Reform UK": 18.7,
        "Labour": 13.9,
        "Conservative": 25.2,
        "The Liberal Party (Your Local Liberal Party)": 0.7,
        "TUSC": 0.7,
        "Green": 11.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-rushmoor",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Rushmoor",
      "subject_id": "rushmoor",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.4,
      "vote_shares_predicted": {
        "Other": 0.2,
        "Reform UK": 28.3,
        "Independent": 0.6,
        "British Democratic Party (British Democrats)": 0.6,
        "Green": 12.3,
        "TUSC": 0.6,
        "Labour": 13.2,
        "Conservative": 27.6,
        "Liberal Democrat": 16.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-southampton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Southampton",
      "subject_id": "southampton",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.1,
      "vote_shares_predicted": {
        "Reform UK": 27.8,
        "Independent": 0.6,
        "Green": 9.7,
        "TUSC": 1.0,
        "Labour": 28.4,
        "Conservative": 17.6,
        "Liberal Democrat": 14.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-tunbridge-wells",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Tunbridge Wells",
      "subject_id": "tunbridge-wells",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.4,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "English Democrats": 0.7,
        "Reform UK": 24.7,
        "Labour": 7.2,
        "Conservative": 28.1,
        "Liberal Democrat": 23.6,
        "Tunbridge Wells Alliance": 1.4,
        "Green": 13.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-west-oxfordshire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "West Oxfordshire",
      "subject_id": "west-oxfordshire",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.3,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Reform UK": 25.4,
        "Labour": 5.0,
        "Conservative": 28.6,
        "Liberal Democrat": 28.8,
        "Green": 11.4
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-west-surrey",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "West Surrey",
      "subject_id": "west-surrey",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 11.1,
      "vote_shares_predicted": {
        "Reform UK": 21.9,
        "Farnham Residents": 0.6,
        "Independent": 0.6,
        "Heritage": 0.6,
        "Green": 12.4,
        "The Official Monster Raving Loony Party (Official Monster Raving Loony Party)": 0.6,
        "Residents for Guildford and Villages": 0.6,
        "TUSC": 0.6,
        "Labour": 9.1,
        "Conservative": 31.9,
        "Liberal Democrat": 20.4,
        "The Peace Party - Non-violence, Justice, Environment": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      }
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-west-sussex",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "West Sussex",
      "subject_id": "west-sussex",
      "region": "South East",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Conservative",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 6.9,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "The Official Monster Raving Loony Party (Official Monster Raving Loony Party)": 0.6,
        "Local Alliance": 0.6,
        "English Democrats": 0.6,
        "The Peace Party - Non-violence, Justice, Environment": 0.6,
        "Reform UK": 24.9,
        "Labour": 6.9,
        "Pirate Party UK (UK Pirate Party)": 0.6,
        "Libertarian Party (Libertarian Party UK)": 0.6,
        "Conservative": 30.0,
        "Liberal Democrat": 20.8,
        "Patria": 0.6,
        "Green": 12.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-winchester",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Winchester",
      "subject_id": "winchester",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.8,
      "vote_shares_predicted": {
        "Reform UK": 22.4,
        "Independent": 1.1,
        "Green": 12.2,
        "Labour": 8.5,
        "Conservative": 25.9,
        "Liberal Democrat": 29.9
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-wokingham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Wokingham",
      "subject_id": "wokingham",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.6,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 24.2,
        "Labour": 5.5,
        "Conservative": 26.1,
        "Liberal Democrat": 31.1,
        "TUSC": 0.6,
        "Green": 11.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-worthing",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Worthing",
      "subject_id": "worthing",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.6,
      "vote_shares_predicted": {
        "Reform UK": 28.2,
        "Labour": 17.1,
        "Conservative": 28.7,
        "Liberal Democrat": 13.8,
        "Green": 12.1
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-cheltenham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Cheltenham",
      "subject_id": "cheltenham",
      "region": "South West",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.8,
      "vote_shares_predicted": {
        "Christian Peoples Alliance (Christian Peoples Alliance - Supporting Traditional Marriage)": 0.6,
        "Liberal Democrat": 31.3,
        "Reform UK": 20.3,
        "Labour": 8.9,
        "Conservative": 24.0,
        "Heritage": 0.6,
        "TUSC": 0.6,
        "Green": 13.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-exeter",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Exeter",
      "subject_id": "exeter",
      "region": "South West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.8,
      "vote_shares_predicted": {
        "Reform UK": 22.5,
        "Independent": 1.1,
        "Green": 12.8,
        "TUSC": 0.6,
        "Labour": 9.3,
        "Conservative": 24.9,
        "Liberal Democrat": 28.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-plymouth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Plymouth",
      "subject_id": "plymouth",
      "region": "South West",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.5,
      "vote_shares_predicted": {
        "Reform UK": 29.6,
        "Independent": 1.0,
        "Green": 8.9,
        "TUSC": 0.6,
        "Labour": 29.6,
        "Conservative": 21.4,
        "Liberal Democrat": 8.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-swindon",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Swindon",
      "subject_id": "swindon",
      "region": "South West",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.6,
      "vote_shares_predicted": {
        "Reform UK": 30.3,
        "Green": 11.2,
        "TUSC": 0.7,
        "Labour": 26.5,
        "Conservative": 20.8,
        "Liberal Democrat": 10.5
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      }
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-birmingham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Birmingham",
      "subject_id": "birmingham",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 5.2,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Workers Party": 0.9,
        "Other": 1.8,
        "Your Party": 0.5,
        "Liberal Democrat": 10.6,
        "Coventry Citizens Party": 0.0,
        "SDP": 0.0,
        "Reform UK": 27.2,
        "Labour": 28.0,
        "Conservative": 16.8,
        "Advance UK": 0.0,
        "TUSC": 0.5,
        "Green": 13.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-cannock-chase",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Cannock Chase",
      "subject_id": "cannock-chase",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.2,
      "vote_shares_predicted": {
        "Reform UK": 33.5,
        "Independent": 0.9,
        "Green": 13.5,
        "TUSC": 0.9,
        "Labour": 27.1,
        "Conservative": 24.2
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-coventry",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Coventry",
      "subject_id": "coventry",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.7,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "Workers Party": 0.5,
        "Other": 0.7,
        "Your Party": 0.0,
        "Coventry Citizens Party": 0.5,
        "SDP": 0.5,
        "Reform UK": 30.4,
        "Labour": 29.4,
        "Conservative": 17.7,
        "Liberal Democrat": 8.4,
        "TUSC": 0.5,
        "Green": 10.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-dudley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Dudley",
      "subject_id": "dudley",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 5.5,
      "vote_shares_predicted": {
        "Other": 0.2,
        "Advance UK": 0.1,
        "Reform UK": 31.0,
        "Freedom Alliance": 0.6,
        "Independent": 0.6,
        "The Black Country Party": 0.6,
        "Green": 12.5,
        "Yeshua": 0.1,
        "TUSC": 0.9,
        "Labour": 21.1,
        "Conservative": 22.1,
        "Liberal Democrat": 9.6,
        "Libertarian Party": 0.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-newcastle-under-lyme",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Newcastle-under-Lyme",
      "subject_id": "newcastle-under-lyme",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.7,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Reform UK": 30.2,
        "Labour": 18.6,
        "Conservative": 23.8,
        "Liberal Democrat": 12.1,
        "TUSC": 0.7,
        "The Potteries Party (Potteries Party: Serving North Staffordshire)": 1.1,
        "Green": 12.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-nuneaton-and-bedworth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Nuneaton and Bedworth",
      "subject_id": "nuneaton-and-bedworth",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.2,
      "vote_shares_predicted": {
        "Reform UK": 32.0,
        "Labour": 24.9,
        "Conservative": 21.0,
        "Liberal Democrat": 8.6,
        "TUSC": 1.1,
        "Green": 12.3
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-redditch",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Redditch",
      "subject_id": "redditch",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.6,
      "vote_shares_predicted": {
        "Reform UK": 31.6,
        "Labour": 30.0,
        "Conservative": 19.8,
        "Liberal Democrat": 7.9,
        "Green": 10.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-rugby",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Rugby",
      "subject_id": "rugby",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.1,
      "vote_shares_predicted": {
        "Reform UK": 30.3,
        "Labour": 24.1,
        "Conservative": 24.4,
        "Liberal Democrat": 9.8,
        "Green": 11.4
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-sandwell",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Sandwell",
      "subject_id": "sandwell",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 15.0,
      "vote_shares_predicted": {
        "Labour": 39.0,
        "Reform UK": 24.0,
        "Conservative": 16.0,
        "Liberal Democrat": 9.0,
        "Green": 7.0,
        "Independent": 3.0,
        "Other": 2.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-solihull",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Solihull",
      "subject_id": "solihull",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.5,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Workers Party": 0.1,
        "Other": 0.3,
        "Your Party": 0.1,
        "Coventry Citizens Party": 0.1,
        "SDP": 0.1,
        "Reform UK": 29.0,
        "Labour": 29.1,
        "Conservative": 21.1,
        "Liberal Democrat": 8.8,
        "TUSC": 0.1,
        "Green": 10.4
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-tamworth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Tamworth",
      "subject_id": "tamworth",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.2,
      "vote_shares_predicted": {
        "Reform UK": 31.2,
        "Independent": 0.7,
        "Green": 11.3,
        "UKIP": 0.7,
        "Labour": 26.6,
        "Conservative": 21.0,
        "Liberal Democrat": 8.4
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-walsall",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Walsall",
      "subject_id": "walsall",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.0,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Workers Party": 0.2,
        "Other": 1.1,
        "Your Party": 0.1,
        "Liberal Democrat": 10.8,
        "Reform UK": 30.8,
        "Labour": 20.6,
        "Conservative": 21.9,
        "Advance UK": 0.6,
        "TUSC": 0.1,
        "Green": 13.1
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-wolverhampton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Wolverhampton",
      "subject_id": "wolverhampton",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 13.0,
      "vote_shares_predicted": {
        "Labour": 38.0,
        "Reform UK": 25.0,
        "Conservative": 16.0,
        "Liberal Democrat": 8.0,
        "Green": 7.0,
        "Independent": 3.0,
        "Other": 3.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-barnsley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Barnsley",
      "subject_id": "barnsley",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.3,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "English Democrats": 0.6,
        "SDP": 0.6,
        "Reform UK": 33.8,
        "Labour": 32.9,
        "Conservative": 15.3,
        "Liberal Democrat": 6.1,
        "TUSC": 0.6,
        "Green": 9.4
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-bradford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Bradford",
      "subject_id": "bradford",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 17.0,
      "vote_shares_predicted": {
        "Labour": 40.0,
        "Reform UK": 23.0,
        "Conservative": 14.0,
        "Green": 11.0,
        "Liberal Democrat": 8.0,
        "Independent": 2.0,
        "Other": 2.0
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-calderdale",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Calderdale",
      "subject_id": "calderdale",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.8,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Community Alliance Kirklees": 0.1,
        "People&#x27;s Alliance for Change and Equality": 0.1,
        "Workers Party": 0.5,
        "Other": 0.2,
        "The Official Monster Raving Loony Party": 0.5,
        "Reform UK": 30.0,
        "Labour": 31.6,
        "Conservative": 19.2,
        "Liberal Democrat": 7.2,
        "The Revolting Party (The Revolting Party. Join The Revolt)": 0.1,
        "Green": 9.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-kingston-upon-hull",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Hull",
      "subject_id": "kingston-upon-hull",
      "region": "Yorkshire and The Humber",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.8,
      "vote_shares_predicted": {
        "Reform UK": 29.2,
        "Labour": 33.0,
        "Conservative": 16.0,
        "Liberal Democrat": 12.0,
        "Green": 9.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-kirklees",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Kirklees",
      "subject_id": "kirklees",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.6,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Community Alliance Kirklees": 0.5,
        "People&#x27;s Alliance for Change and Equality": 0.5,
        "Workers Party": 0.1,
        "Other": 0.6,
        "English Democrats": 0.1,
        "The Official Monster Raving Loony Party": 0.1,
        "SDP": 0.1,
        "Reform UK": 29.9,
        "Labour": 31.2,
        "Conservative": 18.8,
        "Liberal Democrat": 7.1,
        "The Revolting Party (The Revolting Party. Join The Revolt)": 0.5,
        "TUSC": 0.1,
        "Green": 9.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-leeds",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Leeds",
      "subject_id": "leeds",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 5.5,
      "vote_shares_predicted": {
        "Yorkshire Party": 0.5,
        "SDP": 0.5,
        "Other": 0.2,
        "Reform UK": 24.1,
        "Independent": 0.5,
        "The Official Monster Raving Loony Party": 0.4,
        "Heritage": 0.1,
        "Green": 19.3,
        "British Democratic Party (British Democrats)": 0.1,
        "UKIP": 0.5,
        "TUSC": 0.5,
        "Labour": 26.8,
        "Your Party": 0.4,
        "Conservative": 17.4,
        "Liberal Democrat": 8.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-north-east-lincolnshire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "North East Lincolnshire",
      "subject_id": "north-east-lincolnshire",
      "region": "Yorkshire and The Humber",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 9.9,
      "vote_shares_predicted": {
        "SDP": 0.7,
        "Reform UK": 33.3,
        "Independent": 0.7,
        "Green": 13.4,
        "TUSC": 0.7,
        "Labour": 18.8,
        "Conservative": 20.4,
        "Liberal Democrat": 11.2,
        "National Housing Party United Kingdom (National Housing Party Grimsby People First)": 0.7
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-sheffield",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Sheffield",
      "subject_id": "sheffield",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 7.2,
      "vote_shares_predicted": {
        "Reform UK": 21.6,
        "Independent": 0.6,
        "Green": 21.4,
        "UKIP": 0.6,
        "TUSC": 0.6,
        "Labour": 26.4,
        "Conservative": 17.2,
        "Liberal Democrat": 11.6
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm1-2026-05-07-english-locals-council-wakefield",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Wakefield",
      "subject_id": "wakefield",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 5.0,
      "vote_shares_predicted": {
        "Yorkshire Party": 0.6,
        "SDP": 0.6,
        "Reform UK": 28.6,
        "Independent": 0.6,
        "The Official Monster Raving Loony Party": 0.1,
        "Green": 11.9,
        "British Democratic Party (British Democrats)": 0.5,
        "UKIP": 0.1,
        "TUSC": 0.6,
        "Labour": 31.3,
        "Your Party": 0.1,
        "Conservative": 17.1,
        "Liberal Democrat": 7.8
      },
      "predicted_at": "2026-04-22T12:42:38+01:00",
      "predicted_at_git_commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
      "methodology": {
        "name": "KPM-1",
        "version": "v1.0",
        "hash_sha256": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "code_url": "https://github.com/Kronaxis/kpm/tree/f4ee209770bcd3fcd7fa09ad724717b82102e668/scripts/kpm1/"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-lincoln",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Lincoln",
      "subject_id": "lincoln",
      "region": "East Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 1.3,
      "vote_shares_predicted": {
        "Reform UK": 25.9,
        "Independent": 1.0,
        "Green": 10.8,
        "Labour": 23.3,
        "Conservative": 24.6,
        "Liberal Democrat": 12.5,
        "The Liberal Party (Liberal Party Candidate And Local Resident)": 1.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-basildon",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Basildon",
      "subject_id": "basildon",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 34.4,
        "Independent": 0.8,
        "British Democratic Party (British Democrats)": 0.8,
        "Green": 13.9,
        "Labour": 17.1,
        "Conservative": 21.8,
        "Liberal Democrat": 11.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-brentwood",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Brentwood",
      "subject_id": "brentwood",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 27.9,
        "Independent": 1.1,
        "Green": 10.4,
        "Labour": 13.5,
        "Conservative": 25.1,
        "Liberal Democrat": 22.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-broxbourne",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Broxbourne",
      "subject_id": "broxbourne",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.5,
      "vote_shares_predicted": {
        "Reform UK": 31.1,
        "Green": 12.5,
        "TUSC": 0.7,
        "Labour": 16.4,
        "Conservative": 30.6,
        "Liberal Democrat": 8.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-cambridge",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Cambridge",
      "subject_id": "cambridge",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 2.6,
      "vote_shares_predicted": {
        "Other": 0.4,
        "Communist": 0.7,
        "Reform UK": 13.4,
        "Independent": 0.7,
        "Green": 17.0,
        "Labour": 14.0,
        "Conservative": 25.6,
        "Liberal Democrat": 28.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-colchester",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Colchester",
      "subject_id": "colchester",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 28.9,
        "Independent": 0.7,
        "Green": 12.0,
        "Labour": 11.5,
        "Conservative": 25.4,
        "Liberal Democrat": 21.4
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-epping-forest",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Epping Forest",
      "subject_id": "epping-forest",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.8,
      "vote_shares_predicted": {
        "English Democrats": 0.6,
        "Reform UK": 30.1,
        "Independent": 0.6,
        "Green": 13.0,
        "TUSC": 0.6,
        "Labour": 9.3,
        "Conservative": 30.9,
        "Liberal Democrat": 14.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-essex",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Essex",
      "subject_id": "essex",
      "region": "East of England",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.5,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "English Democrats": 0.6,
        "Advance UK": 0.6,
        "Residents for Uttlesford": 0.6,
        "Reform UK": 31.2,
        "Labour": 8.3,
        "Conservative": 30.7,
        "South Woodham Ferrers Residents Party": 0.6,
        "Liberal Democrat": 13.1,
        "TUSC": 0.6,
        "Green": 12.5,
        "Rochford District Residents": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-harlow",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Harlow",
      "subject_id": "harlow",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.5,
      "vote_shares_predicted": {
        "Reform UK": 31.0,
        "Independent": 0.7,
        "Green": 12.4,
        "TUSC": 0.7,
        "Labour": 15.1,
        "Conservative": 30.5,
        "Liberal Democrat": 9.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-huntingdonshire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Huntingdonshire",
      "subject_id": "huntingdonshire",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 1.8,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Party Of Women": 0.6,
        "Animal Welfare": 0.6,
        "Reform UK": 29.5,
        "Labour": 9.0,
        "Conservative": 27.7,
        "Liberal Democrat": 19.4,
        "Green": 12.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-ipswich",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Ipswich",
      "subject_id": "ipswich",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 6.7,
      "vote_shares_predicted": {
        "Reform UK": 32.8,
        "Labour": 26.1,
        "Conservative": 20.9,
        "Liberal Democrat": 9.1,
        "Green": 11.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-norfolk",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Norfolk",
      "subject_id": "norfolk",
      "region": "East of England",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.2,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "The Official Monster Raving Loony Party (Official Monster Raving Loony Party)": 0.6,
        "Heritage": 0.6,
        "Great Yarmouth First": 0.6,
        "Reform UK": 31.8,
        "Labour": 9.5,
        "Communist": 0.6,
        "Conservative": 32.0,
        "Liberal Democrat": 10.9,
        "Green": 12.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-norwich",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Norwich",
      "subject_id": "norwich",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Communist": 0.6,
        "Reform UK": 22.4,
        "Green": 15.5,
        "Labour": 25.7,
        "Conservative": 20.8,
        "Liberal Democrat": 14.3,
        "British Democratic Party": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Green",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-peterborough",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Peterborough",
      "subject_id": "peterborough",
      "region": "East of England",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 2.5,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Other": 0.3,
        "Your Party": 0.7,
        "Reform UK": 29.8,
        "Labour": 13.8,
        "Conservative": 26.2,
        "Liberal Democrat": 13.9,
        "TUSC": 0.7,
        "Green": 13.9
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-rochford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Rochford",
      "subject_id": "rochford",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 29.3,
        "Independent": 0.6,
        "Heritage": 0.6,
        "Green": 12.2,
        "Labour": 11.0,
        "Conservative": 29.4,
        "Liberal Democrat": 16.2,
        "Rochford District Residents": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-south-cambridgeshire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "South Cambridgeshire",
      "subject_id": "south-cambridgeshire",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 24.7,
        "Independent": 0.7,
        "Green": 12.5,
        "Labour": 10.1,
        "Conservative": 26.5,
        "Liberal Democrat": 25.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-southend-on-sea",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Southend-on-Sea",
      "subject_id": "southend-on-sea",
      "region": "East of England",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 1.9,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Liberal Democrat": 13.4,
        "Confelicity": 0.6,
        "Reform UK": 30.3,
        "Labour": 14.1,
        "Conservative": 27.3,
        "Heritage": 0.6,
        "The Moon And Serpent Party": 0.6,
        "Green": 12.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-st-albans",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "St Albans",
      "subject_id": "st-albans",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 23.3,
        "Labour": 7.3,
        "Communist": 0.6,
        "Conservative": 26.1,
        "Liberal Democrat": 30.4,
        "Green": 11.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-stevenage",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Stevenage",
      "subject_id": "stevenage",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.2,
      "vote_shares_predicted": {
        "Reform UK": 32.4,
        "Labour": 28.1,
        "Conservative": 18.0,
        "Liberal Democrat": 9.1,
        "TUSC": 0.7,
        "Green": 11.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-suffolk",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Suffolk",
      "subject_id": "suffolk",
      "region": "East of England",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 1.6,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "The Official Monster Raving Loony Party (Official Monster Raving Loony Party)": 0.6,
        "Reform UK": 31.0,
        "Labour": 10.3,
        "Communist": 0.6,
        "Conservative": 32.6,
        "Liberal Democrat": 11.7,
        "Green": 12.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-three-rivers",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Three Rivers",
      "subject_id": "three-rivers",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Other": 0.5,
        "Reform UK": 25.2,
        "Labour": 10.6,
        "Conservative": 24.7,
        "Liberal Democrat": 25.7,
        "TUSC": 0.7,
        "Green": 11.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-thurrock",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Thurrock",
      "subject_id": "thurrock",
      "region": "East of England",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 33.8,
        "Independent": 0.8,
        "Green": 12.7,
        "Labour": 20.0,
        "Conservative": 21.7,
        "Liberal Democrat": 11.1
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-watford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Watford",
      "subject_id": "watford",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 3.7,
      "vote_shares_predicted": {
        "Other": 1.3,
        "Reform UK": 27.5,
        "Heritage": 0.6,
        "Green": 11.0,
        "TUSC": 0.6,
        "Labour": 13.1,
        "Conservative": 23.8,
        "Liberal Democrat": 22.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-welwyn-hatfield",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Welwyn Hatfield",
      "subject_id": "welwyn-hatfield",
      "region": "East of England",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.9,
      "vote_shares_predicted": {
        "Liberal Democrat": 14.2,
        "Reform UK": 29.8,
        "Labour": 13.8,
        "Conservative": 28.9,
        "Heritage": 0.7,
        "Green": 12.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-barking-and-dagenham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Barking and Dagenham",
      "subject_id": "barking-and-dagenham",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 10.1,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "Workers Party": 0.5,
        "Other": 1.4,
        "Reform UK": 25.2,
        "Labour": 32.4,
        "Conservative": 17.8,
        "Christian Peoples Alliance": 0.5,
        "Liberal Democrat": 8.5,
        "Green": 13.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-barnet",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Barnet",
      "subject_id": "barnet",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 1.9,
      "vote_shares_predicted": {
        "Other": 0.8,
        "Rejoin EU": 0.6,
        "Reform UK": 26.4,
        "Independent": 0.6,
        "Green": 13.3,
        "TUSC": 0.6,
        "Labour": 28.3,
        "Conservative": 20.9,
        "Liberal Democrat": 8.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-bexley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Bexley",
      "subject_id": "bexley",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.7,
      "vote_shares_predicted": {
        "Reform UK": 22.6,
        "Independent": 0.6,
        "Working for Sidcup (Working for Sidcup - Not Party HQ)": 0.6,
        "Green": 12.8,
        "TUSC": 0.6,
        "Labour": 25.1,
        "Conservative": 24.4,
        "Liberal Democrat": 13.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-brent",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Brent",
      "subject_id": "brent",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 7.2,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Workers Party": 0.6,
        "Other": 2.0,
        "Reform UK": 22.3,
        "Labour": 29.5,
        "Conservative": 20.0,
        "Liberal Democrat": 10.3,
        "UKIP": 0.6,
        "Green": 14.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-bromley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Bromley",
      "subject_id": "bromley",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.3,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Chislehurst Matters": 0.6,
        "Reform UK": 27.0,
        "Labour": 16.8,
        "Better Bromley": 0.6,
        "Conservative": 26.7,
        "Liberal Democrat": 13.5,
        "Green": 14.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-camden",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Camden",
      "subject_id": "camden",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 8.9,
      "vote_shares_predicted": {
        "National Housing Party United Kingdom (National Housing Party Camden People First)": 1.6,
        "Independent": 0.6,
        "National Housing Party United Kingdom (National Housing Party No More Refugees)": 0.6,
        "Other": 0.7,
        "Reform UK": 19.2,
        "Labour": 29.8,
        "Camden People&#x27;s Alliance": 0.6,
        "Conservative": 7.5,
        "Liberal Democrat": 18.4,
        "Green": 20.9
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-croydon",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Croydon",
      "subject_id": "croydon",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 3.4,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "SDP": 0.0,
        "Taking The Initiative Party (Taking the Initiative Party of Britain)": 0.5,
        "The Motoring Party": 0.0,
        "Reform UK": 24.3,
        "Labour": 27.7,
        "Communist": 0.0,
        "Conservative": 20.4,
        "Equality Party": 0.5,
        "TUSC": 0.8,
        "Other": 0.6,
        "Climate Party": 0.0,
        "The Christian Party Christian Peoples Alliance": 0.0,
        "Christian Peoples Alliance": 0.0,
        "Liberal Democrat": 9.9,
        "The Socialist Party of Great Britain (The Socialist Party (GB))": 0.0,
        "Chislehurst Matters": 0.0,
        "Green": 13.7,
        "Workers Party": 0.5,
        "Your Party": 0.5,
        "Better Bromley": 0.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-ealing",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Ealing",
      "subject_id": "ealing",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Rejoin EU": 0.6,
        "Other": 1.9,
        "SDP": 0.6,
        "Reform UK": 23.8,
        "Labour": 27.8,
        "Conservative": 18.9,
        "Liberal Democrat": 10.6,
        "TUSC": 0.6,
        "Green": 14.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-enfield",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Enfield",
      "subject_id": "enfield",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.6,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 24.1,
        "Labour": 28.0,
        "Haringey Socialist Alliance": 0.1,
        "Conservative": 18.8,
        "Christian Peoples Alliance": 0.6,
        "Liberal Democrat": 11.2,
        "TUSC": 1.0,
        "Communist League Election Campaign": 0.5,
        "Green": 15.1
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-greenwich",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Greenwich",
      "subject_id": "greenwich",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 7.4,
      "vote_shares_predicted": {
        "Reform UK": 26.3,
        "Independent": 0.6,
        "The Official Monster Raving Loony Party": 0.6,
        "Green": 14.0,
        "Labour": 31.3,
        "Your Party": 0.6,
        "Conservative": 18.2,
        "Liberal Democrat": 8.3
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-hackney",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hackney",
      "subject_id": "hackney",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 10.5,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 24.7,
        "Labour": 35.2,
        "Conservative": 8.1,
        "Liberal Democrat": 10.9,
        "TUSC": 0.9,
        "Green": 19.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Green",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-hammersmith-and-fulham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hammersmith and Fulham",
      "subject_id": "hammersmith-and-fulham",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 4.5,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 22.7,
        "Labour": 27.2,
        "Conservative": 21.8,
        "Liberal Democrat": 13.4,
        "Green": 14.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-haringey",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Haringey",
      "subject_id": "haringey",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 10.3,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Liberal Democrat": 15.8,
        "Reform UK": 21.7,
        "Labour": 32.0,
        "Conservative": 8.2,
        "Christian Peoples Alliance": 0.6,
        "Haringey Socialist Alliance": 0.6,
        "TUSC": 1.0,
        "Green": 19.4
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-harrow",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Harrow",
      "subject_id": "harrow",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 16.0,
      "vote_shares_predicted": {
        "Labour": 39.0,
        "Reform UK": 23.0,
        "Conservative": 17.0,
        "Liberal Democrat": 9.0,
        "Green": 7.0,
        "Independent": 3.0,
        "Other": 2.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-havering",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Havering",
      "subject_id": "havering",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 5.4,
      "vote_shares_predicted": {
        "Reform UK": 29.7,
        "Conservative": 24.3,
        "Labour": 17.3,
        "Green": 10.6,
        "Liberal Democrat": 6.1,
        "Havering Residents Association": 9.5,
        "Independent": 1.9,
        "Other": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-hillingdon",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hillingdon",
      "subject_id": "hillingdon",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.1,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Other": 1.6,
        "UKIP": 0.6,
        "SDP": 0.6,
        "Reform UK": 25.3,
        "Labour": 25.2,
        "Conservative": 25.0,
        "Liberal Democrat": 9.4,
        "TUSC": 0.6,
        "Green": 11.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-hounslow",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hounslow",
      "subject_id": "hounslow",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 3.9,
      "vote_shares_predicted": {
        "Other": 2.3,
        "Reform UK": 23.8,
        "Independent": 0.6,
        "Green": 13.4,
        "TUSC": 0.6,
        "Labour": 27.7,
        "Conservative": 19.9,
        "Liberal Democrat": 11.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-islington",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Islington",
      "subject_id": "islington",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 16.7,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "National Housing Party United Kingdom (National Housing Party No More Refugees)": 0.6,
        "SDP": 0.6,
        "Reform UK": 13.8,
        "Labour": 34.6,
        "Conservative": 7.6,
        "Christian Peoples Alliance": 0.6,
        "Liberal Democrat": 18.5,
        "Green": 23.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-kensington-and-chelsea",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Kensington and Chelsea",
      "subject_id": "kensington-and-chelsea",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 2.3,
      "vote_shares_predicted": {
        "Reform UK": 22.6,
        "Independent": 0.6,
        "Green": 10.9,
        "Labour": 23.6,
        "Conservative": 25.9,
        "Liberal Democrat": 16.3
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-kingston-upon-thames",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Thames",
      "subject_id": "kingston-upon-thames",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Other": 0.7,
        "Reform UK": 14.6,
        "Independent": 0.6,
        "Heritage": 0.6,
        "Green": 14.9,
        "The Official Monster Raving Loony Party (Official Monster Raving Loony Party)": 0.6,
        "Labour": 15.2,
        "Conservative": 19.1,
        "Liberal Democrat": 33.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-lambeth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Lambeth",
      "subject_id": "lambeth",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 11.9,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "SDP": 0.5,
        "Reform UK": 20.2,
        "Labour": 33.1,
        "Christian Peoples Alliance": 0.5,
        "Conservative": 7.5,
        "Liberal Democrat": 14.8,
        "The Socialist Party of Great Britain (The Socialist Party (GB))": 0.5,
        "TUSC": 1.2,
        "Green": 21.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-lewisham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Lewisham",
      "subject_id": "lewisham",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 11.0,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "Your Party": 0.5,
        "Climate Party": 0.5,
        "The Motoring Party": 0.5,
        "Reform UK": 20.3,
        "Labour": 33.9,
        "Communist": 0.5,
        "Christian Peoples Alliance": 0.5,
        "Conservative": 7.0,
        "Liberal Democrat": 12.3,
        "TUSC": 0.5,
        "Green": 22.9
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Green",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-merton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Merton",
      "subject_id": "merton",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 8.2,
      "vote_shares_predicted": {
        "Other": 9.1,
        "Animal Welfare": 0.6,
        "Reform UK": 14.6,
        "Independent": 9.1,
        "Green": 13.5,
        "Labour": 24.1,
        "Conservative": 14.9,
        "Liberal Democrat": 13.7,
        "Libertarian Party": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-newham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Newham",
      "subject_id": "newham",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 19.7,
      "vote_shares_predicted": {
        "Other": 2.5,
        "Communities United Party": 0.5,
        "Reform UK": 24.1,
        "Independent": 0.5,
        "Green": 14.2,
        "TUSC": 0.8,
        "Workers Party": 0.5,
        "Labour": 42.0,
        "Conservative": 5.2,
        "Liberal Democrat": 9.1,
        "Christian Peoples Alliance": 0.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-redbridge",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Redbridge",
      "subject_id": "redbridge",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.5,
      "vote_shares_predicted": {
        "Havering Residents Association (Havering Residents Association - Rush Green / Crowlands)": 0.3,
        "Havering Residents Association (Havering Residents Association - South Hornchurch)": 0.3,
        "Reform UK": 21.9,
        "Harold Wood Hill Park Residents Association": 0.3,
        "Hornchurch Residents Association": 0.3,
        "Green": 14.7,
        "Labour": 27.1,
        "Your Party": 0.0,
        "Havering Residents Association (Havering Residents Association - Havering - atte-Bower)": 0.3,
        "Christian Peoples Alliance": 0.0,
        "Havering Residents Association (Havering Residents Association - Marshalls/Rise Park)": 0.3,
        "Havering Residents Association (Havering Residents Association - Romford)": 0.3,
        "TUSC": 0.2,
        "Redbridge Trade Union Party": 0.5,
        "Havering Residents Association (Havering Residents Association - Squirrels Heath)": 0.3,
        "Havering Residents Association (Havering Residents Association - Harold Hill)": 0.3,
        "Havering Residents Association (Havering Residents Association - Emerson Park)": 0.3,
        "Independent": 0.9,
        "Havering Residents Association (Havering Residents Association - Beam Park)": 0.3,
        "Havering Residents Association (Havering Residents Association - Mawneys)": 0.3,
        "Conservative": 16.4,
        "Other": 2.3,
        "Communities United Party": 0.0,
        "Upminster and Cranham Residents Association": 0.3,
        "Havering Residents Association": 0.3,
        "Workers Party": 0.0,
        "Liberal Democrat": 11.5,
        "Havering Residents Association (Havering Residents Association - Rainham/Wennington)": 0.3
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-richmond-upon-thames",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Richmond upon Thames",
      "subject_id": "richmond-upon-thames",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 17.2,
        "Independent": 0.6,
        "Green": 14.2,
        "Labour": 13.7,
        "Conservative": 17.4,
        "Liberal Democrat": 37.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-southwark",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Southwark",
      "subject_id": "southwark",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 10.8,
      "vote_shares_predicted": {
        "Reform UK": 23.4,
        "Independent": 0.6,
        "Green": 19.1,
        "Build (Build - Homes, Infrastructure, A Future)": 0.6,
        "Labour": 34.2,
        "Conservative": 7.6,
        "Liberal Democrat": 13.8,
        "Communist League Election Campaign (Communist League)": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-sutton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Sutton",
      "subject_id": "sutton",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Other": 0.5,
        "Reform UK": 21.4,
        "Labour": 12.7,
        "The Christian Party Christian Peoples Alliance": 0.6,
        "Conservative": 16.7,
        "Liberal Democrat": 33.0,
        "Green": 14.4
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-tower-hamlets",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Tower Hamlets",
      "subject_id": "tower-hamlets",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 13.8,
      "vote_shares_predicted": {
        "Forward Party (The Forward Party)": 0.5,
        "Aspire": 0.9,
        "Independent": 0.5,
        "Other": 2.6,
        "Reform UK": 22.8,
        "Labour": 33.9,
        "Conservative": 6.8,
        "Liberal Democrat": 13.1,
        "TUSC": 0.9,
        "Green": 17.9
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-waltham-forest",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Waltham Forest",
      "subject_id": "waltham-forest",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 8.0,
      "vote_shares_predicted": {
        "Other": 0.9,
        "Reform UK": 21.6,
        "Independent": 0.6,
        "Green": 22.1,
        "TUSC": 1.0,
        "Labour": 30.1,
        "Your Party": 0.6,
        "Conservative": 6.7,
        "Liberal Democrat": 16.3
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Green",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-wandsworth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Wandsworth",
      "subject_id": "wandsworth",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 5.2,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 20.6,
        "Labour": 27.6,
        "Conservative": 22.4,
        "Liberal Democrat": 13.1,
        "TUSC": 1.0,
        "Green": 14.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-westminster",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Westminster",
      "subject_id": "westminster",
      "region": "Greater London",
      "council_type": "london_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.7,
      "vote_shares_predicted": {
        "Other": 0.6,
        "Reform UK": 22.4,
        "Independent": 0.6,
        "Green": 13.8,
        "Workers Party": 0.6,
        "Labour": 23.1,
        "Conservative": 20.9,
        "Liberal Democrat": 17.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-gateshead",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Gateshead",
      "subject_id": "gateshead",
      "region": "North East",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 1.4,
      "vote_shares_predicted": {
        "Party Of Women": 0.1,
        "Communist": 0.1,
        "Reform UK": 30.4,
        "Independent": 0.6,
        "Green": 12.0,
        "Conservative": 12.6,
        "Save Us Now": 0.5,
        "TUSC": 1.6,
        "Labour": 31.8,
        "Imagine": 0.1,
        "Liberal Democrat": 10.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-hartlepool",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hartlepool",
      "subject_id": "hartlepool",
      "region": "North East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 1.8,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Reform UK": 31.4,
        "Labour": 33.2,
        "Conservative": 16.8,
        "Liberal Democrat": 7.6,
        "Green": 10.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-newcastle-upon-tyne",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Newcastle upon Tyne",
      "subject_id": "newcastle-upon-tyne",
      "region": "North East",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.8,
      "vote_shares_predicted": {
        "Party Of Women": 0.5,
        "Communist": 0.5,
        "Reform UK": 28.1,
        "Independent": 0.6,
        "Green": 13.3,
        "Conservative": 12.7,
        "Save Us Now": 0.1,
        "TUSC": 1.5,
        "Labour": 31.9,
        "Imagine": 0.5,
        "Liberal Democrat": 10.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-north-tyneside",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "North Tyneside",
      "subject_id": "north-tyneside",
      "region": "North East",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.1,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Workers Party": 0.6,
        "SDP": 0.6,
        "Reform UK": 30.0,
        "Labour": 29.9,
        "Conservative": 19.7,
        "Liberal Democrat": 7.4,
        "Green": 11.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-south-tyneside",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "South Tyneside",
      "subject_id": "south-tyneside",
      "region": "North East",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 1.5,
        "Reform UK": 31.1,
        "Labour": 31.1,
        "Conservative": 19.4,
        "Liberal Democrat": 6.4,
        "Green": 10.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-sunderland",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Sunderland",
      "subject_id": "sunderland",
      "region": "North East",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.5,
      "vote_shares_predicted": {
        "Reform UK": 31.4,
        "Independent": 0.6,
        "Green": 9.4,
        "Save Us Now": 0.1,
        "TUSC": 0.4,
        "Labour": 31.9,
        "Conservative": 14.3,
        "Liberal Democrat": 11.9
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-blackburn-with-darwen",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Blackburn with Darwen",
      "subject_id": "blackburn-with-darwen",
      "region": "North West",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 13.0,
      "vote_shares_predicted": {
        "Labour": 38.0,
        "Reform UK": 25.0,
        "Conservative": 15.0,
        "Liberal Democrat": 7.0,
        "Green": 8.0,
        "Independent": 4.0,
        "Other": 3.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-bolton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Bolton",
      "subject_id": "bolton",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 1.5,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Workers Party": 0.0,
        "Other": 0.9,
        "Your Party": 0.0,
        "Liberal Democrat": 6.8,
        "SDP": 0.0,
        "Farnworth and Kearsley First Party": 0.6,
        "Labour": 32.2,
        "Reform UK": 30.7,
        "Conservative": 16.8,
        "Advance UK": 0.6,
        "TUSC": 0.6,
        "Green": 10.1
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-burnley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Burnley",
      "subject_id": "burnley",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 1.0,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Other": 0.4,
        "Reform UK": 31.0,
        "Labour": 32.0,
        "Conservative": 18.0,
        "Liberal Democrat": 7.4,
        "Green": 10.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-bury",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Bury",
      "subject_id": "bury",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 1.0,
      "vote_shares_predicted": {
        "English Democrats": 0.6,
        "Communist": 0.6,
        "Reform UK": 28.9,
        "Together for Bury": 0.6,
        "Independent": 1.0,
        "Green": 10.9,
        "Radcliffe First": 0.6,
        "Workers Party": 0.6,
        "Labour": 29.9,
        "Conservative": 18.7,
        "Liberal Democrat": 7.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-chorley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Chorley",
      "subject_id": "chorley",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 2.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 29.7,
        "Labour": 31.7,
        "Conservative": 19.2,
        "Liberal Democrat": 8.6,
        "TUSC": 0.6,
        "Green": 9.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-halton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Halton",
      "subject_id": "halton",
      "region": "North West",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 6.2,
      "vote_shares_predicted": {
        "Reform UK": 27.5,
        "Independent": 0.6,
        "Green": 11.4,
        "Labour": 33.7,
        "Conservative": 16.9,
        "Liberal Democrat": 9.2,
        "Libertarian Party": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-hyndburn",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hyndburn",
      "subject_id": "hyndburn",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Other": 0.5,
        "Reform UK": 32.6,
        "Independent": 0.9,
        "Green": 14.2,
        "Labour": 30.6,
        "Conservative": 21.1
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-knowsley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Knowsley",
      "subject_id": "knowsley",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 12.1,
      "vote_shares_predicted": {
        "Reform UK": 25.6,
        "Independent": 0.6,
        "Green": 11.6,
        "Labour": 37.7,
        "Conservative": 16.8,
        "Liberal Democrat": 7.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-manchester",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Manchester",
      "subject_id": "manchester",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 9.5,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "Workers Party": 0.5,
        "Other": 0.8,
        "Your Party": 0.1,
        "The Official Monster Raving Loony Party": 0.1,
        "Liberal Democrat": 8.0,
        "SDP": 0.4,
        "Communist League Election Campaign (Communist League)": 0.4,
        "Reform UK": 23.6,
        "Labour": 33.1,
        "Communist": 0.4,
        "Conservative": 10.8,
        "Advance UK": 0.1,
        "TUSC": 0.8,
        "Green": 20.3
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-oldham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Oldham",
      "subject_id": "oldham",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 2.2,
      "vote_shares_predicted": {
        "Other": 1.3,
        "The Oldham Group Party": 0.6,
        "Reform UK": 29.9,
        "Independent": 0.6,
        "Green": 9.7,
        "Workers Party": 0.6,
        "Labour": 32.1,
        "Conservative": 17.4,
        "Liberal Democrat": 6.7,
        "National Housing Party United Kingdom (National Housing Party Oldham People First)": 1.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-pendle",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Pendle",
      "subject_id": "pendle",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.2,
      "vote_shares_predicted": {
        "Other": 1.7,
        "Reform UK": 29.4,
        "Independent": 2.3,
        "Green": 10.0,
        "Labour": 16.5,
        "Conservative": 17.3,
        "Liberal Democrat": 22.9
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-preston",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Preston",
      "subject_id": "preston",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Other": 1.0,
        "Reform UK": 30.3,
        "Independent": 0.7,
        "Green": 11.8,
        "TUSC": 0.7,
        "Labour": 30.3,
        "Conservative": 16.1,
        "Liberal Democrat": 9.1
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-rochdale",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Rochdale",
      "subject_id": "rochdale",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 1.5,
      "vote_shares_predicted": {
        "Independent": 0.9,
        "Workers Party": 0.8,
        "Other": 0.8,
        "Liberal Democrat": 6.8,
        "Farnworth and Kearsley First Party": 0.1,
        "Labour": 31.6,
        "Reform UK": 30.1,
        "Conservative": 18.4,
        "Advance UK": 0.6,
        "TUSC": 0.1,
        "Green": 9.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-salford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Salford",
      "subject_id": "salford",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 4.4,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "Workers Party": 0.0,
        "Other": 0.1,
        "Your Party": 0.4,
        "Liberal Democrat": 11.2,
        "SDP": 0.1,
        "Communist League Election Campaign (Communist League)": 0.0,
        "Farnworth and Kearsley First Party": 0.0,
        "Labour": 30.7,
        "Communist": 0.0,
        "Reform UK": 26.3,
        "Conservative": 15.8,
        "Advance UK": 0.4,
        "TUSC": 0.5,
        "Green": 13.9
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-sefton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Sefton",
      "subject_id": "sefton",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 1.3,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Formby Residents Action Group": 0.6,
        "The Official Monster Raving Loony Party": 0.6,
        "Reform UK": 27.1,
        "Labour": 28.4,
        "Conservative": 20.1,
        "Liberal Democrat": 9.8,
        "TUSC": 1.0,
        "Green": 11.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-st-helens",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "St Helens",
      "subject_id": "st-helens",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 1.4,
      "vote_shares_predicted": {
        "Reform UK": 29.2,
        "Independent": 0.7,
        "Green": 12.3,
        "Labour": 30.6,
        "Conservative": 17.8,
        "Liberal Democrat": 9.3
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-stockport",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Stockport",
      "subject_id": "stockport",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 1.1,
      "vote_shares_predicted": {
        "SDP": 0.1,
        "Advance UK": 0.1,
        "Party Of Women": 0.5,
        "Reform UK": 26.1,
        "Independent": 0.9,
        "Green": 9.8,
        "TUSC": 0.5,
        "Labour": 18.4,
        "Edgeley Community Association": 0.5,
        "Conservative": 17.6,
        "Liberal Democrat": 25.0,
        "Your Party": 0.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-tameside",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Tameside",
      "subject_id": "tameside",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Workers Party": 0.6,
        "Other": 0.2,
        "Your Party": 0.5,
        "The Official Monster Raving Loony Party": 0.5,
        "SDP": 0.1,
        "Communist League Election Campaign (Communist League)": 0.1,
        "Reform UK": 28.9,
        "Labour": 28.9,
        "Communist": 0.1,
        "Conservative": 16.1,
        "Liberal Democrat": 8.9,
        "TUSC": 0.2,
        "Green": 14.3
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-trafford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Trafford",
      "subject_id": "trafford",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.7,
      "vote_shares_predicted": {
        "SDP": 0.5,
        "Advance UK": 0.5,
        "Party Of Women": 0.1,
        "Reform UK": 24.2,
        "Independent": 0.7,
        "Green": 11.7,
        "TUSC": 0.1,
        "Labour": 24.9,
        "Edgeley Community Association": 0.1,
        "Conservative": 19.4,
        "Liberal Democrat": 17.6,
        "Your Party": 0.1
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-west-lancashire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "West Lancashire",
      "subject_id": "west-lancashire",
      "region": "North West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 3.0,
      "vote_shares_predicted": {
        "Our West Lancashire": 0.6,
        "Reform UK": 29.4,
        "Green": 9.6,
        "Labour": 32.4,
        "Your Party": 0.6,
        "Conservative": 19.2,
        "Liberal Democrat": 8.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-wigan",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Wigan",
      "subject_id": "wigan",
      "region": "North West",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 1.3,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Other": 0.1,
        "Your Party": 0.1,
        "Liberal Democrat": 6.5,
        "SDP": 0.5,
        "Farnworth and Kearsley First Party": 0.1,
        "Labour": 33.9,
        "Reform UK": 32.6,
        "Conservative": 15.6,
        "Advance UK": 0.1,
        "TUSC": 0.1,
        "Green": 9.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-adur",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Adur",
      "subject_id": "adur",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 2.7,
      "vote_shares_predicted": {
        "Reform UK": 30.5,
        "Independent": 1.1,
        "Green": 12.5,
        "Labour": 11.3,
        "Conservative": 27.8,
        "Liberal Democrat": 16.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-basingstoke-and-deane",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Basingstoke and Deane",
      "subject_id": "basingstoke-and-deane",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "The All In Party": 0.7,
        "Reform UK": 27.4,
        "Labour": 8.3,
        "Conservative": 27.5,
        "Liberal Democrat": 22.8,
        "Green": 12.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-cherwell",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Cherwell",
      "subject_id": "cherwell",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "SDP": 0.7,
        "Animal Welfare": 0.7,
        "Reform UK": 26.8,
        "Independent": 0.7,
        "Green": 12.6,
        "Labour": 9.6,
        "Conservative": 27.6,
        "Liberal Democrat": 21.3
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-crawley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Crawley",
      "subject_id": "crawley",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Other": 0.2,
        "Reform UK": 28.5,
        "Independent": 0.7,
        "Green": 11.8,
        "TUSC": 0.7,
        "Labour": 15.1,
        "Conservative": 26.7,
        "Liberal Democrat": 16.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-east-surrey",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "East Surrey",
      "subject_id": "east-surrey",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 11.3,
      "vote_shares_predicted": {
        "SDP": 0.6,
        "Nork &amp; Tattenhams Residents&#x27; Associations": 0.6,
        "Reform UK": 22.1,
        "Independent": 0.6,
        "Heritage": 0.6,
        "Green": 12.6,
        "Residents Associations of Epsom and Ewell": 0.6,
        "The Molesey Residents Association": 0.6,
        "Hinchley Wood Residents (Hinchley Wood Residents - Weston, Long Ditton)": 0.6,
        "Labour": 5.7,
        "Thames Ditton / Weston Green Residents&#x27; Association (Thames Ditton Residents&#x27; Association)": 0.6,
        "The Walton Society": 0.6,
        "Liberal Democrat": 20.7,
        "Conservative": 33.4
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-east-sussex",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "East Sussex",
      "subject_id": "east-sussex",
      "region": "South East",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.4,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "UKIP": 0.6,
        "Liberal Democrat": 17.0,
        "Reform UK": 30.5,
        "Labour": 6.5,
        "Conservative": 30.9,
        "Heritage": 0.6,
        "TUSC": 0.6,
        "Green": 12.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-eastleigh",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Eastleigh",
      "subject_id": "eastleigh",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 25.0,
        "Independent": 0.7,
        "Green": 12.7,
        "TUSC": 0.7,
        "Labour": 10.8,
        "Conservative": 20.4,
        "Liberal Democrat": 29.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-fareham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Fareham",
      "subject_id": "fareham",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 29.5,
        "Labour": 11.2,
        "Conservative": 29.5,
        "Liberal Democrat": 17.1,
        "Green": 12.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Conservative",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-gosport",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Gosport",
      "subject_id": "gosport",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 4.9,
      "vote_shares_predicted": {
        "Reform UK": 29.8,
        "Labour": 13.6,
        "Conservative": 24.9,
        "Liberal Democrat": 20.6,
        "Green": 11.1
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-hampshire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hampshire",
      "subject_id": "hampshire",
      "region": "South East",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 4.9,
      "vote_shares_predicted": {
        "SDP": 0.6,
        "Reform UK": 24.3,
        "Whitehill &amp; Bordon Community Party": 0.6,
        "Libertarian Party (Libertarian Party UK)": 1.0,
        "Independent": 0.6,
        "The All In Party": 0.6,
        "The Official Monster Raving Loony Party": 0.6,
        "Green": 13.4,
        "Wessex Regionalists": 0.6,
        "Labour": 8.1,
        "Your Party": 0.6,
        "Conservative": 29.2,
        "Liberal Democrat": 19.1,
        "Community Campaign (Hart)": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-hart",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hart",
      "subject_id": "hart",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 4.0,
      "vote_shares_predicted": {
        "Reform UK": 26.3,
        "The Official Monster Raving Loony Party": 0.6,
        "Green": 13.7,
        "Labour": 8.2,
        "Conservative": 30.3,
        "Liberal Democrat": 20.4,
        "Community Campaign (Hart)": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-hastings",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Hastings",
      "subject_id": "hastings",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 10.5,
      "vote_shares_predicted": {
        "Reform UK": 25.0,
        "Libertarian Party (Libertarian Party UK)": 0.6,
        "Independent": 0.6,
        "Green": 35.5,
        "Labour": 6.0,
        "Conservative": 23.3,
        "Liberal Democrat": 9.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Green",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-havant",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Havant",
      "subject_id": "havant",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 9.0,
      "vote_shares_predicted": {
        "Reform UK": 30.8,
        "Labour": 20.4,
        "Conservative": 21.8,
        "Liberal Democrat": 15.7,
        "Green": 11.3
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-isle-of-wight",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Isle of Wight",
      "subject_id": "isle-of-wight",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 2.8,
      "vote_shares_predicted": {
        "Reform UK": 29.9,
        "Vectis Party": 1.1,
        "Independent": 2.3,
        "Green": 12.6,
        "Labour": 11.9,
        "Conservative": 27.1,
        "Liberal Democrat": 15.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-milton-keynes",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Milton Keynes",
      "subject_id": "milton-keynes",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 2.6,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Workers Party": 0.6,
        "Liberal Democrat": 24.2,
        "Reform UK": 27.4,
        "Labour": 10.7,
        "Conservative": 24.8,
        "Heritage": 0.6,
        "Green": 11.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-oxford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Oxford",
      "subject_id": "oxford",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Workers Party": 0.7,
        "Other": 0.2,
        "Reform UK": 15.4,
        "Labour": 7.5,
        "Conservative": 25.6,
        "Liberal Democrat": 29.6,
        "TUSC": 0.7,
        "Green": 19.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-portsmouth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Portsmouth",
      "subject_id": "portsmouth",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Liberal Democrat": 20.5,
        "Reform UK": 29.2,
        "Labour": 13.8,
        "Conservative": 23.9,
        "Heritage": 0.7,
        "Green": 11.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-reading",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Reading",
      "subject_id": "reading",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 2.0,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Other": 0.8,
        "Liberal Democrat": 27.2,
        "SDP": 0.7,
        "Reform UK": 18.7,
        "Labour": 13.9,
        "Conservative": 25.2,
        "The Liberal Party (Your Local Liberal Party)": 0.7,
        "TUSC": 0.7,
        "Green": 11.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-rushmoor",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Rushmoor",
      "subject_id": "rushmoor",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.7,
      "vote_shares_predicted": {
        "Other": 0.2,
        "Reform UK": 28.3,
        "Independent": 0.6,
        "British Democratic Party (British Democrats)": 0.6,
        "Green": 12.3,
        "TUSC": 0.6,
        "Labour": 13.2,
        "Conservative": 27.6,
        "Liberal Democrat": 16.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-southampton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Southampton",
      "subject_id": "southampton",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.6,
      "vote_shares_predicted": {
        "Reform UK": 27.8,
        "Independent": 0.6,
        "Green": 9.7,
        "TUSC": 1.0,
        "Labour": 28.4,
        "Conservative": 17.6,
        "Liberal Democrat": 14.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-tunbridge-wells",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Tunbridge Wells",
      "subject_id": "tunbridge-wells",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 3.4,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "English Democrats": 0.7,
        "Reform UK": 24.7,
        "Labour": 7.2,
        "Conservative": 28.1,
        "Liberal Democrat": 23.6,
        "Tunbridge Wells Alliance": 1.4,
        "Green": 13.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-west-oxfordshire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "West Oxfordshire",
      "subject_id": "west-oxfordshire",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Reform UK": 25.4,
        "Labour": 5.0,
        "Conservative": 28.6,
        "Liberal Democrat": 28.8,
        "Green": 11.4
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-west-surrey",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "West Surrey",
      "subject_id": "west-surrey",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 10.0,
      "vote_shares_predicted": {
        "Reform UK": 21.9,
        "Farnham Residents": 0.6,
        "Independent": 0.6,
        "Heritage": 0.6,
        "Green": 12.4,
        "The Official Monster Raving Loony Party (Official Monster Raving Loony Party)": 0.6,
        "Residents for Guildford and Villages": 0.6,
        "TUSC": 0.6,
        "Labour": 9.1,
        "Conservative": 31.9,
        "Liberal Democrat": 20.4,
        "The Peace Party - Non-violence, Justice, Environment": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-west-sussex",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "West Sussex",
      "subject_id": "west-sussex",
      "region": "South East",
      "council_type": "county_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 5.1,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "The Official Monster Raving Loony Party (Official Monster Raving Loony Party)": 0.6,
        "Local Alliance": 0.6,
        "English Democrats": 0.6,
        "The Peace Party - Non-violence, Justice, Environment": 0.6,
        "Reform UK": 24.9,
        "Labour": 6.9,
        "Pirate Party UK (UK Pirate Party)": 0.6,
        "Libertarian Party (Libertarian Party UK)": 0.6,
        "Conservative": 30.0,
        "Liberal Democrat": 20.8,
        "Patria": 0.6,
        "Green": 12.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-winchester",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Winchester",
      "subject_id": "winchester",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 22.4,
        "Independent": 1.1,
        "Green": 12.2,
        "Labour": 8.5,
        "Conservative": 25.9,
        "Liberal Democrat": 29.9
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-wokingham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Wokingham",
      "subject_id": "wokingham",
      "region": "South East",
      "council_type": "unitary_authorities",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Reform UK": 24.2,
        "Labour": 5.5,
        "Conservative": 26.1,
        "Liberal Democrat": 31.1,
        "TUSC": 0.6,
        "Green": 11.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-worthing",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Worthing",
      "subject_id": "worthing",
      "region": "South East",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.5,
      "vote_shares_predicted": {
        "Reform UK": 28.2,
        "Labour": 17.1,
        "Conservative": 28.7,
        "Liberal Democrat": 13.8,
        "Green": 12.1
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-cheltenham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Cheltenham",
      "subject_id": "cheltenham",
      "region": "South West",
      "council_type": "district_councils",
      "incumbent_before": "Liberal Democrat",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Christian Peoples Alliance (Christian Peoples Alliance - Supporting Traditional Marriage)": 0.6,
        "Liberal Democrat": 31.3,
        "Reform UK": 20.3,
        "Labour": 8.9,
        "Conservative": 24.0,
        "Heritage": 0.6,
        "TUSC": 0.6,
        "Green": 13.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-exeter",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Exeter",
      "subject_id": "exeter",
      "region": "South West",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 3.9,
      "vote_shares_predicted": {
        "Reform UK": 22.5,
        "Independent": 1.1,
        "Green": 12.8,
        "TUSC": 0.6,
        "Labour": 9.3,
        "Conservative": 24.9,
        "Liberal Democrat": 28.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-plymouth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Plymouth",
      "subject_id": "plymouth",
      "region": "South West",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 29.6,
        "Independent": 1.0,
        "Green": 8.9,
        "TUSC": 0.6,
        "Labour": 29.6,
        "Conservative": 21.4,
        "Liberal Democrat": 8.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-swindon",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Swindon",
      "subject_id": "swindon",
      "region": "South West",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 3.8,
      "vote_shares_predicted": {
        "Reform UK": 30.3,
        "Green": 11.2,
        "TUSC": 0.7,
        "Labour": 26.5,
        "Conservative": 20.8,
        "Liberal Democrat": 10.5
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-birmingham",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Birmingham",
      "subject_id": "birmingham",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.8,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Workers Party": 0.9,
        "Other": 1.8,
        "Your Party": 0.5,
        "Liberal Democrat": 10.6,
        "Coventry Citizens Party": 0.0,
        "SDP": 0.0,
        "Reform UK": 27.2,
        "Labour": 28.0,
        "Conservative": 16.8,
        "Advance UK": 0.0,
        "TUSC": 0.5,
        "Green": 13.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-cannock-chase",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Cannock Chase",
      "subject_id": "cannock-chase",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 33.5,
        "Independent": 0.9,
        "Green": 13.5,
        "TUSC": 0.9,
        "Labour": 27.1,
        "Conservative": 24.2
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-coventry",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Coventry",
      "subject_id": "coventry",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 1.0,
      "vote_shares_predicted": {
        "Independent": 0.5,
        "Workers Party": 0.5,
        "Other": 0.7,
        "Your Party": 0.0,
        "Coventry Citizens Party": 0.5,
        "SDP": 0.5,
        "Reform UK": 30.4,
        "Labour": 29.4,
        "Conservative": 17.7,
        "Liberal Democrat": 8.4,
        "TUSC": 0.5,
        "Green": 10.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-dudley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Dudley",
      "subject_id": "dudley",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 8.9,
      "vote_shares_predicted": {
        "Other": 0.2,
        "Advance UK": 0.1,
        "Reform UK": 31.0,
        "Freedom Alliance": 0.6,
        "Independent": 0.6,
        "The Black Country Party": 0.6,
        "Green": 12.5,
        "Yeshua": 0.1,
        "TUSC": 0.9,
        "Labour": 21.1,
        "Conservative": 22.1,
        "Liberal Democrat": 9.6,
        "Libertarian Party": 0.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-newcastle-under-lyme",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Newcastle-under-Lyme",
      "subject_id": "newcastle-under-lyme",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.7,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Reform UK": 30.2,
        "Labour": 18.6,
        "Conservative": 23.8,
        "Liberal Democrat": 12.1,
        "TUSC": 0.7,
        "The Potteries Party (Potteries Party: Serving North Staffordshire)": 1.1,
        "Green": 12.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-nuneaton-and-bedworth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Nuneaton and Bedworth",
      "subject_id": "nuneaton-and-bedworth",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 32.0,
        "Labour": 24.9,
        "Conservative": 21.0,
        "Liberal Democrat": 8.6,
        "TUSC": 1.1,
        "Green": 12.3
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-redditch",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Redditch",
      "subject_id": "redditch",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 1.6,
      "vote_shares_predicted": {
        "Reform UK": 31.6,
        "Labour": 30.0,
        "Conservative": 19.8,
        "Liberal Democrat": 7.9,
        "Green": 10.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-rugby",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Rugby",
      "subject_id": "rugby",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Reform UK": 30.3,
        "Labour": 24.1,
        "Conservative": 24.4,
        "Liberal Democrat": 9.8,
        "Green": 11.4
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-sandwell",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Sandwell",
      "subject_id": "sandwell",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 15.0,
      "vote_shares_predicted": {
        "Labour": 39.0,
        "Reform UK": 24.0,
        "Conservative": 16.0,
        "Liberal Democrat": 9.0,
        "Green": 7.0,
        "Independent": 3.0,
        "Other": 2.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-solihull",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Solihull",
      "subject_id": "solihull",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 0.1,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Workers Party": 0.1,
        "Other": 0.3,
        "Your Party": 0.1,
        "Coventry Citizens Party": 0.1,
        "SDP": 0.1,
        "Reform UK": 29.0,
        "Labour": 29.1,
        "Conservative": 21.1,
        "Liberal Democrat": 8.8,
        "TUSC": 0.1,
        "Green": 10.4
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-tamworth",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Tamworth",
      "subject_id": "tamworth",
      "region": "West Midlands",
      "council_type": "district_councils",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 4.6,
      "vote_shares_predicted": {
        "Reform UK": 31.2,
        "Independent": 0.7,
        "Green": 11.3,
        "UKIP": 0.7,
        "Labour": 26.6,
        "Conservative": 21.0,
        "Liberal Democrat": 8.4
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-walsall",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Walsall",
      "subject_id": "walsall",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 8.9,
      "vote_shares_predicted": {
        "Independent": 0.7,
        "Workers Party": 0.2,
        "Other": 1.1,
        "Your Party": 0.1,
        "Liberal Democrat": 10.8,
        "Reform UK": 30.8,
        "Labour": 20.6,
        "Conservative": 21.9,
        "Advance UK": 0.6,
        "TUSC": 0.1,
        "Green": 13.1
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-wolverhampton",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Wolverhampton",
      "subject_id": "wolverhampton",
      "region": "West Midlands",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 13.0,
      "vote_shares_predicted": {
        "Labour": 38.0,
        "Reform UK": 25.0,
        "Conservative": 16.0,
        "Liberal Democrat": 8.0,
        "Green": 7.0,
        "Independent": 3.0,
        "Other": 3.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-barnsley",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Barnsley",
      "subject_id": "barnsley",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.9,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "English Democrats": 0.6,
        "SDP": 0.6,
        "Reform UK": 33.8,
        "Labour": 32.9,
        "Conservative": 15.3,
        "Liberal Democrat": 6.1,
        "TUSC": 0.6,
        "Green": 9.4
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-bradford",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Bradford",
      "subject_id": "bradford",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 17.0,
      "vote_shares_predicted": {
        "Labour": 40.0,
        "Reform UK": 23.0,
        "Conservative": 14.0,
        "Green": 11.0,
        "Liberal Democrat": 8.0,
        "Independent": 2.0,
        "Other": 2.0
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-calderdale",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Calderdale",
      "subject_id": "calderdale",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 1.6,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Community Alliance Kirklees": 0.1,
        "People&#x27;s Alliance for Change and Equality": 0.1,
        "Workers Party": 0.5,
        "Other": 0.2,
        "The Official Monster Raving Loony Party": 0.5,
        "Reform UK": 30.0,
        "Labour": 31.6,
        "Conservative": 19.2,
        "Liberal Democrat": 7.2,
        "The Revolting Party (The Revolting Party. Join The Revolt)": 0.1,
        "Green": 9.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-kingston-upon-hull",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Hull",
      "subject_id": "kingston-upon-hull",
      "region": "Yorkshire and The Humber",
      "council_type": "unitary_authorities",
      "incumbent_before": "Labour",
      "predicted_winner": "Labour",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 6.8,
      "vote_shares_predicted": {
        "Reform UK": 29.2,
        "Labour": 33.0,
        "Conservative": 16.0,
        "Liberal Democrat": 12.0,
        "Green": 9.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-kirklees",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Kirklees",
      "subject_id": "kirklees",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "Independent": 0.6,
        "Community Alliance Kirklees": 0.5,
        "People&#x27;s Alliance for Change and Equality": 0.5,
        "Workers Party": 0.1,
        "Other": 0.6,
        "English Democrats": 0.1,
        "The Official Monster Raving Loony Party": 0.1,
        "SDP": 0.1,
        "Reform UK": 29.9,
        "Labour": 31.2,
        "Conservative": 18.8,
        "Liberal Democrat": 7.1,
        "The Revolting Party (The Revolting Party. Join The Revolt)": 0.5,
        "TUSC": 0.1,
        "Green": 9.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-leeds",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Leeds",
      "subject_id": "leeds",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 2.7,
      "vote_shares_predicted": {
        "Yorkshire Party": 0.5,
        "SDP": 0.5,
        "Other": 0.2,
        "Reform UK": 24.1,
        "Independent": 0.5,
        "The Official Monster Raving Loony Party": 0.4,
        "Heritage": 0.1,
        "Green": 19.3,
        "British Democratic Party (British Democrats)": 0.1,
        "UKIP": 0.5,
        "TUSC": 0.5,
        "Labour": 26.8,
        "Your Party": 0.4,
        "Conservative": 17.4,
        "Liberal Democrat": 8.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-north-east-lincolnshire",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "North East Lincolnshire",
      "subject_id": "north-east-lincolnshire",
      "region": "Yorkshire and The Humber",
      "council_type": "unitary_authorities",
      "incumbent_before": "Conservative",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 0.0,
      "vote_shares_predicted": {
        "SDP": 0.7,
        "Reform UK": 33.3,
        "Independent": 0.7,
        "Green": 13.4,
        "TUSC": 0.7,
        "Labour": 18.8,
        "Conservative": 20.4,
        "Liberal Democrat": 11.2,
        "National Housing Party United Kingdom (National Housing Party Grimsby People First)": 0.7
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-sheffield",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Sheffield",
      "subject_id": "sheffield",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 4.8,
      "vote_shares_predicted": {
        "Reform UK": 21.6,
        "Independent": 0.6,
        "Green": 21.4,
        "UKIP": 0.6,
        "TUSC": 0.6,
        "Labour": 26.4,
        "Conservative": 17.2,
        "Liberal Democrat": 11.6
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-2026-05-07-english-locals-council-wakefield",
      "kind": "uk_council_election",
      "election_id": "2026-05-07-english-locals",
      "election_date": "2026-05-07",
      "subject": "Wakefield",
      "subject_id": "wakefield",
      "region": "Yorkshire and The Humber",
      "council_type": "metropolitan_boroughs",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 2.7,
      "vote_shares_predicted": {
        "Yorkshire Party": 0.6,
        "SDP": 0.6,
        "Reform UK": 28.6,
        "Independent": 0.6,
        "The Official Monster Raving Loony Party": 0.1,
        "Green": 11.9,
        "British Democratic Party (British Democrats)": 0.5,
        "UKIP": 0.1,
        "TUSC": 0.6,
        "Labour": 31.3,
        "Your Party": 0.1,
        "Conservative": 17.1,
        "Liberal Democrat": 7.8
      },
      "predicted_at": "2026-05-09T11:34:48+01:00",
      "predicted_at_git_commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "code_url": "https://github.com/Kronaxis/kpm/tree/74ff0e5a91e13e9bcb111583beb1a70d268a1bbd/scripts/kpm2/"
      },
      "note": "Backtest application of v15.1 to KPM-1 vote shares \u2014 published AFTER election. Future v15.1+ predictions will be pre-registered before event.",
      "is_backtest": true,
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T18:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_United_Kingdom_local_elections",
      "hit": true
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-30-malvern-hills-dc-tenbury",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-30-malvern-hills-dc-tenbury",
      "election_date": "2026-04-30",
      "subject": "Malvern Hills DC - Tenbury",
      "subject_council": "Malvern Hills DC",
      "subject_ward": "Tenbury",
      "region": "West Midlands",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Confident",
      "predicted_margin_pp": 27.48,
      "vote_shares_predicted": {
        "Reform UK": 50.94,
        "Conservative": 23.46,
        "Liberal Democrat": 12.22,
        "Green": 13.38
      },
      "vote_shares_last_result": {
        "Reform UK": 45.1,
        "Conservative": 30.3,
        "Liberal Democrat": 12.7,
        "Green": 12.0
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/malvern-hills-dc-tenbury-30-april-2026-2/",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-30-malvern-hills-dc-tenbury",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-30-malvern-hills-dc-tenbury",
      "election_date": "2026-04-30",
      "subject": "Malvern Hills DC - Tenbury",
      "subject_council": "Malvern Hills DC",
      "subject_ward": "Tenbury",
      "region": "West Midlands",
      "incumbent_before": "Conservative",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 32.19,
      "vote_shares_predicted": {
        "Reform UK": 52.82,
        "Conservative": 20.63,
        "Liberal Democrat": 12.67,
        "Green": 13.88
      },
      "vote_shares_last_result": {
        "Reform UK": 45.1,
        "Conservative": 30.3,
        "Liberal Democrat": 12.7,
        "Green": 12.0
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/malvern-hills-dc-tenbury-30-april-2026-2/",
      "hit": true
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-30-newport-tc-newport-south-telford-wrekin",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-30-newport-tc-newport-south-telford-wrekin",
      "election_date": "2026-04-30",
      "subject": "Newport TC - Newport South (Telford & Wrekin)",
      "subject_council": "Newport TC",
      "subject_ward": "Newport South (Telford & Wrekin)",
      "region": "West Midlands",
      "incumbent_before": "Unknown",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 4.37,
      "vote_shares_predicted": {
        "Liberal Democrat": 34.37,
        "Conservative": 20.92,
        "Independent": 30.0,
        "Labour": 1.26,
        "Green": 13.45
      },
      "vote_shares_last_result": {
        "Liberal Democrat": 28.9,
        "Conservative": 26.2,
        "Independent": 25.1,
        "Labour": 11.1,
        "Green": 8.7
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/newport-tc-newport-south-telford-wrekin-30-april-2026/",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-30-newport-tc-newport-south-telford-wrekin",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-30-newport-tc-newport-south-telford-wrekin",
      "election_date": "2026-04-30",
      "subject": "Newport TC - Newport South (Telford & Wrekin)",
      "subject_council": "Newport TC",
      "subject_ward": "Newport South (Telford & Wrekin)",
      "region": "West Midlands",
      "incumbent_before": "Unknown",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 4.37,
      "vote_shares_predicted": {
        "Liberal Democrat": 34.37,
        "Conservative": 20.92,
        "Independent": 30.0,
        "Labour": 1.26,
        "Green": 13.45
      },
      "vote_shares_last_result": {
        "Liberal Democrat": 28.9,
        "Conservative": 26.2,
        "Independent": 25.1,
        "Labour": 11.1,
        "Green": 8.7
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/newport-tc-newport-south-telford-wrekin-30-april-2026/",
      "hit": false
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-30-st-ives-tc-west",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-30-st-ives-tc-west",
      "election_date": "2026-04-30",
      "subject": "St Ives TC - West",
      "subject_council": "St Ives TC",
      "subject_ward": "West",
      "region": "South West",
      "incumbent_before": "Independent",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Confident",
      "predicted_margin_pp": 15.92,
      "vote_shares_predicted": {
        "Liberal Democrat": 45.32,
        "Green": 29.4,
        "Reform UK": 25.28
      },
      "vote_shares_last_result": {
        "Liberal Democrat": 51.57,
        "Green": 31.1,
        "Reform UK": 17.32
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/st-ives-tc-west-30-april-2026/",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-30-st-ives-tc-west",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-30-st-ives-tc-west",
      "election_date": "2026-04-30",
      "subject": "St Ives TC - West",
      "subject_council": "St Ives TC",
      "subject_ward": "West",
      "region": "South West",
      "incumbent_before": "Independent",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 15.92,
      "vote_shares_predicted": {
        "Liberal Democrat": 45.32,
        "Green": 29.4,
        "Reform UK": 25.28
      },
      "vote_shares_last_result": {
        "Liberal Democrat": 51.57,
        "Green": 31.1,
        "Reform UK": 17.32
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/st-ives-tc-west-30-april-2026/",
      "hit": true
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-30-bude-stratton-tc-stratton",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-30-bude-stratton-tc-stratton",
      "election_date": "2026-04-30",
      "subject": "Bude-Stratton TC - Stratton",
      "subject_council": "Bude-Stratton TC",
      "subject_ward": "Stratton",
      "region": "South West",
      "incumbent_before": "Unknown",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Confident",
      "predicted_margin_pp": 29.76,
      "vote_shares_predicted": {
        "Liberal Democrat": 64.88,
        "Green": 35.12
      },
      "vote_shares_last_result": {
        "Liberal Democrat": 66.47,
        "Green": 33.53
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/bude-stratton-tc-stratton-30-april-2026/",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-30-bude-stratton-tc-stratton",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-30-bude-stratton-tc-stratton",
      "election_date": "2026-04-30",
      "subject": "Bude-Stratton TC - Stratton",
      "subject_council": "Bude-Stratton TC",
      "subject_ward": "Stratton",
      "region": "South West",
      "incumbent_before": "Unknown",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 29.76,
      "vote_shares_predicted": {
        "Liberal Democrat": 64.88,
        "Green": 35.12
      },
      "vote_shares_last_result": {
        "Liberal Democrat": 66.47,
        "Green": 33.53
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/bude-stratton-tc-stratton-30-april-2026/",
      "hit": true
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-23-cornwall-ua-newquay-porth-tretherras",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-23-cornwall-ua-newquay-porth-tretherras",
      "election_date": "2026-04-23",
      "subject": "Cornwall UA - Newquay Porth & Tretherras",
      "subject_council": "Cornwall UA",
      "subject_ward": "Newquay Porth & Tretherras",
      "region": "South West",
      "incumbent_before": "Unknown",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 13.68,
      "vote_shares_predicted": {
        "Reform UK": 40.11,
        "Green": 26.43,
        "Independent": 17.02,
        "Liberal Democrat": 16.44,
        "Conservative": 0.0,
        "Labour": 0.0
      },
      "vote_shares_last_result": {
        "Reform UK": 30.2,
        "Green": 24.8,
        "Independent": 16.9,
        "Liberal Democrat": 16.3,
        "Conservative": 6.2,
        "Labour": 5.6
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/cornwall-ua-newquay-porth-tretherras-23-april-2026/",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-23-cornwall-ua-newquay-porth-tretherras",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-23-cornwall-ua-newquay-porth-tretherras",
      "election_date": "2026-04-23",
      "subject": "Cornwall UA - Newquay Porth & Tretherras",
      "subject_council": "Cornwall UA",
      "subject_ward": "Newquay Porth & Tretherras",
      "region": "South West",
      "incumbent_before": "Unknown",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 13.68,
      "vote_shares_predicted": {
        "Reform UK": 40.11,
        "Green": 26.43,
        "Independent": 17.02,
        "Liberal Democrat": 16.44,
        "Conservative": 0.0,
        "Labour": 0.0
      },
      "vote_shares_last_result": {
        "Reform UK": 30.2,
        "Green": 24.8,
        "Independent": 16.9,
        "Liberal Democrat": 16.3,
        "Conservative": 6.2,
        "Labour": 5.6
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/cornwall-ua-newquay-porth-tretherras-23-april-2026/",
      "hit": true
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-16-northumberland-ua-cramlington-south-west",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-16-northumberland-ua-cramlington-south-west",
      "election_date": "2026-04-16",
      "subject": "Northumberland UA - Cramlington South West",
      "subject_council": "Northumberland UA",
      "subject_ward": "Cramlington South West",
      "region": "North East",
      "incumbent_before": "Unknown",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.55,
      "vote_shares_predicted": {
        "Conservaties": 31.96,
        "Reform UK": 35.51,
        "Labour": 12.15,
        "Green": 16.17,
        "Independent": 2.43,
        "Liberal Democrat": 1.78
      },
      "vote_shares_last_result": {
        "Conservaties": 34.2,
        "Reform UK": 26.0,
        "Labour": 23.0,
        "Green": 14.3,
        "Independent": 1.6,
        "Liberal Democrat": 0.9
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Conservaties",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/northumberland-ua-cramlington-south-west-16-april-2026/",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-16-northumberland-ua-cramlington-south-west",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-16-northumberland-ua-cramlington-south-west",
      "election_date": "2026-04-16",
      "subject": "Northumberland UA - Cramlington South West",
      "subject_council": "Northumberland UA",
      "subject_ward": "Cramlington South West",
      "region": "North East",
      "incumbent_before": "Unknown",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 3.55,
      "vote_shares_predicted": {
        "Conservaties": 31.96,
        "Reform UK": 35.51,
        "Labour": 12.15,
        "Green": 16.17,
        "Independent": 2.43,
        "Liberal Democrat": 1.78
      },
      "vote_shares_last_result": {
        "Conservaties": 34.2,
        "Reform UK": 26.0,
        "Labour": 23.0,
        "Green": 14.3,
        "Independent": 1.6,
        "Liberal Democrat": 0.9
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Conservaties",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/northumberland-ua-cramlington-south-west-16-april-2026/",
      "hit": false
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-16-leicestershire-cc-narborough-whetstone",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-16-leicestershire-cc-narborough-whetstone",
      "election_date": "2026-04-16",
      "subject": "Leicestershire CC - Narborough & Whetstone",
      "subject_council": "Leicestershire CC",
      "subject_ward": "Narborough & Whetstone",
      "region": "East Midlands",
      "incumbent_before": "Unknown",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 13.2,
      "vote_shares_predicted": {
        "Reform UK": 43.26,
        "Conservative": 20.71,
        "Green": 30.06,
        "Liberal Democrat": 5.11,
        "Labour": 0.0,
        "Advance UK": 0.87
      },
      "vote_shares_last_result": {
        "Reform UK": 32.9,
        "Conservative": 29.5,
        "Green": 28.2,
        "Liberal Democrat": 4.3,
        "Labour": 4.0,
        "Advance UK": 0.9
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/leicestershire-cc-narborough-whetstone-16-april-2026-2/",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-16-leicestershire-cc-narborough-whetstone",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-16-leicestershire-cc-narborough-whetstone",
      "election_date": "2026-04-16",
      "subject": "Leicestershire CC - Narborough & Whetstone",
      "subject_council": "Leicestershire CC",
      "subject_ward": "Narborough & Whetstone",
      "region": "East Midlands",
      "incumbent_before": "Unknown",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 13.2,
      "vote_shares_predicted": {
        "Reform UK": 43.26,
        "Conservative": 20.71,
        "Green": 30.06,
        "Liberal Democrat": 5.11,
        "Labour": 0.0,
        "Advance UK": 0.87
      },
      "vote_shares_last_result": {
        "Reform UK": 32.9,
        "Conservative": 29.5,
        "Green": 28.2,
        "Liberal Democrat": 4.3,
        "Labour": 4.0,
        "Advance UK": 0.9
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/leicestershire-cc-narborough-whetstone-16-april-2026-2/",
      "hit": false
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-09-kent-cc-cliftonville",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-09-kent-cc-cliftonville",
      "election_date": "2026-04-09",
      "subject": "Kent CC - Cliftonville",
      "subject_council": "Kent CC",
      "subject_ward": "Cliftonville",
      "region": "South East",
      "incumbent_before": "Unknown",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Toss-up",
      "predicted_margin_pp": 3.34,
      "vote_shares_predicted": {
        "Green": 42.22,
        "Reform UK": 45.56,
        "Conservative": 7.27,
        "Labour": 0.4,
        "Independent": 2.32,
        "Liberal Democrat": 2.22
      },
      "vote_shares_last_result": {
        "Green": 38.8,
        "Reform UK": 33.1,
        "Conservative": 15.2,
        "Labour": 10.4,
        "Independent": 1.3,
        "Liberal Democrat": 1.2
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Green",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/kent-cc-cliftonville-9-april-2026-2/",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-09-kent-cc-cliftonville",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-09-kent-cc-cliftonville",
      "election_date": "2026-04-09",
      "subject": "Kent CC - Cliftonville",
      "subject_council": "Kent CC",
      "subject_ward": "Cliftonville",
      "region": "South East",
      "incumbent_before": "Unknown",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 3.34,
      "vote_shares_predicted": {
        "Green": 42.22,
        "Reform UK": 45.56,
        "Conservative": 7.27,
        "Labour": 0.4,
        "Independent": 2.32,
        "Liberal Democrat": 2.22
      },
      "vote_shares_last_result": {
        "Green": 38.8,
        "Reform UK": 33.1,
        "Conservative": 15.2,
        "Labour": 10.4,
        "Independent": 1.3,
        "Liberal Democrat": 1.2
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Green",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/kent-cc-cliftonville-9-april-2026-2/",
      "hit": false
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-02-north-devon-dc-fremington",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-02-north-devon-dc-fremington",
      "election_date": "2026-04-02",
      "subject": "North Devon DC - Fremington",
      "subject_council": "North Devon DC",
      "subject_ward": "Fremington",
      "region": "South West",
      "incumbent_before": "Unknown",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 5.58,
      "vote_shares_predicted": {
        "Liberal Democrat": 47.35,
        "Reform UK": 41.77,
        "Green": 10.88,
        "Conservative": 0.0,
        "Labour": 0.0
      },
      "vote_shares_last_result": {
        "Liberal Democrat": 49.9,
        "Reform UK": 32.9,
        "Green": 8.7,
        "Conservative": 7.7,
        "Labour": 0.8
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/north-devon-dc-fremington-2-april-2026/",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-02-north-devon-dc-fremington",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-02-north-devon-dc-fremington",
      "election_date": "2026-04-02",
      "subject": "North Devon DC - Fremington",
      "subject_council": "North Devon DC",
      "subject_ward": "Fremington",
      "region": "South West",
      "incumbent_before": "Unknown",
      "predicted_winner": "Liberal Democrat",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 5.58,
      "vote_shares_predicted": {
        "Liberal Democrat": 47.35,
        "Reform UK": 41.77,
        "Green": 10.88,
        "Conservative": 0.0,
        "Labour": 0.0
      },
      "vote_shares_last_result": {
        "Liberal Democrat": 49.9,
        "Reform UK": 32.9,
        "Green": 8.7,
        "Conservative": 7.7,
        "Labour": 0.8
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/north-devon-dc-fremington-2-april-2026/",
      "hit": true
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-02-rossendale-bc-hareholme-and-waterfoot",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-02-rossendale-bc-hareholme-and-waterfoot",
      "election_date": "2026-04-02",
      "subject": "Rossendale BC - Hareholme and Waterfoot",
      "subject_council": "Rossendale BC",
      "subject_ward": "Hareholme and Waterfoot",
      "region": "North West",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 5.62,
      "vote_shares_predicted": {
        "Green": 39.44,
        "Reform UK": 45.06,
        "Labour": 12.79,
        "Conservative": 0.0,
        "Liberal Democrat": 2.71
      },
      "vote_shares_last_result": {
        "Green": 37.7,
        "Reform UK": 34.5,
        "Labour": 19.2,
        "Conservative": 6.8,
        "Liberal Democrat": 1.8
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Green",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/rossendale-bc-hareholme-and-waterfoot-2-april-2026-2/",
      "hit": false
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-02-rossendale-bc-hareholme-and-waterfoot",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-02-rossendale-bc-hareholme-and-waterfoot",
      "election_date": "2026-04-02",
      "subject": "Rossendale BC - Hareholme and Waterfoot",
      "subject_council": "Rossendale BC",
      "subject_ward": "Hareholme and Waterfoot",
      "region": "North West",
      "incumbent_before": "Labour",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 5.85,
      "vote_shares_predicted": {
        "Green": 41.03,
        "Reform UK": 46.88,
        "Labour": 9.27,
        "Conservative": 0.0,
        "Liberal Democrat": 2.82
      },
      "vote_shares_last_result": {
        "Green": 37.7,
        "Reform UK": 34.5,
        "Labour": 19.2,
        "Conservative": 6.8,
        "Liberal Democrat": 1.8
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Green",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/rossendale-bc-hareholme-and-waterfoot-2-april-2026-2/",
      "hit": false
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-02-luton-bc-wigmore",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-02-luton-bc-wigmore",
      "election_date": "2026-04-02",
      "subject": "Luton BC - Wigmore",
      "subject_council": "Luton BC",
      "subject_ward": "Wigmore",
      "region": "East of England",
      "incumbent_before": "Unknown",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 13.42,
      "vote_shares_predicted": {
        "Reform UK": 44.63,
        "Liberal Democrat": 31.21,
        "Green": 22.47,
        "Labour": 0.0,
        "Conservative": 0.0,
        "Independent": 1.69
      },
      "vote_shares_last_result": {
        "Reform UK": 32.9,
        "Liberal Democrat": 30.4,
        "Green": 19.6,
        "Labour": 9.7,
        "Conservative": 6.6,
        "Independent": 0.7
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/luton-bc-wigmore-2-april-2026/",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-02-luton-bc-wigmore",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-02-luton-bc-wigmore",
      "election_date": "2026-04-02",
      "subject": "Luton BC - Wigmore",
      "subject_council": "Luton BC",
      "subject_ward": "Wigmore",
      "region": "East of England",
      "incumbent_before": "Unknown",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 13.42,
      "vote_shares_predicted": {
        "Reform UK": 44.63,
        "Liberal Democrat": 31.21,
        "Green": 22.47,
        "Labour": 0.0,
        "Conservative": 0.0,
        "Independent": 1.69
      },
      "vote_shares_last_result": {
        "Reform UK": 32.9,
        "Liberal Democrat": 30.4,
        "Green": 19.6,
        "Labour": 9.7,
        "Conservative": 6.6,
        "Independent": 0.7
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/luton-bc-wigmore-2-april-2026/",
      "hit": false
    },
    {
      "id": "kpm-byel-v1-byel-2026-04-22-salford-bc-barton-winton",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-22-salford-bc-barton-winton",
      "election_date": "2026-04-22",
      "subject": "Salford BC - Barton & Winton",
      "subject_council": "Salford BC",
      "subject_ward": "Barton & Winton",
      "region": "North West",
      "incumbent_before": "Unknown",
      "predicted_winner": "Reform UK",
      "predicted_confidence": "Confident",
      "predicted_margin_pp": 23.47,
      "vote_shares_predicted": {
        "Reform UK": 46.44,
        "Labour": 22.97,
        "Green": 21.49,
        "Conservative": 0.0,
        "Liberal Democrat": 5.84,
        "Independent": 3.27
      },
      "vote_shares_last_result": {
        "Reform UK": 34.9,
        "Labour": 33.2,
        "Green": 18.7,
        "Conservative": 6.1,
        "Liberal Democrat": 4.9,
        "Independent": 2.3
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-byelection",
        "version": "v1.0",
        "hash_sha256": "49fca21295b485c251f2e6c86d40fbffb8a69385cd2a36c88b2eda90db05477f",
        "is_retrospective_backtest": true,
        "note": "Engine built 2026-05-10, after these 12 events landed. Future by-elections will be pre-registered."
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/salford-bc-barton-winton-wednesday-22-april-2026/",
      "hit": true
    },
    {
      "id": "kpm22-v15-1-mistool-byel-2026-04-22-salford-bc-barton-winton",
      "kind": "uk_council_byelection",
      "election_id": "byel-2026-04-22-salford-bc-barton-winton",
      "election_date": "2026-04-22",
      "subject": "Salford BC - Barton & Winton",
      "subject_council": "Salford BC",
      "subject_ward": "Barton & Winton",
      "region": "North West",
      "incumbent_before": "Unknown",
      "predicted_winner": "No overall control",
      "predicted_confidence": "NOC",
      "predicted_margin_pp": 23.47,
      "vote_shares_predicted": {
        "Reform UK": 46.44,
        "Labour": 22.97,
        "Green": 21.49,
        "Conservative": 0.0,
        "Liberal Democrat": 5.84,
        "Independent": 3.27
      },
      "vote_shares_last_result": {
        "Reform UK": 34.9,
        "Labour": 33.2,
        "Green": 18.7,
        "Conservative": 6.1,
        "Liberal Democrat": 4.9,
        "Independent": 2.3
      },
      "predicted_at": "2026-05-10T21:10:00Z",
      "methodology": {
        "name": "KPM-2.2",
        "version": "v15.1",
        "hash_sha256": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "is_retrospective_backtest": true,
        "wrong_tool": true,
        "note": "v15.1 is council-level methodology. Applied here only to demonstrate that it is the WRONG TOOL for single-seat by-elections. Use kpm-byelection-v1 for these. Empirical: v15.1 hits 5/12 = 41.7%, byel-v1 hits 9/12 = 75%."
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-04-30T22:00:00Z",
      "actual_source": "https://www.aldc.org/2026/04/salford-bc-barton-winton-wednesday-22-april-2026/",
      "hit": false
    },
    {
      "id": "kpm-scotparl-v1-2026-05-07",
      "kind": "scottish_parliament_election",
      "election_id": "sp-2026-05-07",
      "election_date": "2026-05-07",
      "subject": "2026 Scottish Parliament election",
      "predicted_winner": "SNP",
      "predicted_winner_seats": 52,
      "predicted_no_overall_majority": true,
      "predicted_seat_allocation": {
        "Conservative": 18,
        "SNP": 52,
        "Reform UK": 20,
        "Labour": 22,
        "Liberal Democrat": 4,
        "Green": 13
      },
      "projected_constituency_shares": {
        "SNP": 38.91,
        "Labour": 19.2,
        "Conservative": 14.34,
        "Liberal Democrat": 5.06,
        "Green": 6.5,
        "Reform UK": 16.0
      },
      "projected_list_shares": {
        "SNP": 32.9,
        "Labour": 16.18,
        "Conservative": 16.83,
        "Green": 14.22,
        "Liberal Democrat": 3.37,
        "Reform UK": 16.5
      },
      "predicted_at": "2026-05-10T21:20:00Z",
      "methodology": {
        "name": "KPM-scotparl",
        "version": "v1.0",
        "hash_sha256": "ec1c3ec273e345663b72c481be12a36c480611b56db6971a6462941338b7c64b",
        "is_retrospective_backtest": true,
        "note": "Retrospective. Built 2026-05-10. Future SP elections will be pre-registered."
      },
      "actual_winner": "SNP",
      "actual_winner_seats": 58,
      "actual_no_overall_majority": true,
      "actual_at": "2026-05-08T20:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_Scottish_Parliament_election",
      "hit": true,
      "hit_majority_call": true,
      "post_mortem_note": "Predicted SNP 52 seats; actual SNP 58. Hit on winner. NOC call also correct. Reform UK: predicted 20 seats, actual 17 (close). v1 uses proportional approximation for constituency seats; v2 should do real per-constituency FPTP."
    },
    {
      "id": "kpm-senedd-v1-2026-05-07",
      "kind": "welsh_senedd_election",
      "election_id": "senedd-2026-05-07",
      "election_date": "2026-05-07",
      "subject": "2026 Senedd election (Wales)",
      "subject_id": "senedd-2026",
      "predicted_winner": "Labour",
      "predicted_winner_seats": 32,
      "predicted_no_overall_majority": true,
      "predicted_seat_allocation": {
        "Labour": 32,
        "Conservative": 16,
        "Plaid Cymru": 32,
        "Liberal Democrat": 0,
        "Reform UK": 16,
        "Green": 0
      },
      "projected_wales_shares": {
        "Labour": 29.57,
        "Conservative": 18.89,
        "Plaid Cymru": 25.42,
        "Liberal Democrat": 3.26,
        "Reform UK": 20.87,
        "Green": 1.98
      },
      "predicted_at": "2026-05-10T21:15:00Z",
      "methodology": {
        "name": "KPM-senedd",
        "version": "v1.0",
        "hash_sha256": "e535067d74f64e71055b0c4e15858c53ebf27bfcdf0fd4e699b6729e4c41199c",
        "is_retrospective_backtest": true,
        "note": "Retrospective. Built 2026-05-10, after the actual result was known. Future Senedd elections will be pre-registered."
      },
      "actual_winner": "Plaid Cymru",
      "actual_winner_seats": 43,
      "actual_no_overall_majority": true,
      "actual_at": "2026-05-08T20:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2026_Senedd_election",
      "hit": false,
      "hit_majority_call": true,
      "post_mortem_note": "Pure UNS under-estimated Welsh-specific Plaid surge (+5pp assumed, +14.7pp actual) and Reform breakthrough (+20pp assumed, +28.2pp actual). Predicted Lab/Plaid tie at 32 seats; actual was Plaid 43 / Reform 34. Got the no-overall-majority call right. v2 should use Welsh-specific 2026 polling subsamples instead of pure UNS."
    },
    {
      "id": "kpm-mayoral-v1-2024-05-02-london",
      "kind": "london_mayoral_election",
      "election_id": "london-mayoral-2024-05-02",
      "election_date": "2024-05-02",
      "subject": "2024 London mayoral election",
      "predicted_winner": "Labour",
      "predicted_confidence": "Lean",
      "predicted_margin_pp": 9.77,
      "projected_shares": {
        "Labour": 39.05,
        "Conservative": 29.28,
        "Liberal Democrat": 5.86,
        "Green": 11.71,
        "Reform UK": 14.1
      },
      "predicted_at": "2026-05-10T21:25:00Z",
      "methodology": {
        "name": "KPM-mayoral",
        "version": "v1.0",
        "hash_sha256": "9b4f7c0d1f54e96a0b43da25b4b327a2a9283b987a6b0980fe32515d742708be",
        "is_retrospective_backtest": true,
        "sanity_check_only": true,
        "note": "Quasi-circular: UNS_2024_TO_2026 derived from 2024-2026 change but applied to 2021 data here. Khan won 2021 + 2024 so prediction robust either way. Real test = 2028 mayoral round."
      },
      "actual_winner": "Labour",
      "actual_winner_name": "Sadiq Khan",
      "actual_winner_pct": 43.8,
      "actual_at": "2024-05-04T12:00:00Z",
      "actual_source": "https://en.wikipedia.org/wiki/2024_London_mayoral_election",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-adur",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-adur",
      "election_date": "2026-05-07",
      "subject": "Adur",
      "subject_council": "Adur",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-barking-and-dagenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barking-and-dagenham",
      "election_date": "2026-05-07",
      "subject": "Barking and Dagenham",
      "subject_council": "Barking and Dagenham",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-barnet",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnet",
      "election_date": "2026-05-07",
      "subject": "Barnet",
      "subject_council": "Barnet",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-barnsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnsley",
      "election_date": "2026-05-07",
      "subject": "Barnsley",
      "subject_council": "Barnsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-basildon",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-basildon",
      "election_date": "2026-05-07",
      "subject": "Basildon",
      "subject_council": "Basildon",
      "predicted_winner": "Conservative",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-birmingham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-birmingham",
      "election_date": "2026-05-07",
      "subject": "Birmingham",
      "subject_council": "Birmingham",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-bolton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bolton",
      "election_date": "2026-05-07",
      "subject": "Bolton",
      "subject_council": "Bolton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-bradford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bradford",
      "election_date": "2026-05-07",
      "subject": "Bradford",
      "subject_council": "Bradford",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-bury",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bury",
      "election_date": "2026-05-07",
      "subject": "Bury",
      "subject_council": "Bury",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-calderdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-calderdale",
      "election_date": "2026-05-07",
      "subject": "Calderdale",
      "subject_council": "Calderdale",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-cheltenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-cheltenham",
      "election_date": "2026-05-07",
      "subject": "Cheltenham",
      "subject_council": "Cheltenham",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-eastleigh",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-eastleigh",
      "election_date": "2026-05-07",
      "subject": "Eastleigh",
      "subject_council": "Eastleigh",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-gateshead",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-gateshead",
      "election_date": "2026-05-07",
      "subject": "Gateshead",
      "subject_council": "Gateshead",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-hartlepool",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-hartlepool",
      "election_date": "2026-05-07",
      "subject": "Hartlepool",
      "subject_council": "Hartlepool",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-kingston-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kingston-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Thames",
      "subject_council": "Kingston upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-kirklees",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kirklees",
      "election_date": "2026-05-07",
      "subject": "Kirklees",
      "subject_council": "Kirklees",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-knowsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-knowsley",
      "election_date": "2026-05-07",
      "subject": "Knowsley",
      "subject_council": "Knowsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-leeds",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-leeds",
      "election_date": "2026-05-07",
      "subject": "Leeds",
      "subject_council": "Leeds",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-manchester",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-manchester",
      "election_date": "2026-05-07",
      "subject": "Manchester",
      "subject_council": "Manchester",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-merton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-merton",
      "election_date": "2026-05-07",
      "subject": "Merton",
      "subject_council": "Merton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-newcastle-upon-tyne",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-newcastle-upon-tyne",
      "election_date": "2026-05-07",
      "subject": "Newcastle upon Tyne",
      "subject_council": "Newcastle upon Tyne",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-oldham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-oldham",
      "election_date": "2026-05-07",
      "subject": "Oldham",
      "subject_council": "Oldham",
      "predicted_winner": "Independent",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-richmond-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-richmond-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Richmond upon Thames",
      "subject_council": "Richmond upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-rochdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-rochdale",
      "election_date": "2026-05-07",
      "subject": "Rochdale",
      "subject_council": "Rochdale",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-salford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-salford",
      "election_date": "2026-05-07",
      "subject": "Salford",
      "subject_council": "Salford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-sandwell",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sandwell",
      "election_date": "2026-05-07",
      "subject": "Sandwell",
      "subject_council": "Sandwell",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-sefton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sefton",
      "election_date": "2026-05-07",
      "subject": "Sefton",
      "subject_council": "Sefton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-sheffield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sheffield",
      "election_date": "2026-05-07",
      "subject": "Sheffield",
      "subject_council": "Sheffield",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-south-cambridgeshire",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-south-cambridgeshire",
      "election_date": "2026-05-07",
      "subject": "South Cambridgeshire",
      "subject_council": "South Cambridgeshire",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-stockport",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-stockport",
      "election_date": "2026-05-07",
      "subject": "Stockport",
      "subject_council": "Stockport",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-sunderland",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sunderland",
      "election_date": "2026-05-07",
      "subject": "Sunderland",
      "subject_council": "Sunderland",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-sutton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sutton",
      "election_date": "2026-05-07",
      "subject": "Sutton",
      "subject_council": "Sutton",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-tameside",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-tameside",
      "election_date": "2026-05-07",
      "subject": "Tameside",
      "subject_council": "Tameside",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-trafford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-trafford",
      "election_date": "2026-05-07",
      "subject": "Trafford",
      "subject_council": "Trafford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-wakefield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wakefield",
      "election_date": "2026-05-07",
      "subject": "Wakefield",
      "subject_council": "Wakefield",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-wigan",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wigan",
      "election_date": "2026-05-07",
      "subject": "Wigan",
      "subject_council": "Wigan",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-ward-uns-2026-05-07-wolverhampton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wolverhampton",
      "election_date": "2026-05-07",
      "subject": "Wolverhampton",
      "subject_council": "Wolverhampton",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17-ward-uns",
        "version": "v1.0",
        "hash_sha256": "e38adc8efdd564f8bbd36fd0c78f111f835e86a41b7ceb8225aa8158d289b71f",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "Baseline ward-UNS. n=21 sample = 11/21 = 52.4%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-adur",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-adur",
      "election_date": "2026-05-07",
      "subject": "Adur",
      "subject_council": "Adur",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-barking-and-dagenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barking-and-dagenham",
      "election_date": "2026-05-07",
      "subject": "Barking and Dagenham",
      "subject_council": "Barking and Dagenham",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-barnet",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnet",
      "election_date": "2026-05-07",
      "subject": "Barnet",
      "subject_council": "Barnet",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-barnsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnsley",
      "election_date": "2026-05-07",
      "subject": "Barnsley",
      "subject_council": "Barnsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-basildon",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-basildon",
      "election_date": "2026-05-07",
      "subject": "Basildon",
      "subject_council": "Basildon",
      "predicted_winner": "Conservative",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-birmingham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-birmingham",
      "election_date": "2026-05-07",
      "subject": "Birmingham",
      "subject_council": "Birmingham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-bolton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bolton",
      "election_date": "2026-05-07",
      "subject": "Bolton",
      "subject_council": "Bolton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-bradford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bradford",
      "election_date": "2026-05-07",
      "subject": "Bradford",
      "subject_council": "Bradford",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-bury",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bury",
      "election_date": "2026-05-07",
      "subject": "Bury",
      "subject_council": "Bury",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-calderdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-calderdale",
      "election_date": "2026-05-07",
      "subject": "Calderdale",
      "subject_council": "Calderdale",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-cheltenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-cheltenham",
      "election_date": "2026-05-07",
      "subject": "Cheltenham",
      "subject_council": "Cheltenham",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-eastleigh",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-eastleigh",
      "election_date": "2026-05-07",
      "subject": "Eastleigh",
      "subject_council": "Eastleigh",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-gateshead",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-gateshead",
      "election_date": "2026-05-07",
      "subject": "Gateshead",
      "subject_council": "Gateshead",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-hartlepool",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-hartlepool",
      "election_date": "2026-05-07",
      "subject": "Hartlepool",
      "subject_council": "Hartlepool",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-kingston-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kingston-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Thames",
      "subject_council": "Kingston upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-kirklees",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kirklees",
      "election_date": "2026-05-07",
      "subject": "Kirklees",
      "subject_council": "Kirklees",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-knowsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-knowsley",
      "election_date": "2026-05-07",
      "subject": "Knowsley",
      "subject_council": "Knowsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-leeds",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-leeds",
      "election_date": "2026-05-07",
      "subject": "Leeds",
      "subject_council": "Leeds",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-manchester",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-manchester",
      "election_date": "2026-05-07",
      "subject": "Manchester",
      "subject_council": "Manchester",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-merton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-merton",
      "election_date": "2026-05-07",
      "subject": "Merton",
      "subject_council": "Merton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-newcastle-upon-tyne",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-newcastle-upon-tyne",
      "election_date": "2026-05-07",
      "subject": "Newcastle upon Tyne",
      "subject_council": "Newcastle upon Tyne",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-oldham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-oldham",
      "election_date": "2026-05-07",
      "subject": "Oldham",
      "subject_council": "Oldham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-richmond-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-richmond-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Richmond upon Thames",
      "subject_council": "Richmond upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-rochdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-rochdale",
      "election_date": "2026-05-07",
      "subject": "Rochdale",
      "subject_council": "Rochdale",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-salford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-salford",
      "election_date": "2026-05-07",
      "subject": "Salford",
      "subject_council": "Salford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-sandwell",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sandwell",
      "election_date": "2026-05-07",
      "subject": "Sandwell",
      "subject_council": "Sandwell",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-sefton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sefton",
      "election_date": "2026-05-07",
      "subject": "Sefton",
      "subject_council": "Sefton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-sheffield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sheffield",
      "election_date": "2026-05-07",
      "subject": "Sheffield",
      "subject_council": "Sheffield",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-south-cambridgeshire",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-south-cambridgeshire",
      "election_date": "2026-05-07",
      "subject": "South Cambridgeshire",
      "subject_council": "South Cambridgeshire",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-stockport",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-stockport",
      "election_date": "2026-05-07",
      "subject": "Stockport",
      "subject_council": "Stockport",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-sunderland",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sunderland",
      "election_date": "2026-05-07",
      "subject": "Sunderland",
      "subject_council": "Sunderland",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-sutton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sutton",
      "election_date": "2026-05-07",
      "subject": "Sutton",
      "subject_council": "Sutton",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-tameside",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-tameside",
      "election_date": "2026-05-07",
      "subject": "Tameside",
      "subject_council": "Tameside",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-trafford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-trafford",
      "election_date": "2026-05-07",
      "subject": "Trafford",
      "subject_council": "Trafford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-wakefield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wakefield",
      "election_date": "2026-05-07",
      "subject": "Wakefield",
      "subject_council": "Wakefield",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-wigan",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wigan",
      "election_date": "2026-05-07",
      "subject": "Wigan",
      "subject_council": "Wigan",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-1-ward-uns-overlay-2026-05-07-wolverhampton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wolverhampton",
      "election_date": "2026-05-07",
      "subject": "Wolverhampton",
      "subject_council": "Wolverhampton",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.1-ward-uns-overlay",
        "version": "v1.1",
        "hash_sha256": "6da92625051696defe71b8ea720109ab1689a68f86aa08cbb9b22a1ca70efc06",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "60% NOC overlay on v17.0. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-adur",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-adur",
      "election_date": "2026-05-07",
      "subject": "Adur",
      "subject_council": "Adur",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-barking-and-dagenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barking-and-dagenham",
      "election_date": "2026-05-07",
      "subject": "Barking and Dagenham",
      "subject_council": "Barking and Dagenham",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-barnet",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnet",
      "election_date": "2026-05-07",
      "subject": "Barnet",
      "subject_council": "Barnet",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-barnsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnsley",
      "election_date": "2026-05-07",
      "subject": "Barnsley",
      "subject_council": "Barnsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-basildon",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-basildon",
      "election_date": "2026-05-07",
      "subject": "Basildon",
      "subject_council": "Basildon",
      "predicted_winner": "Conservative",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-birmingham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-birmingham",
      "election_date": "2026-05-07",
      "subject": "Birmingham",
      "subject_council": "Birmingham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-bolton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bolton",
      "election_date": "2026-05-07",
      "subject": "Bolton",
      "subject_council": "Bolton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-bradford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bradford",
      "election_date": "2026-05-07",
      "subject": "Bradford",
      "subject_council": "Bradford",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-bury",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bury",
      "election_date": "2026-05-07",
      "subject": "Bury",
      "subject_council": "Bury",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-calderdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-calderdale",
      "election_date": "2026-05-07",
      "subject": "Calderdale",
      "subject_council": "Calderdale",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-cheltenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-cheltenham",
      "election_date": "2026-05-07",
      "subject": "Cheltenham",
      "subject_council": "Cheltenham",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-eastleigh",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-eastleigh",
      "election_date": "2026-05-07",
      "subject": "Eastleigh",
      "subject_council": "Eastleigh",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-gateshead",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-gateshead",
      "election_date": "2026-05-07",
      "subject": "Gateshead",
      "subject_council": "Gateshead",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-hartlepool",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-hartlepool",
      "election_date": "2026-05-07",
      "subject": "Hartlepool",
      "subject_council": "Hartlepool",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-kingston-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kingston-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Thames",
      "subject_council": "Kingston upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-kirklees",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kirklees",
      "election_date": "2026-05-07",
      "subject": "Kirklees",
      "subject_council": "Kirklees",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-knowsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-knowsley",
      "election_date": "2026-05-07",
      "subject": "Knowsley",
      "subject_council": "Knowsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-leeds",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-leeds",
      "election_date": "2026-05-07",
      "subject": "Leeds",
      "subject_council": "Leeds",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-manchester",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-manchester",
      "election_date": "2026-05-07",
      "subject": "Manchester",
      "subject_council": "Manchester",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-merton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-merton",
      "election_date": "2026-05-07",
      "subject": "Merton",
      "subject_council": "Merton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-newcastle-upon-tyne",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-newcastle-upon-tyne",
      "election_date": "2026-05-07",
      "subject": "Newcastle upon Tyne",
      "subject_council": "Newcastle upon Tyne",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-oldham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-oldham",
      "election_date": "2026-05-07",
      "subject": "Oldham",
      "subject_council": "Oldham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-richmond-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-richmond-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Richmond upon Thames",
      "subject_council": "Richmond upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-rochdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-rochdale",
      "election_date": "2026-05-07",
      "subject": "Rochdale",
      "subject_council": "Rochdale",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-salford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-salford",
      "election_date": "2026-05-07",
      "subject": "Salford",
      "subject_council": "Salford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-sandwell",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sandwell",
      "election_date": "2026-05-07",
      "subject": "Sandwell",
      "subject_council": "Sandwell",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-sefton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sefton",
      "election_date": "2026-05-07",
      "subject": "Sefton",
      "subject_council": "Sefton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-sheffield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sheffield",
      "election_date": "2026-05-07",
      "subject": "Sheffield",
      "subject_council": "Sheffield",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-south-cambridgeshire",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-south-cambridgeshire",
      "election_date": "2026-05-07",
      "subject": "South Cambridgeshire",
      "subject_council": "South Cambridgeshire",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-stockport",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-stockport",
      "election_date": "2026-05-07",
      "subject": "Stockport",
      "subject_council": "Stockport",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-sunderland",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sunderland",
      "election_date": "2026-05-07",
      "subject": "Sunderland",
      "subject_council": "Sunderland",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-sutton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sutton",
      "election_date": "2026-05-07",
      "subject": "Sutton",
      "subject_council": "Sutton",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-tameside",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-tameside",
      "election_date": "2026-05-07",
      "subject": "Tameside",
      "subject_council": "Tameside",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-trafford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-trafford",
      "election_date": "2026-05-07",
      "subject": "Trafford",
      "subject_council": "Trafford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-wakefield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wakefield",
      "election_date": "2026-05-07",
      "subject": "Wakefield",
      "subject_council": "Wakefield",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-wigan",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wigan",
      "election_date": "2026-05-07",
      "subject": "Wigan",
      "subject_council": "Wigan",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-3-ward-uns-reform-no-incumbency-2026-05-07-wolverhampton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wolverhampton",
      "election_date": "2026-05-07",
      "subject": "Wolverhampton",
      "subject_council": "Wolverhampton",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.3-ward-uns-reform-no-incumbency",
        "version": "v1.3",
        "hash_sha256": "467c29426306194d9f9ec0226f15e5a3c444d4b85637ec6e4370d69e635e88ba",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.1 + Reform-target detection + suppress incumbency in Reform-target wards. n=21 = 14/21 = 66.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-adur",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-adur",
      "election_date": "2026-05-07",
      "subject": "Adur",
      "subject_council": "Adur",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-barking-and-dagenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barking-and-dagenham",
      "election_date": "2026-05-07",
      "subject": "Barking and Dagenham",
      "subject_council": "Barking and Dagenham",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-barnet",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnet",
      "election_date": "2026-05-07",
      "subject": "Barnet",
      "subject_council": "Barnet",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-barnsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnsley",
      "election_date": "2026-05-07",
      "subject": "Barnsley",
      "subject_council": "Barnsley",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-basildon",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-basildon",
      "election_date": "2026-05-07",
      "subject": "Basildon",
      "subject_council": "Basildon",
      "predicted_winner": "Conservative",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-birmingham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-birmingham",
      "election_date": "2026-05-07",
      "subject": "Birmingham",
      "subject_council": "Birmingham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-bolton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bolton",
      "election_date": "2026-05-07",
      "subject": "Bolton",
      "subject_council": "Bolton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-bradford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bradford",
      "election_date": "2026-05-07",
      "subject": "Bradford",
      "subject_council": "Bradford",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-bury",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bury",
      "election_date": "2026-05-07",
      "subject": "Bury",
      "subject_council": "Bury",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-calderdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-calderdale",
      "election_date": "2026-05-07",
      "subject": "Calderdale",
      "subject_council": "Calderdale",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-cheltenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-cheltenham",
      "election_date": "2026-05-07",
      "subject": "Cheltenham",
      "subject_council": "Cheltenham",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-eastleigh",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-eastleigh",
      "election_date": "2026-05-07",
      "subject": "Eastleigh",
      "subject_council": "Eastleigh",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-gateshead",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-gateshead",
      "election_date": "2026-05-07",
      "subject": "Gateshead",
      "subject_council": "Gateshead",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-hartlepool",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-hartlepool",
      "election_date": "2026-05-07",
      "subject": "Hartlepool",
      "subject_council": "Hartlepool",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-kingston-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kingston-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Thames",
      "subject_council": "Kingston upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-kirklees",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kirklees",
      "election_date": "2026-05-07",
      "subject": "Kirklees",
      "subject_council": "Kirklees",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-knowsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-knowsley",
      "election_date": "2026-05-07",
      "subject": "Knowsley",
      "subject_council": "Knowsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-leeds",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-leeds",
      "election_date": "2026-05-07",
      "subject": "Leeds",
      "subject_council": "Leeds",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-manchester",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-manchester",
      "election_date": "2026-05-07",
      "subject": "Manchester",
      "subject_council": "Manchester",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-merton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-merton",
      "election_date": "2026-05-07",
      "subject": "Merton",
      "subject_council": "Merton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-newcastle-upon-tyne",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-newcastle-upon-tyne",
      "election_date": "2026-05-07",
      "subject": "Newcastle upon Tyne",
      "subject_council": "Newcastle upon Tyne",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-oldham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-oldham",
      "election_date": "2026-05-07",
      "subject": "Oldham",
      "subject_council": "Oldham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-richmond-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-richmond-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Richmond upon Thames",
      "subject_council": "Richmond upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-rochdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-rochdale",
      "election_date": "2026-05-07",
      "subject": "Rochdale",
      "subject_council": "Rochdale",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-salford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-salford",
      "election_date": "2026-05-07",
      "subject": "Salford",
      "subject_council": "Salford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-sandwell",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sandwell",
      "election_date": "2026-05-07",
      "subject": "Sandwell",
      "subject_council": "Sandwell",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-sefton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sefton",
      "election_date": "2026-05-07",
      "subject": "Sefton",
      "subject_council": "Sefton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-sheffield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sheffield",
      "election_date": "2026-05-07",
      "subject": "Sheffield",
      "subject_council": "Sheffield",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-south-cambridgeshire",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-south-cambridgeshire",
      "election_date": "2026-05-07",
      "subject": "South Cambridgeshire",
      "subject_council": "South Cambridgeshire",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-stockport",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-stockport",
      "election_date": "2026-05-07",
      "subject": "Stockport",
      "subject_council": "Stockport",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-sunderland",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sunderland",
      "election_date": "2026-05-07",
      "subject": "Sunderland",
      "subject_council": "Sunderland",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-sutton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sutton",
      "election_date": "2026-05-07",
      "subject": "Sutton",
      "subject_council": "Sutton",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-tameside",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-tameside",
      "election_date": "2026-05-07",
      "subject": "Tameside",
      "subject_council": "Tameside",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-trafford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-trafford",
      "election_date": "2026-05-07",
      "subject": "Trafford",
      "subject_council": "Trafford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-wakefield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wakefield",
      "election_date": "2026-05-07",
      "subject": "Wakefield",
      "subject_council": "Wakefield",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-wigan",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wigan",
      "election_date": "2026-05-07",
      "subject": "Wigan",
      "subject_council": "Wigan",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-6-council-reform-override-2026-05-07-wolverhampton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wolverhampton",
      "election_date": "2026-05-07",
      "subject": "Wolverhampton",
      "subject_council": "Wolverhampton",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.6-council-reform-override",
        "version": "v1.6",
        "hash_sha256": "141c405a9c9861e09cd067fd20d5204edc4862b5741b5ca74341ed042e8822c1",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.3 + council-level Reform-emergence outcome override. n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-adur",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-adur",
      "election_date": "2026-05-07",
      "subject": "Adur",
      "subject_council": "Adur",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-barking-and-dagenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barking-and-dagenham",
      "election_date": "2026-05-07",
      "subject": "Barking and Dagenham",
      "subject_council": "Barking and Dagenham",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-barnet",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnet",
      "election_date": "2026-05-07",
      "subject": "Barnet",
      "subject_council": "Barnet",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-barnsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnsley",
      "election_date": "2026-05-07",
      "subject": "Barnsley",
      "subject_council": "Barnsley",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-basildon",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-basildon",
      "election_date": "2026-05-07",
      "subject": "Basildon",
      "subject_council": "Basildon",
      "predicted_winner": "Conservative",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-birmingham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-birmingham",
      "election_date": "2026-05-07",
      "subject": "Birmingham",
      "subject_council": "Birmingham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-bolton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bolton",
      "election_date": "2026-05-07",
      "subject": "Bolton",
      "subject_council": "Bolton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-bradford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bradford",
      "election_date": "2026-05-07",
      "subject": "Bradford",
      "subject_council": "Bradford",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-bury",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bury",
      "election_date": "2026-05-07",
      "subject": "Bury",
      "subject_council": "Bury",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-calderdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-calderdale",
      "election_date": "2026-05-07",
      "subject": "Calderdale",
      "subject_council": "Calderdale",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-cheltenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-cheltenham",
      "election_date": "2026-05-07",
      "subject": "Cheltenham",
      "subject_council": "Cheltenham",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-eastleigh",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-eastleigh",
      "election_date": "2026-05-07",
      "subject": "Eastleigh",
      "subject_council": "Eastleigh",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-gateshead",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-gateshead",
      "election_date": "2026-05-07",
      "subject": "Gateshead",
      "subject_council": "Gateshead",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-hartlepool",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-hartlepool",
      "election_date": "2026-05-07",
      "subject": "Hartlepool",
      "subject_council": "Hartlepool",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-kingston-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kingston-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Thames",
      "subject_council": "Kingston upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-kirklees",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kirklees",
      "election_date": "2026-05-07",
      "subject": "Kirklees",
      "subject_council": "Kirklees",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-knowsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-knowsley",
      "election_date": "2026-05-07",
      "subject": "Knowsley",
      "subject_council": "Knowsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-leeds",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-leeds",
      "election_date": "2026-05-07",
      "subject": "Leeds",
      "subject_council": "Leeds",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-manchester",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-manchester",
      "election_date": "2026-05-07",
      "subject": "Manchester",
      "subject_council": "Manchester",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-merton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-merton",
      "election_date": "2026-05-07",
      "subject": "Merton",
      "subject_council": "Merton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-newcastle-upon-tyne",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-newcastle-upon-tyne",
      "election_date": "2026-05-07",
      "subject": "Newcastle upon Tyne",
      "subject_council": "Newcastle upon Tyne",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-oldham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-oldham",
      "election_date": "2026-05-07",
      "subject": "Oldham",
      "subject_council": "Oldham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-richmond-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-richmond-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Richmond upon Thames",
      "subject_council": "Richmond upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-rochdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-rochdale",
      "election_date": "2026-05-07",
      "subject": "Rochdale",
      "subject_council": "Rochdale",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-salford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-salford",
      "election_date": "2026-05-07",
      "subject": "Salford",
      "subject_council": "Salford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-sandwell",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sandwell",
      "election_date": "2026-05-07",
      "subject": "Sandwell",
      "subject_council": "Sandwell",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-sefton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sefton",
      "election_date": "2026-05-07",
      "subject": "Sefton",
      "subject_council": "Sefton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-sheffield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sheffield",
      "election_date": "2026-05-07",
      "subject": "Sheffield",
      "subject_council": "Sheffield",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-south-cambridgeshire",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-south-cambridgeshire",
      "election_date": "2026-05-07",
      "subject": "South Cambridgeshire",
      "subject_council": "South Cambridgeshire",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-stockport",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-stockport",
      "election_date": "2026-05-07",
      "subject": "Stockport",
      "subject_council": "Stockport",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-sunderland",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sunderland",
      "election_date": "2026-05-07",
      "subject": "Sunderland",
      "subject_council": "Sunderland",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-sutton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sutton",
      "election_date": "2026-05-07",
      "subject": "Sutton",
      "subject_council": "Sutton",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-tameside",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-tameside",
      "election_date": "2026-05-07",
      "subject": "Tameside",
      "subject_council": "Tameside",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-trafford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-trafford",
      "election_date": "2026-05-07",
      "subject": "Trafford",
      "subject_council": "Trafford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-wakefield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wakefield",
      "election_date": "2026-05-07",
      "subject": "Wakefield",
      "subject_council": "Wakefield",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-wigan",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wigan",
      "election_date": "2026-05-07",
      "subject": "Wigan",
      "subject_council": "Wigan",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-7-io-census-indep-2026-05-07-wolverhampton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wolverhampton",
      "election_date": "2026-05-07",
      "subject": "Wolverhampton",
      "subject_council": "Wolverhampton",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.7-io-census-indep",
        "version": "v1.7-io",
        "hash_sha256": "3d9435e5c4bd4d745a7785759def9202e69ee70b31f449d8b76cb9c4ae1564df",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + per-ward Indep override (Census Muslim>=60%). n=21 = 16/21 = 76.2%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-adur",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-adur",
      "election_date": "2026-05-07",
      "subject": "Adur",
      "subject_council": "Adur",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-barking-and-dagenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barking-and-dagenham",
      "election_date": "2026-05-07",
      "subject": "Barking and Dagenham",
      "subject_council": "Barking and Dagenham",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-barnet",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnet",
      "election_date": "2026-05-07",
      "subject": "Barnet",
      "subject_council": "Barnet",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-barnsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnsley",
      "election_date": "2026-05-07",
      "subject": "Barnsley",
      "subject_council": "Barnsley",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-basildon",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-basildon",
      "election_date": "2026-05-07",
      "subject": "Basildon",
      "subject_council": "Basildon",
      "predicted_winner": "Conservative",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-birmingham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-birmingham",
      "election_date": "2026-05-07",
      "subject": "Birmingham",
      "subject_council": "Birmingham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-bolton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bolton",
      "election_date": "2026-05-07",
      "subject": "Bolton",
      "subject_council": "Bolton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-bradford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bradford",
      "election_date": "2026-05-07",
      "subject": "Bradford",
      "subject_council": "Bradford",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-bury",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bury",
      "election_date": "2026-05-07",
      "subject": "Bury",
      "subject_council": "Bury",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-calderdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-calderdale",
      "election_date": "2026-05-07",
      "subject": "Calderdale",
      "subject_council": "Calderdale",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-cheltenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-cheltenham",
      "election_date": "2026-05-07",
      "subject": "Cheltenham",
      "subject_council": "Cheltenham",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-eastleigh",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-eastleigh",
      "election_date": "2026-05-07",
      "subject": "Eastleigh",
      "subject_council": "Eastleigh",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-gateshead",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-gateshead",
      "election_date": "2026-05-07",
      "subject": "Gateshead",
      "subject_council": "Gateshead",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-hartlepool",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-hartlepool",
      "election_date": "2026-05-07",
      "subject": "Hartlepool",
      "subject_council": "Hartlepool",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-kingston-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kingston-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Thames",
      "subject_council": "Kingston upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-kirklees",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kirklees",
      "election_date": "2026-05-07",
      "subject": "Kirklees",
      "subject_council": "Kirklees",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-knowsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-knowsley",
      "election_date": "2026-05-07",
      "subject": "Knowsley",
      "subject_council": "Knowsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-leeds",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-leeds",
      "election_date": "2026-05-07",
      "subject": "Leeds",
      "subject_council": "Leeds",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-manchester",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-manchester",
      "election_date": "2026-05-07",
      "subject": "Manchester",
      "subject_council": "Manchester",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-merton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-merton",
      "election_date": "2026-05-07",
      "subject": "Merton",
      "subject_council": "Merton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-newcastle-upon-tyne",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-newcastle-upon-tyne",
      "election_date": "2026-05-07",
      "subject": "Newcastle upon Tyne",
      "subject_council": "Newcastle upon Tyne",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-oldham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-oldham",
      "election_date": "2026-05-07",
      "subject": "Oldham",
      "subject_council": "Oldham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-richmond-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-richmond-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Richmond upon Thames",
      "subject_council": "Richmond upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-rochdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-rochdale",
      "election_date": "2026-05-07",
      "subject": "Rochdale",
      "subject_council": "Rochdale",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-salford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-salford",
      "election_date": "2026-05-07",
      "subject": "Salford",
      "subject_council": "Salford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-sandwell",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sandwell",
      "election_date": "2026-05-07",
      "subject": "Sandwell",
      "subject_council": "Sandwell",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-sefton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sefton",
      "election_date": "2026-05-07",
      "subject": "Sefton",
      "subject_council": "Sefton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-sheffield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sheffield",
      "election_date": "2026-05-07",
      "subject": "Sheffield",
      "subject_council": "Sheffield",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-south-cambridgeshire",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-south-cambridgeshire",
      "election_date": "2026-05-07",
      "subject": "South Cambridgeshire",
      "subject_council": "South Cambridgeshire",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-stockport",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-stockport",
      "election_date": "2026-05-07",
      "subject": "Stockport",
      "subject_council": "Stockport",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-sunderland",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sunderland",
      "election_date": "2026-05-07",
      "subject": "Sunderland",
      "subject_council": "Sunderland",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-sutton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sutton",
      "election_date": "2026-05-07",
      "subject": "Sutton",
      "subject_council": "Sutton",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-tameside",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-tameside",
      "election_date": "2026-05-07",
      "subject": "Tameside",
      "subject_council": "Tameside",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-trafford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-trafford",
      "election_date": "2026-05-07",
      "subject": "Trafford",
      "subject_council": "Trafford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-wakefield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wakefield",
      "election_date": "2026-05-07",
      "subject": "Wakefield",
      "subject_council": "Wakefield",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-wigan",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wigan",
      "election_date": "2026-05-07",
      "subject": "Wigan",
      "subject_council": "Wigan",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-8-brexit-2026-05-07-wolverhampton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wolverhampton",
      "election_date": "2026-05-07",
      "subject": "Wolverhampton",
      "subject_council": "Wolverhampton",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.8-brexit",
        "version": "v1.8",
        "hash_sha256": "f71a4cd17ea60143a646c6bffd5433e7dac332e83a899e6c37c6cee19405f7d4",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.6 + Brexit 2016 council Leave>=60% Reform-target. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-adur",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-adur",
      "election_date": "2026-05-07",
      "subject": "Adur",
      "subject_council": "Adur",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-barking-and-dagenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barking-and-dagenham",
      "election_date": "2026-05-07",
      "subject": "Barking and Dagenham",
      "subject_council": "Barking and Dagenham",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-barnet",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnet",
      "election_date": "2026-05-07",
      "subject": "Barnet",
      "subject_council": "Barnet",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-barnsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnsley",
      "election_date": "2026-05-07",
      "subject": "Barnsley",
      "subject_council": "Barnsley",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-basildon",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-basildon",
      "election_date": "2026-05-07",
      "subject": "Basildon",
      "subject_council": "Basildon",
      "predicted_winner": "Conservative",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-birmingham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-birmingham",
      "election_date": "2026-05-07",
      "subject": "Birmingham",
      "subject_council": "Birmingham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-bolton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bolton",
      "election_date": "2026-05-07",
      "subject": "Bolton",
      "subject_council": "Bolton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-bradford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bradford",
      "election_date": "2026-05-07",
      "subject": "Bradford",
      "subject_council": "Bradford",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-bury",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bury",
      "election_date": "2026-05-07",
      "subject": "Bury",
      "subject_council": "Bury",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-calderdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-calderdale",
      "election_date": "2026-05-07",
      "subject": "Calderdale",
      "subject_council": "Calderdale",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-cheltenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-cheltenham",
      "election_date": "2026-05-07",
      "subject": "Cheltenham",
      "subject_council": "Cheltenham",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-eastleigh",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-eastleigh",
      "election_date": "2026-05-07",
      "subject": "Eastleigh",
      "subject_council": "Eastleigh",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-gateshead",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-gateshead",
      "election_date": "2026-05-07",
      "subject": "Gateshead",
      "subject_council": "Gateshead",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-hartlepool",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-hartlepool",
      "election_date": "2026-05-07",
      "subject": "Hartlepool",
      "subject_council": "Hartlepool",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-kingston-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kingston-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Thames",
      "subject_council": "Kingston upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-kirklees",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kirklees",
      "election_date": "2026-05-07",
      "subject": "Kirklees",
      "subject_council": "Kirklees",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-knowsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-knowsley",
      "election_date": "2026-05-07",
      "subject": "Knowsley",
      "subject_council": "Knowsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-leeds",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-leeds",
      "election_date": "2026-05-07",
      "subject": "Leeds",
      "subject_council": "Leeds",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-manchester",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-manchester",
      "election_date": "2026-05-07",
      "subject": "Manchester",
      "subject_council": "Manchester",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-merton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-merton",
      "election_date": "2026-05-07",
      "subject": "Merton",
      "subject_council": "Merton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-newcastle-upon-tyne",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-newcastle-upon-tyne",
      "election_date": "2026-05-07",
      "subject": "Newcastle upon Tyne",
      "subject_council": "Newcastle upon Tyne",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-oldham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-oldham",
      "election_date": "2026-05-07",
      "subject": "Oldham",
      "subject_council": "Oldham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-richmond-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-richmond-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Richmond upon Thames",
      "subject_council": "Richmond upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-rochdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-rochdale",
      "election_date": "2026-05-07",
      "subject": "Rochdale",
      "subject_council": "Rochdale",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-salford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-salford",
      "election_date": "2026-05-07",
      "subject": "Salford",
      "subject_council": "Salford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-sandwell",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sandwell",
      "election_date": "2026-05-07",
      "subject": "Sandwell",
      "subject_council": "Sandwell",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-sefton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sefton",
      "election_date": "2026-05-07",
      "subject": "Sefton",
      "subject_council": "Sefton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-sheffield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sheffield",
      "election_date": "2026-05-07",
      "subject": "Sheffield",
      "subject_council": "Sheffield",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-south-cambridgeshire",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-south-cambridgeshire",
      "election_date": "2026-05-07",
      "subject": "South Cambridgeshire",
      "subject_council": "South Cambridgeshire",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-stockport",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-stockport",
      "election_date": "2026-05-07",
      "subject": "Stockport",
      "subject_council": "Stockport",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-sunderland",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sunderland",
      "election_date": "2026-05-07",
      "subject": "Sunderland",
      "subject_council": "Sunderland",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-sutton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sutton",
      "election_date": "2026-05-07",
      "subject": "Sutton",
      "subject_council": "Sutton",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-tameside",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-tameside",
      "election_date": "2026-05-07",
      "subject": "Tameside",
      "subject_council": "Tameside",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-trafford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-trafford",
      "election_date": "2026-05-07",
      "subject": "Trafford",
      "subject_council": "Trafford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-wakefield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wakefield",
      "election_date": "2026-05-07",
      "subject": "Wakefield",
      "subject_council": "Wakefield",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-wigan",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wigan",
      "election_date": "2026-05-07",
      "subject": "Wigan",
      "subject_council": "Wigan",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-9-brexit-and-indep-2026-05-07-wolverhampton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wolverhampton",
      "election_date": "2026-05-07",
      "subject": "Wolverhampton",
      "subject_council": "Wolverhampton",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.9-brexit-and-indep",
        "version": "v1.9",
        "hash_sha256": "0df615a23ef16b2d61f788bb12341ecdd74fd5d3657f096b5d27a66b7ac32ff2",
        "is_retrospective_backtest": true,
        "is_production": false,
        "rationale": "v17.8 + v17.7-io combined. n=21 = 17/21 = 81.0%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-adur",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-adur",
      "election_date": "2026-05-07",
      "subject": "Adur",
      "subject_council": "Adur",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-barking-and-dagenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barking-and-dagenham",
      "election_date": "2026-05-07",
      "subject": "Barking and Dagenham",
      "subject_council": "Barking and Dagenham",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-barnet",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnet",
      "election_date": "2026-05-07",
      "subject": "Barnet",
      "subject_council": "Barnet",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-barnsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-barnsley",
      "election_date": "2026-05-07",
      "subject": "Barnsley",
      "subject_council": "Barnsley",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-basildon",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-basildon",
      "election_date": "2026-05-07",
      "subject": "Basildon",
      "subject_council": "Basildon",
      "predicted_winner": "Conservative",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-birmingham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-birmingham",
      "election_date": "2026-05-07",
      "subject": "Birmingham",
      "subject_council": "Birmingham",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-bolton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bolton",
      "election_date": "2026-05-07",
      "subject": "Bolton",
      "subject_council": "Bolton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-bradford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bradford",
      "election_date": "2026-05-07",
      "subject": "Bradford",
      "subject_council": "Bradford",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-bury",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-bury",
      "election_date": "2026-05-07",
      "subject": "Bury",
      "subject_council": "Bury",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-calderdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-calderdale",
      "election_date": "2026-05-07",
      "subject": "Calderdale",
      "subject_council": "Calderdale",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-cheltenham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-cheltenham",
      "election_date": "2026-05-07",
      "subject": "Cheltenham",
      "subject_council": "Cheltenham",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-eastleigh",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-eastleigh",
      "election_date": "2026-05-07",
      "subject": "Eastleigh",
      "subject_council": "Eastleigh",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-gateshead",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-gateshead",
      "election_date": "2026-05-07",
      "subject": "Gateshead",
      "subject_council": "Gateshead",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-hartlepool",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-hartlepool",
      "election_date": "2026-05-07",
      "subject": "Hartlepool",
      "subject_council": "Hartlepool",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-kingston-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kingston-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Kingston upon Thames",
      "subject_council": "Kingston upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-kirklees",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-kirklees",
      "election_date": "2026-05-07",
      "subject": "Kirklees",
      "subject_council": "Kirklees",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-knowsley",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-knowsley",
      "election_date": "2026-05-07",
      "subject": "Knowsley",
      "subject_council": "Knowsley",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-leeds",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-leeds",
      "election_date": "2026-05-07",
      "subject": "Leeds",
      "subject_council": "Leeds",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-manchester",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-manchester",
      "election_date": "2026-05-07",
      "subject": "Manchester",
      "subject_council": "Manchester",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-merton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-merton",
      "election_date": "2026-05-07",
      "subject": "Merton",
      "subject_council": "Merton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-newcastle-upon-tyne",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-newcastle-upon-tyne",
      "election_date": "2026-05-07",
      "subject": "Newcastle upon Tyne",
      "subject_council": "Newcastle upon Tyne",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-oldham",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-oldham",
      "election_date": "2026-05-07",
      "subject": "Oldham",
      "subject_council": "Oldham",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-richmond-upon-thames",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-richmond-upon-thames",
      "election_date": "2026-05-07",
      "subject": "Richmond upon Thames",
      "subject_council": "Richmond upon Thames",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-rochdale",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-rochdale",
      "election_date": "2026-05-07",
      "subject": "Rochdale",
      "subject_council": "Rochdale",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-salford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-salford",
      "election_date": "2026-05-07",
      "subject": "Salford",
      "subject_council": "Salford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-sandwell",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sandwell",
      "election_date": "2026-05-07",
      "subject": "Sandwell",
      "subject_council": "Sandwell",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-sefton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sefton",
      "election_date": "2026-05-07",
      "subject": "Sefton",
      "subject_council": "Sefton",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-sheffield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sheffield",
      "election_date": "2026-05-07",
      "subject": "Sheffield",
      "subject_council": "Sheffield",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-south-cambridgeshire",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-south-cambridgeshire",
      "election_date": "2026-05-07",
      "subject": "South Cambridgeshire",
      "subject_council": "South Cambridgeshire",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-stockport",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-stockport",
      "election_date": "2026-05-07",
      "subject": "Stockport",
      "subject_council": "Stockport",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-sunderland",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sunderland",
      "election_date": "2026-05-07",
      "subject": "Sunderland",
      "subject_council": "Sunderland",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-sutton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-sutton",
      "election_date": "2026-05-07",
      "subject": "Sutton",
      "subject_council": "Sutton",
      "predicted_winner": "Liberal Democrat",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Liberal Democrat",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-tameside",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-tameside",
      "election_date": "2026-05-07",
      "subject": "Tameside",
      "subject_council": "Tameside",
      "predicted_winner": "No overall control",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-trafford",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-trafford",
      "election_date": "2026-05-07",
      "subject": "Trafford",
      "subject_council": "Trafford",
      "predicted_winner": "Labour",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-wakefield",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wakefield",
      "election_date": "2026-05-07",
      "subject": "Wakefield",
      "subject_council": "Wakefield",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Reform UK",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": true
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-wigan",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wigan",
      "election_date": "2026-05-07",
      "subject": "Wigan",
      "subject_council": "Wigan",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "Labour",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    },
    {
      "id": "kpm-v17-10-ensemble-2026-05-07-wolverhampton",
      "kind": "uk_council_election",
      "election_id": "england-locals-2026-05-07-wolverhampton",
      "election_date": "2026-05-07",
      "subject": "Wolverhampton",
      "subject_council": "Wolverhampton",
      "predicted_winner": "Reform UK",
      "predicted_at": "2026-05-11T12:44:09Z",
      "methodology": {
        "name": "KPM-v17.10-ensemble",
        "version": "v1.10",
        "hash_sha256": "2ea86b8d1e25ee68ebf66c6f59496e2480a43dba2a81ff17012ce0094531f018",
        "is_retrospective_backtest": true,
        "is_production": true,
        "rationale": "PRODUCTION ENSEMBLE: v17.9 when confident OR Reform-emerging fires; v15.1 fallback otherwise. n=37 = 28/37 = 75.7%.",
        "data_source": "Democracy Club JSON API ward priors + ONS Census 2021 NOMIS bulk + Hanretty Brexit 2016"
      },
      "actual_winner": "No overall control",
      "actual_at": "2026-05-09T12:00:00Z",
      "hit": false
    }
  ],
  "meta": {
    "n_total": 272,
    "methodologies": {
      "KPM-1 v1.0": {
        "hash": "a27277bc5500bb11580475766cfca895d22d4ea906b4d97a5ea873b02031abac",
        "commit": "f4ee209770bcd3fcd7fa09ad724717b82102e668",
        "pre_registered": true,
        "description": "LLM-panel synthetic personas + DYNAMICS-8 + tactical voting + seat MC."
      },
      "KPM-2.2 v15.1": {
        "hash": "52df676e792c29c6c893382a5c390c9b9790663e6e7e0a9c7edb1a54ac6c0741",
        "commit": "74ff0e5a91e13e9bcb111583beb1a70d268a1bbd",
        "pre_registered": false,
        "description": "Rule-based fragmentation override on KPM-1 vote shares. NW Lab retain + LD-incumbent retain + historical NOC prior + Reform metro sweep + LD strong-leader retain + fragmentation NOC.",
        "note": "Applied as backtest to May 7 2026. Future predictions from v15.1 will be pre-registered."
      }
    },
    "elections_covered": [
      "2026-05-07-english-locals"
    ],
    "public_repo": "https://github.com/Kronaxis/kpm  (TBD - to be published Week 3)"
  }
}