Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/2704.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Moved the two-child limit child-poverty comparison from the validation page to PolicyEngine Scorecard, which recomputes it on a certified release; the page now documents the method and links to each Scorecard row.
230 changes: 104 additions & 126 deletions docs/book/validation/child-poverty-tcl.md
Original file line number Diff line number Diff line change
@@ -1,146 +1,124 @@
# Child poverty validation: removing the two-child limit (2029-30)
# Child poverty validation: removing the two-child limit

This page compares PolicyEngine UK's estimate of the child-poverty
impact and fiscal cost of removing the [Universal Credit two-child
limit][gov-2cl] against the published estimates from the Department for
Work and Pensions, the Office for Budget Responsibility and the Resolution
Foundation. Budget 2025 announced the removal with effect from 6 April
2026, which the
`gov.dwp.universal_credit.elements.child.limit.child_count` parameter
encodes (`.inf` from `2026-04-06`).
This page sets out how PolicyEngine UK estimates the child-poverty impact
and fiscal cost of removing the [Universal Credit two-child
limit][gov-2cl], which Budget 2025 announced from 6 April 2026. The
comparison with the published estimates from the Department for Work and
Pensions, HM Treasury and the Resolution Foundation is in [PolicyEngine
Scorecard][scorecard-lane]. Scorecard computes PolicyEngine's figures on a
certified release, states for every row whether the two concepts match,
and keeps the earlier runs in each row's history.

Tracks [#1398](https://github.com/PolicyEngine/policyengine-uk/issues/1398).

## Results

| Source | Children lifted from relative low income (2029-30) | Treasury cost (2029-30) |
|--------|----------------------------------------:|------------------------:|
| [DWP poverty impact assessment][gov-2cl] (children); [Budget 2025, Table 1.2][budget-2025] (cost, OBR-certified) | 450,000 (AHC); 300,000 (BHC) | £3.1 bn |
| [Resolution Foundation *No half measures*][rf-nhm] | 480,000 (AHC) | £3.5 bn |
| **PolicyEngine UK, Microcosm UK 2024-25 (AHC)** | **~548,000** | **£3.21 bn** |
| **PolicyEngine UK, Microcosm UK 2024-25 (BHC)** | **~460,000** | (same) |

All the figures are relative low income: below 60% of the contemporary
median. The PolicyEngine rows count HBAI dependent children
(`is_hbai_dependent_child`), as DWP does, and were run on 23 October 2026
on policyengine-uk 2.148.3 (main at `c65bced64`) with the certified
Microcosm UK 2024-25 national release (`microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71`, SHA-256
`810ba980…`). On that run PolicyEngine's headcounts are above DWP's and the
Resolution Foundation's, and its cost sits between the Budget 2025 and
Resolution Foundation figures.

On absolute low income the same run lifts ~549,000 children after housing
costs and ~325,000 before, against DWP's 250,000 on both measures (Tables 3
and 4). These are not like for like: PolicyEngine's absolute line is
60% of the FYE 2025 median held constant in real terms, the reference year
HBAI adopted in March 2026, while DWP's note predates that change and cites
the FYE 2024 HBAI methodology, whose line is 60% of the FYE 2011 median.

Earlier versions of this page reported ~463,000 (AHC) and ~336,000 (BHC)
children and £3.26 bn on an earlier Microcosm UK release (SHA-256
`aa31bdf6…`, policyengine-uk 2.123.7), and ~501,000, ~415,000 and £3.40 bn
on the Enhanced FRS 2022-23 in May 2026. The snippet those versions showed
computed only the after-housing-costs figure, using `in_poverty_ahc`
(absolute low income) and counting children with `is_child` (everyone under
18), so at least those figures are not comparable with the relative
benchmarks above; the code for the before-housing-costs figures was not
shown.

## How the estimate was produced
## The comparison in Scorecard

| Benchmark | Scorecard row |
|---|---|
| DWP: children in relative low income, after housing costs, FYE 2030 (Table 1) | [row][dwp-rel-ahc] |
| DWP: children in relative low income, before housing costs, FYE 2030 (Table 2) | [row][dwp-rel-bhc] |
| DWP: children in absolute low income, after housing costs, FYE 2030 (Table 3) | [row][dwp-abs-ahc] |
| DWP: children in absolute low income, before housing costs, FYE 2030 (Table 4) | [row][dwp-abs-bhc] |
| DWP: children in gaining households, FYE 2030 | [row][dwp-gainers] |
| HM Treasury: static Exchequer cost, 2029-30 | [row][hmt-static] |
| HM Treasury: post-behavioural cost, 2029-30 (the £3.1 billion in Budget 2025 Table 1.2) | [row][hmt-post] |
| Resolution Foundation, *No half measures*: children, 2029-30 | [row][rf-children] |
| Resolution Foundation, *No half measures*: cost, 2029-30 | [row][rf-cost] |

