PolicyEngine / PolicyEngine/microcosm

No take-up modeling on state credits: flat per-return credits overshoot actuals by the full take-up gap (CA YCTC +39%)

Open
#341 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
0
Forks
4
Avg merge
1d 3h
Merged PRs (30d)
94

Description

From the 2026-07 external-benchmark audit: the state-program validation suite exposes a systematic overshoot on flat per-return credits, with take-up as the proven mechanism.

Evidence (release populace-us-2024-sparse-l0-refit-57k-71a0887-national-only-20260701)

CA YCTC: sim $572.9M vs FTB TY2023 actual $413M (+38.7%), decomposed on the same data:

  • ~6pp benchmark vintage (max $1,117→$1,154, phase-out start $25,775→$26,626: +6.2% measured)
  • ~30pp take-up: the model pays every eligible unit — 546-559k eligible units vs FTB's 398,059 actual returns (claim/eligible 0.71-0.73, consistent with published take-up: CalEITC 54% among SNAP-enrolled, CPL/JPubE 2023; federal EITC ~75% in CA, PPIC)
  • Per-unit amounts align ($1,025 sim vs $1,037 actual) — the gap is purely excess unit count
  • Demographics ruled out: weighted CA under-6 is 6.2% below ACS 2024 (2.350M vs 2,504,028), which actually masks ~6pp of the take-up gap

No take-up gate exists anywhere on the CA/CO state-credit path (ca_yctc.py pays eligible × amount), and the release H5's tax_unit table carries only takes_up_aca_if_eligible — populace's take_up.py seeds only federal EITC/TANF flags and none are in this artifact.

Why flat credits are the exposure class

Amount-driven credits partially self-correct: CalEITC itself runs −12.9% with no take-up because over-counted marginal claimants carry tiny average amounts (5.78M eligible-proxy units at ~$142 avg vs 3,340,639 actual claims at $282 avg) — over-counting and under-concentration roughly cancel on a hump-shaped schedule. A flat ~$1.1k-per-return credit has no such cancellation: every excess eligible unit adds full dollars, so the take-up gap passes straight to the total.

Contrast case: CO CTC +30.4% is NOT take-up — replicating pre-HB23-1112 TY2023 law on the same data reproduces the DOR actual to the dollar ($89.2M); that row's gap is entirely benchmark vintage (flat-amount restructure effective TY2024). Documented in the spec.

Suggested action

Seed take-up flags for state credits (parity with the federal EITC/TANF pattern in take_up.py), prioritizing flat per-return credits — the class where absence of take-up binds one-for-one. Candidate rates from published sources per state (CA YCTC implied 0.71-0.73). The state-program validation suite gives an immediate before/after scorecard.

🤖 Generated with Claude Code

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with take_up.py and the CA state-credit path in ca_yctc.py, then run the state-program validation suite against the cited release. Define published take-up rates for the targeted state credits and seed the corresponding flags; done means the suite provides a before/after scorecard and flat-credit totals no longer assume every eligible unit claims.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.