Conversation
TOTCAPB3 (DWP's derived benefit-unit total of savings and investments) for every FRS benefit unit; -1 where missing or negative. Pension Credit counts the claimant's and partner's capital (SPCA 2002 s.5); the WAS household imputation gives FRS Pension Credit reporters a weighted median of 74,300 pounds against the survey's own 300 for those the model then finds not entitled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
force-pushed
the
frs-pc-reported-capital
branch
from
October 1, 2026 19:46
c7fa5e1 to
0b45992
Compare
25 tasks
…K 2.107.0 - SPI-synthetic copies get pension_credit_reported_capital = -1: the FRS donor's capital does not belong with SPI-imputed incomes (24 of 152 SPI PC reporters were entitled in build E only because of it). - uprating_factors.csv and uprating_growth_factors.csv get the column with the savings row (policyengine-uk uprates it with the same per-capita GDP index), so uprate_dataset keeps the two in step. - policyengine-uk >= 2.107.0, the first release defining the variable (#2018); core 3.32.12 comes with it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
marked this pull request as ready for review
October 2, 2026 14:13
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Based on
main, independent of #490 and #510. It needs policyengine-uk 2.107.0, the first release definingpension_credit_reported_capital(#2018), and this PR bumps the floor and lock to it. Like every uk-data merge, it lands with the batched release on Max's go (d833); the every-unit vs reporters-only choice is d800.Why
About a third of FRS Pension Credit reporters get no modelled entitlement, and most of them fail on deemed income from imputed capital. Measured on #510's build D (2024-25 survey, FY2025-26, GB), original FRS households at survey weights, policyengine-uk main:
For those 415k, the household wealth imputation and the survey's own benefit-unit capital (
TOTCAPB3) disagree:TOTCAPB3The WAS imputation predicts household wealth from income, composition, tenure and region, and knows nothing about means-tested receipt. It also carries pension wealth in
corporate_wealth(#501 removes that).TOTCAPB3is DWP's derived benefit-unit total of savings and investments, the measure its FRS-based National Statistics use. In 2023-24 DWP also assigned Pension Credit to eligible FRS non-reporters using eligibility "sourced from survey data, combined with administrative data" (FRS background information and methodology, section 8.3).What changes
create_frswritespension_credit_reported_capital= FRSTOTCAPB3for every benefit unit, or -1 where it is missing or negative (none are in 2024-25). policyengine-uk (#2018) then uses it in place of the household proxy in Pension Credit assessable capital.impute_income) get -1, so they fall back to the household proxy. Their incomes are SPI-imputed, and the FRS donor's capital does not belong with them. In build E, 24 of the 152 SPI-synthetic PC reporters were entitled only because they carried it. Capital-gains copies keep their FRS incomes, so they keep the value.uprating_factors.csvanduprating_growth_factors.csvget the column with thesavingsrow. policyengine-uk uprates it with the same per-capita GDP index, souprate_datasetkeeps the two in step.pyproject.tomlanduv.lock. Core 3.32.12 comes with it.savingsand the other wealth columns, so wealth analyses still use the WAS imputation.TOTCAPB3covers financial assets only. Second homes and land, which Pension Credit also counts, are not in it.Choice for review: every benefit unit (this PR) or reporters only.
Measured (real runs; build D plus this column, before any rebuild)
These use #510's own solver at 62% take-up, solved over GB entitled units as in #510 f09497f, original FRS households at survey weights, GB, FY2025-26. "All PRs" = policyengine-uk #2018, #2019, #1899, #1940 and #1925.
So with these changes calibration no longer has to inflate reporters to reach DWP's caseload. Build D took GB reporters from 1,199k (survey weights) to 1,736k.
Totals on build D's calibrated weights overshoot, because those weights already inflate reporters (GB Pension Credit is £6.24bn on main and £8.17bn with #2018 and every unit filled, without recalibration). On the same static basis (2025-26, calibrated weights, main against #2018 with every unit filled), other outputs that read the Pension Credit assessment also move:
Build E, below, gives the rebuilt figures.
Rebuild: build E vs D′ (real production builds, 1 OA clone, 512 epochs; GB, FY2025-26)
The #510 session ran both builds:
Pensioner poverty rises in E. Relative AHC goes from 17.5% to 18.4% (all-person AHC 23.6% to 23.7%). I split it by running both datasets under both policyengine-uk trees (2025, calibrated weights):
The rise comes from calibration no longer inflating reporters. In D′ the +41% reporter upweight stood in for entitlement the model missed, and it crowded out entitled pensioners who don't claim. In E those people get their weight back. Pensioners in entitled, non-claiming benefit units rise from 0.70m to 1.29m, and those of them in AHC poverty from 0.16m to 0.32m. Take-up among the entitled falls to 60%, against DWP's 62%. The poverty figure moves away from HBAI, so it is called out here for review.
Remaining gap (all PRs, every unit filled; survey weights, 88k)
Most of this is survey reporting that the model should not chase.
Tests
tests/test_pension_credit_reported_capital.pychecks four invariants:TOTCAPB3is carried over unchanged.TOTCAPB3column gives -1 throughout.Before merge
Integration build E: done; see the section above.axiom: n/a: data change
🤖 Generated with Claude Code