Every child in an SPI-synthetic household has imputed employment income. In the Enhanced FRS 2024-25 that puts £67bn of employment income (5.9% of the total) on people aged under 16.
Found while fixing PolicyEngine/policyengine-uk#1976 (Universal Credit counted dependants' income, so these earnings were cutting the parents' UC).
Evidence
Enhanced FRS 2024-25 file with sha256 e433e532… (person and household tables read directly; weights are household_weight). Aggregates only.
| Under-16 person records |
Records |
With employment_income > 0 |
Weighted children |
Employment income |
FRS-origin households (household_is_spi_synthetic false) |
12,895 |
0 |
9.45m |
£0 |
SPI-synthetic households (household_is_spi_synthetic true) |
7,856 |
7,856 (100%) |
3.63m |
£67.2bn |
The same split holds at every age below 16 (ages 0-4, 5-10 and 11-15 are each 100% in synthetic households and 0% in FRS-origin ones). At 16-17 it is 96% against 4%. In the capital-gains clones the pattern is the same, because they copy the rows.
Among these children: none has hours_worked, all have employment_status CHILD, and 69% also have savings interest. Their positive employment income has weighted quartiles of about £7,000, £18,500 and £27,000, against £9,900, £20,600 and £28,700 for people aged 16 to 24.
Synthetic households carry 27% of household weight (8.4m of 31.1m), so this is not a tail.
Mechanism (read on main at b45c373)
policyengine_uk_data/datasets/imputations/income.py:
impute_income copies the whole FRS, sets the copy's weight to 0, flags it household_is_spi_synthetic and subsamples it to 10,000 households (lines 261-265). Children stay in the copy.
- It then calls
impute_over_incomes(zero_weight_copy, model, IMPUTATIONS) (lines 271-275). That function takes age, gender and region for every person in the dataset, runs model.predict, and overwrites each income component with the prediction (lines 218-222). There is no age condition.
- The model is trained on the SPI. SPI ages are drawn within
AGE_RANGES, whose lowest bound is 16 (datasets/spi.py lines 15-24), so no training row is under 16. A child is scored from age, gender and region alone, so gets the earnings of a young taxpayer.
- Nothing later removes them: the second-stage
impute_frs_only_variables uses employment_income as a predictor, the capital-gains step copies the rows, and calibration gives the synthetic households weight.
The components overwritten are employment, self-employment, savings interest, dividends, private pension and property income, plus Gift Aid and charitable investment gifts. Employment income is the large one for children. The dividend-only pass on FRS-origin rows (lines 295-299) also predicts for every person, children included (3.7% of under-16s in both halves have dividends).
What it does to results
Real policyengine-uk microsimulations for 2026 (policyengine-uk at baff2d793), on the file as built and on a copy with under-16 employment_income set to zero and nothing else changed:
| 2026 |
As built |
Under-16 earnings zeroed |
Change |
| Employment income of under-16s |
£74.0bn (3.67m children, 2.37m households) |
£0 |
|
| Household net income |
£1,764.7bn |
£1,701.6bn |
−£63.1bn |
| Household tax |
£525.9bn |
£519.2bn |
−£6.7bn (income tax charged on children) |
| Universal Credit |
£78.7bn |
£82.9bn |
+£4.2bn |
| Child poverty, AHC (aged under 18) |
24.0% |
29.3% |
+5.3 points |
| Poverty, AHC (all) |
18.8% |
21.0% |
+2.3 points |
| Child poverty, BHC |
16.1% |
19.4% |
+3.3 points |
This is a sensitivity, not a rebuilt dataset: the weights were calibrated with the children's earnings in place, so a rebuild would move them. It may bear on #487 (median income above HBAI) and #452 (UC caseload below administrative counts).
The UC line is the part policyengine-uk#1976 fixes on the model side: once UC counts only claimants' income, UC is £83.7bn with or without the children's earnings (identical for every benefit unit, 2025 to 2030).
Proposed fix
- In
impute_over_incomes, predict only for people the SPI can describe (aged 16 or over) and leave younger people's incomes at their FRS values. Apply the same condition to the dividend-only pass.
- Consider the same check for 16- and 17-year-olds in full-time non-advanced education, who are dependent children in the FRS and 96% of whom get earnings in the synthetic half (4% in the FRS half).
- Add a build test: after
impute_income, no one under 16 has employment, self-employment, pension or property income above their FRS value.
- Recalibrate, since the employment income total and the SPI targets were met with these amounts included.
How to verify
- The table above reproduces from the
person and household tables by grouping under-16 records on household_is_spi_synthetic.
- After the fix, weighted under-16 employment income is about zero and income tax paid by under-16s is about zero.
- Compare child poverty and median income with HBAI before and after.
Every child in an SPI-synthetic household has imputed employment income. In the Enhanced FRS 2024-25 that puts £67bn of employment income (5.9% of the total) on people aged under 16.
Found while fixing PolicyEngine/policyengine-uk#1976 (Universal Credit counted dependants' income, so these earnings were cutting the parents' UC).
Evidence
Enhanced FRS 2024-25 file with sha256
e433e532…(personandhouseholdtables read directly; weights arehousehold_weight). Aggregates only.employment_income> 0household_is_spi_syntheticfalse)household_is_spi_synthetictrue)The same split holds at every age below 16 (ages 0-4, 5-10 and 11-15 are each 100% in synthetic households and 0% in FRS-origin ones). At 16-17 it is 96% against 4%. In the capital-gains clones the pattern is the same, because they copy the rows.
Among these children: none has
hours_worked, all haveemployment_statusCHILD, and 69% also have savings interest. Their positive employment income has weighted quartiles of about £7,000, £18,500 and £27,000, against £9,900, £20,600 and £28,700 for people aged 16 to 24.Synthetic households carry 27% of household weight (8.4m of 31.1m), so this is not a tail.
Mechanism (read on
mainatb45c373)policyengine_uk_data/datasets/imputations/income.py:impute_incomecopies the whole FRS, sets the copy's weight to 0, flags ithousehold_is_spi_syntheticand subsamples it to 10,000 households (lines 261-265). Children stay in the copy.impute_over_incomes(zero_weight_copy, model, IMPUTATIONS)(lines 271-275). That function takesage,genderandregionfor every person in the dataset, runsmodel.predict, and overwrites each income component with the prediction (lines 218-222). There is no age condition.AGE_RANGES, whose lowest bound is 16 (datasets/spi.pylines 15-24), so no training row is under 16. A child is scored from age, gender and region alone, so gets the earnings of a young taxpayer.impute_frs_only_variablesusesemployment_incomeas a predictor, the capital-gains step copies the rows, and calibration gives the synthetic households weight.The components overwritten are employment, self-employment, savings interest, dividends, private pension and property income, plus Gift Aid and charitable investment gifts. Employment income is the large one for children. The dividend-only pass on FRS-origin rows (lines 295-299) also predicts for every person, children included (3.7% of under-16s in both halves have dividends).
What it does to results
Real policyengine-uk microsimulations for 2026 (policyengine-uk at
baff2d793), on the file as built and on a copy with under-16employment_incomeset to zero and nothing else changed:This is a sensitivity, not a rebuilt dataset: the weights were calibrated with the children's earnings in place, so a rebuild would move them. It may bear on #487 (median income above HBAI) and #452 (UC caseload below administrative counts).
The UC line is the part policyengine-uk#1976 fixes on the model side: once UC counts only claimants' income, UC is £83.7bn with or without the children's earnings (identical for every benefit unit, 2025 to 2030).
Proposed fix
impute_over_incomes, predict only for people the SPI can describe (aged 16 or over) and leave younger people's incomes at their FRS values. Apply the same condition to the dividend-only pass.impute_income, no one under 16 has employment, self-employment, pension or property income above their FRS value.How to verify
personandhouseholdtables by grouping under-16 records onhousehold_is_spi_synthetic.