Each row shows the published figure, PolicyEngine's value, the comparison
status and the notes that explain it. Two notes matter most:

- **The absolute line.** DWP's note uses the FYE 2011 reference year (60%
of the FYE 2011 median, held constant in real terms). PolicyEngine UK's
`in_poverty_*` use the FYE 2025 reference. The FYE 2011 line is
`in_absolute_poverty_fye2011_*` from policyengine-uk 2.155.0. The
certified release Scorecard runs on predates that, so Scorecard
constructs the FYE 2011 line for the comparison.
- **Static and post-behavioural costs.** PolicyEngine's cost is static, so
it compares with HM Treasury's static leg. The £3.1 billion includes a
behavioural adjustment.

Scorecard also records a [decomposition][decomposition] of how the
estimate moved between PolicyEngine's September and October 2026 figures:
how much came from the data, the model version, the child count and the
relative-line convention, and which policyengine-uk releases moved it.

## The reform

The `gov.dwp.universal_credit.elements.child.limit.child_count` parameter
is 2 from 6 April 2017 and infinite from 6 April 2026. Current law already
removes the limit, so the estimate compares two worlds: current law, and
current law with the parameter set back to 2. The effect of removing the
limit is current law minus that with-limit world. A year `Y` in
PolicyEngine UK is the financial year that starts in April `Y`, so FYE
2030 is `2029`.

## The measures

- **Relative low income**: `in_relative_poverty_ahc` and
`in_relative_poverty_bhc`. These flag equivalised HBAI household income
below 60% of the median of the world being calculated, with the median
taken over people.
- **Absolute low income**: `in_poverty_ahc` and `in_poverty_bhc`. From FYE
2022 these use 60% of the FYE 2025 median, held constant in real terms.
`in_absolute_poverty_fye2011_ahc` and `in_absolute_poverty_fye2011_bhc`
use the FYE 2011 median in every year, the line in DWP's note.
- **Children**: `is_hbai_dependent_child`, HBAI's dependent children, as
DWP counts them.
- **Cost**: the change in `gov_balance` (tax less spending). The estimate
is static: the labour-supply elasticities are zero, and `would_claim_uc`
is a data input, so neither work nor take-up responds to the reform.

```python
from policyengine_uk import Microsimulation

# Local path to the Microcosm UK 2024-25 national release file.
DATASET = "microcosm_uk_2024_25.h5"
YEAR = 2029 # fiscal year 2029-30

# Current law baseline (TCL removed from 2026-04-06 per Budget 2025)
sim_baseline = Microsimulation(dataset=DATASET)

# Counterfactual where the TCL is held in place at 2 children
sim_counter = Microsimulation(
dataset=DATASET,
reform={
"gov.dwp.universal_credit.elements.child.limit.child_count": {
f"{YEAR}-01-01": 2,
},
},
)
import policyengine as pe

YEAR = 2029 # FY 2029-30 (FYE 2030)
LIMIT = "gov.dwp.universal_credit.elements.child.limit.child_count"

# HBAI dependent children, as in DWP's statistics.
is_child = sim_baseline.calculate("is_hbai_dependent_child", YEAR)
current_law = pe.uk.managed_microsimulation()
with_limit = pe.uk.managed_microsimulation(reform={LIMIT: {"2025-01-01.2035-12-31": 2}})

for measure in ["in_relative_poverty_ahc", "in_relative_poverty_bhc"]:
baseline = sim_baseline.calculate(measure, YEAR, map_to="person")
counter = sim_counter.calculate(measure, YEAR, map_to="person")
lifted = ((counter.astype(float) - baseline.astype(float)) * is_child).sum()
print(f"{measure} children lifted: {lifted / 1e3:.0f}k")
children = current_law.calculate("is_hbai_dependent_child", YEAR)
for measure in ("in_relative_poverty_ahc", "in_relative_poverty_bhc"):
lifted = (
with_limit.calculate(measure, YEAR, map_to="person").astype(float)
- current_law.calculate(measure, YEAR, map_to="person").astype(float)
) * children
print(measure, lifted.sum())

fiscal_cost = (
sim_counter.calculate("gov_balance", YEAR).sum()
- sim_baseline.calculate("gov_balance", YEAR).sum()
cost = (
with_limit.calculate("gov_balance", YEAR).sum()
- current_law.calculate("gov_balance", YEAR).sum()
)
print(f"Treasury cost: £{fiscal_cost / 1e9:.2f}bn")
print("cost", cost)
```

