Skip to content

Fill benunit_reported_capital from FRS benefit-unit capital, so UC uses it too - #552

Draft
MaxGhenis wants to merge 1 commit into
mainfrom
frs-benunit-reported-capital
Draft

MaxGhenis wants to merge 1 commit into
mainfrom
frs-benunit-reported-capital

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Depends on PolicyEngine/policyengine-uk#2201, which adds the benunit_reported_capital input. This PR needs a policyengine-uk release containing #2201 and a lock bump to it; until then CI fails on the new variable. Like every uk-data merge, it lands with the next batched data release on Max's go (the d833 pattern). Draft until the rebuild below is done.

Why

uk-data#513 gave Pension Credit the FRS's own benefit-unit capital (TOTCAPB4). Universal Credit still takes capital from the household wealth imputation. In policyengine-uk, uc_assessable_capital uses uc_reported_capital when it is 0 or more. Otherwise it shares the household's savings, other residential and non-residential property and corporate_wealth among the claimants and partners of unreported benefit units, and adds person-level sources such as a Lifetime ISA. is_uc_eligible then requires assessable capital of at most £16,000, and uc_tariff_income charges £4.35 a month per £250 above £6,000. In 1.58.0 no benefit unit records UC capital, so the proxy applies everywhere.

On the published 1.58.0 dataset (policyengine-uk main 2.123.7, 2026, child-weighted over households in absolute BHC poverty):

  • FRS-row households: 34.4% have UC assessable capital above £16,000 (mean £166k), and 61.6% receive UC.
  • SPI-synthetic households: 44.3% are above £16,000 (mean £240k), and 45.5% receive UC.

The household imputation predicts wealth from income, composition, tenure and region, and has no information on means-tested receipt.

Following Max's direction ("the microdata should just populate the inputs"), the data now records the observed capital once. policyengine-uk#2201 makes uc_reported_capital and pension_credit_reported_capital formulas of it, rather than this build writing into each programme's column.

What changes

  • create_frs writes benunit_reported_capital = FRS TOTCAPB4 for every benefit unit, in place of pension_credit_reported_capital. The source and method are Use the FRS benefit-unit capital for Pension Credit's capital test #513's, unchanged: TOTCAPB3 for earlier survey years, and -1 where both are missing or negative.
    • FRS documentation defines both as the total asset worth "for adults in BU", from the ACCOUNTS and ASSETS tables (DV summary workbooks, FRS 2019-20 and 2023-24). UC assesses the claimant's and partner's capital together and does not count a child's (WRA 2012 s.5; UC Regs 2013 reg 18; ADM H1077).
    • It is an approximation of UC capital, not the assessed figure. It covers financial assets only: second homes and land, which UC also counts (reg 46), are not in it. No Schedule 10 disregard is applied.
  • Pension Credit is unchanged. policyengine-uk derives pension_credit_reported_capital from the same input, with the same values and the same uprating. On the 1.58.0 data, Pension Credit and Housing Benefit totals are identical to main for 2024 to 2026 (table below).
  • SPI-synthetic copies (impute_income) get -1 in every recorded-capital column (REPORTED_CAPITAL_COLUMNS), so they fall back to the household proxy, as in Use the FRS benefit-unit capital for Pension Credit's capital test #513.
  • uprating_factors.csv and uprating_growth_factors.csv: the pension_credit_reported_capital row becomes benunit_reported_capital, with the same per-capita GDP values. The two programme variables are formulas in policyengine-uk, so create_policyengine_uprating_factors_table no longer emits rows for them. A test checks the row against the model.
  • Unchanged: savings and the other wealth columns, so wealth analyses still use the WAS imputation.

Measured: static, on 1.58.0 (real runs; rebuild pending)

Setup: 1.58.0's own pension_credit_reported_capital column already holds exactly what this build writes: TOTCAPB4, -1 on SPI-synthetic copies, uprated by the same row.

  • Branch data: that column stored as benunit_reported_capital, with the Pension Credit column dropped (make_branch_dataset.py).
  • Branch run: policyengine-uk #2201 at 098c29fed on the branch data, at 1.58.0's calibrated weights and stored take-up draws.
  • Base run: policyengine-uk main f1a9a3cc on unmodified 1.58.0.
  • Both on policyengine-core 3.32.13.
  • #2201 on unmodified 1.58.0 reproduces main in all 231 aggregates, so every difference below comes from the data.
  • In 1.58.0, 37,916 of 61,214 benefit units have recorded capital; the other 23,298 are SPI-synthetic copies.

UC against DWP (GB):

main branch DWP¹
2024-25 benefit units on UC 6.13m (+12.0%) 6.84m (+25.0%) 5.47m
2025-26 benefit units on UC 6.13m (−4.3%) 6.85m (+7.0%) 6.40m
2024-25 UC spend £74.5bn (+11.7%) £80.2bn (+20.2%) £66.7bn (outturn)
2025-26 UC spend £76.9bn (−2.9%) £82.8bn (+4.6%) £79.2bn
2026-27 UC spend £81.1bn (−7.5%) £87.4bn (−0.3%) £87.6bn
2025-26 benefit units on UC with children 3.01m 3.38m

¹ DWP, Benefit expenditure and caseload tables, Spring Forecast 2026 (xlsx): Table 1a for spending and Table 1c for caseload (financial-year average).

