Analyze effective take-up rates across all benefit programs
Background
We currently seed benefit take-up rates in policyengine-uk-data based on prior studies. However, these rates change as a result of:
- Reweighting processes
- Integrating SPI (Survey of Personal Incomes) data
Current Analysis
We have an initial analysis for Universal Credit and Child Tax Credit: https://gist.github.com/MaxGhenis/763db9278ddecdf310f160a73e138c8a
Request
We need a comprehensive analysis of effective take-up rates across all benefit programs in the UK model, including but not limited to:
- Universal Credit (UC)
- Child Tax Credit (CTC)
- Working Tax Credit (WTC)
- Pension Credit
- Housing Benefit
- Council Tax Support/Reduction
- Child Benefit
- Income Support
- Jobseeker's Allowance (JSA)
- Employment and Support Allowance (ESA)
- Personal Independence Payment (PIP)
- Disability Living Allowance (DLA)
- Attendance Allowance
- Carer's Allowance
- State Pension
Deliverables
- Documentation of initial seeded take-up rates (from prior studies)
- Calculation of effective take-up rates after reweighting and SPI integration
- Comparison between seeded vs. effective rates
- Analysis of how data processing steps affect take-up assumptions
- Recommendations for any adjustments needed
This will help us understand how our data processing pipeline affects benefit modeling and ensure our simulations reflect realistic take-up patterns.
Converting to discussion instead
@policyengine could you try doing this
I ran into an issue:
Claude Code timed out after 600s
@policyengine try doing this (you have a timeout of 10m so do it quickly)
Benefit Take-Up Rates Analysis
I analyzed the take-up rate parameters in policyengine-uk. Here's what I found:
Current Seeded Take-Up Rates
| Benefit | Take-Up Rate | Source/Notes |
|---|---|---|
| Universal Credit | 55% | Since 2015 |
| Pension Credit | 70% | DWP estimates 2019-20 |
| Child Benefit | 89% | 2022 release (97% in 2012) |
| JSA (Income-based) | 56% | DWP 2015-16 (was 69% in 2009) |
| Marriage Allowance | 100% | Default |
Legacy Benefits (100% - closed to new claims)
- Child Tax Credit
- Working Tax Credit
- Housing Benefit
- Income Support
These are set to 100% because only existing claimants are tracked (no new claims allowed).
Benefits WITHOUT explicit take-up rates
The following use reported values from survey data without applying a separate take-up model:
- ESA (Income/Contributory)
- PIP (Daily Living/Mobility)
- DLA (Self-care/Mobility)
- Attendance Allowance
- Carer's Allowance
- State Pension
- Council Tax Support/Benefit
How Take-Up Works in the Model
Take-up is applied via would_claim_* variables that use random sampling:
takes_up = random(benunit) < parameters(period).gov.dwp.universal_credit.takeup_rate
For Pension Credit specifically, it's more sophisticated - if someone reports receiving PC or newly becomes eligible, take-up is applied probabilistically.
Recommendations for Full Analysis
To calculate effective take-up rates after reweighting/SPI integration, you'd need to:
- Compare reported vs eligible: For each benefit, calculate the ratio of people reporting receipt to those who would be eligible at 100% take-up
-
Run against the enhanced FRS dataset: Using
policyengine-uk-data, compare:- Sum of
[benefit]_reported(weighted) - Sum of
[benefit]_entitlementat 100% take-up (weighted)
- Sum of
- Use official totals for validation: DWP publishes aggregate expenditure figures that can be compared to model outputs
This would require running simulations against the actual dataset (not just analyzing parameters), which I can't do within the time constraint. The referenced gist by @MaxGhenis appears to do this for UC and CTC specifically.
Key Files
-
policyengine_uk/parameters/gov/dwp/*/takeup*.yaml- Take-up parameters -
policyengine_uk/variables/gov/dwp/would_claim_*.py- Take-up logic -
policyengine_uk/variables/gov/dwp/*_reported.py- Survey-reported benefit receipt