PolicyEngine / PolicyEngine/microcosm
Jointly calibrate ACA take-up to CMS APTC people and SOI PTC returns
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 4
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 94
Description
Context
The current published Populace US 2024 dataset no longer has degenerate ACA inputs: takes_up_aca_if_eligible is nonconstant and selected_marketplace_plan_benchmark_ratio has real variation. The remaining ACA mismatch looks like take-up composition, not a selected amount-variable bug.
Using sim.calc on populace.data.load("us", 2024):
- CMS APTC-recipient person count: simulated
17.86Mvs target19.74M(-9.6%). - SOI PTC returns: simulated
8.39Mvs target7.84M(+6.9%). - SOI PTC amount: simulated assigned/used PTC
$56.82Bvs target$53.91B(+5.4%). used_aca_ptcandassigned_aca_ptcare effectively identical, so the issue is not a wrong comparison between assigned and used PTC.- The implied composition is off:
17.86M / 8.39M = 2.13APTC people per positive PTC tax unit, compared with19.74M / 7.84M = 2.52from CMS/SOI targets.
This is related to umbrella #70, but narrower than #74/#75/#76 and not covered by active PRs #165, #166, or #167.
Goal
Improve ACA source-stage take-up assignment so it jointly respects CMS APTC person counts and SOI PTC return/amount targets, rather than matching one surface while creating a contradictory composition on the other.
Suggested implementation
- Add an ACA diagnostic that reports:
- APTC-recipient people, using the current target semantics:
assigned_aca_ptc > 0mapped to person and filtered tois_aca_ptc_eligible. - Positive PTC tax units/returns.
- Assigned/used PTC amount.
- APTC people per positive PTC tax unit, nationally and by state where support exists.
- APTC-recipient people, using the current target semantics:
- Update the ACA take-up source-stage assignment/calibration to prefer tax units with more eligible people when needed, so the CMS APTC person target can increase without increasing SOI PTC return counts.
- Keep reported subsidized Marketplace coverage anchors preserved.
- Preserve deterministic seeded assignment.
Acceptance criteria
- Release diagnostics expose the CMS APTC people vs SOI PTC returns composition ratio.
- A focused source-runtime test covers a fixture where the solver must select fewer, larger tax units to satisfy both person-count and return-count constraints.
- The published-dataset check improves the CMS APTC-recipient person miss without worsening SOI PTC returns/amount beyond current tolerances.
- The implementation remains compatible with the current PE-US ACA take-up contract until #76 is unblocked.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with sim.calc on populace.data.load("us", 2024), then trace the ACA source-stage take-up assignment and the PE-US ACA take-up contract. Add the requested diagnostics and a focused source-runtime fixture for selecting fewer, larger tax units; done means improved CMS APTC person counts while keeping SOI returns, amounts, coverage anchors, determinism, and current tolerances intact.
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