This is a *reverse* comparison: PolicyEngine's baseline already includes
the TCL removal (the parameter flips to infinity from 2026-04-06), so the
counterfactual *re-imposes* the limit at 2 children to compute the
2029-30 effect. The signs cancel out: the children-lifted figure is
positive (baseline has fewer in poverty than counterfactual) and the
Treasury cost is positive (the baseline pays more Universal Credit, so its
`gov_balance`, tax less spending, is lower than the counterfactual's).

## Why the estimates differ

Three plausible drivers of the remaining differences:

1. **Nowcasting methodology**. RF projects incomes with its own nowcast,
with private rents rising in line with average earnings after a
12-month lag and its own after-housing-costs deflator; DWP uses its
static Policy Simulation Model on the FRS for FYE 2022 to 2024 with its
caseload forecasts. See the
[PolicyEngine vs RF comparison](../assumptions/nowcasting-comparison.md)
and the [RF methodology detail](../assumptions/rf-nowcasting-methodology.md)
for where PolicyEngine's nowcasting differs from RF's.
2. **Take-up assumptions**. PolicyEngine decides Universal Credit claims
with flags set in the data, which do not respond to the reform: a family
claims if `would_claim_uc` is true, or if DWP has moved it off a closed
legacy benefit it reports (tax credits, Income Support or income-based
Jobseeker's Allowance; `legacy_benefits_closed`, which leaves out
families sent to Pension Credit instead) and
`would_claim_uc_at_legacy_closure` is true.
The data set `would_claim_uc` for every family that reports Universal
Credit and draw it at a residual rate for the rest, so newly entitled
families claim at that residual rate unless they reported a closed
legacy benefit. A
source that assumes lower take-up among newly entitled families would
show a smaller headcount and cost.
3. **Data and calibration vintage**. The DWP and OBR estimates were
finalised against the OBR's November 2025 forecast, and RF's
(30 October 2025) against the OBR's March 2025 earnings forecast and the
Bank of England's August 2025 inflation forecast; PolicyEngine's
parameters tick over with each EFO release. The Microcosm release is
built from FRS 2024-25, with take-up anchored on reported receipt.

## How to keep this validation alive

- Re-run the snippet on each new Microcosm UK release, and when the
remaining `would_claim_*` conversions (#1621) land. Both could move the
AHC poverty rate by a non-trivial amount.
- After each new EFO release, update the per-year poverty headcounts and
the fiscal cost table.
`pe.uk.managed_microsimulation()` loads the dataset pinned by the
installed policyengine.py release. Each release certifies that dataset
with one policyengine-uk version, which `policyengine[uk]` installs:
6.11.0, the release Scorecard uses, pins policyengine-uk 2.132.6. Scorecard's
[`compute_uk_two_child_limit_poverty.py`][compute] runs the same
comparison for every year, measure and group the benchmarks use.

## References

- HM Treasury, [Budget 2025][budget-2025], Table 1.2: the OBR-certified cost of removing the two-child limit (£3.1 billion in 2029-30).
- OBR, [Economic and Fiscal Outlook November 2025][obr-efo].
- DWP, [Removing the two-child limit on Universal Credit: impact on low income poverty levels in the United Kingdom][gov-2cl] (26 November 2025), Tables 1 to 4.
- HM Treasury, [Budget 2025][budget-2025], Table 1.2.
- Resolution Foundation, [No half measures: setting child poverty on a downward course at the Autumn Budget][rf-nhm] (30 October 2025).
- DWP, [Removing the two-child limit on Universal Credit: impact on low income poverty levels in the United Kingdom][gov-2cl], Tables 1 and 2 (relative low income) and 3 and 4 (absolute low income), financial year ending 2030.
- Issue: [#1398](https://github.com/PolicyEngine/policyengine-uk/issues/1398). Related: [#1171](https://github.com/PolicyEngine/policyengine-uk/issues/1171), [#1388](https://github.com/PolicyEngine/policyengine-uk/issues/1388).

[obr-efo]: https://obr.uk/efo/economic-and-fiscal-outlook-november-2025/
[gov-2cl]: https://www.gov.uk/government/publications/poverty-impacts-of-social-security-changes-at-budget-2025/removing-the-two-child-limit-on-universal-credit-impact-on-low-income-poverty-levels-in-the-united-kingdom
[budget-2025]: https://www.gov.uk/government/publications/budget-2025-document/budget-2025-html
[rf-nhm]: https://www.resolutionfoundation.org/publications/no-half-measures/
[gov-2cl]: https://www.gov.uk/government/publications/poverty-impacts-of-social-security-changes-at-budget-2025/removing-the-two-child-limit-on-universal-credit-impact-on-low-income-poverty-levels-in-the-united-kingdom
[scorecard-lane]: https://www.policyengine.org/scorecard/?country=uk&view=validation
[dwp-rel-ahc]: https://www.policyengine.org/scorecard/?country=uk&view=validation&claim=2f90d6562b5cf8008c94
[dwp-rel-bhc]: https://www.policyengine.org/scorecard/?country=uk&view=validation&claim=d840d48b5aa86092e053
[dwp-abs-ahc]: https://www.policyengine.org/scorecard/?country=uk&view=validation&claim=0953bfed29bf91c21076
[dwp-abs-bhc]: https://www.policyengine.org/scorecard/?country=uk&view=validation&claim=f0db70b0fc559137b2b8
[dwp-gainers]: https://www.policyengine.org/scorecard/?country=uk&view=validation&claim=c95c29a868535490a0e4
[hmt-static]: https://www.policyengine.org/scorecard/?country=uk&view=validation&claim=67f3e4d6a1070d902798
[hmt-post]: https://www.policyengine.org/scorecard/?country=uk&view=validation&claim=97d6c677b464338f8233
[rf-children]: https://www.policyengine.org/scorecard/?country=uk&view=validation&claim=5cd40f11fde6cd6df668
[rf-cost]: https://www.policyengine.org/scorecard/?country=uk&view=validation&claim=a05d61066f4bc096db86
[decomposition]: https://github.com/PolicyEngine/policyengine-scorecard/blob/main/results/uk/two_child_limit_poverty/DECOMPOSITION.md
[compute]: https://github.com/PolicyEngine/policyengine-scorecard/blob/main/pipeline/compute_uk_two_child_limit_poverty.py
7 changes: 4 additions & 3 deletions docs/book/validation/reform-impacts-dashboard-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,9 @@ Add to v2 over time as published OBR / RF reforms become available
benchmarks:

- Reinstate the two-child limit. The baseline removes it from 6 April
2026, and [child-poverty-tcl.md](child-poverty-tcl.md) compares its
removal with the DWP, Budget 2025 and Resolution Foundation estimates.
2026, and [child-poverty-tcl.md](child-poverty-tcl.md) links to
Scorecard's comparison of its removal with the DWP, HM Treasury and
Resolution Foundation estimates.
- Freeze the Personal Allowance for an additional year (to 2031-32, so
it needs a later reference year than 2029).
- 1pp employer NI change.
Expand Down Expand Up @@ -197,7 +198,7 @@ relevant pages are:

- [nowcasting-comparison.md](../assumptions/nowcasting-comparison.md) (PolicyEngine vs RF).
- [rf-nowcasting-methodology.md](../assumptions/rf-nowcasting-methodology.md) (RF methodology detail).
- [child-poverty-tcl.md](child-poverty-tcl.md) (the child-poverty impact and cost of removing the two-child limit, against DWP, Budget 2025 and Resolution Foundation estimates).
- [child-poverty-tcl.md](child-poverty-tcl.md) (how PolicyEngine UK estimates the child-poverty impact and cost of removing the two-child limit, with links to Scorecard's comparison against DWP, HM Treasury and Resolution Foundation estimates).

## Open questions

Expand Down
4 changes: 3 additions & 1 deletion docs/book/validation/two-child-limit-full-rollout.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ This page shows how to reproduce published estimates of reforming the
Universal Credit two-child limit that assume the limit is **fully rolled
out**, such as the IFS Green Budget 2025 comment [Options for reforming the
two-child limit][ifs-2025], and how PolicyEngine UK's results compare. For
the 2029-30 comparison with DWP, OBR and Resolution Foundation estimates, see
how PolicyEngine UK estimates removing the limit in 2029-30, with links to
Scorecard's comparison against DWP, HM Treasury and Resolution Foundation
estimates, see
[Child poverty validation: removing the two-child limit](child-poverty-tcl.md).

## Settings that matter
Expand Down
Loading