Skip to content

Conversation

@MaxGhenis
Copy link
Contributor

Summary

  • SS source code classification: Uses CPS ASEC SS_SC1/SS_SC2 source codes to classify Social Security income into retirement, disability, survivors, and dependents (replacing age-62 heuristic). Falls back to age-62 for records without source codes.
  • Year-parameterized contribution limits: Replaces hardcoded 2022 retirement limits with a lookup table covering 2020–2025 (401k, IRA, and catch-up limits per IRS).
  • Data-driven pension taxable fraction: Updates taxable_pension_fraction from 1.0 (arbitrary) to 0.590 based on SOI 2015 Table 1.4 ($690B taxable / $1,169B total).
  • Richer QRF predictors: Adds age and is_male alongside employment_income for pension contribution imputation from CPS to PUF.
  • SSA benefit-type calibration: Adds 4 new calibration targets for SS sub-types ($1,060B retirement, $148B disability, $160B survivors, $84B dependents) from SSA trust fund data and fact sheets.
  • IRA contribution calibration: Adds targets for traditional ($25B) and Roth ($39B) IRA contributions from IRS SOI accumulation tables.

Test plan

  • Verify CPS dataset builds successfully with new SS source code columns
  • Check SS income sums match total social_security after four-way split
  • Confirm contribution waterfall respects year-specific limits
  • Run calibration to verify new targets don't cause convergence issues
  • Compare taxable pension totals against SOI targets with new 0.590 fraction

🤖 Generated with Claude Code

@MaxGhenis MaxGhenis force-pushed the retirement-imputation-improvements branch from 3d73246 to 1df970b Compare January 31, 2026 19:53
MaxGhenis and others added 4 commits January 31, 2026 14:54
- Use CPS ASEC SS_SC1/SS_SC2 source codes (instead of age-62 heuristic)
  to classify Social Security into retirement, disability, survivors,
  and dependents categories
- Parameterize retirement contribution limits by year (2020-2025)
  instead of hardcoding 2022 values
- Update taxable pension fraction from 1.0 (arbitrary) to 0.590
  based on SOI 2015 Table 1.4
- Add age and is_male as QRF predictors for pension contribution
  imputation from CPS to PUF
- Add SSA benefit-type calibration targets ($1,060B retirement,
  $148B disability, $160B survivors, $84B dependents)
- Add IRA contribution calibration targets ($25B traditional,
  $39B Roth) from IRS SOI accumulation tables

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use RESNSS1/RESNSS2 (already extracted in PERSON_COLUMNS) instead of
non-existent SS_SC1/SS_SC2 for Social Security type classification.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Mirror the new HARD_CODED_TOTALS entries (SS benefit types and IRA
contributions) in etl_national_targets.py to keep the database in
sync with loss.py, per the approach introduced in PR #488.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The same national targets exist in both loss.py and
db/etl_national_targets.py. A future PR should wire
build_loss_matrix() to read from policy_data.db so the
hardcoded dict can be removed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis force-pushed the retirement-imputation-improvements branch from 1df970b to a2b4544 Compare January 31, 2026 19:54
@MaxGhenis MaxGhenis merged commit 9b6bcf7 into main Jan 31, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants