policyengine-uk icon indicating copy to clipboard operation
policyengine-uk copied to clipboard

Analyze effective take-up rates across all benefit programs

Open MaxGhenis opened this issue 5 months ago • 1 comments

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

  1. Documentation of initial seeded take-up rates (from prior studies)
  2. Calculation of effective take-up rates after reweighting and SPI integration
  3. Comparison between seeded vs. effective rates
  4. Analysis of how data processing steps affect take-up assumptions
  5. 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.

MaxGhenis avatar Oct 05 '25 14:10 MaxGhenis

Converting to discussion instead

MaxGhenis avatar Oct 05 '25 14:10 MaxGhenis

@policyengine could you try doing this

nwoodruff-co avatar Dec 08 '25 09:12 nwoodruff-co

I ran into an issue:

Claude Code timed out after 600s

policyengine[bot] avatar Dec 08 '25 09:12 policyengine[bot]

@policyengine try doing this (you have a timeout of 10m so do it quickly)

nwoodruff-co avatar Dec 08 '25 14:12 nwoodruff-co

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:

  1. Compare reported vs eligible: For each benefit, calculate the ratio of people reporting receipt to those who would be eligible at 100% take-up
  2. Run against the enhanced FRS dataset: Using policyengine-uk-data, compare:
    • Sum of [benefit]_reported (weighted)
    • Sum of [benefit]_entitlement at 100% take-up (weighted)
  3. 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

policyengine[bot] avatar Dec 08 '25 14:12 policyengine[bot]