Skip to content

Bump policyengine-uk to 2.102.3 for the FYE 2025 absolute poverty line - #536

Merged
MaxGhenis merged 2 commits into
mainfrom
bump-uk-fye2025-poverty-line
Sep 29, 2026
Merged

MaxGhenis merged 2 commits into
mainfrom
bump-uk-fye2025-poverty-line

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #535

Summary

This bumps the bundled policyengine-uk from 2.90.2 to 2.102.3. 2.102.3 rebases the UK absolute poverty line to HBAI's FYE 2025 reference year, as DWP has reported it since the March 2026 HBAI release (PolicyEngine/policyengine-uk#1889). The line is 60% of the unrounded FYE 2025 medians, £431.69 BHC / £373.89 AHC a week at FYE 2025 (HBAI table 2.4ts), with OBR CPI uprating after. FYE 2021 and earlier keep the FYE 2011 line, matching DWP's current split.

absolute_bhc and absolute_ahc, two of the four measures calculate_uk_poverty_rates returns, read in_poverty_bhc / in_poverty_ahc. PolicyEngine headlines absolute_bhc (see #534). UK absolute poverty outputs rise.

Certification

The certified UK data release stays policyengine-uk-data 1.56.16 (enhanced_frs_2024_25), as #491 set it. Only the model moves.

  • Publisher claim. policyengine-uk==2.102.3 was appended to the 1.56.16 release manifest's compatible_model_packages, as Bump to policyengine-uk 2.90.2 and revert the UK certified default to enhanced FRS 2024-25 #491 did for 2.90.2: HF commit 78788372. The evidence is in the commit description.
  • Certification. scripts/bundle.py certify-data --country uk --data-producer populace --manifest-uri hf://model/policyengine/policyengine-uk-data-private@78788372…/releases/1.56.16/release_manifest.json --model-version 2.102.3. The basis is legacy_compatible_model_package, since the data was built with 2.89.2. Per the certifier's warning, the test suite is the arbiter.
  • Evidence. On this exact artifact, for 2026-27, 2.102.3 and 2.90.2 were run side by side:
    • Every aggregate is finite, and the input columns the model doesn't recognise are identical.
    • Totals are within 0.1% for income tax, NI, UC, Child Benefit, Pension Credit, State Pension, council tax, and household and HBAI net income. The UC benefit-unit count (6.35m) is also within 0.1%. Housing Benefit is +0.8%.
    • Absolute poverty rises about 32%, which is the intended line change.
    • Relative poverty rises about 10–12%, mainly from policyengine-uk#1865: the relative line is now 60% of the median over individuals, as in HBAI. Household and HBAI net income move by less than 0.01%.
  • Other files. Regenerated: pyproject.toml pins, uv.lock (policyengine-uk entries only), the bundle manifest and both TRO sidecars. The US sidecar changes only because it hashes the shared bundle manifest. The test pins UK_MODEL_VERSION and UK_DATA_RELEASE_REVISION in tests/test_release_manifests.py, and tests/test_models.py, are updated.

What changes for users

All policyengine-uk changes since 2.90.2 come with this bump, not just the poverty line. The PolicyEngine-uk CHANGELOG from 2.90.3 to 2.102.3 lists them.

On the certified enhanced FRS, 2026-27, absolute poverty. This branch computed these end to end:

  • ensure_datasets built the year files with 2.102.3;
  • the "before" column is policyengine-uk 2.90.2 on its own year files.
Group BHC 2.90.2 → 2.102.3 AHC 2.90.2 → 2.102.3
All people 11.1% → 14.7% 14.5% → 19.0%
Age 0–17 (calculate_uk_poverty_by_age "child") 11.8% → 16.3% 17.0% → 23.7%

For comparison, DWP projects 17% BHC and 24% AHC for children in FYE 2027 on the same line (DWP, Low income poverty projections for children, FYE 2026 to FYE 2031, 9 July 2026). DWP counts dependent children (under 16, or 16–19 in non-advanced education), not everyone aged 0–17. On HBAI's own definition, policyengine-uk#1889 reports 16.7% BHC and 24.1% AHC.

The UK model-surface snapshot (tests/fixtures/household_calculator_snapshots/uk_model_surface.json) is refreshed with PE_UPDATE_SNAPSHOTS=1, as the certification skill prescribes for a model bump. Parameters rise from ~2,300 to ~2,600 and variables from ~800 to ~900, in 100s buckets. The four UK household snapshots are unchanged.

Year files. The files ensure_datasets builds with 2.102.3 match the 2.90.2 ones in every column except 2026 domestic_energy_consumption, which is 5.5% lower.

  • This is policyengine-uk 2.100.1's intended change: energy is no longer projected forward from the data year.
  • 1.56.16's build (policyengine-uk-data 12a1e028, datasets/imputations/consumption.py) already prices energy at Ofgem Q2 2026 unit rates, so 2.90.2 was applying the price rise twice.
  • 2024 year files are identical.

Inputs this data doesn't have. 34 input variables added to policyengine-uk since 2.90.2 are absent from 1.56.16, so they take their defaults.

  • Duties: alcohol volumes and draught shares, tobacco quantities, car attributes (CO2, engine size, registration date, fuel type, list price, VED exemption), and LPG and natural-gas kg. The new alcohol, tobacco, vehicle excise and road-fuel-gas duties therefore compute as about zero on this data (gov_balance +£0.13bn).
  • Balance-sheet items: mortgage_debt, consumer_debt, private_pension_wealth, and three capital_gains_* components.
  • Other: tax_free_childcare_spend_routed_share, plus the take-up flags would_claim_carers_allowance and would_claim_uc_childcare.

This is a data gap, not an incompatibility. It closes when a data release built with a newer policyengine-uk is certified.

The "Which measure to headline" docs in #534 describe the new line and should merge with or after this PR.

Checks run locally

  • Full suite on Python 3.13, with the HF token: 1,187 passed, 9 skipped and 1 failed. The failure was the UK model-surface snapshot, which drifted as expected and was then refreshed. After the refresh, all 11 tests in tests/test_household_calculator_snapshot.py pass.

  • Independent review (Opus 5.5): APPROVE. Its findings on body accuracy, the second changelog fragment and unrelated uv.lock marker churn are addressed in the follow-up commit.

  • make format, make lint, scripts/bundle.py check and scripts/release_lock.py all pass.

🤖 Generated with Claude Code

policyengine-uk 2.102.3 rebases the UK absolute poverty line to HBAI's
FYE 2025 reference year (PolicyEngine/policyengine-uk#1889): 431.69 BHC
/ 373.89 AHC a week at FYE 2025.

Certify policyengine-uk-data 1.56.16 for 2.102.3 on the publisher's
compatibility claim (HF commit 78788372, evidence in its description),
as #491 did for 2.90.2. Regenerate the bundle manifest, TRO sidecars and
uv.lock. Update the certified-version test pins and refresh the UK
model-surface snapshot; the UK household snapshots are unchanged.

Fixes #535

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fold the certify-data fragment into 535.changed.md, as the certification
skill asks for one fragment named for the issue. Revert two uv.lock marker
changes (cffi/pycparser, pexpect/ptyprocess) that came from a newer uv
re-encoding upstream metadata, not from this bump.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review September 29, 2026 16:33
@MaxGhenis
MaxGhenis merged commit bebe913 into main Sep 29, 2026
12 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Merged on Max's go (decision d631, 2026-09-29), which carries out his d516 ruling to follow DWP's FYE 2025 absolute line. CI was green on e0d105e. An independent Opus 5.5 review approved, per the description.

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.

Bump policyengine-uk to pick up the FYE 2025 absolute poverty line

1 participant