PolicyEngine / PolicyEngine/microcosm

Child-support expense prevalence: survey-faithful 0.47% vs retired eCPS's drifted 2-3% vs OCSE-implied ~1.5-2%

Open
#417 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

The first full-scale run through the child-support signal gate (Build M base, 2026-07-13) surfaced a substantive modeling question the gate band was hiding.

Measured person-level nonzero shares for child_support_expense:

source share
raw CPS ASEC 2024 (cps_2024.h5) 0.659%
populace Build M base, ASEC channel 0.660%
populace Build M base, PUF tax-detail clone channel (QRF draw) 0.272%
populace Build M base, pooled (~50/50) 0.466%
retired us-data extended_cps_2024.h5 1.990%
retired us-data enhanced_cps_2024.h5 (shipped eCPS) 2.955%
OCSE-implied payer count (~5M noncustodial payers) ~1.5–2% of persons

Three observations:

  1. Our ASEC channel reproduces the survey exactly; our clone-channel draw (0.27%) is covariate-consistent with the trained marginal. The pipeline is faithful to its source.
  2. The retired pipeline inflated prevalence 3–4.5× above the survey marginal it trained on (0.62% → 1.99%/2.96%) — sequential-imputation drift, not a calibrated choice we can find documented. It accidentally landed nearer the OCSE-implied truth.
  3. CPS is known to undercount payers (payer self-report). So survey-faithful ≈ undercount; the eCPS number was drifted; admin-aligned would require deliberate seeding.

Why it matters: child-support expense drives SNAP deductions (and other program interactions). Build M will ship payer incidence ~4–6× lower than the eCPS the world used. Neither number is validated.

Proposed resolution (architecture week): treat payer prevalence like the take-up families — seed to an administrative anchor (OCSE payer/caseload counts) with documented source, rather than inheriting either survey undercount or imputation drift. Decision needed on the anchor series and entity mapping.

Immediate mechanical fix (separate PR): the shared (0.005, 0.15) gate band mislabels the faithful 0.466% as degenerate; splitting the expense floor to 0.003 with this evidence as the fence. Per-channel 0.002 degeneracy floors unchanged.

Related: #399 (family restoration), #416 (near-discrete target modeling).

🤖 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 the Build M child_support_expense signal gate and compare cps_2024.h5 with the retired extended_cps_2024.h5 and enhanced_cps_2024.h5 results. Review related issues #399 and #416; done means the administrative anchor and entity mapping are decided and documented, with the separate gate-band fix clearly scoped.

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
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.