Skip to content

UK local build (K=25, 2026-10-06): data-quality defects on the target surface and the spine #1123

Description

@juaristi22

Context

Measurement build uk-local-candidate-f100-s42-20261006T094003Z-835d98d9 (run tree uk-local-k25-8edd82066, code uk-identity-cgt-residential-branch 8edd820 + c1d4f8c on main 45d1ae3, policyengine-uk 2.100.0, feed chronicle-uk-artifact-825406f, 2,000 epochs, seed 42; fixes in #1115). The dense solve on the 25-clone pool (1,595,675 rows, D25) is the reference here: it fits 99.7 % of constituency rows and 99.5 % of local-authority rows within 10 %, so a miss that survives the dense solve is a spine or target problem, not a selection one. Selection mechanics are #1124. The land rows' ×K artefact is the per-block resolution defect #1115 commit 9 removes and is not listed.

1. HMRC income by area and the SPI bands bind two different surfaces

  • The constituency and local-authority rows (hmrc.employment_income.*, hmrc.self_employment_income.*, 4,031 rows) come from Personal Incomes Statistics tables 3.12 to 3.15a for tax year 2023/24 and are bound at period 2025 without uprating. The national SPI band rows are at 2025.
  • Sums: employment-income amounts £1,079bn by area against £1,193bn in the bands (+10.6 %); counts 27.14m against 29.77m (+9.7 %); self-employment amounts £106.8bn against £98.8bn (−7.5 %); self-employment counts 3.67m against 3.92m (+6.8 %).
  • The dense solve splits the difference: area sum +3 %, band sum −13 %, with the £500k–£1m employment band at −38 % and the ITL £2m+ band at −11 %.
  • The Declare cross-grain target reconciliation for the UK local surface: national wins, sub-national rescales (#495 increment 6 companion) #802 rule (national wins, sub-national rescales) never fired because no bridge is declared between the band family and the area family (the First calibrated rowwise UK local candidate (#495 increment 6) #762 A1-2/A1-3 rulings: area facts carry no bands).
  • Ask: (a) Chronicle states which vintage or projection the 2025 area tables should carry; (b) microcosm declares a per-metric cross-grain factor that rescales each area table to the SPI national total for the same concept, receipted like the A15/A17 factors; (c) retire the stale exclusion hmrc.spi_region.income_tax_by_region_12570_15000@E12000008 (the row is inside the fence now).

2. One declared period rule per target family

The surface mixes vintages at period 2025: census households 2021 × 1.0336 (A15), tenure 2021 uprated (A17), ages mid-2024 unuprated, UC May 2025, HMRC 2023/24 unuprated, council-tax stock 2025, and ons.rent.private_rent composed from the PIPR July 2026 edition (data to June 2026) for a 2025 target. Ask: the feed declares, per family, the period the fact represents and the uprating applied to reach the calibration year, and microcosm refuses a family whose declared period differs from the calibration year without a declared factor. Include the CGT total in the review: the 2025 row carries £119.3bn of gains while uk-data's fixture for the same concept carries £67.7bn; confirm which projection the fact should carry.

3. VAT and fuel duties miss before any selection

  • obr.vat: +24 % in D25 and +21 % in the 2026-09-30 national build from main (family_equal). Spine consumption basis (LCFS) against the OBR line; Adjust VAT methodology to include flat % assumptions on VAT band shares by consumption category policyengine-uk-data#241 raised the band-share methodology.
  • obr.fuel_duties_cars: −25 % in D25, −10 % in the national build.
  • Ask: reconcile the spine's VAT-able expenditure and road-fuel bases with the OBR concepts (what the line includes: business and public-sector VAT, duty on non-car fuel) and either fix the stage or declare the concept gap as a reviewed exclusion with a receipt.

4. Private rent in high-rent districts is unreachable from region-level FRS rents

  • ons.rent.private_rent at local-authority grain: Kensington and Chelsea −39 % and Brighton and Hove −22 % in D25 even with 1.6m rows to choose from; 13 English districts fail after selection, family within-10 share 91 % (the lowest local family).
  • Cause: rent is an FRS variable carried from the source household's region; the pool has no households whose rent matches the top districts' PIPR means, so no reweighting reaches them.
  • Ask: condition rent on the assigned area (the UK graph: move geography assignment ahead of enrichment (geography-first reordering) #931 item (b) enrichment reorder: frs_brma / rent after geography) or impute rent from PIPR by BRMA at the assigned location, with a distribution receipt against the pre-move build.

5. Age 20–30 in student constituencies

  • Leeds Central and Headingley −16 % and Sheffield Central −7 % in D25 (−44 % both after selection), Bristol Central and Belfast South and Mid Down in the same group.
  • Cause: the mid-year estimates count students in halls and other communal establishments; the FRS is a private-household survey. The pool cannot carry that population.
  • Ask: declare a communal-establishment adjustment for the age targets (Census 2021 TS011 communal-establishment residents by age and constituency is published) or sign deferrals for the cells where the communal share exceeds a declared threshold.

6. No nation-level household control

  • The only household-count rows are the per-area census rows (650 + 361; they sum to 29.003m at both grains). Nothing binds England, Wales, Scotland or Northern Ireland household totals, so a solve that loses on the per-area rows loses the nation's household count silently (Northern Ireland −29 % in every area after selection).
  • Ask: bind ONS household estimates by country for the target period as national rows, and add a surface check that constituency, local-authority and nation sums agree.

7. Council-tax micro-cells are written off

8. Register hygiene the battery surfaced

  • charitable_investment_gifts tail-concentration exclusion is stale (the column is under the threshold); remove.
  • atomic_area_basis is a constant column at the pre-export frame; drop at export or sign a degenerate-surface exclusion.
  • The QRF tail-concentration verdict sits at 0.99947 against a 0.99947 threshold; decide a margin or per-product exclusions rather than hugging the constant.

9. Spine items this build re-confirms (existing issues, no new evidence needed)

#866 savings interest, #867 housing benefit, #868 SLC plan-2 stocks, #869 JSA claimants, #882 UC definitions, #840 SPI-channel composition, #1090 Scottish rent grain, #1112 residence-value ceiling. Exclusion clock from #796: UC housing element 2026-10-15, savings interest 2026-10-22, SLC 2026-11-03.

Out of scope

Selection and refit mechanics: #1124. The incumbent comparison basis (separate). The per-block engine artefact (#1115).

Acceptance

Items 1, 2, 6 and 7 are declared in the feed or the registers before the next local candidate; items 3, 4 and 5 each have a stage change or a signed exclusion with a receipt; item 8 is retired with #1115 or a register PR. The next dense solve on a current spine has no bound local row past 25 % that is not covered by a signed entry.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions