Skip to content

Conversation

@MaxGhenis
Copy link
Contributor

Summary

  • Add calibration targets for total tax filers by AGI band from SOI Table 1.1
  • Includes all filers (not just taxable returns), covering AGI ranges below $10k
  • Targets 7 AGI bands: <$0, $0-5k, $5k-10k, $10k-25k, $25k-50k, $50k-100k, $100k+

Background

Currently the calibration in loss.py:

  1. Only targets "taxable returns" (positive tax liability)
  2. Excludes AGI < $10k

This means we're not calibrating to the ~21M filers with AGI < $10k, which are important for getting the low-income distribution right.

Test plan

  • Run make test to verify no regressions
  • Verify reweighting builds successfully with new targets
  • Check that the new targets appear in the loss matrix output

🤖 Generated with Claude Code

Add calibration targets for total tax filers by AGI band from SOI Table 1.1.
This improves calibration for low-income households by including all filers
(not just taxable returns) and covering AGI ranges below $10k that were
previously excluded.

The ~21M filers with AGI < $10k are important for getting the low-income
distribution right, as they represent a significant portion of the
tax-filing population.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Feb 7, 2026
Voluntary filer changes (cps.py):
- Remove redundant would_file_for_refund variable since takes_up_eitc
  already captures refund-seeking behavior
- Simplify to single would_file_taxes_voluntarily variable that applies
  only to tax units NOT taking up EITC
- Use 5% voluntary filing rate for non-EITC takers

Calibration target changes (loss.py):
- Add SOI Table 1.1 filer counts by AGI band as calibration targets
- Covers 7 bands: <$0, $0-5k, $5k-10k, $10k-25k, $25k-50k, $50k-100k, $100k+
- Includes all filers (not just taxable returns) to properly calibrate
  low-income filer counts which are important for distribution accuracy
- Uprates 2015 SOI counts to current year using population growth

This consolidates PR #514 into PR #513.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis mentioned this pull request Feb 7, 2026
3 tasks
@MaxGhenis
Copy link
Contributor Author

Consolidated into PR #513 which now includes both the voluntary filer logic and the filer count calibration targets.

@MaxGhenis MaxGhenis closed this Feb 7, 2026
MaxGhenis added a commit that referenced this pull request Feb 8, 2026
* Add voluntary tax filer assignment

SOI data shows many low-AGI filers who file taxes voluntarily even when
not required and not receiving a refund. This affects calibration accuracy
when comparing CPS-based filer counts to SOI totals.

Add would_file_taxes_voluntarily variable at tax_unit level with ~5%
probability, using seeded RNG for reproducibility. This enables
policyengine-us to incorporate voluntary filing behavior in its
tax_unit_is_filer variable.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Improve voluntary tax filer logic with refund-seeking behavior

Replace simple 5% voluntary filing rate with more nuanced approach:

1. Add would_file_for_refund variable that identifies tax units taking
   up EITC (95% of EITC takers are assumed to know they'll get a refund)

2. Apply voluntary filing rate (3%) only to those NOT already filing
   for a refund, to avoid double-counting

This better models the actual filing decision process where refundable
credit recipients have a clear financial incentive to file, while others
may file for state requirements, documentation, or habit.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Simplify voluntary filer logic and add filer count calibration targets

Voluntary filer changes (cps.py):
- Remove redundant would_file_for_refund variable since takes_up_eitc
  already captures refund-seeking behavior
- Simplify to single would_file_taxes_voluntarily variable that applies
  only to tax units NOT taking up EITC
- Use 5% voluntary filing rate for non-EITC takers

Calibration target changes (loss.py):
- Add SOI Table 1.1 filer counts by AGI band as calibration targets
- Covers 7 bands: <$0, $0-5k, $5k-10k, $10k-25k, $25k-50k, $50k-100k, $100k+
- Includes all filers (not just taxable returns) to properly calibrate
  low-income filer counts which are important for distribution accuracy
- Uprates 2015 SOI counts to current year using population growth

This consolidates PR #514 into PR #513.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add changelog entry

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
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.

1 participant