Repository navigation
Conversation
corporate_wealth was built as (WAS total private pension wealth less current-employment DB) + employee shares + UK shares + investment ISAs + unit/investment trusts, so 84.7% of its WAS round 8 mass (GBP 3,659bn of 4,318bn) was pension wealth, which every means test disregards (UC Regs 2013 Sch 10 para 10 and the legacy equivalents). policyengine-uk counts corporate_wealth as capital, so imputed pensions failed claimants on the GBP 16,000 limit. The imputation now draws private_pension_wealth in the slot the old column held, then directly_held_shares (UK + employee shares), unit_and_investment_ trusts and stocks_and_shares_isa, and builds corporate_wealth as their exact sum. These are the parts DWP values differently: quoted shares less 10% for costs of sale (ADM H1665), unit trusts with none (H1674), ISAs at withdrawal value (H1656). cash_isa is exported too. other_residential_property_value took only WAS second homes (DVHseValR8, GBP 254bn) and left buy-to-let (DVBltValR8, GBP 573bn) out of every capital input; it now holds both. The debt secured on each non-main asset class is imputed after its asset for the policyengine-uk inputs that value capital net of encumbrances (reg 49(1)(b)): second homes + buy-to-let, other buildings and UK land, kept only where the household holds the asset. The model metadata records how each derived target is built, so a cached model retrains when a definition changes. Uprating rows for the new columns copy corporate_wealth's per-capita GDP index. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 1, 2026
33 of 69 tasks
microimpute's QRF draws every target's quantile from the same seed, so each household got one quantile for all eighteen targets. Chained on earlier draws, that made sparse targets near-certain for households drawn high for a related asset: on the raw 2024-25 FRS the imputed debt secured on UK land came to GBP 56.8bn across 0.19m households (WAS donor GBP 1.3bn, 0.03m), and non-residential property debt GBP 51.8bn (donor GBP 5.7bn). Each target now gets its own seed after fitting (recorded in the model metadata, so cached models retrain): land debt falls to GBP 7.0bn across 0.04m households, non-residential debt to GBP 6.9bn, and savings from GBP 1,890bn to GBP 733bn (donor GBP 457bn on 7% fewer households). docs/imputations.md: overseas property and shares are not exported separately but are inside the property and financial totals (review nit). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # uv.lock
On the built Enhanced FRS: corporate_wealth equals its components, each secured debt appears only with its asset, the locked policyengine-uk reads every new input at its stored weighted total, deducts each debt from the asset it is imputed for, and keeps corporate_wealth as the share-like capital block. The engine checks need the policyengine-uk releases carrying #1974 and #1969; this PR stays a draft until the lock moves to them (UK hub review of 2ad43a6). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main already pins hypothesis>=6.168.3; the unversioned entry this PR added before the merge duplicated it (review of 23d1027). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Draft: waits on two policyengine-uk releases and a lock bump. This PR exports inputs the locked policyengine-uk 2.122.2 does not yet know:
share_like_capital, from Itemise corporate_wealth's share-like components for the means tests policyengine-uk#1974;test_wealth_split_dataset.pychecks that the locked engine reads every new input. It fails until the lock moves to a release carrying both. Release-equivalent before/after builds are queued behind the shared heavy-run lock. Their measured impacts will replace the "Impact" placeholder.What changes
The WAS round 8 wealth imputation (
datasets/imputations/wealth.py):corporate_wealth. It was built as (total private pension wealth − current-employment DB) + employee shares + UK shares + investment ISAs + unit/investment trusts. Pension wealth was 84.7% of its weighted donor mass (£3,659bn of £4,318bn), and every means test disregards it (UC Regs 2013 Sch 10 para 10; HB Sch 6 paras 31-32; IS Sch 10 paras 23-23A; JSA Sch 8 paras 28-29; ESA Sch 9 paras 28-29; SPC Sch V paras 22-23).private_pension_wealthis now drawn in the chain slot the old column held.directly_held_shares(UK shares + employee shares and options),unit_and_investment_trusts(one WAS question) andstocks_and_shares_isa.corporate_wealthis now their exact sum, derived after imputation.cash_isais exported too.other_residential_property_value. Before this PR the column held second homes only (£254bn), and buy-to-let (£573bn) reached no capital input.other_residential_property_secured_debt= second-home + buy-to-let mortgages;non_residential_property_secured_debt;owned_land_secured_debt.corporate_wealth's per-capita GDP index.Donor against ONS (WAS round 8, GB, April 2020 to March 2022, own weighted sums of the EUL file)
Every published aggregate matches:
Holder counts also match ONS exactly:
ONS publishes no component totals. Ours (£bn) are:
ONS suspended WAS accreditation from round 8 (13 June 2025 notice). Against HMRC ISA Table 9.6 (GB-adjusted), WAS captures 69-79% of stocks and shares ISA value and 77-78% of cash ISA value.
Imputed totals still run above the donor. On the raw FRS they are about 1.5-2.5× the donor after this PR's draw fix. The causes are pre-existing predictor mismatches:
is_rentingmeans private renters only;These are tracked as a separate fix with findings in
~/reviews/uk-was-wealth-split-2026-09-30/overshoot/.Impact (pending)
The builds below are queued: a release-equivalent local build of current main, then this branch, with
PE_UK_DATA_OA_CLONES=1and policyengine-uk 2.122.2 at build time, measured on policyengine-uk main and on the #1969/#1974/#2131 stack. An earlier pair on 9/30 code (shared draws, superseded) gave these results at 2025 on policyengine-uk main 41a996e:Tests
test_wealth_split.py(Hypothesis):corporate_wealthis derived, not imputed;corporate_wealth= newcorporate_wealth+private_pension_wealth, and old other residential property + buy-to-let = new;Four mutants fail it: no debt zeroing, no component clipping, pension left in, buy-to-let dropped.
test_wealth_split_dataset.py: the built-dataset and engine checks above.Refs #452; PolicyEngine/policyengine-uk#1837, #1791 (merged), #1974, #1969, #2131; PolicyEngine/microcosm#1095 (port status).
axiom: n/a: data change
🤖 Generated with Claude Code