Apply HMRC's payment-active fraction to the Tax-Free Childcare top-up - #1833
Apply HMRC's payment-active fraction to the Tax-Free Childcare top-up#1833vahid-ahmadi wants to merge 1 commit into
Conversation
childcare_expenses is an annual figure, and the model credited every claimant with a full year of it. HMRC's own statistics show that is not what happens: a claimant's account pays a provider in about seven months of twelve. HMRC publishes both a monthly and an annual count of children with used accounts, and defines a used account as one from which a payment was made to a provider in the period. The annual count is not the sum of the monthly counts, because a child appears in every month containing a payment but only once in the year. The ratio of the two is therefore the mean number of months an account actually pays, as a share of the year: year sum of monthly annual unique months fraction 2018-19 1,193,065 203,215 5.87 0.489 2019-20 2,579,660 396,365 6.51 0.542 2020-21 2,610,450 461,705 5.65 0.471 2021-22 4,466,690 646,940 6.90 0.575 2022-23 5,863,685 836,220 7.01 0.584 2023-24 6,833,825 966,120 7.07 0.589 2024-25 7,715,605 1,085,020 7.11 0.593 2025-26 8,042,540 1,151,515 6.98 0.582 Source: HMRC, Tax-Free Childcare statistics: March 2026, Table 2. The 2020-21 dip is the pandemic; the series is otherwise stable at 0.58-0.59 from 2021-22. Applied to the spend and to the cap alike. The cap is statutorily per entitlement period rather than per year, so a period without payments forfeits that period's cap rather than carrying it forward. On enhanced_frs_2024_25 at 2024 this takes Tax-Free Childcare spending from 1.87x its calibration target to 1.11x, while leaving the caseload unchanged at 1.02x — the fraction changes how many months an account pays, not whether a family claims at all. That resolves a gap no take-up rate could close, since take-up moves spending and caseload together and caseload was already on target. Two caveats, recorded in the parameter file. HMRC notes the date a payment is made need not be the date childcare was received, so this measures payment activity rather than care received. And it is a mean over a mix of full-year and short-spell claimants, so it reproduces the aggregate rather than the spread. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011NKBpgpwwY5ZXHUwh1GJQT
|
@juaristi22 — review please when you have a moment. This is the follow-up you proposed on PolicyEngine/policyengine-uk-data#472, implemented as a distinct parameter rather than by overloading Two things worth your attention specifically, since both are places I could be wrong: The fraction is applied to the cap as well as the spend. My reasoning is that the Tax-Free Childcare cap is statutorily per entitlement period (£500 a quarter), not an annual allowance, so a quarter without payments forfeits that quarter's cap rather than carrying it forward. This matters materially rather than being a detail: applied to the spend alone, spending falls 33% instead of 41%, because the 19% of children at the cap do not move at all. If you think the cap should not be pro-rated, the result changes from 1.11× to 1.25× and the PR no longer closes the gap. I used the children construction, not families. Your 7.11 months (children, 2024-25) rather than the 7.6 I originally derived from families. I verified it from HMRC Table 2 directly and extended it to a full series — the children and families constructions differ by about 0.05 consistently, and I took children as the right basis for a per-child award. Worth a second opinion. I have also corrected the record on #472: my |
|
Superseded by a restructured version: the empirical fraction belongs in |
juaristi22
left a comment
There was a problem hiding this comment.
Adversarial review — blocking findings
The HMRC count arithmetic is mostly correct, but two source/implementation problems are blocking.
C1 — Monthly provider-payment activity does not establish quarterly cap usage (tax_free_childcare.py:52-70).
The new ratio measures months in which a payment was made from an account to a provider. The statutory cap instead applies to qualifying payments into the account during a three-month entitlement period. HMRC’s own TFC35300 example says a £5,000 deposit can leave £3,000 in the excess account, with £2,000 receiving top-up in the next entitlement period. That contradicts the code comment that a period without provider payments forfeits its cap.
Because both contribution and max_amount are multiplied by active_fraction, this is algebraically a uniform award scaler: min(f*a, f*b) = f*min(a,b). It cuts a standard cap-bound 2025 award from £2,000 to £1,164 without a source establishing that 58.2% of quarterly cap entitlement is used.
Please apply the duration proxy to modeled spend only unless a separate quarterly deposit/top-up exposure can be sourced.
Sources:
C2 — The launch-year parameter uses the wrong year’s value (payment_active_fraction.yaml:3-4).
HMRC Table 2 gives 2017-18 monthly used-account counts totaling 308,300 and 71,515 annual-unique children: 308,300 / 71,515 / 12 = 0.359249.
The YAML instead applies 0.489, the 2018-19 value, from 2017-04-01. That overstates the launch-year factor by about 36%. Add the actual 2017-18 value, start 0.489 in 2018-19, and test both years.
Source: HMRC March 2026 statistics and Table 2 ODS.
Should address
- HMRC changed the used-account methodology around April 2025. The PR’s 2024-25 ratio combines monthly and annual figures that are not fully definition-consistent. Quantify the effect or use a consistent-year construction. See the HMRC quality report.
- The ratio counts active months but does not weight them by payment value. It is an aggregate duration proxy, not a directly observed share of annual expenditure.
- Re-score after resolving #1832. The reported 1.11×-target result inherits PR 1830’s disputed 25%-of-gross formula, so target agreement is not stable corroboration. Using the PR’s own aggregate figures, I infer that fixing the gross formula and applying activity to spend only is roughly 1.07× target, while also scaling the cap is roughly 0.93×.
Validation: 17 focused and 375 broader HMRC tests passed; parameter metadata and Ruff passed; git diff --check passed. GitHub showed no checks attached to head 50bb8dad.
The problem
childcare_expensesis an annual figure, and the model credits every claimant with a full year of it. HMRC's own statistics say otherwise: a claimant's account pays a provider in about seven months of twelve.Where the number comes from
Source: HMRC, Tax-Free Childcare statistics: March 2026 — Table 2, "Numbers of Children with Open and Used Tax-Free Childcare Accounts and Government Top-up" (accompanying tables, ODS).
HMRC publishes both a monthly and an annual count of children with used accounts, and defines a used account as one from which a payment was made to a childcare provider in the relevant period. HMRC states explicitly that the annual count is not the sum of the monthly counts, because a child appears in every month containing a payment but only once in the year.
The ratio of the two is therefore the mean number of months an account actually pays a provider, as a share of the year:
The 2020-21 dip is the pandemic. The series is otherwise stable at 0.58–0.59 from 2021-22. Each value takes effect from the start of the financial year it measures, so the parameter is a time series rather than a single constant. The full derivation and the table are reproduced in
payment_active_fraction.yamlalongside the references.Applied to the cap as well as the spend
The Tax-Free Childcare cap is statutorily per entitlement period (£500 a quarter, £2,000 a year; £1,000 and £4,000 for a disabled child), not an annual allowance. A period without payments forfeits that period's cap rather than carrying it forward, so the fraction applies on the same basis as the spend.
This matters materially. Applied to the spend alone, spending falls only 33% rather than 41%, because the 19% of children at the cap do not move — the correction would be incomplete precisely where awards are largest.
Effect
enhanced_frs_2024_25at 2024, againstpolicyengine-uk-data's own calibration targets:Caseload is untouched, as it should be: the fraction changes how many months an account pays, not whether a family claims at all.
That combination is the point. Tax-Free Childcare has been missing its spending target while hitting its caseload target, and no take-up rate can fix that — take-up moves both together, so the rate that lands spending (about 0.43) drops caseload to 0.55× of target. Sweeping the rate on the built dataset:
The residual was always the award, not the number of claimants. See PolicyEngine/policyengine-uk-data#470.
An independent check: the correction the model needs is 1 ÷ 1.70 = 0.588; HMRC's observed fraction is 0.593. Two unrelated routes — one from the model's error against its targets, one from published administrative data — agreeing to within 1%.
Caveats, recorded in the parameter file
Testing
Existing expectations in
tax_free_childcare.yamlare restated at the new values with the arithmetic shown inline, and three tests are added: the fraction reducing a below-cap top-up, pro-rating a cap-bound one, and tracking the year it is measured on (2024 uses 0.593, 2025 uses 0.582).ruff formatclean.