Skip to content

Compare each build's national aggregates with its base's, model fixed - #602

Merged
MaxGhenis merged 30 commits into
mainfrom
w3-aggregate-data-comparison
Oct 19, 2026
Merged

MaxGhenis merged 30 commits into
mainfrom
w3-aggregate-data-comparison

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Targets main but contains #599 and #600: the pull request workflow runs only on PRs into main, so this PR is their combined CI run. Review #599 and #600 separately; this PR's own change is its last commit. Do not merge on its own. Once approved on its gates, this lands with the d833 uk-data batch on Max's go. It also depends on PolicyEngine/policyengine-uk#2425 (the tool's data axis), which is stacked on #2335. The tool is pinned at #2425's approved head, 6406b2ce (GPT-6.1 Sol delta review 11). That head includes #2335's current small-cell protection: totals rebuilt from their published parts, and reform figures withheld per record. The earlier pin, 5d5558ed, still subtracted suppressed figures, a method re-reviews 6 and 7 showed can leak. Move the pin to #2425's merged commit when it lands; until then this commit stays reachable on #2425.

This is W3 of the Autumn Budget 2026 CI plan: "run the comparison with the model fixed".

What changes

  • The head's test job and Compare each pull request's calibration fit with its base build's #599's base-build job each measure their built enhanced_frs_2024_25.h5 with policyengine-uk's aggregate-impact tool, copied from a pinned commit and run with the head's locked model. They measure, for 2025-26 to 2031-32:

    • receipts by tax head;
    • spending and caseloads by benefit;
    • poverty and inequality;
    • deciles;
    • the ten standard reform costings and their targets.

    The guard is skipped: it tests the model, which is the same on both sides.

  • The head's aggregate steps run after the tests, and the base's after its other reports, all with if: ${{ !cancelled() }}, so one failing measurement can't skip another or the tests.

  • The fit-comparison job runs compare --axis data. It fails unless both sides ran one policyengine-uk version, runtime (apart from policyengine-uk-data itself), partition and set of metric definitions. It fails on a check the head breaks that the base passes, or a missing result. It adds the tool's comment to the PR comment. If the comparison crashes, or one side has no result, the comment says so under its own FAIL heading, and the job fails.

  • Data protection.

    • Only each side's result.json (aggregates) is uploaded.
    • The tool's private/ household detail stays on the runner.
    • Figures from fewer than 10 records are suppressed by the tool.
    • The upload test checks the exact list of uploads (the two fit summaries, two distribution reports and two aggregate results), that no actions/cache step is used, and that only result.json is copied out of the tool's folder.

