Repository navigation
Nineteen calibration targets have no signal on 1.58.1: £1m+ income bands, ages 85-90 and others #593
Description
What's wrong
Nineteen national calibration targets enter the loss matrix with a column that is zero for every household. The optimiser cannot move them, so each contributes a constant error and reports as missed whatever the weights are. They are not flagged anywhere: create_target_matrix only checks that a column exists.
Measured on the released uk-data 1.58.1 enhanced_frs_2024_25.h5 (sha256 056e80fd) with the locked policyengine-uk 2.122.2. The measurement replays create_target_matrix's loop at the calibration year 2025 and records each target's status and whether its column has any non-zero entry. Counts only; no record values.
Of 660 national, regional and country targets:
- 645 enter the matrix;
- 15 are dropped because they have no value for 2025, the
dwp/uc/two_child_limit/*targets dated 2026 only (already Calibration loss under-penalises overshoots and silently drops targets #456); - the 19 below enter with no signal.
| Targets | Why the column is zero |
|---|---|
hmrc/{employment,dividend,property,private_pension,state_pension}_income[_count]_income_band_1_000_000_to_inf (10) |
Fewer than 10 records have total_income of £1m or more, and none of them has employment, dividend, property, private pension or State Pension income; they have self-employment income only. The band's count and amount targets for every other income type therefore have no signal. |
ons/female_85_90, ons/male_85_90 |
No record is aged 85 or over; the oldest records fall in the 80–84 band. |
voa/council_tax/{NORTH_EAST,NORTH_WEST,YORKSHIRE}/H |
No band-H household in those regions. |
slc/student_loan_repayment/england/postgraduate |
No record repays an English postgraduate loan. |
dwp/uc_payment_dist/COUPLE_NO_CHILDREN_annual_payment_{27_600_to_28_800,28_800_to_30_000,30_000_to_inf} |
No couple without children receives UC payments above £27,600 a year. |
Why it matters
- The £1m+ band's HMRC targets for 2025 include £35.5bn of employment income across 21,000 people and £11.1bn of dividends across 19,000. The data holds fewer than 10 records in the band, all self-employed only. Top-rate and dividend reforms therefore rest on almost no microdata in that band. It may be related to the capital gains shortfall in Capital gains on 1.58.0 total £39bn against HMRC's £65.9bn, and the test allows a 50% miss #570.
- Ages 85+ hold the 80+ population in one band, so the 80–84 targets absorb it and the 85–90 targets can't be met.
What would fix it
- The £1m+ tail: an SPI imputation that gives top-income records the HMRC income mix (Rebase SPI income draws to the FRS survey year #532, Draw SPI incomes at each donor's FRS rank within their cell #551 and Calibrate SPI income bands to their projected values, and map the 2023-24 outturn to 2023 #557 change SPI draws; measure this band after each).
- Ages: assign ages beyond the FRS top band, or merge the ONS bands above it into one target the data can meet.
- The others: drop or merge the cells, or impute the missing populations.
The W3 coverage gate (a PR to follow) fails the build on a zero-signal target unless it is listed as a known gap with this issue, so the list can only shrink deliberately.
Activity
MaxGhenis commentedon Oct 15, 2026
Correction to the figures above (UK hub, 10/15). £35.5bn of employment income (21,000 people) and £11.1bn of dividends (19,000) are the 2023-24 values: HMRC's SPI Tables 3.6 and 3.7, which are the base-year row of
storage/incomes_projection.csv. The 2025 calibration targets for the £1m+ band are PolicyEngine's projection of them with its own uprating (utils/incomes_projection.py). On 1.58.1 those are £37.4bn of employment income (21,245 people) and £11.6bn of dividends (19,222). The zero-signal finding is unchanged.MaxGhenis commentedon Oct 15, 2026
Pull request (TESTING) builds have three more zero-signal targets than the release:
dwp/uc_payment_dist/SINGLE_annual_payment_{24_000_to_25_200,25_200_to_26_400,27_600_to_28_800}. They had a zero national estimate in 11, 11 and 12 of 12 recent PR builds' final calibration logs, but have signal in the released 1.58.1 build. #595 lists them as known gaps.