Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Use disclosure-controlled UK geography outputs for constituency and local authority impacts

已关闭
#859 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

  • #860 来自 @PavelMakarchuk —— 已关闭,未合并

评估

难度
4/5
预计耗时
3-5 天
新手友好度
25/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
python
领域
data

调研方向

Start with simulation_output_geographic.py, especially build_uk_constituency_impact and build_uk_local_authority_impact, and inspect how Stage 12 retains household identifiers. Read the compute_uk_geography_disclosure API in the pinned policyengine.py 6.7.5 and its tests. Done means both geography breakdowns use one nested release, blocking findings withhold suggested cells while references remain published, and backward compatible output includes optional tier and interval fields; keep source_household_id and region_code_oa in the retained frame.

由索引模型根据 Issue 内容生成。

描述

Problem

UK constituency and local-authority results in the economy output are not disclosure-controlled, and some of them are wrong in a way readers can see.

The executor builds them with policyengine.py's deprecated compute_uk_constituency_impacts and compute_longwise_uk_geography_impacts (simulation_output_geographic.py, build_uk_constituency_impact and build_uk_local_authority_impact). Per area, these compute:

  • average_household_income_change = Σ(change × w) / Σw
  • relative_household_income_change = Σ(reform × w) / Σ(baseline × w) − 1

There is no minimum sample. A small cell with a few negative-income households has a baseline total near zero or below zero, so the relative change explodes or changes sign.

Examples from production output

Reform: gov.hmrc.income_tax.rates.uk[0].rate 0.20 → 0.21, 2026.

  • App report 4684, region country/wales. Cardiff West: average_household_income_change ≈ −192, but relative_household_income_change ≈ +13.72 (the app shows +1372%). A tax rise that loses £192 shows a large gain. Both values imply a baseline mean household income of about −£14. Caerphilly shows −5.6%, while neighbouring seats show −0.1% to −2.3%.
  • App report 4693, UK-wide. Pendle and Clitheroe shows +1.8%, while every other English constituency loses.

First reported, in the wrong issue, at https://github.com/PolicyEngine/policyengine-sim-api/issues/858#issuecomment-6301724245.

Licensing risk

The UK datasets derive from UK Data Service licensed survey microdata (FRS and others). The End User Licence binds every published number, and a local result that rests on a handful of survey households can breach it. policyengine.py deprecated the two functions above for this reason: their output "is not disclosure-controlled, so it must not be published when the data is licensed survey microdata". The executor still publishes it in every UK economy result, through the API and the app.

Fix

policyengine.py already has the replacement: compute_uk_geography_disclosure (PolicyEngine/policyengine.py#605, closing PolicyEngine/policyengine.py#589), available in the pinned 6.7.5. It applies a count floor of 10 distinct survey households (by source_household_id), a dominance rule, a check on what subtraction between published areas recovers, a bootstrap 90% interval and precision-adaptive rounding. Each cell is reported, approximate or withheld.

Switch both breakdowns to it:

  1. Build constituencies and local authorities in one release, nested in regions and the nation, so the check sees both levels.
  2. Resolve blocking findings by withholding the suggested cells; never withhold a reference (region or national) cell, because those numbers are public elsewhere.
  3. Keep the output contract backward compatible: existing fields keep their types. A withheld area is left out of the list. Published areas gain optional fields for the tier and the 90% interval.
  4. Keep source_household_id (and region_code_oa) in the Stage 12 retained household frame.

Known limits

  • The enhanced FRS 1.58.1 in the current bundle sets source_household_id after its SPI and capital-gains copies are stacked, so copies of one survey household count separately (PolicyEngine/policyengine-uk-data#591, fixed in #597 for later releases). Support is overstated on that release until the bundle moves to a rebuilt eFRS or to Microcosm (PolicyEngine/policyengine.py#685).
  • The check covers one run. It does not compare results across runs, such as a UK run against a Wales run.

🤖 Generated with Claude Code

主要语言
Python
星标
1
派生
1
平均合并
1 天 17 小时
30 天内合并 PR
60

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

PolicyEngine/policyengine-sim-api 的其他 Issue

查看 PolicyEngine/policyengine-sim-api 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。