Skip to content

Sparse-57k export drops 94 no-formula input columns from the dense parent (tips, overtime, disability flags, ESI premiums, rent, QBI basis) #361

Description

@MaxGhenis

Summary

The sparse-57k export (populace-us-2024-sparse-l0-refit-57k-71a0887, certified default for bundles 4.18.8 and 4.20.0) drops 94 no-formula PolicyEngine-US input columns that the dense parent (f0af251, 4.18.7 default) populates. #278 documented mass-zeroing for a handful of bases and #356 the three SSI asset columns; this is the full inventory of the column-presence regression. The Build-H dense parent published today (populace-us-2024-buildh-dense-warmstart-b449eb7-20260708T100442Z) drops essentially the same set (129 of 133 columns), so the Build-I successor (#359) inherits the gap unless the export carries them.

Method: person-table column diff (dense 249 cols → sparse 222), filtered to pe-us 1.752.2 variables with no formula and no adds/subtracts (i.e., true inputs; formula-owned exports like employment_income/social_security are correctly dropped per #24 and excluded here). Mass = dense column × household weight, TY2024. Full list + per-column mass attached below.

Dollar inputs lost (default 0 → mass vanishes; selected, dense-weighted)

column dense mass consequence example
stock_assets + bank_account_assets + bond_assets $44.0T SSI/TANF/Medicaid resource tests dead (#356)
unadjusted_basis_qualified_property (+SSTB variants) $2.1T QBI deduction mis-scores
employer_sponsored_insurance_premiums $1,129B ESI/ACA interactions
pre_subsidy_rent $590B SNAP excess-shelter deduction, housing analyses
w2_wages_from_qualified_business (+SSTB) $332B QBI wage limit
unreimbursed_business_employee_expenses $218B itemized/state conformity
veterans_benefits $177B benefit-conditioned programs
taxable_401k/403b/SEP/keogh distributions, tax_exempt_ira_distributions $174B retirement-income policy
survivor_benefits $112B income surface
fsla_overtime_premium $103B OBBBA overtime deduction scores ~$0
tip_income $59B OBBBA tips deduction scores ~$0
salt_refund_income $44B AMT/itemizer interactions
child_support_received/expense, alimony_income/expense $89B means-tested income definitions
financial_assistance, disability_benefits, workers_compensation, casualty_loss, qualified_tuition_expenses, educator_expense, investment_interest_expense, … $10–40B each various

Flag inputs lost with real signal (default False → population zeroed)

Currently-degenerate but contract-relevant (default True, stored all-true)

takes_up_ssi_if_eligible, takes_up_medicaid_if_eligible, takes_up_medicare_if_eligible, takes_up_{early_}head_start_if_eligible, would_claim_wic, is_wic_at_nutritional_risk, *_would_be_qualified QBI flags. Dropping these is a no-op today because the dense columns are all-true and the engine defaults match — but the moment real take-up rates are seeded (per the #312/#315 contract), the export must carry them or the seeds silently revert to full take-up.

Suggested fix

Relates #278, #356, #359, #312, #315, #350, #352, #225, #38, #49. Found while re-running the SSI asset-limit analysis (PolicyEngine/ssi-asset-limits) on the certified small default via policyengine.py 4.20.0.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions