PolicyEngine / PolicyEngine/microcosm

SSI candidate undercount: modeled eligible mass far below SSA recipient counts

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

Surfaced by the Build M sparse run's SSI take-up gate (fixed mechanically in #423) and consistent with the local-area artifact's SSI measurement gap ($52.5B/5.23M vs SSA's 7.40M recipients).

The numbers (Build M runner agent's decomposition, base-r5, 2026-07-13)

  • Modeled uncapped_ssi > 0 rate: 0.6% (selected 57,240 support) to 1.2% (full pool with SCF wealth) of persons — roughly 2M scaled, versus SSA December-2024 recipients of 7,404,820 (under_18: 1,001,922; 18-64: 3,905,779; 65+: 2,382,142).
  • Per SSA age band, modeled candidate capacity falls short of the target in every band (the saturation that tripped the take-up gate).
  • Decomposition of is_ssi_eligible legs on base-r5: is_ssi_aged_blind_disabled healthy (aged ~20.6%, is_disabled 10.5%, is_blind 1.5%); meets_ssi_resource_test passes 65.8% (SCF-imputed ssi_countable_resources: 39.9% nonzero, median-nonzero $22,200 — byte-identical to Build J's, so not a regression); the income test and the SIPP disability-criteria stage then cut the remainder.

Candidate directions (architecture week)

  1. Disability-criteria strictness: the SIPP-seeded meets_ssi_disability_criteria replaces the engine-default universal flag — measure its pass rate among SSA-consistent populations vs administrative award data.
  2. Income-test binding: imputed income floors for aged/disabled low-income households (e.g., Social Security amounts) may exceed SSI countable-income thresholds too often relative to reality.
  3. Resource-test calibration: SCF-imputed resources for the SSI-relevant population (median $22k among holders) vs SIPP/administrative asset distributions of actual SSI recipients (who must hold <$2k/$3k).
  4. Structural: actual recipiency includes protected/grandfathered cases and state supplements the December-eligibility computation doesn't model.

The #404 SSI-recipients calibration targets (national + 51 states, exact SSA counts) will pull weight toward the candidates that do exist, but calibration cannot manufacture eligible households that the eligibility model rejects — the fix is on the modeling side.

🤖 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 by reproducing the Build M sparse run and reviewing the SSI eligibility decomposition, especially the disability-criteria, income-test, and resource-test stages. Compare modeled pass rates with the SSA recipient counts and the #404 calibration targets; done means identifying and addressing the modeling-side source of the candidate shortfall rather than relying on calibration alone.

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.