Fix birth_year calculation for two-child limit projections#1352
Closed
MaxGhenis wants to merge 1 commit into
Closed
Fix birth_year calculation for two-child limit projections#1352MaxGhenis wants to merge 1 commit into
MaxGhenis wants to merge 1 commit into
Conversation
Fixes issue where two-child limit budgetary impact was incorrectly constant across projection years (e.g., same £2.2bn in 2026 and 2029). The bug: birth_year was being loaded from the dataset as a static value, preventing it from being recalculated based on the projection year. With a consistent age distribution in the microdata: - 2026: 10-year-olds should represent children born in 2016 (exempt) - 2029: 10-year-olds should represent children born in 2019 (not exempt) The fix: Skip loading birth_year from the dataset, allowing the Variable formula (period.year - age) to calculate it fresh for each projection year. Now the number of children subject to the two-child limit correctly increases over time (+4,134 from 2026 to 2029), and the cost of repealing the limit will rise appropriately in projections. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
MaxGhenis
added a commit
to PolicyEngine/policyengine-uk-data
that referenced
this pull request
Oct 2, 2025
birth_year should be calculated from age and period in the model, not stored as static data in the dataset. This allows birth_year to properly update in multi-year projections. With static birth_year in the dataset: - 2026: birth_year stays 2006-2023 (based on 2023 survey) - 2029: birth_year stays 2006-2023 (incorrect) By calculating birth_year = period.year - age: - 2026: birth_year becomes 2009-2026 (correct for 2026) - 2029: birth_year becomes 2012-2029 (correct for 2029) This fix is required for PolicyEngine/policyengine-uk#1352 to work correctly and ensure two-child limit cost projections increase over time as expected. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
MaxGhenis
added a commit
to PolicyEngine/policyengine-uk-data
that referenced
this pull request
Oct 2, 2025
birth_year should be calculated from age and period in the model, not stored as static data in the dataset. This allows birth_year to properly update in multi-year projections. With static birth_year in the dataset: - 2026: birth_year stays 2006-2023 (based on 2023 survey) - 2029: birth_year stays 2006-2023 (incorrect) By calculating birth_year = period.year - age: - 2026: birth_year becomes 2009-2026 (correct for 2026) - 2029: birth_year becomes 2012-2029 (correct for 2029) This fix is required for PolicyEngine/policyengine-uk#1352 to work correctly and ensure two-child limit cost projections increase over time as expected. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Collaborator
Author
|
Closing as unnecessary. Removing birth_year from the dataset (PolicyEngine/policyengine-uk-data#198) is sufficient - the Variable formula will automatically calculate it from age and period when it's not present in the input data. |
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Fixes the bug where two-child limit budgetary impact was incorrectly constant across projection years.
Problem
The
birth_yearvariable was being loaded from the dataset as a static value, preventing it from being recalculated based on the projection year. This caused:With a consistent age distribution in the microdata:
Solution
Skip loading
birth_yearfrom the dataset insimulation.py, allowing the Variable formula (period.year - age) to calculate it fresh for each projection year.Results
Population Demographics
Before fix:
After fix:
Budgetary Impact (Repeal Cost)
With the fix applied:
The cost now correctly increases over time as more children born after April 2017 enter the population ✓
Dependencies
Test Plan
🤖 Generated with Claude Code