This repository was archived by the owner on Jul 6, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 141
Add blog post announcing Enhanced CPS full launch #2708
Merged
Merged
Changes from all commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
a31a831
Add blog post announcing Enhanced CPS full launch
MaxGhenis 4431a36
Fix Prettier formatting in Enhanced CPS blog post
MaxGhenis 6a4ba90
Update Enhanced CPS blog post and make it the default dataset
MaxGhenis 9b089e1
Specify exact number of calibration targets
MaxGhenis 61bbcea
Improve Enhanced CPS launch blog post and remove dataset selector
MaxGhenis dbfad2a
Fix launch date to August 8, 2025
MaxGhenis 5efdf74
Add technical methodology details to Enhanced CPS blog post
MaxGhenis f3296f9
Add methodology process flow description to Enhanced CPS blog post
MaxGhenis 7acd82c
Add methodology flowchart image to Enhanced CPS blog post
MaxGhenis a23dd8a
finish post
MaxGhenis 4bd914b
Fix tests after removing Enhanced CPS selector
MaxGhenis 308da36
Remove unused fireEvent import from test file
MaxGhenis File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,99 @@ | ||
| We're excited to announce the full launch of the Enhanced Current Population Survey (Enhanced CPS). This comprehensive dataset powers PolicyEngine's microsimulation modeling with unprecedented accuracy, enabling precise analysis of tax and benefit reforms across the United States. | ||
|
|
||
| Building on extensive development and testing since our [beta launch](/us/research/enhanced-cps-beta), the Enhanced CPS now includes sophisticated imputation models for income sources and household characteristics that were previously unavailable or underreported in survey data. These improvements provide a more complete picture of American households' economic circumstances. Learn more about our [methodology](https://policyengine.github.io/policyengine-us-data/methodology) and [data sources](https://policyengine.github.io/policyengine-us-data/data). | ||
|
|
||
| ## New features | ||
|
|
||
| ### Income source imputations | ||
|
|
||
| The Enhanced CPS now includes machine learning-based imputations for income sources that are frequently underreported in surveys: | ||
|
|
||
| **Tip income**: Using employer-reported data from the Survey of Income and Program Participation (SIPP), we impute tip income based on employment income, age, and household composition. This enhancement enables accurate analysis of proposals to exempt tips from taxation. See our [imputation methodology documentation](https://policyengine.github.io/policyengine-us-data/methodology#imputation) for technical details. | ||
|
|
||
| **Overtime premiums**: We calculate overtime income using hours worked, occupation codes, and Fair Labor Standards Act exemption status, allowing accurate modeling of overtime exemption proposals. | ||
|
|
||
| **Auto loan interest**: Imputed from the Survey of Consumer Finances (SCF), this addition enables analysis of proposals to make auto loan interest deductible. | ||
|
|
||
| ### Immigration status imputation | ||
|
|
||
| We've implemented the ASEC Undocumented Algorithm to impute Social Security Number card types, enabling more accurate modeling of policies with citizenship or work authorization requirements. This process-of-elimination approach examines 14 conditions to identify likely undocumented individuals, calibrated to match external population estimates. Details are available in our [demographic imputation section](https://policyengine.github.io/policyengine-us-data/methodology#demographic-imputation). | ||
|
|
||
| ### Technical infrastructure improvements | ||
|
|
||
| **Two-stage methodology**: Our approach combines sophisticated imputation with advanced reweighting techniques. First, we use Quantile Regression Forests (QRF) to impute missing variables from multiple data sources, preserving realistic variation and capturing conditional distribution tails. Second, we apply gradient-based optimization with PyTorch to reweight households, matching administrative targets while maintaining the survey's statistical properties. | ||
|
|
||
|  | ||
|
|
||
| The process flow integrates five source datasets (CPS ASEC, IRS PUF, SIPP, SCF, ACS) that are aged to the target year. Through QRF imputation, we create two enhanced CPS variants: one with missing PUF variables filled in, and another with existing variables replaced by PUF values. These datasets then undergo reweighting optimization to produce the final Enhanced CPS dataset. [View our detailed methodology documentation](https://policyengine.github.io/policyengine-us-data/methodology). | ||
|
|
||
| **Microimpute package**: We've developed and adopted [`microimpute`](https://github.com/PolicyEngine/microimpute), a new open-source Python package that automates our QRF-based imputation methods. This package makes our imputation methodology more transparent and reusable. | ||
|
|
||
| **Advanced reweighting with L0 regularization**: Our reweighting process uses log-transformed weights with dropout regularization and incorporates an L0 penalty for sparsity. This ensures positive weights while preventing overfitting and maintaining interpretability. The optimization minimizes mean squared relative error using the Adam optimizer. | ||
|
|
||
| **Enhanced validation**: Our [calibration process](https://policyengine.github.io/policyengine-us-data/methodology#calibration) targets 9,168 administrative totals from sources including IRS SOI, Census, CBO/Treasury, and JCT data, ensuring the Enhanced CPS accurately represents: | ||
|
|
||
| - Income components by source | ||
| - Benefit program enrollment | ||
| - Demographic distributions | ||
| - Geographic population counts | ||
|
|
||
| ## Upcoming developments | ||
|
|
||
| ### State and local calibration | ||
|
|
||
| With support from [Arnold Ventures](https://www.arnoldventures.org/), we're extending the Enhanced CPS to provide accurate estimates for every state and congressional district. This follows our successful implementation of local-area microsimulation in the UK, funded by the [Nuffield Foundation](https://www.nuffieldfoundation.org/). | ||
|
|
||
| Once complete, the Enhanced CPS will become the default for state-level analysis as well, and PolicyEngine users will be able to analyze the impacts of federal and state policy reforms on: | ||
|
|
||
| - Poverty rates by state and congressional district | ||
| - Income inequality measures for local areas | ||
| - Winners and losers from reforms in specific districts | ||
| - Distributional impacts by income decile for each state | ||
|
|
||
| ### Microcalibrate package | ||
|
|
||
| We're developing [`microcalibrate`](https://github.com/PolicyEngine/microcalibrate), a next-generation reweighting package that enhances our current gradient descent approach. This package will offer: | ||
|
|
||
| - Faster convergence to calibration targets | ||
| - Better preservation of the original survey's covariance structure | ||
| - More flexible loss functions for different use cases | ||
| - Easier extension to multi-area calibration | ||
|
|
||
| ### Additional data enhancements | ||
|
|
||
| We currently integrate data from the Survey of Consumer Finances (for auto loan interest) and American Community Survey (for housing costs). Future enhancements will expand these integrations: | ||
|
|
||
| - **Wealth modeling from SCF**: Comprehensive asset and debt data for modeling asset limits in SNAP, SSI, and other means-tested programs, similar to our [wealth modeling in the UK](https://policyengine.org/uk/research/uk-the-new-policyengine) | ||
| - **Consumer Expenditure Survey**: Consumption patterns for modeling sales taxes, carbon pricing, and other consumption-based policies | ||
| - **Expanded ACS integration**: Additional geographic and demographic detail for state and local policy analysis | ||
|
|
||
| ## Using the Enhanced CPS | ||
|
|
||
| The Enhanced CPS is now the exclusive dataset for nationwide PolicyEngine US analyses. We've removed the dataset selector to streamline the user experience鈥攖he Enhanced CPS automatically powers all federal policy simulations, while state-specific analyses continue to use the standard CPS until our local calibration is complete. | ||
|
|
||
| You can access the Enhanced CPS through: | ||
|
|
||
| **Web interface**: The Enhanced CPS powers all nationwide calculations at [policyengine.org/us](https://policyengine.org/us) | ||
|
|
||
| **Python package**: Works by default for our `Microsimulation` calls. | ||
|
|
||
| **Direct download**: For Python users, the data automatically downloads from our Hugging Face repository when you instantiate a simulation. The files are stored at [`hf://policyengine/policyengine-us-data`](https://huggingface.co/policyengine/policyengine-us-data) | ||
|
|
||
| ## Technical details | ||
|
|
||
| For researchers interested in our methodology: | ||
|
|
||
| - **Full technical documentation**: [PolicyEngine US Data documentation](https://policyengine.github.io/policyengine-us-data) | ||
| - **Data integration methodology**: [Imputation and fusion techniques](https://policyengine.github.io/policyengine-us-data/methodology#data-fusion) | ||
| - **Calibration approach**: [Reweighting methodology](https://policyengine.github.io/policyengine-us-data/methodology#reweighting) | ||
| - **Validation results**: [Comparison with administrative data](https://policyengine.github.io/policyengine-us-data/discussion) | ||
| - **Implementation code**: [Microimpute package](https://github.com/PolicyEngine/microimpute) | ||
| - **Source code**: [Enhanced CPS on GitHub](https://github.com/PolicyEngine/policyengine-us-data/tree/main/policyengine_us_data/datasets/cps) | ||
|
|
||
| ## Conclusion | ||
|
|
||
| The Enhanced CPS represents a major advancement in open-source microsimulation data. By [combining the demographic richness of the Current Population Survey with tax detail from IRS records](https://policyengine.github.io/policyengine-us-data/background) and sophisticated imputation techniques, we've created a dataset that supports comprehensive analysis of both tax and benefit policies. | ||
|
|
||
| As we expand to state and local calibration, the Enhanced CPS will enable unprecedented granularity in policy analysis鈥攅mpowering lawmakers, researchers, and citizens to understand how proposed reforms would affect their communities. | ||
|
|
||
| We welcome feedback and collaboration as we continue improving this foundational infrastructure for evidence-based policymaking. For questions or to contribute to development, please visit our [GitHub repositories](https://github.com/PolicyEngine) or [contact us](mailto:hello@policyengine.org). | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,13 @@ | ||
| [ | ||
| { | ||
| "title": "Enhanced CPS full launch: Comprehensive microdata for policy analysis", | ||
| "description": "The Enhanced Current Population Survey now includes tip, overtime, and auto loan interest imputations, plus upcoming state and congressional district calibration.", | ||
| "date": "2025-08-08", | ||
| "tags": ["us", "data", "featured"], | ||
| "filename": "enhanced-cps-launch.md", | ||
| "image": "enhanced-cps-launch.png", | ||
|
||
| "authors": ["max-ghenis", "nikhil-woodruff"] | ||
| }, | ||
| { | ||
| "title": "Analysis of individual income tax provisions in the final reconciliation bill", | ||
| "description": "Our simulation projects a reduction in federal revenues of $3.8 trillion from 2026 to 2035 compared to current law.", | ||
|
|
||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The referenced image
/images/posts/enhanced-cps-launch-flowchart.pngis not included in this PR. Ensure the image file exists in the correct location before publishing the blog post.