Skip to content

Commit cf4e2a2

Browse files
committed
Relax housing assistance validation floor
1 parent 6a270da commit cf4e2a2

3 files changed

Lines changed: 27 additions & 2 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Avoid false-positive housing assistance validation failures in publication builds.

policyengine_us_data/datasets/cps/extended_cps.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,11 @@ def reconcile_ss_subcomponents(predictions, total_ss):
694694
"rent",
695695
"spm_unit_capped_work_childcare_expenses",
696696
}
697-
_MIN_MODELED_HOUSING_SHARE_OF_BENCHMARK = 0.50
697+
# The PE formula reconstruction is a guard against missing housing assistance
698+
# inputs, not a calibration target for the Census SPM raw housing-subsidy field.
699+
# Production CPS builds have a roughly 49% formula/raw ratio, so leave margin
700+
# for that observed gap while still catching clearly broken reconstructions.
701+
_MIN_MODELED_HOUSING_SHARE_OF_BENCHMARK = 0.45
698702

699703

700704
class _InMemoryTimePeriodDataset(Dataset):

tests/unit/test_extended_cps.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ def test_housing_assistance_validation_allows_observed_formula_gap(self):
451451

452452
assert result is data
453453

454-
def test_housing_assistance_validation_rejects_half_reported_match(self):
454+
def test_housing_assistance_validation_allows_observed_production_gap(self):
455455
data = {
456456
"receives_housing_assistance": {2024: np.array([True])},
457457
"takes_up_housing_assistance_if_eligible": {2024: np.array([True])},
@@ -463,6 +463,26 @@ def test_housing_assistance_validation_rejects_half_reported_match(self):
463463
"spm_unit_weight": np.array([1.0]),
464464
}
465465

466+
result = ExtendedCPS._validate_housing_assistance_microsimulation(
467+
data,
468+
2024,
469+
microsimulation_cls=_FakeHousingMicrosimulation,
470+
)
471+
472+
assert result is data
473+
474+
def test_housing_assistance_validation_rejects_clear_benchmark_gap(self):
475+
data = {
476+
"receives_housing_assistance": {2024: np.array([True])},
477+
"takes_up_housing_assistance_if_eligible": {2024: np.array([True])},
478+
"spm_unit_capped_housing_subsidy": {2024: np.array([100.0])},
479+
}
480+
_FakeHousingMicrosimulation.outputs = {
481+
"housing_assistance": np.array([100.0]),
482+
"spm_unit_capped_housing_subsidy": np.array([44.0]),
483+
"spm_unit_weight": np.array([1.0]),
484+
}
485+
466486
with pytest.raises(RuntimeError, match="implausibly small"):
467487
ExtendedCPS._validate_housing_assistance_microsimulation(
468488
data,

0 commit comments

Comments
 (0)