PolicyEngine / PolicyEngine/microcosm
Child-support expense prevalence: survey-faithful 0.47% vs retired eCPS's drifted 2-3% vs OCSE-implied ~1.5-2%
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:
- 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.
- 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.
- 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
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 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