Tested locally

  • The tool runs under uk-data's locked policyengine-uk 2.122.2 on the released 1.58.1 file in 111 s, with reforms and without the guard.

  • compare --axis data of that measurement against itself passes, with a note that the bytes are the same.

  • On that file four checks fail:

    • closure, because 2.122.2 ships no partition and its lists differ from main's fallback;
    • the gov_spending and household_benefits identities;
    • sign:vat.

    Closure is structural to the model, so it fails on both builds of a PR alike. The two identities and sign:vat depend on the data. A self-comparison of one file doesn't show that both builds fail them the same way, and the comparator treats a newly failing year as a regression. A PR whose build first breaks one of them will fail.

    On the same file, policyengine-uk 2.130.1 passes closure and all seven identities, and still fails sign:vat; it ships its partition. That is observed (pe-uk#2335's certified measurement) and doesn't separate the partition from the other model changes since 2.122.2.

This PR's own CI is the first end-to-end run.

Tests

pytest -W error::RuntimeWarning policyengine_uk_data/tests/test_fit_report.py policyengine_uk_data/tests/test_distribution_validation.py: 29 passed, including the extended upload test.

axiom: n/a: data comparison CI; no policy change

🤖 Generated with Claude Code

MaxGhenis and others added 3 commits October 15, 2026 07:37
Pull request CI now also builds the PR's base, in the same way as the
head (TESTING, one clone) and with the head's lockfile, so both run one
model and environment. A new job compares the two final-epoch fits from
their calibration logs. It fails when the share of national or local
targets within 10% falls by more than 2pp, flags national targets whose
error rises by more than 0.2, and posts the comparison on the PR.

The thresholds (targets/fit_policy.yaml, adopted under d1344) come from
five builds of the same data code: their shares moved by at most 0.93pp
(national) and 0.69pp (local), and they flagged 0 to 6 targets per pair.
Per-target moves only flag while #598 (two weight sets from one code)
is open. Only calibration logs are uploaded, as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Calibration fits grouped targets; these checks measure what the groups
hide, on the built dataset. Each PR build and its base build report
person-weighted equivalised income medians, means and Gini, and relative
low income for everyone, children, working-age adults and pensioners,
against DWP's HBAI FYE 2025 estimates and 95% intervals (tables 8a and
8b, read from the published ODS files), at period 2024. They also report
people by sex and single year of age against the ONS 2024-based
projection at the calibration year. The comparison job adds them to the
PR comment and flags a measure that leaves its interval; it fails only on
a broken or mismatched report until the same-code spread is measured
(#598).

On uk-data 1.58.1, 5 of 14 HBAI measures are outside their intervals
(median AHC, both Gini coefficients, child low income BHC and AHC), and
single ages 0 to 79 are off by 19.5% on average.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both builds are measured with policyengine-uk's aggregate-impact tool at
a pinned commit (policyengine-uk#2425, stacked on #2335), under the head's
locked model: receipts by tax head, spending and caseloads, poverty,
inequality, deciles and the ten standard reform costings, 2025-26 to
2031-32. The comparison job runs `compare --axis data`, which fails unless
both sides ran one model, runtime and set of definitions, and adds the
result to the PR comment. It fails on a check the head breaks that the
base passes. Only each side's result.json (aggregates) is uploaded; the
tool's private household detail stays on the runner.

Under the locked 2.122.2 the tool falls back to policyengine-uk main's
partition, whose lists differ from that model's, so closure and two
identities fail on both sides (pre-existing) until uk-data locks a model
that ships its own partition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis changed the base branch from w3-distribution-checks to main October 15, 2026 12:15
MaxGhenis and others added 13 commits October 15, 2026 08:33
Sol review of #600:
- Negative incomes before housing costs are reset to zero, and income
  after housing costs is derived from the adjusted figure (DWP HBAI
  methodology FYE 2025, "Negative incomes"). Weekly amounts use 365.25 / 7,
  as the FRS loader annualises them.
- A report missing any reference measure, or with a missing or
  non-finite single-age summary, fails the comparison.
- A missing distribution report fails the job.

On uk-data 1.58.1, four of 14 measures are now outside their intervals
(both Gini coefficients, child low income BHC and AHC); median AHC moves
inside.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rint commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Raw calibration logs stay on the runner. Each build uploads a summary:
  whether every national and local target is within 10%, and the error of
  national targets supported by at least 10 households only (the
  constituency log gains a records column). An estimate from a few records,
  divided by a published count, could give one household's value back.
  The test job's raw-log uploads are replaced by the summary too.
- The gate compares shares over the targets both builds have; added and
  removed targets are notes.
- An empty national or local group, or a last epoch with fewer rows than
  the one before, fails.
- The comment step writes a failure comment when the comparison never ran.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	.github/workflows/pull_request.yaml
#	policyengine_uk_data/tests/test_fit_report.py
hbai_measures divided by a zero group weight, which warned and gave NaN.
It now returns None for an empty group, the report marks it outside its
interval, and compare fails on it as missing or not finite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	.github/workflows/pull_request.yaml
…aggregate-data-comparison

# Conflicts:
#	.github/workflows/pull_request.yaml
#	policyengine_uk_data/tests/test_fit_report.py
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Calibration fit against the base build: pass

Targets within 10% (those both builds have) Base Head Change
National (644) 64.9% 65.2% +0.3pp
Local (11,228) 79.3% 79.3% +0.0pp

A drop of more than 2.0% fails.

Notes

  • 3 national targets are in a better band on the head.

National targets in a worse error band on the head (0)

None.

Flags are for review: builds of the same code move 2 to 12 national targets to a worse band (#598). Bands are of |estimate / target - 1|; no target's estimate or error is published.

Workflow run

Income distribution and single ages against the base build: pass

HBAI FYE 2025 (DWP), period 2024: equivalised income in £ a week, rates and Gini in per cent. A value outside HBAI's 95% interval is marked (outside).

Measure Base Head HBAI 95% interval
median_bhc 665.96 (outside) 665.86 (outside) 719.48 703.57 to 735.58
median_ahc 570.73 (outside) 570.66 (outside) 623.14 605.21 to 637.07
mean_bhc 784.78 (outside) 784.77 (outside) 854.98 836.37 to 870.35
mean_ahc 676.16 (outside) 676.13 (outside) 749.82 732.33 to 764.50
gini_bhc 33.22 33.22 32.74 31.89 to 33.98
gini_ahc 38.65 (outside) 38.66 (outside) 36.78 35.90 to 38.29
relative_low_income_bhc_all 18.10 (outside) 18.11 (outside) 15.91 14.45 to 17.64
relative_low_income_bhc_children 23.10 23.11 20.52 17.36 to 23.96
relative_low_income_bhc_working_age 17.62 (outside) 17.63 (outside) 14.28 12.91 to 16.02
relative_low_income_bhc_pensioners 13.47 (outside) 13.46 (outside) 15.90 13.69 to 17.99
relative_low_income_ahc_all 23.17 (outside) 23.17 (outside) 19.64 17.99 to 21.27
relative_low_income_ahc_children 32.41 (outside) 32.42 (outside) 27.41 23.49 to 30.64
relative_low_income_ahc_working_age 23.10 (outside) 23.11 (outside) 18.58 17.01 to 20.34
relative_low_income_ahc_pensioners 11.58 (outside) 11.58 (outside) 13.87 11.62 to 15.90
Single ages against the ONS projection Base Head
Mean error, ages 0 to 79 10.8% 10.8%
Largest error, ages 0 to 79 42.2% 42.3%
Largest error, ages 15 to 19 38.0% 37.9%

Flags

None.

These measures report and flag but do not fail yet: their same-code spread is unmeasured (#598).

Aggregate impact of the data change: pass

Base dataset enhanced_frs_2024_25.h5 (the base's build, sha256 cc323cce29c7) against head dataset enhanced_frs_2024_25.h5 (this pull request's build, sha256 66b4ac590735), both measured with policyengine-uk 2.122.2, fiscal years 2025-26 to 2031-32. Each year is a full microsimulation run on each side.

Checks: 0 broken by this change, 4 failing on both sides, 0 fixed. Moves flagged for review: 10 (thresholds in report_spec.yaml; a flag does not fail the job).

Workflow run and full report

Notes

  • In the years a figure from fewer than 10 records is suppressed (spending.disabled_students_allowance), every total containing it, and the decile incomes, are rebuilt from their other components, so no published total includes it. Those totals are marked †. A change is withheld where the two sides leave out different figures and can't be lined up.

Moves flagged for review

Measure Year Base Head Change
Decile 6: mean household_net_income per household 2028-29 £52,264 £52,105 -£159
Decile 7: mean household_net_income per household 2028-29 £58,928 £59,103 +£175
Decile 9: mean household_net_income per household 2030-31 £85,320 £85,484 +£163
Decile 5: mean household_net_income per household 2030-31 £51,307 £51,225 -£82
Decile 6: mean household_net_income per household 2030-31 £53,867 £53,949 +£81
Decile 2: mean household_net_income per household 2030-31 £33,325 £33,285 -£40
Decile 2: mean household_net_income per household 2028-29 £32,352 £32,315 -£37
Decile 10: mean household_net_income per household 2025-26 £122,501 £122,633 +£133
Decile 3: mean household_net_income per household 2028-29 £40,284 £40,327 +£43
Decile 10: mean household_net_income per household 2026-27 £125,490 £125,624 +£134

Receipts by tax head

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Income tax +£16.7m +£15.2m +£14.8m +£15.2m +£16.8m +£17.4m +£17.8m
National Insurance (employee and self-employed) -£8.8m -£9.2m -£9.5m -£9.8m -£10.2m -£10.4m -£10.7m
National Insurance (employer) -£18.6m -£19.3m -£19.9m -£20.4m -£22.1m -£22.8m -£23.7m
Capital gains tax +£49.5m +£51.1m +£52.9m +£54.8m +£56.7m +£58.8m +£60.9m
Student loan repayments +£1.2m +£1.2m +£1.3m +£1.3m +£1.3m +£1.4m +£4.1m
VAT -£55.5m -£57.0m -£58.3m -£59.8m -£61.2m -£62.7m -£64.3m
Fuel duties -£445 -£257 -£42 +£332 +£417 -£317 +£312
TV licence fee +£0.4m +£0.4m +£0.4m +£0.4m +£0.4m +£0.4m +£0.4m
Council tax +£2.6m +£2.8m +£3.0m +£3.3m +£3.6m +£3.9m +£4.0m
High value council tax surcharge 0 0 0 -£0.4m -£0.4m -£0.4m -£0.5m
Northern Ireland domestic rates -£1.8m -£1.9m -£2.0m -£2.1m -£2.2m -£2.3m -£2.3m
Business rates -£3,559 +£3,171 -£5,232 +£3,441 -£2,487 +£2,747 +£4,633
Stamp duty land tax (own purchases, and corporate until the -£70.2m -£74.1m -£78.2m -£82.3m -£86.6m -£91.3m -£96.3m
Land transaction tax (Wales) -£98,745 -£0.1m -£0.1m -£0.1m -£0.1m -£0.2m -£0.2m
Land and buildings transaction tax (Scotland) +£1.3m +£1.3m +£1.4m +£1.4m +£1.5m +£1.6m +£1.6m

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension +£12.9m +£13.8m +£12.5m +£13.6m +£14.0m +£14.5m +£14.9m
Pension Credit -£7.3m -£7.8m -£7.6m -£7.6m -£7.6m -£7.7m -£7.6m
Winter Fuel Payment -£0.3m -£0.3m -£0.4m -£0.3m -£0.3m -£0.3m -£0.4m
Pension Age Winter Heating Payment (Scotland) +£0.2m +£0.2m +£0.2m +£0.2m +£0.2m +£0.2m +£0.2m
Universal Credit +£44.0m +£43.9m +£45.0m +£44.9m +£46.5m +£41.9m +£41.5m
Housing Benefit -£6.9m -£7.2m -£7.3m -£7.4m -£7.5m -£7.6m -£7.8m
Council Tax Reduction -£0.4m -£0.4m -£0.3m -£0.4m -£0.4m -£0.4m -£0.4m
Employment and Support Allowance (income-related) +£6.0m +£6.2m +£6.3m +£6.5m +£6.6m +£6.8m +£7.0m
Employment and Support Allowance (contribution-based) -£7.9m -£8.1m -£8.3m -£8.5m -£8.7m -£8.9m -£9.1m
Jobseeker's Allowance (income-based) -£0.3m 0 0 0 0 0 0
Jobseeker's Allowance (contribution-based) +£1.1m +£1.1m +£1.2m +£1.2m +£1.2m +£1.3m +£1.3m
Income Support -£75,853 0 0 0 0 0 0
Personal Independence Payment +£11.3m +£11.8m +£12.1m +£12.4m +£12.7m +£13.0m +£13.3m
Disability Living Allowance -£5.8m -£6.0m -£6.2m -£6.3m -£6.5m -£6.6m -£6.8m
Attendance Allowance -£1.9m -£2.0m -£2.1m -£2.1m -£2.2m -£2.2m -£2.3m
Carer's Allowance -£1.3m -£1.4m -£1.4m -£1.4m -£1.5m -£1.5m -£1.6m
Carer Support Payment (Scotland) +£0.2m +£0.2m +£0.2m +£0.2m +£0.2m +£0.2m +£0.2m
Carer's Allowance Supplement (Scotland) 0 +£24,246 +£24,335 +£24,432 +£24,541 +£24,651 +£24,758
Severe Disablement Allowance -£1,709 -£1,779 -£1,826 -£1,870 -£1,916 -£1,964 -£2,012
Industrial Injuries Disablement Benefit -£0.5m -£0.5m -£0.5m -£0.5m -£0.5m -£0.6m -£0.6m
Armed Forces Compensation Scheme -£0.7m -£0.7m -£0.7m -£0.7m -£0.7m -£0.8m -£0.8m
Child Benefit +£3.5m +£2.9m +£2.9m +£3.0m +£3.0m +£3.1m +£2.6m
Scottish Child Payment +£1.1m +£1.1m +£1.1m +£1.2m +£1.2m +£1.2m +£1.2m
Healthy Start vouchers -£98,354 -£98,727 -£99,093 -£99,489 -£99,927 -£0.1m -£0.1m
Statutory Maternity Pay +£4.4m +£4.6m +£4.7m +£4.8m +£4.9m +£5.0m +£5.1m
Statutory Sick Pay -£0.5m -£0.6m -£0.6m -£0.6m -£0.6m -£0.6m -£0.6m
Sure Start Maternity Grant -£21,644 -£21,727 -£21,807 -£21,894 -£21,991 -£22,090 -£22,185
Bereavement Support Payment +£0.1m +£0.1m +£0.1m +£0.1m +£0.2m +£0.2m +£0.2m
Tax-Free Childcare -£18,421 -£0.2m -£0.2m -£0.2m -£0.1m -£0.1m -£0.2m
Extended childcare entitlement -£3.5m -£3.7m -£4.0m -£4.1m -£4.2m -£4.2m -£4.4m
Universal childcare entitlement -£75,677 -£0.2m -£0.2m -£0.3m -£0.3m -£0.3m -£0.3m
Targeted childcare entitlement -£8,482 -£8,803 -£9,041 -£9,263 -£9,491 -£16,525 -£34,803
Parents' Learning Allowance +£0.2m +£0.2m +£0.2m +£0.2m +£0.2m +£0.2m +£0.2m
Adult Dependants' Grant +£12,340 +£12,386 +£45,887 +£46,070 +£46,273 +£46,480 +£38,374
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
NHS spending +£4.6m +£4.6m +£4.7m +£4.7m +£4.7m +£4.7m +£4.7m
State education spending +£0.9m +£0.9m +£0.9m +£0.9m +£0.9m +£0.9m +£0.9m
Transport subsidy spending +£166 +£225 +£216 +£174 +£146 +£99 -£261

Caseloads

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension +774 +788 +639 +713 +716 +719 +722
Pension Credit -1.1k -1.1k -1.1k -1.1k -1.1k -1.1k -1.2k
Winter Fuel Payment -1.5k -1.5k -1.6k -1.5k -1.5k -1.6k -1.6k
Pension Age Winter Heating Payment (Scotland) +1.4k +1.3k +1.1k +1.0k +1.0k +1.0k +1.0k
Universal Credit +2.4k +2.4k +2.5k +2.4k +2.5k +2.6k +2.6k
Housing Benefit -876 -903 -906 -901 -905 -903 -940
Council Tax Reduction +265 +230 +247 +213 +188 +152 +126
Employment and Support Allowance (income-related) +483 +485 +486 +489 +491 +493 +495
Employment and Support Allowance (contribution-based) -1.2k -1.2k -1.2k -1.2k -1.2k -1.2k -1.2k
Jobseeker's Allowance (income-based) -56 0 0 0 0 0 0
Jobseeker's Allowance (contribution-based) +229 +230 +231 +232 +233 +234 +235
Income Support -72 0 0 0 0 0 0
Personal Independence Payment +1.4k +1.4k +1.4k +1.4k +1.5k +1.5k +1.5k
Disability Living Allowance -953 -956 -960 -964 -968 -972 -976
Attendance Allowance -419 -421 -423 -424 -426 -428 -430
Carer's Allowance -304 -305 -306 -308 -309 -310 -312
Carer Support Payment (Scotland) +40 +40 +40 +40 +40 +41 +41
Carer's Allowance Supplement (Scotland) 0 +40 +40 +40 +40 +41 +41
Severe Disablement Allowance -0 -0 -0 -0 -0 -0 -0
Industrial Injuries Disablement Benefit +28 +28 +28 +28 +28 +28 +28
Armed Forces Compensation Scheme -178 -179 -180 -180 -181 -182 -183
Child Benefit +1.1k +919 +932 +929 +892 +891 +715
Scottish Child Payment +764 +763 +766 +769 +742 +745 +766
Healthy Start vouchers -335 -336 -337 -339 -340 -342 -343
Statutory Maternity Pay +268 +270 +271 +272 +273 +274 +275
Statutory Sick Pay -61 -61 -61 -61 -62 -62 -62
Sure Start Maternity Grant -43 -43 -44 -44 -44 -44 -44
Bereavement Support Payment +36 +36 +36 +36 +36 +36 +37
Tax-Free Childcare +436 +357 +369 +348 +308 +243 +229
Extended childcare entitlement -646 -603 -632 -619 -618 -618 -641
Universal childcare entitlement -22 -68 -68 -70 -69 -66 -72
Targeted childcare entitlement -2 -2 -2 -2 -2 -3 -6
Parents' Learning Allowance +89 +89 +89 +90 +90 +91 +91
Adult Dependants' Grant +3 +3 +13 +13 +13 +13 +11
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Government balance, each component counted once

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once -£83.5m -£89.6m -£94.2m -£98.4m -£102.5m -£106.6m -£109.1m
Government spending +£52.9m † +£52.4m † +£52.4m † +£53.5m † +£55.5m † +£51.1m † +£50.6m †
Government balance, each receipt once -£136.4m † -£142.1m † -£146.6m † -£151.9m † -£157.9m † -£157.8m † -£159.6m †

Model totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax -£83.5m -£89.6m -£94.2m -£98.4m -£102.5m -£106.6m -£109.1m
household_tax -£9.4m -£13.3m -£16.0m -£18.2m -£19.1m -£21.2m -£21.2m
pre_budget_change_household_tax -£10.6m -£14.5m -£17.2m -£19.1m -£20.0m -£22.1m -£24.8m
gov_spending +£52.9m † +£52.4m † +£52.4m † +£53.5m † +£55.5m † +£51.1m † +£50.6m †
household_benefits +£52.9m † +£52.4m † +£52.4m † +£53.5m † +£55.5m † +£51.1m † +£50.6m †
gov_balance -£136.4m † -£142.1m † -£146.6m † -£151.9m † -£157.9m † -£157.8m † -£159.6m †

Components the model counts twice

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
corporate_sdlt, counted again inside expected_sdlt -£355 +£321 -£518 +£349 -£217 +£255 +£468

Household income totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income +£165.3m +£170.2m +£177.5m +£185.3m +£185.3m +£193.4m +£200.0m
Household net income +£232.8m † +£241.3m † +£251.5m † +£262.7m † +£273.5m † +£279.5m † +£286.1m †
Household net income (HBAI definition) -£0.6m -£1.0m -£0.8m -£0.2m +£0.2m -£5.2m -£10.3m

Population

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People +4.0k +4.0k +4.0k +4.0k +4.1k +4.1k +4.1k
Benefit units +191 +192 +193 +194 +194 +195 +196
Households +852 +855 +858 +861 +865 +869 +873

Poverty rates

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp
Absolute poverty, before housing costs: children +0.00pp +0.00pp +0.00pp +0.01pp +0.00pp +0.01pp +0.01pp
Absolute poverty, before housing costs: working-age adults +0.01pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp
Absolute poverty, before housing costs: pensioners -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp
Absolute poverty, after housing costs: everyone +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp
Absolute poverty, after housing costs: children -0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp
Absolute poverty, after housing costs: working-age adults +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp
Absolute poverty, after housing costs: pensioners -0.01pp -0.01pp -0.01pp -0.01pp -0.01pp -0.01pp -0.01pp
Relative poverty, before housing costs: everyone -0.00pp +0.01pp +0.01pp +0.00pp +0.00pp +0.01pp +0.00pp
Relative poverty, before housing costs: children +0.00pp +0.01pp +0.01pp +0.01pp +0.01pp +0.01pp +0.01pp
Relative poverty, before housing costs: working-age adults -0.00pp +0.00pp +0.01pp +0.01pp +0.00pp +0.01pp +0.01pp
Relative poverty, before housing costs: pensioners -0.03pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp
Relative poverty, after housing costs: everyone -0.00pp -0.01pp +0.00pp +0.00pp +0.00pp -0.00pp -0.01pp
Relative poverty, after housing costs: children +0.00pp -0.01pp +0.01pp +0.01pp +0.01pp -0.00pp +0.01pp
Relative poverty, after housing costs: working-age adults -0.00pp -0.01pp +0.00pp +0.00pp +0.01pp +0.00pp -0.01pp
Relative poverty, after housing costs: pensioners -0.01pp -0.02pp -0.01pp -0.01pp -0.01pp -0.02pp -0.02pp

People in poverty

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone +3.7k +2.7k +2.8k +3.4k +3.3k +3.4k +3.6k
Absolute poverty, before housing costs: children +1.8k +1.5k +1.7k +1.8k +1.7k +1.9k +1.9k
Absolute poverty, before housing costs: working-age adults +2.2k +1.5k +1.4k +1.8k +1.8k +1.9k +2.0k
Absolute poverty, before housing costs: pensioners -303 -216 -220 -229 -235 -282 -294
Absolute poverty, after housing costs: everyone +2.0k +2.4k +2.6k +2.8k +2.2k +1.9k +1.5k
Absolute poverty, after housing costs: children +1.4k +1.6k +1.8k +1.9k +1.7k +1.6k +1.5k
Absolute poverty, after housing costs: working-age adults +1.5k +1.4k +1.5k +1.6k +1.2k +1.1k +678
Absolute poverty, after housing costs: pensioners -854 -652 -742 -691 -710 -725 -708
Relative poverty, before housing costs: everyone -2.0k +4.3k +4.4k +4.2k +3.8k +4.6k +4.1k
Relative poverty, before housing costs: children +1.6k +2.4k +2.5k +2.1k +2.0k +2.1k +2.0k
Relative poverty, before housing costs: working-age adults -226 +2.1k +2.2k +2.3k +2.0k +2.7k +2.3k
Relative poverty, before housing costs: pensioners -3.3k -191 -232 -229 -254 -266 -278
Relative poverty, after housing costs: everyone +73 -5.9k +3.1k +3.4k +3.9k +784 -6.9k
Relative poverty, after housing costs: children +1.8k -252 +2.0k +2.1k +2.2k +1.2k +2.1k
Relative poverty, after housing costs: working-age adults -987 -3.7k +1.9k +2.1k +2.3k +1.2k -6.7k
Relative poverty, after housing costs: pensioners -745 -1.9k -775 -747 -643 -1.7k -2.3k

Inequality

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs +0.0000 +0.0000 +0.0000 +0.0000 +0.0000 +0.0000 +0.0000

Mean household net income in each side's own deciles

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household +£1.28 † +£11 † -£14 † -£2.49 † +£10 † +£3.72 † +£7.10 †
Decile 2: mean household_net_income per household -£2.71 † -£15 † +£11 † -£37 † -£20 † -£40 † -£6.04 †
Decile 3: mean household_net_income per household +£8.85 † +£2.52 † +£4.15 † +£43 † +£7.10 † +£40 † +£2.74 †
Decile 4: mean household_net_income per household -£3.45 † +£1.95 † -£5.18 † -£2.31 † -£3.85 † -£18 † -£4.41 †
Decile 5: mean household_net_income per household +£5.53 † -£5.27 † -£1.54 † -£2.90 † -£2.80 † -£82 † -£2.33 †
Decile 6: mean household_net_income per household +£2.51 † +£11 † +£7.11 † -£159 † +£15 † +£81 † +£25 †
Decile 7: mean household_net_income per household +£0.21 † -£20 † +£10 † +£175 † -£0.89 † +£0.84 † -£6.49 †
Decile 8: mean household_net_income per household +£28 † +£8.98 † -£27 † -£20 † +£1.92 † +£2.59 † -£18 †
Decile 9: mean household_net_income per household -£36 † +£3.08 † +£34 † +£13 † +£13 † +£163 † +£8.25 †
Decile 10: mean household_net_income per household +£133 † +£134 † +£59 † +£60 † +£69 † -£53 † +£68 †

Standard reform costings (change in gov_balance)

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp -£0.5m -£0.5m -£0.5m -£0.5m -£0.5m -£0.5m -£0.6m
Raise higher rate by 1pp -£0.3m -£0.4m -£0.4m -£0.5m -£0.5m -£0.6m -£0.6m
Raise personal allowance by ~800GBP/year +£0.5m +£0.5m +£0.5m +£0.4m +£0.4m +£0.5m +£0.2m
Raise child benefit by 25GBP/week per additional child +£22,707 +£53,456 +£58,203 +£37,080 +£43,394 +£43,325 +£60,392
Reduce Universal Credit taper rate to 20% +£6.7m +£7.2m +£7.1m +£7.3m +£7.7m +£7.8m +£7.7m
Raise Class 1 main employee NICs rate to 10% -£1.7m -£1.7m -£1.7m -£1.9m -£1.9m -£2.0m -£2.1m
Raise VAT standard rate by 2pp -£5.5m -£5.6m -£5.8m -£5.9m -£6.0m -£6.2m -£6.3m
Raise additional rate by 3pp -£0.6m -£0.6m -£0.6m -£0.6m -£0.5m -£0.5m -£0.5m
Raise the Universal Credit standard allowance by 10% -£0.8m -£0.8m -£0.8m -£0.8m -£0.8m -£0.9m -£0.9m
Raise the State Pension by 10% -£1.4m -£1.7m -£1.8m -£1.7m -£2.0m -£2.1m -£2.2m

Standard reforms: change in each reform's target

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax -£0.6m -£0.6m -£0.6m -£0.6m -£0.6m -£0.7m -£0.7m
Raise higher rate by 1pp: change in income_tax -£0.3m -£0.4m -£0.5m -£0.5m -£0.6m -£0.7m -£0.7m
Raise personal allowance by ~800GBP/year: change in income_tax +£0.5m +£0.6m +£0.6m +£0.5m +£0.5m +£0.5m +£0.2m
Raise child benefit by 25GBP/week per additional child: change in child_benefit +£0.9m +£0.6m +£0.6m +£0.6m +£0.5m +£0.5m +£0.4m
Reduce Universal Credit taper rate to 20%: change in universal_credit -£6.9m -£7.4m -£7.4m -£7.6m -£8.0m -£8.1m -£8.0m
Raise Class 1 main employee NICs rate to 10%: change in national_insurance -£1.9m -£2.0m -£2.1m -£2.1m -£2.2m -£2.2m -£2.3m
Raise VAT standard rate by 2pp: change in vat -£5.5m -£5.6m -£5.7m -£5.9m -£6.0m -£6.2m -£6.3m
Raise additional rate by 3pp: change in income_tax -£0.6m -£0.6m -£0.6m -£0.6m -£0.5m -£0.5m -£0.5m
Raise the Universal Credit standard allowance by 10%: change in universal_credit +£0.8m +£0.9m +£0.8m +£0.8m +£0.8m +£0.9m +£0.9m
Raise the State Pension by 10%: change in state_pension +£1.3m +£1.4m +£1.2m +£1.4m +£1.4m +£1.4m +£1.5m

Household net income by decile

The datasets hold different households, so households are not matched; compare the mean income in each side's own deciles.

Checks failing on both base and head (4)
  • Each model total's components are exactly the partition's heads and declared double counts (closure): gov_spending: the partition puts 'healthy_start_vouchers' in this total, but the model does not add it; gov_spending: the partition puts 'scottish_child_payment' in this total, but the model does not add it; gov_spending: the partition puts 'statutory_paternity_pay' in this total, but the model does not add it
  • VAT is never negative (sign:vat): 2025-26: 77 units below zero, a weighted £-87,101,044 in total; 2026-27: 77 units below zero, a weighted £-89,442,970 in total; 2027-28: 77 units below zero, a weighted £-91,569,387 in total
  • The partition's heads and declared double counts add up to gov_spending (identity:gov_spending): 2025-26: 401 households differ, by a weighted £595,930,811 in total (households holding a figure from fewer than 10 records aren't checked this year); 2026-27: 403 households differ, by a weighted £619,424,366 in total (households holding a figure from fewer than 10 records aren't checked this year); 2027-28: 403 households differ, by a weighted £634,675,919 in total (households holding a figure from fewer than 10 records aren't checked this year)
  • The partition's heads and declared double counts add up to household_benefits (identity:household_benefits): 2025-26: 2,105 households differ, by a weighted £92,271,859 in total (households holding a figure from fewer than 10 records aren't checked this year); 2026-27: 2,066 households differ, by a weighted £94,096,152 in total (households holding a figure from fewer than 10 records aren't checked this year); 2027-28: 2,012 households differ, by a weighted £94,329,113 in total (households holding a figure from fewer than 10 records aren't checked this year)
Counted-once check

Counted-once check not run: not requested.

Provenance
Side Commit Runtime Environment hash Partition hash Time
base policyengi uk 2.122.2 (files 0cb87d75a516), core 3.32.13, py 3.13.16 x86_64 e62eb389ee42 e8ea8a019873 193.28s
head policyengi uk 2.122.2 (files 0cb87d75a516), core 3.32.13, py 3.13.16 x86_64 038f9f2c132e e8ea8a019873 266.2s

Base dataset: enhanced_frs_2024_25.h5, sha256 cc323cce29c7a6f8d2382792632dc8889fefae4daa1582a3625c64fa1ae70293, the base's build.

Head dataset: enhanced_frs_2024_25.h5, sha256 66b4ac5907355837f8c16f50bab5adfdfa48d9de4f4cc085b49249a06d712ea8, this pull request's build.

Runtime differences:

  • policyengine-uk-data==1.58.1 -> policyengine-uk-data==1.58.2
Receipts by tax head: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Income tax £280.80bn £299.16bn £314.20bn £327.75bn £342.73bn £359.14bn £377.84bn
National Insurance (employee and self-employed) £49.13bn £51.26bn £52.95bn £54.49bn £56.33bn £58.08bn £60.33bn
National Insurance (employer) £144.61bn £150.78bn £155.47bn £159.80bn £166.20bn £171.41bn £178.16bn
Employer NI change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Employer NI change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Capital gains tax £52.38bn £54.37bn £56.58bn £58.82bn £61.07bn £63.55bn £66.01bn
Student loan repayments £7.37bn £7.65bn £7.86bn £8.06bn £8.27bn £8.51bn £8.05bn
VAT £310.52bn £318.87bn £326.45bn £334.31bn £342.50bn £350.92bn £359.48bn
Change in VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
VAT on private school fees £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.04bn £24.14bn £26.10bn £26.16bn £25.89bn £25.24bn £25.82bn
Alcohol duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tobacco duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Vehicle excise duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.40bn £4.56bn £4.58bn £4.60bn £4.62bn £4.64bn £4.66bn
Council tax £47.61bn £50.38bn £53.57bn £57.02bn £60.47bn £64.06bn £64.34bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.63bn £0.65bn £0.67bn £0.68bn
Northern Ireland domestic rates £1.11bn £1.17bn £1.22bn £1.28bn £1.34bn £1.41bn £1.41bn
Business rates £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn
Stamp duty land tax (own purchases, and corporate until the £19.53bn £20.40bn £21.37bn £22.33bn £23.33bn £24.43bn £25.62bn
Land transaction tax (Wales) £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Land and buildings transaction tax (Scotland) £0.06bn £0.06bn £0.06bn £0.06bn £0.07bn £0.07bn £0.07bn
Unspecified tax change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Unspecified tax change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax excluding the main residence £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land value tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Carbon tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Spending by benefit and service: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension £129.25bn £134.11bn £136.26bn £138.41bn £142.49bn £146.71bn £151.03bn
Pension Credit £6.50bn £7.11bn £7.00bn £7.06bn £7.17bn £7.28bn £7.30bn
Winter Fuel Payment £1.64bn £1.61bn £1.56bn £1.54bn £1.53bn £1.53bn £1.52bn
Pension Age Winter Heating Payment (Scotland) £0.09bn £0.09bn £0.09bn £0.10bn £0.10bn £0.10bn £0.10bn
Universal Credit £77.61bn £81.74bn £83.52bn £85.03bn £86.00bn £83.29bn £83.80bn
Housing Benefit £8.29bn £8.61bn £8.81bn £8.99bn £9.26bn £9.50bn £9.47bn
Council Tax Reduction £2.15bn £2.20bn £2.27bn £2.33bn £2.40bn £2.47bn £2.44bn
Employment and Support Allowance (income-related) £3.24bn £3.33bn £3.41bn £3.48bn £3.57bn £3.65bn £3.74bn
Employment and Support Allowance (contribution-based) £4.57bn £4.69bn £4.80bn £4.92bn £5.04bn £5.16bn £5.29bn
Jobseeker's Allowance (income-based) £0.05bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Jobseeker's Allowance (contribution-based) £0.30bn £0.30bn £0.31bn £0.32bn £0.33bn £0.33bn £0.34bn
Income Support £0.17bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Working Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Incapacity Benefit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Personal Independence Payment £30.49bn £31.77bn £32.62bn £33.41bn £34.23bn £35.07bn £35.92bn
Disability Living Allowance £8.10bn £8.45bn £8.67bn £8.88bn £9.10bn £9.32bn £9.55bn
Attendance Allowance £7.45bn £7.76bn £7.97bn £8.16bn £8.36bn £8.56bn £8.77bn
Carer's Allowance £3.96bn £4.13bn £4.24bn £4.34bn £4.44bn £4.55bn £4.66bn
Carer Support Payment (Scotland) £0.35bn £0.37bn £0.38bn £0.39bn £0.40bn £0.41bn £0.42bn
Carer's Allowance Supplement (Scotland) £0.00bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Severe Disablement Allowance £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.04bn £0.04bn
Industrial Injuries Disablement Benefit £0.59bn £0.61bn £0.62bn £0.63bn £0.65bn £0.67bn £0.68bn
Armed Forces Compensation Scheme £0.54bn £0.55bn £0.56bn £0.58bn £0.59bn £0.61bn £0.62bn
Child Benefit £16.32bn £16.96bn £17.39bn £17.78bn £18.19bn £18.62bn £19.03bn
Scottish Child Payment £0.54bn £0.56bn £0.58bn £0.59bn £0.60bn £0.61bn £0.62bn
Two Child Limit Payment (Scotland, counterfactual) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Healthy Start vouchers £0.06bn £0.06bn £0.06bn £0.06bn £0.06bn £0.06bn £0.06bn
Maternity Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Maternity Pay £3.42bn £3.51bn £3.59bn £3.68bn £3.77bn £3.86bn £3.96bn
Statutory Paternity Pay £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Sick Pay £0.94bn £0.97bn £0.99bn £1.02bn £1.04bn £1.07bn £1.09bn
Sure Start Maternity Grant £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Bereavement Support Payment £1.11bn £1.14bn £1.17bn £1.20bn £1.23bn £1.26bn £1.29bn
Tax-Free Childcare £0.44bn £0.43bn £0.44bn £0.45bn £0.45bn £0.46bn £0.47bn
Extended childcare entitlement £3.81bn £4.22bn £4.36bn £4.47bn £4.58bn £4.77bn £4.89bn
Universal childcare entitlement £1.51bn £1.59bn £1.64bn £1.67bn £1.72bn £1.75bn £1.79bn
Targeted childcare entitlement £0.35bn £0.36bn £0.37bn £0.38bn £0.39bn £0.39bn £0.39bn
Care to Learn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Childcare Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Parents' Learning Allowance £0.19bn £0.19bn £0.19bn £0.19bn £0.19bn £0.20bn £0.20bn
Adult Dependants' Grant £0.06bn £0.06bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Travel Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
NHS spending £204.25bn £205.03bn £205.79bn £206.61bn £207.52bn £208.46bn £209.35bn
State education spending £0.13bn £0.13bn £0.13bn £0.13bn £0.14bn £0.14bn £0.14bn
Transport subsidy spending £25.15bn £25.25bn £25.34bn £25.44bn £25.55bn £25.67bn £30.94bn
Cost-of-living support payment £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Bills Rebate £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Price Guarantee subsidy £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disability basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Other public spending budget change £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Caseloads: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension 11,373k 11,266k 11,022k 10,926k 10,974k 11,024k 11,071k
Pension Credit 1,356k 1,377k 1,331k 1,310k 1,310k 1,307k 1,290k
Winter Fuel Payment 6,973k 6,850k 6,628k 6,501k 6,481k 6,449k 6,438k
Pension Age Winter Heating Payment (Scotland) 708k 701k 687k 681k 684k 687k 690k
Universal Credit 6,291k 6,320k 6,343k 6,346k 6,324k 6,313k 6,291k
Housing Benefit 1,199k 1,196k 1,191k 1,183k 1,189k 1,188k 1,186k
Council Tax Reduction 3,556k 3,586k 3,626k 3,650k 3,673k 3,694k 3,667k
Employment and Support Allowance (income-related) 313k 315k 316k 317k 318k 320k 321k
Employment and Support Allowance (contribution-based) 644k 646k 648k 651k 654k 657k 660k
Jobseeker's Allowance (income-based) 10k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 62k 62k 62k 63k 63k 63k 63k
Income Support 27k 0k 0k 0k 0k 0k 0k
Working Tax Credit 0k 0k 0k 0k 0k 0k 0k
Child Tax Credit 0k 0k 0k 0k 0k 0k 0k
Incapacity Benefit 0k 0k 0k 0k 0k 0k 0k
Personal Independence Payment 4,137k 4,152k 4,168k 4,184k 4,203k 4,222k 4,240k
Disability Living Allowance 1,325k 1,330k 1,335k 1,341k 1,347k 1,353k 1,358k
Attendance Allowance 1,469k 1,475k 1,480k 1,486k 1,493k 1,499k 1,506k
Carer's Allowance 914k 918k 921k 925k 929k 933k 937k
Carer Support Payment (Scotland) 82k 82k 82k 83k 83k 83k 84k
Carer's Allowance Supplement (Scotland) 0k 82k 82k 83k 83k 83k 84k
Severe Disablement Allowance 5k 5k 5k 5k 5k 5k 5k
Industrial Injuries Disablement Benefit 150k 150k 151k 152k 152k 153k 154k
Armed Forces Compensation Scheme 60k 61k 61k 61k 61k 62k 62k
Child Benefit 7,926k 7,940k 7,955k 7,981k 7,999k 8,031k 8,046k
Scottish Child Payment 380k 382k 383k 385k 383k 385k 383k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 228k 229k 230k 230k 231k 233k 234k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 283k 285k 286k 287k 288k 289k 291k
Statutory Paternity Pay 0k 0k 0k 0k 0k 0k 0k
Statutory Sick Pay 147k 148k 148k 149k 150k 150k 151k
Sure Start Maternity Grant 23k 23k 23k 23k 23k 23k 23k
Bereavement Support Payment 182k 183k 184k 184k 185k 186k 187k
Tax-Free Childcare 957k 941k 943k 949k 920k 935k 928k
Extended childcare entitlement 798k 789k 797k 801k 801k 820k 825k
Universal childcare entitlement 439k 449k 451k 452k 454k 453k 455k
Targeted childcare entitlement 72k 72k 73k 73k 73k 72k 71k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 94k 95k 95k 96k 96k 96k 97k
Adult Dependants' Grant 17k 17k 15k 15k 15k 15k 15k
Travel Grant 0k 0k 0k 0k 0k 0k 0k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund 0k 0k 0k 0k 0k 0k 0k
Cost-of-living support payment 0k 0k 0k 0k 0k 0k 0k
Energy Bills Rebate 0k 0k 0k 0k 0k 0k 0k
Energy Price Guarantee subsidy 0k 0k 0k 0k 0k 0k 0k
Basic income 0k 0k 0k 0k 0k 0k 0k
Disability basic income 0k 0k 0k 0k 0k 0k 0k
Government balance, each component counted once: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once £973.31bn £1,014.54bn £1,052.16bn £1,087.06bn £1,125.20bn £1,163.88bn £1,204.23bn
Government spending £543.65bn † £558.00bn † £565.27bn † £572.38bn † £581.21bn † £586.67bn † £600.03bn †
Government balance, each receipt once £429.66bn † £456.55bn † £486.88bn † £514.68bn † £543.99bn † £577.20bn † £604.20bn †
Benefits in household_benefits but not in gov_spending £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Model totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax £976.44bn £1,017.67bn £1,055.29bn £1,090.19bn £1,128.33bn £1,167.01bn £1,207.36bn
household_tax £521.31bn £548.02bn £573.37bn £596.07bn £619.63bn £644.68bn £669.72bn
pre_budget_change_household_tax £513.94bn £540.37bn £565.50bn £587.38bn £610.71bn £635.50bn £660.98bn
gov_spending £543.65bn † £558.00bn † £565.27bn † £572.38bn † £581.21bn † £586.67bn † £600.03bn †
household_benefits £543.65bn † £558.00bn † £565.27bn † £572.38bn † £581.21bn † £586.67bn † £600.03bn †
gov_balance £432.79bn † £459.68bn † £490.01bn † £517.81bn † £547.12bn † £580.33bn † £607.33bn †
Components the model counts twice: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
corporate_sdlt, counted again inside expected_sdlt £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn
Household income totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income £1,723.61bn £1,787.59bn £1,843.06bn £1,896.57bn £1,964.02bn £2,025.56bn £2,100.16bn
Household net income £1,706.42bn † £1,756.54bn † £1,792.80bn † £1,829.65bn † £1,867.87bn † £1,908.51bn † £1,968.99bn †
Household net income (HBAI definition) £1,365.15bn £1,409.07bn £1,440.53bn £1,471.20bn £1,502.20bn £1,534.63bn £1,582.82bn
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 69,626k 69,890k 70,149k 70,430k 70,740k 71,058k 71,364k
Benefit units 38,268k 38,413k 38,555k 38,709k 38,880k 39,055k 39,223k
Households 31,379k 31,498k 31,615k 31,741k 31,881k 32,024k 32,162k
Poverty rates: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 21.7% 20.9% 21.2% 21.3% 21.5% 21.8% 21.3%
Absolute poverty, before housing costs: children 28.9% 27.0% 27.3% 27.2% 27.5% 27.9% 27.5%
Absolute poverty, before housing costs: working-age adults 20.5% 20.1% 20.4% 20.6% 20.8% 21.2% 20.6%
Absolute poverty, before housing costs: pensioners 16.8% 16.0% 15.8% 15.9% 15.9% 16.1% 15.9%
Absolute poverty, after housing costs: everyone 27.1% 26.2% 26.7% 26.9% 27.2% 27.9% 27.5%
Absolute poverty, after housing costs: children 37.8% 35.7% 36.3% 36.5% 37.0% 38.3% 37.9%
Absolute poverty, after housing costs: working-age adults 26.4% 26.1% 26.6% 26.9% 27.1% 27.8% 27.3%
Absolute poverty, after housing costs: pensioners 16.1% 14.4% 14.2% 14.4% 14.4% 14.5% 14.3%
Relative poverty, before housing costs: everyone 18.4% 18.0% 18.2% 18.3% 18.4% 18.4% 18.4%
Relative poverty, before housing costs: children 24.1% 22.6% 22.8% 22.8% 23.0% 22.9% 23.2%
Relative poverty, before housing costs: working-age adults 17.9% 17.8% 18.0% 18.1% 18.2% 18.3% 18.1%
Relative poverty, before housing costs: pensioners 13.3% 13.0% 12.7% 12.7% 12.8% 12.5% 12.8%
Relative poverty, after housing costs: everyone 23.6% 23.0% 23.2% 23.2% 23.4% 23.5% 23.6%
Relative poverty, after housing costs: children 33.5% 31.3% 31.4% 31.3% 31.5% 31.7% 31.9%
Relative poverty, after housing costs: working-age adults 23.5% 23.3% 23.6% 23.7% 23.8% 24.1% 24.0%
Relative poverty, after housing costs: pensioners 11.5% 10.8% 10.5% 10.5% 10.5% 10.3% 10.5%
People in poverty: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 15,083k 14,617k 14,838k 14,999k 15,192k 15,494k 15,221k
Absolute poverty, before housing costs: children 4,322k 4,044k 4,102k 4,111k 4,170k 4,260k 4,209k
Absolute poverty, before housing costs: working-age adults 8,804k 8,723k 8,953k 9,107k 9,233k 9,419k 9,214k
Absolute poverty, before housing costs: pensioners 1,957k 1,850k 1,783k 1,782k 1,790k 1,815k 1,798k
Absolute poverty, after housing costs: everyone 18,864k 18,339k 18,700k 18,980k 19,237k 19,850k 19,628k
Absolute poverty, after housing costs: children 5,649k 5,360k 5,461k 5,522k 5,610k 5,845k 5,795k
Absolute poverty, after housing costs: working-age adults 11,341k 11,310k 11,633k 11,850k 12,006k 12,367k 12,215k
Absolute poverty, after housing costs: pensioners 1,874k 1,670k 1,607k 1,608k 1,621k 1,639k 1,618k
Relative poverty, before housing costs: everyone 12,844k 12,603k 12,756k 12,869k 12,985k 13,050k 13,121k
Relative poverty, before housing costs: children 3,595k 3,387k 3,434k 3,452k 3,489k 3,496k 3,556k
Relative poverty, before housing costs: working-age adults 7,698k 7,714k 7,882k 7,992k 8,063k 8,139k 8,116k
Relative poverty, before housing costs: pensioners 1,552k 1,502k 1,439k 1,425k 1,433k 1,416k 1,449k
Relative poverty, after housing costs: everyone 16,442k 16,051k 16,263k 16,371k 16,526k 16,730k 16,810k
Relative poverty, after housing costs: children 5,004k 4,698k 4,729k 4,732k 4,785k 4,836k 4,890k
Relative poverty, after housing costs: working-age adults 10,094k 10,104k 10,346k 10,464k 10,563k 10,736k 10,731k
Relative poverty, after housing costs: pensioners 1,345k 1,249k 1,187k 1,176k 1,178k 1,158k 1,190k
Inequality: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs 0.3340 0.3319 0.3328 0.3337 0.3340 0.3358 0.3346
Mean household net income in each side's own deciles: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household £21,870 † £22,412 † £22,743 † £23,081 † £23,599 † £23,843 † £24,386 †
Decile 2: mean household_net_income per household £31,220 † £31,666 † £32,094 † £32,315 † £32,691 † £33,285 † £34,412 †
Decile 3: mean household_net_income per household £37,355 † £39,351 † £39,439 † £40,327 † £40,886 † £41,287 † £42,180 †
Decile 4: mean household_net_income per household £41,583 † £42,526 † £43,576 † £44,266 † £44,989 † £45,293 † £46,653 †
Decile 5: mean household_net_income per household £46,521 † £48,509 † £49,283 † £49,775 † £50,553 † £51,225 † £52,275 †
Decile 6: mean household_net_income per household £49,452 † £50,152 † £50,930 † £52,105 † £52,904 † £53,949 † £55,709 †
Decile 7: mean household_net_income per household £55,352 † £56,958 † £58,264 † £59,103 † £60,165 † £61,444 † £63,339 †
Decile 8: mean household_net_income per household £64,803 † £66,218 † £67,196 † £68,399 † £69,437 † £70,951 † £72,765 †
Decile 9: mean household_net_income per household £78,038 † £79,899 † £81,311 † £82,644 † £84,052 † £85,484 † £88,081 †
Decile 10: mean household_net_income per household £122,633 † £125,624 † £128,008 † £130,219 † £132,466 † £135,234 † £138,747 †
Standard reform costings (change in gov_balance): head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp £5.79bn £6.06bn £6.25bn £6.44bn £6.63bn £6.85bn £7.10bn
Raise higher rate by 1pp £3.47bn £3.74bn £3.96bn £4.17bn £4.41bn £4.68bn £4.88bn
Raise personal allowance by ~800GBP/year £-3.49bn £-3.59bn £-3.69bn £-3.75bn £-3.81bn £-3.88bn £-1.63bn
Raise child benefit by 25GBP/week per additional child £-2.07bn £-1.83bn £-1.71bn £-1.61bn £-1.50bn £-1.39bn £-1.28bn
Reduce Universal Credit taper rate to 20% £-16.56bn £-17.19bn £-17.43bn £-17.63bn £-17.69bn £-17.90bn £-17.92bn
Raise Class 1 main employee NICs rate to 10% £10.25bn £10.66bn £10.96bn £11.20bn £11.48bn £11.78bn £12.21bn
Raise VAT standard rate by 2pp £30.62bn £31.44bn £32.19bn £32.97bn £33.77bn £34.60bn £35.45bn
Raise additional rate by 3pp £3.06bn £3.29bn £3.48bn £3.67bn £3.90bn £4.13bn £4.46bn
Raise the Universal Credit standard allowance by 10% £-2.92bn £-3.06bn £-3.11bn £-3.16bn £-3.19bn £-3.23bn £-3.27bn
Raise the State Pension by 10% £-9.42bn £-9.65bn £-9.72bn £-9.80bn £-10.03bn £-10.27bn £-10.54bn
Standard reforms: change in each reform's target: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax £5.90bn £6.17bn £6.38bn £6.57bn £6.77bn £6.99bn £7.24bn
Raise higher rate by 1pp: change in income_tax £3.47bn £3.75bn £3.97bn £4.18bn £4.42bn £4.69bn £4.89bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.56bn £-3.67bn £-3.77bn £-3.83bn £-3.89bn £-3.97bn £-1.67bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.51bn £2.30bn £2.17bn £2.05bn £1.94bn £1.82bn £1.70bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £16.60bn £17.23bn £17.47bn £17.67bn £17.74bn £17.94bn £17.96bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £10.44bn £10.84bn £11.15bn £11.42bn £11.71bn £12.01bn £12.45bn
Raise VAT standard rate by 2pp: change in vat £30.62bn £31.44bn £32.19bn £32.97bn £33.77bn £34.60bn £35.45bn
Raise additional rate by 3pp: change in income_tax £3.06bn £3.29bn £3.48bn £3.67bn £3.90bn £4.13bn £4.46bn
Raise the Universal Credit standard allowance by 10%: change in universal_credit £2.92bn £3.07bn £3.12bn £3.17bn £3.20bn £3.23bn £3.28bn
Raise the State Pension by 10%: change in state_pension £12.92bn £13.41bn £13.63bn £13.84bn £14.25bn £14.67bn £15.10bn

MaxGhenis and others added 8 commits October 15, 2026 15:35
Per-target errors could not be published safely: the dataset repeats
households (output-area clones, SPI and CGT donors), so a row count is
not a respondent count, and one household can dominate a target. The fit
summary now holds only within-10% booleans, and a national target that
leaves the band on the head is flagged in place of an error rise of more
than 0.2. On the five same-code builds, 1 to 10 of 644 national targets
leave the band per pair (mean 4.5). The records column in the calibration
log is reverted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…son (delta review of #600)

The measurement downloads the ONS projection, so it now runs after the
test suite with if: !cancelled(): an ONS outage no longer skips the tests
and the fit summary. A crashed distribution comparison writes a FAIL line
into the comment, and the final error names both checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	.github/workflows/pull_request.yaml
The within-10% boolean could not see a target worsening outside the band.
The summary now holds each target's error band (within 10%, 10-25%,
25-50%, 50-100%, over 100%), still a bound and not a value, and flags a
national target whose band is worse on the head: 2 to 12 per same-code
pair (mean 7). Also: repeated local targets are refused; the fit summary
runs after the tests with !cancelled(); data jobs restore but never save
uv's cache; fit_policy.yaml records the run ids, the log folders and the
status of the replacement rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…view 2 of #600)

The head's distribution measurement now has continue-on-error: a missing
report already fails the comparison, so an ONS outage no longer turns the
test job red. A missing report gets its own FAIL heading in the comment.
A test pins the step order and conditions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ggregates independent (review of #602)

A crashed aggregate comparison now sets the failure status first and writes
its own FAIL heading; a missing result says so under a heading too. The
base build's aggregate steps run whatever its distribution measurement
did. A measurement that writes no result warns instead of failing at cp,
and the final error names every check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
That head records local installs and fingerprints the model at both ends
of a measurement, so this PR's CI runs the identity checks the batch will.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 4 commits October 15, 2026 23:17
…eview of #600)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…iring (delta review of #602)

- The tool pin moves to 5d5558ed, which refuses any non-index install and
  fingerprints the model before the simulation is built.
- The head's tool checkout and aggregate measurement have
  continue-on-error: a missing result fails the comparison instead.
- A test pins one tool commit across all three checkouts, !cancelled() on
  every aggregate step, and the crash fallback's status line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5d5558ed published totals less their suppressed heads, which policyengine-uk#2335's
re-reviews 6 and 7 showed can leak; 6406b2ce rebuilds them from their published
parts and withholds reform figures from small cells. Every checkout of the tool
still uses one full SHA (test_fit_report).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit efab491 into main Oct 19, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant