PolicyEngine / PolicyEngine/microcosm

Investigate ACA take-up and plan-choice inputs driving high PTC estimates

Open
#70 1 comment 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

Context

PR #68 fixes several healthcare target-mapping bugs in the fiscal target registry. This issue tracks the remaining ACA data/calibration concerns that are intentionally out of scope for that PR.

What I observed

Using the published 2024 Populace dataset in a PolicyEngine-US microsimulation:

  • takes_up_aca_if_eligible is true for every tax unit in the released HDF5.
  • selected_marketplace_plan_benchmark_ratio is 1.0 for every tax unit in the released HDF5.
  • Because of those inputs, assigned_aca_ptc, used_aca_ptc, and raw aca_ptc are identical in the current dataset.
  • Total PTC is about $92.10B, and positive PTC returns are about 12.95M tax units.

Compared with the SOI TY2022 all-income PTC targets:

  • PTC amount target: $53.91B; current sim: $92.10B (+70.8%).
  • PTC returns target: 7.84M; current sim: 12.95M (+65.2%).
  • Average PTC per positive return is not wildly off: target is about $6.9k, current sim is about $7.1k. So the main issue appears to be too many positive PTC returns, not credits that are too large conditional on receipt.

The excess is concentrated in middle/high AGI bins:

  • $75k-$100k: 1.94M positive returns vs 0.47M target.
  • $100k-$200k: 2.16M positive returns vs 0.36M target.
  • $200k-$500k: 0.31M positive returns vs 0 target.

For contrast, the CMS APTC recipient benchmark looks much better after the PR #68 mapping fix: eligible people with positive assigned PTC are about 20.24M vs the CMS target of 19.74M (+2.5%), with state-level correlation around 0.996.

Marketplace enrollment is still a separate concern. The reported Marketplace coverage input is about 8.77M people vs the CMS target of 21.45M. A direct-purchase union gets closer nationally but looks worse state-by-state, so this should be handled as a data/calibration design question rather than a simple variable-map change.

Why PR #68 does not cover this

PR #68 fixes cases where targets were wired to variables with the wrong semantics. The remaining ACA concern is different: the current dataset appears to have degenerate ACA take-up and selected-plan inputs. Even after mapping targets to assigned_aca_ptc, the model still overstates SOI PTC returns/spending because everyone eligible is effectively assumed to take up ACA coverage and select a benchmark-like plan.

Suggested next steps

  • Locate where takes_up_aca_if_eligible and selected_marketplace_plan_benchmark_ratio are generated or defaulted; this may be outside PolicyEngine/populace.
  • Add a dataset diagnostic or release check that flags degenerate health input columns, especially all-true take-up and all-1.0 plan ratio.
  • Reproduce the SOI PTC amount/return diagnostics after PR #68 merges, so target mappings and source data issues are separated cleanly.
  • Decide what the CMS marketplace enrollment benchmark should calibrate: reported Marketplace coverage, modeled ACA take-up, direct-purchase coverage, or some combined construct.
  • Design an ACA take-up/plan-choice imputation or calibration strategy that jointly considers CMS enrollment, CMS APTC recipients, and SOI PTC amount/return targets.

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 in PolicyEngine/populace by locating where takes_up_aca_if_eligible and selected_marketplace_plan_benchmark_ratio are generated or defaulted. Reproduce the SOI PTC amount and return diagnostics after PR #68, then define a diagnostic or release check for degenerate inputs and document the agreed ACA take-up and plan-choice calibration strategy.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data
Issue type
Bug
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.