Skip to content

Correct UK SPI recipient age, income year and pension receipt - #879

Draft
juaristi22 wants to merge 2 commits into
uk-spine-rebuild-842-850from
uk-spi-income-coherence-840
Draft

Correct UK SPI recipient age, income year and pension receipt#879
juaristi22 wants to merge 2 commits into
uk-spine-rebuild-842-850from
uk-spi-income-coherence-840

Conversation

@juaristi22

@juaristi22 juaristi22 commented Sep 6, 2026

Copy link
Copy Markdown
Collaborator

SPI household support currently replaces children's observed FRS inputs with adult taxpayer draws, mixes 2022–23 SPI incomes with 2024 FRS flows, and imputes FRS pension receipt without conditioning on the SPI pension leaf. This change preserves under-16 inputs, rebases mapped SPI flows using the pinned model's indices, and adds a pension-receipt predictor to the FRS-only fill. The chosen mappings and nominal holdouts are explicit in the source specification and build evidence.

Full national-only control and treatment rebuilds use the same licensed source pins, 364 targets, 2025 calibration, 1,500 epochs, family_equal, seeds, take-up, exclusions and weight bounds. The control reproduces v19. Both this PR and the independent CGT PR #878 start from bc11803f on uk-spine-rebuild-842-850.

Result Control SPI treatment
Calibration loss 0.0253150 0.0160433 (−36.6%)
HMRC pension amount error, £20–30k income band +26.795% +19.890%
HMRC pension amount error, £50–70k income band +32.999% +16.643%
Income-tax error −12.203% −12.750%
Aggregate state-pension error −8.071% −11.816%
UC single-with-children error −33.611% −32.935%

Unsupported pre-calibration SPI child employment falls from £66.176bn to zero, adult pension-receipt disagreement falls from 3.797% to below 0.01%, and SPI single-parent support passing the pre-takeup income screen rises from 27.17% to 49.40%. These are synthetic-support diagnostics, not population estimates of children's actual earnings or a complete UC eligibility determination.

About 95.7% of the net loss reduction comes from the ONS interest target under family_equal; the lower objective should not be read as resolution of the UC/tax/pension tension. Aggregate tax and pension regressions remain. Terminal gates still block export: a UC payment cell has no realized support, self-employment £50–70k and council-tax band A exceed tolerance, and a private-pension exclusion is stale. No tolerances or exclusions were relaxed and no calibrated release artifact was exported or certified. The rank-matching alternatives suggested by #840 were rebuilt and rejected because they worsened overall loss.

See the experiment report for the plan, alternatives, reproduction and remaining defects, and the paired receipt for all 364 target comparisons, implementation/source hashes and gate failures.

Validation: 158 focused tests passed, 3 skipped; 60 additional schema/coverage/graph tests passed, 1 skipped. A broader coverage-regeneration test fails on the untouched control too because its historical engine-version golden is 2.89.0 versus the locked 2.92.1; it is documented, not rewritten. Ruff lint, changed-file formatting and test inventory pass. Repository-wide formatting has 121 inherited failures, also reproduced on the control.

Refs #840, #866, #862, #481, #736, #796, #665. Remaining CGT shape, age/geography and target-vintage questions are addressed separately in #878, #725 and #875. These broader issues remain open.

GitHub CI does not trigger for this stacked PR: the repository workflow only targets main and node-graph. Kept as draft pending parent integration and CI; local validation and the licensed rebuild are recorded above.

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.

1 participant