You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-up to #618 (ACA marketplace bronze-selection target ETL).
Context
#618 adds state-level calibration targets for (a) total APTC-taking marketplace tax units and (b) bronze-plan subset, derived from CMS 2024 state-metal data. That constrains the aggregate distribution of the microsim weights.
What's still missing is a per-household value for selected_marketplace_plan_benchmark_ratio (currently an input variable defaulting to 1.0, meaning "silver benchmark" for everyone). Without a populated per-household ratio, the rules-based marketplace_net_premium (PolicyEngine/policyengine-us#8105) returns the silver-benchmark net premium regardless of which plan a household actually picked. That overstates OOP for bronze pickers (~35% of enrollees) and understates it for gold pickers.
Approach: back-out from CPS reported premium
For Marketplace enrollees in CPS, the reported premium is (approximately) the net premium paid after APTC. The accounting identity:
Read the CPS reported premium (annualize if monthly).
Compute SLCSP at the household's state, year, and family composition.
Compute PolicyEngine's PTC given income, filing status, ages, and SLCSP.
Set selected_marketplace_plan_benchmark_ratio = (cps_premium + computed_ptc) / slcsp.
Clip to a reasonable window (e.g., 0.5 to 1.5) to handle measurement noise / Marketplace-flag confusion.
Non-Marketplace households keep the default 1.0 (won't affect their computed net premium because selected_marketplace_plan_premium_proxy is zeroed by takes_up_aca_if_eligible gating).
Where it lives
us-data imputation step. Most likely in policyengine_us_data/db/etl_* as a new etl_marketplace_plan_selection.py or as additions to an existing health-coverage ETL.
Caveats
Marketplace flag noise — CPS respondents confuse Marketplace with Medicaid, CHIP, employer coverage. Use the cleanest available CPS coverage-source flag (COV_MRK / MRKS style). Clipping catches most false positives.
APTC vs reconciled PTC divergence — households receive APTC at enrollment based on projected income and reconcile at tax time against actual. Reported premium may be net-of-APTC, not net-of-reconciled. Minor noise source.
CSR silver variants — cost-sharing-reduction silver plans have reduced deductibles/copays but the plan sticker premium is the same as regular silver. The back-out still lands on silver (ratio ≈ 1.0) for these, which is correct for premium purposes even if plan value differs. No adjustment needed here.
Non-takers who report $0 premium — their back-out is (0 + 0) / SLCSP = 0. That's fine — silver gating on takes_up_aca_if_eligible will still produce $0 premium; the ratio doesn't matter.
Pre-2014 CPS years — no Marketplace existed; ratio imputation should be gated on period ≥ 2014.
Sanity check
After imputation, the weighted distribution of ratios across Marketplace enrollees should approximate CMS effectuated metal-tier shares:
~0.75–0.85 (bronze) for ~30–35%
~0.95–1.05 (silver / silver-CSR) for ~45%
~1.10–1.20 (gold) for ~15%
~1.25+ (platinum / catastrophic) for ~5%
If the distribution is badly skewed, it signals either the Marketplace flag is too inclusive or the PTC back-out is off (wrong SLCSP match, filing-status misalignment, etc.).
The corresponding PolicyEngine/policyengine-us work is tracked in PolicyEngine/policyengine-us#8095 (rules-based Marketplace net premium) — marketplace_net_premium already shipped there (PR #8105); this us-data follow-up populates its input.
Acceptance
New ETL step populates selected_marketplace_plan_benchmark_ratio on the enhanced CPS microdata for Marketplace-flagged households.
Follow-up to #618 (ACA marketplace bronze-selection target ETL).
Context
#618 adds state-level calibration targets for (a) total APTC-taking marketplace tax units and (b) bronze-plan subset, derived from CMS 2024 state-metal data. That constrains the aggregate distribution of the microsim weights.
What's still missing is a per-household value for
selected_marketplace_plan_benchmark_ratio(currently an input variable defaulting to1.0, meaning "silver benchmark" for everyone). Without a populated per-household ratio, the rules-basedmarketplace_net_premium(PolicyEngine/policyengine-us#8105) returns the silver-benchmark net premium regardless of which plan a household actually picked. That overstates OOP for bronze pickers (~35% of enrollees) and understates it for gold pickers.Approach: back-out from CPS reported premium
For Marketplace enrollees in CPS, the reported premium is (approximately) the net premium paid after APTC. The accounting identity:
gives us:
Per Marketplace-enrolled CPS record:
selected_marketplace_plan_benchmark_ratio = (cps_premium + computed_ptc) / slcsp.Non-Marketplace households keep the default 1.0 (won't affect their computed net premium because
selected_marketplace_plan_premium_proxyis zeroed bytakes_up_aca_if_eligiblegating).Where it lives
us-data imputation step. Most likely in
policyengine_us_data/db/etl_*as a newetl_marketplace_plan_selection.pyor as additions to an existing health-coverage ETL.Caveats
COV_MRK/MRKSstyle). Clipping catches most false positives.(0 + 0) / SLCSP = 0. That's fine — silver gating ontakes_up_aca_if_eligiblewill still produce $0 premium; the ratio doesn't matter.Sanity check
After imputation, the weighted distribution of ratios across Marketplace enrollees should approximate CMS effectuated metal-tier shares:
If the distribution is badly skewed, it signals either the Marketplace flag is too inclusive or the PTC back-out is off (wrong SLCSP match, filing-status misalignment, etc.).
Integration with #618
#618's state-level target can be used as a calibration check on the per-household imputation:
benchmark_ratio < 0.9cases weighted → should match Add ACA marketplace bronze-selection target ETL #618's bronze-subset target per stateUpstream dependency
The corresponding PolicyEngine/policyengine-us work is tracked in PolicyEngine/policyengine-us#8095 (rules-based Marketplace net premium) —
marketplace_net_premiumalready shipped there (PR #8105); this us-data follow-up populates its input.Acceptance
selected_marketplace_plan_benchmark_ratioon the enhanced CPS microdata for Marketplace-flagged households.marketplace_net_premiumaggregate (via the new variable from Add marketplace_net_premium variable (Marketplace premium net of PTC) policyengine-us#8105) is within a documented tolerance of CMS effectuated-premium totals.tests/unit/that verifies the back-out identity on a few synthetic households.