How the counts compare:

  • DWP's UC "household" is the benefit unit.
  • DWP's monthly household counts include nil awards: 477k of 6.57m in May 2025.
  • The model counts benefit units with UC above zero over a year. The comparable DWP figure is households with a payment, which Table 1c's averages track (6.1m to 6.7m from May 2025 to February 2026).
  • OBR's March 2026 EFO (Table 4.9, uk-data's obr/universal_credit target) gives £66.4bn, £79.3bn and £87.6bn for the three years.

Two caveats:

  • The 2024-25 overshoot is already present on main. 2024 has no UC count target in the build, and the model has only £0.08bn of tax credits in 2024.
  • uk-data's 2025 UC count targets disagree with each other. dwp/uc/households is 6.7m, while the family-type and payment-band targets each sum to 6.096m (May 2025 households with a payment). That is chipped separately; Calibrate DWP and OBR welfare targets on the countries their source covers #542 fixes only their geography.

Child poverty, FYE 2025 (2024), UK:

children main branch HBAI FYE 2025³
absolute, BHC 21.8% 20.2% 20.5% (95% CI 17–24)
absolute, AHC 29.8% 28.0% 27.4% (95% CI 23–31)
relative, BHC 24.5% 23.2% 20.5%
relative, AHC 31.0% 29.7% 27.4%
number, absolute AHC 4.51m 4.23m 4.03m

³ DWP, "Households below average income: FYE 1995 to FYE 2025" (26 March 2026), tables 1_4a/1_4b. The absolute line is 60% of the FYE 2025 median, so absolute equals relative in FYE 2025; policyengine-uk uses the same reference year.

Other groups, absolute BHC / AHC, FYE 2025:

  • working-age adults: 13.8% / 19.2% → 13.0% / 18.3% (HBAI 14.3% / 18.6%);
  • pensioners: 14.7% / 13.1% → 14.7% / 13.1% (HBAI 15.9% / 13.9%);
  • everyone: 15.7% / 20.5% → 14.8% / 19.6% (HBAI 15.9% / 19.6%).

The capital gap among poor children (FYE 2025; child-weighted, households in absolute BHC poverty):

main branch
FRS-row households: share with UC capital > £16k 32.4% 6.1%
FRS-row households: mean UC capital £140,859 £8,866
FRS-row households: share receiving UC 64.1% 85.1%
SPI-synthetic households (1.22m poor children): share > £16k 43.0% 43.0% (unchanged, by design)

Everything else, 2024 to 2026:

  • Unchanged: Pension Credit, Housing Benefit, Income Support, income-related ESA, income-based JSA, tax credits and Child Benefit, totals and recipients.
  • CTR changes by −£3m in 2024 and 2025, through the legacy CTR path that reads uc_assessable_capital.
  • The benefit cap reduction grows by £27m to £48m.

These results are at fixed weights and take-up draws. Calibration targets UC caseload and spend, so the rebuild will move them.

Rebuild (owed)

The plan is base (main relocked to the policyengine-uk release with #2201) against branch (the same plus this change), with the same seed, inputs and engine, 512 epochs. Measures: UC, PC, HB and CTR caseloads and spend; calibration fit; and the poverty table above.

It is held on two things:

  • the policyengine-uk release;
  • disk: builds start only above 100 GB free by statvfs (UK hub notice 8), and it is about 34 GB now.

Remaining gap, outside this PR

  • SPI-synthetic copies carry 1.22m of the children in absolute BHC poverty in FYE 2025, and they keep the household proxy: 43% have UC capital above £16k. Why weighted SPI copies are poor and carry so much imputed wealth is a separate question, chipped for its own session.
  • Housing Benefit, the legacy benefits and CTR still read only the household proxy. Moving them onto benunit_reported_capital is a policyengine-uk follow-up, also chipped.
  • Non-home property where the FRS shows rental income is still a follow-up from Use the FRS benefit-unit capital for Pension Credit's capital test #513.

Tests

tests/test_benunit_reported_capital.py (renamed from test_pension_credit_reported_capital.py):

  1. A finite, non-negative TOTCAPB4 carries over, with TOTCAPB3 as the fallback, including for nullable columns.
  2. Missing, non-numeric or negative values in both become -1.
  3. A table with neither column gives -1 throughout.
  4. Over randomised inputs, the output is -1 or non-negative, one value per benefit unit.
  5. The benunit_reported_capital uprating rows equal what the model derives (2020–2034).
  6. Both programme variables are formulas of the input, and the tables carry no rows for them.
  7. SPI-synthetic copies are cleared to -1 in every recorded-capital column.

Run with policyengine-uk #2201 installed: these tests plus test_uprating_range.py and test_road_fuel_volume_uprating.py, 26 passed.

Scripts and outputs: ~/reviews/uk-uc-reported-capital-2026-10-08/ (local): measure.py, make_branch_dataset.py and out/*.json.

axiom: n/a: data change (the UC capital rule itself is unchanged; policyengine-uk#2201 carries the input)

🤖 Generated with Claude Code

Stores the FRS benefit-unit capital (TOTCAPB4, TOTCAPB3 fallback) once as
policyengine-uk's benunit_reported_capital instead of the programme-named
pension_credit_reported_capital. policyengine-uk derives Universal Credit and
Pension Credit reported capital from it, so UC's capital test now uses the
FRS's own capital, as Pension Credit already did. SPI-synthetic copies keep
-1 (household proxy).

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

This branch has not been deployed

No deployments
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