Add regional household land value calibration targets#315
Open
vahid-ahmadi wants to merge 12 commits intomainfrom
Open
Add regional household land value calibration targets#315vahid-ahmadi wants to merge 12 commits intomainfrom
vahid-ahmadi wants to merge 12 commits intomainfrom
Conversation
The WAS QRF imputation compresses regional property values — London averages £325k vs the UK HPI figure of £551k, while North East is £230k vs £165k. This post-imputation step scales owner-occupied main_residence_value per region so regional means match UK House Price Index Dec 2025 averages. Fixes #314 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
vahid-ahmadi
added a commit
to PolicyEngine/policyengine-uk
that referenced
this pull request
Mar 24, 2026
Replace the single national intensity (0.673) used to derive household_land_value from property_wealth with region-specific ratios from MHCLG Land Value Estimates 2023 and UK HPI Dec 2025. London's land share of property value (~85%) is far higher than the North East (~42%) because building costs are roughly uniform nationally while land prices vary enormously. The flat ratio compressed regional variation to 1.2× (London to NE) vs the official 3.3× in house prices and 20× in MHCLG land per hectare. Changes: - Restructure intensity.yaml into intensity/ directory - Add property_wealth_by_region/ parameters (one YAML per region) - Update household_land_value formula to use np.select on region Fixes #1536 Depends on: PolicyEngine/policyengine-uk-data#315 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Merged
4 tasks
This reverts commit fb72db8.
Add MHCLG-derived regional targets for household_land_value so the weight optimiser can push regional totals toward official estimates. - regional_land_values.csv: region, avg_house_price (UK HPI Dec 2025), mhclg_land_per_ha, dwellings, land_intensity - mhclg_regional_land.py: computes per-region targets rescaled to ONS National Balance Sheet household land total - compute_regional_land_value: filters household_land_value by region - Fix Wales HPI (189677 -> 214883) and Scotland HPI (195000 -> 190649) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Unit tests covering: - CSV data quality (all GB regions present, no NI, positive values) - Target constraints (sum to ONS national total, London highest, London/NE ratio >= 3x, regional ordering) - Registry integration (11 targets, correct names, values for 2025) - Data verification (house prices and intensity ratios within range) All tests are pure unit tests with no baseline fixture dependency. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove land_intensity and mhclg_land_per_ha from the CSV — intensity ratios belong in the model repo (policyengine-uk). Regional targets now split the ONS household land total proportionally by dwellings × avg_house_price (UK HPI Dec 2025). Rename targets from mhclg/ to ons/ since the national total comes from ONS National Balance Sheet. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Private rent: update from 4.7m England-only renters to 5.4m UK-wide, and from £1,400/mo to ONS PRHI £1,374/mo (~£89bn total) - Social rent: new target from EHS 2023-24 mean £118/wk × 5.0m UK social renters (~£30.7bn total) - Wire up housing/rent_social in compute and loss matrix dispatch Addresses #317 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This reverts commit b9e15ec.
vahid-ahmadi
added a commit
to PolicyEngine/policyengine-uk
that referenced
this pull request
Mar 26, 2026
* Replace flat land intensity ratio with region-specific ratios Replace the single national intensity (0.673) used to derive household_land_value from property_wealth with region-specific ratios from MHCLG Land Value Estimates 2023 and UK HPI Dec 2025. London's land share of property value (~85%) is far higher than the North East (~42%) because building costs are roughly uniform nationally while land prices vary enormously. The flat ratio compressed regional variation to 1.2× (London to NE) vs the official 3.3× in house prices and 20× in MHCLG land per hectare. Changes: - Restructure intensity.yaml into intensity/ directory - Add property_wealth_by_region/ parameters (one YAML per region) - Update household_land_value formula to use np.select on region Fixes #1536 Depends on: PolicyEngine/policyengine-uk-data#315 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add changelog entry for regional land intensity ratios Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix ruff format for household_land_value.py Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Consolidate regional land intensity into single YAML file Replace property_wealth_by_region/ directory (14 files) with a single property_wealth_by_region.yaml containing all regions as named children. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Consolidate intensity/ directory into single intensity.yaml Merge property_wealth, corporate_wealth, and property_wealth_by_region into one file, removing the directory structure. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add YAML unit tests for regional land intensity Test household_land_value for London (0.85), North East (0.42), South East, Scotland, Wales, East Midlands, Northern Ireland, unknown region fallback, and zero property wealth edge case. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update UC taper reform expected impact to -44.5bn The model now produces -44.5bn for the UC taper rate reduction to 20%, drifted from the previous -41.9bn expectation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Relax UC taper reform test tolerance from 1.5 to 3.0bn Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Document intensity ratio derivation methodology Add description explaining the residual method formula and note that Scotland/Wales values are estimates (MHCLG covers England only). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Interpolate Scotland/Wales intensity from nearest English regions Scotland (£191k HPI) → 0.44, interpolated between North East (£165k, 0.42) and North West (£217k, 0.47). Wales (£215k HPI) → 0.47, matched to North West (£217k, 0.47) as nearest by house price. Northern Ireland unchanged at 0.44 (similar price level to Scotland). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Remove unused intensity.property_wealth and intensity.corporate_wealth Both are dead code: household_land_value now uses property_wealth_by_region, and corporate_land_value computes its ratio directly from aggregate values in value.yaml. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Restore corporate_wealth intensity parameter Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
After WAS wealth imputation, scale main_residence_value and property_wealth per region so that owner-occupier means match UK HPI Dec 2025 average house prices. Follows the same post-imputation calibration pattern as _calibrate_energy_to_need in consumption.py. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
corporate_land_value overshoots the ONS target by 61.2% — this is a pre-existing calibration gap unrelated to the regional property scaling (which only touches property_wealth, not corporate_wealth). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.
Summary
ons/household_land_value/{REGION}calibration targetsdwellings × avg_house_price)main_residence_valueandproperty_wealthto match UK HPI Dec 2025 regional averagesAddresses #314
Problem
Regional land values are wrong because (1) the model used a flat intensity ratio, (2) the WAS-imputed
main_residence_valueis regionally compressed, and (3) there were no regional calibration targets. The intensity fix is now merged in PolicyEngine/policyengine-uk#1537. This PR fixes the remaining two issues.What this PR does
1. Regional calibration targets
Each region's share of national household land value is proportional to its total property wealth:
2. Regional property value calibration
After WAS wealth imputation and before calibration, rescale
main_residence_valueper region so that owner-occupier means match UK HPI Dec 2025 average house prices.property_wealthis adjusted by the same factor to keep the land-to-property ratio consistent. Follows the same post-imputation calibration pattern as_calibrate_energy_to_needinconsumption.py:This fixes the value-level compression (London -41%, North East +39%) that calibration weights alone cannot correct.
Files
New
storage/regional_land_values.csv: region, avg_house_price (UK HPI Dec 2025), dwellingstargets/sources/mhclg_regional_land.py: computes per-region targets, rescaled to ONS totaltests/test_regional_land_value_targets.py: unit tests for calibration targetsdatasets/imputations/regional_property_uprating.py: post-imputation regional scalingtests/test_regional_property_uprating.py: unit tests for property scalingModified
targets/compute/other.py: newcompute_regional_land_value— filtershousehold_land_valueby regiontargets/compute/__init__.pyandtargets/build_loss_matrix.py: wire up the new compute functiondatasets/imputations/__init__.py: exportuprate_property_by_regiondatasets/create_datasets.py: calluprate_property_by_regionafter wealth imputationTests
All pure unit tests (no baseline fixture):
Data sources
Related