diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb..2b3e5e750 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: patch + changes: + added: + - Council Tax calibration. diff --git a/policyengine_uk_data/datasets/frs/frs.py b/policyengine_uk_data/datasets/frs/frs.py index 7a75e1455..756796741 100644 --- a/policyengine_uk_data/datasets/frs/frs.py +++ b/policyengine_uk_data/datasets/frs/frs.py @@ -89,15 +89,6 @@ def generate(self): for variable in frs: frs[variable] = {self.dwp_frs.time_period: np.array(frs[variable])} - # Domestic rates need to be set for 2025 too - domestic_rates = np.array( - frs["domestic_rates"][self.dwp_frs.time_period] - ) - frs["domestic_rates"] = { - self.dwp_frs.time_period: domestic_rates, - "2025": domestic_rates, - } - self.save_dataset(frs) impute_brmas(self, frs) diff --git a/policyengine_uk_data/storage/council_tax_bands_2024.csv b/policyengine_uk_data/storage/council_tax_bands_2024.csv new file mode 100644 index 000000000..a0e0b7e71 --- /dev/null +++ b/policyengine_uk_data/storage/council_tax_bands_2024.csv @@ -0,0 +1,12 @@ +Region,A,B,C,D,E,F,G,H,I,Total +NORTH_EAST,667260,205250,194090,111950,60000,26180,14430,1550,0,1280700 +NORTH_WEST,1381000,700030,610850,360710,213480,103150,65240,7280,0,3441730 +SOUTH_EAST,366180,682890,1067530,836070,547270,334360,263930,39980,0,4138200 +SOUTH_WEST,469430,641160,618890,428320,289050,146600,81270,8320,0,2683030 +LONDON,148830,496490,1031190,969650,580310,295330,223990,68020,0,3813790 +EAST_MIDLANDS,800340,500990,399250,245090,152700,73090,38980,3370,0,2213820 +WEST_MIDLANDS,784110,650540,521020,299270,191300,104660,62300,6110,0,2619300 +YORKSHIRE,1068570,510140,427750,246960,156680,75040,41820,3720,0,2530680 +EAST_OF_ENGLAND,400900,595180,733990,502180,310470,170910,112790,14660,0,2841060 +WALES,214540,306120,321500,239690,199500,121740,54850,13130,5630,1476690 +SCOTLAND,497867,581576,423304,365001,362354,217954,140162,14327,0,2602545 diff --git a/policyengine_uk_data/tests/microsimulation/reforms_config.yaml b/policyengine_uk_data/tests/microsimulation/reforms_config.yaml index 4dae4ad4c..c824f12cc 100644 --- a/policyengine_uk_data/tests/microsimulation/reforms_config.yaml +++ b/policyengine_uk_data/tests/microsimulation/reforms_config.yaml @@ -16,7 +16,7 @@ reforms: parameters: gov.hmrc.child_benefit.amount.additional: 25 - name: Reduce Universal Credit taper rate to 20% - expected_impact: -41.3 + expected_impact: -37.3 parameters: gov.dwp.universal_credit.means_test.reduction_rate: 0.2 - name: Raise Class 1 main employee NICs rate to 10% diff --git a/policyengine_uk_data/utils/loss.py b/policyengine_uk_data/utils/loss.py index 682911b8f..15d78540f 100644 --- a/policyengine_uk_data/utils/loss.py +++ b/policyengine_uk_data/utils/loss.py @@ -308,6 +308,33 @@ def pe_count(*variables): target_names.append("dwp/pip_dl_enhanced_claimants") target_values.append(1_608_000) + # Council Tax band counts + + ct_data = pd.read_csv(STORAGE_FOLDER / "council_tax_bands_2024.csv") + uk_population = ( + sim.tax_benefit_system.parameters.gov.economic_assumptions.indices.ons.population + ) + uprating = uk_population(time_period) / uk_population(2024) + + # England and Wales data from https://www.gov.uk/government/statistics/council-tax-stock-of-properties-2024 + + # Scotland data from https://www.gov.scot/publications/council-tax-datasets/ (Number of chargeable dwellings, 2024) + + for i, row in ct_data.iterrows(): + selected_region = row["Region"] + in_region = sim.calculate("region").values == selected_region + for band in ["A", "B", "C", "D", "E", "F", "G", "H", "I"]: + name = f"voa/council_tax/{selected_region}/{band}" + in_band = sim.calculate("council_tax_band") == band + df[name] = (in_band * in_region).astype(float) + target_names.append(name) + target_values.append(float(row[band]) * uprating) + # Add total row + name = f"voa/council_tax/{selected_region}/total" + df[name] = (in_region).astype(float) + target_names.append(name) + target_values.append(float(row["Total"]) * uprating) + combined_targets = pd.concat( [ targets,