PolicyEngine / PolicyEngine/chronicle

Belgium target expansion: households, income distribution, work regime, pensions, commune grain (all open data)

Open
#85 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
0
Forks
1
Avg merge
11h 48m
Merged PRs (30d)
45

Description

Follow-up to #72 and the populace#259 pilot: the calibration currently binds four Belgian target families (NUTS1 age×sex demography, one national fiscal-income total, one ONSS total, one ONEM total). Everything below is open data — no SILC or licensed microdata anywhere — and each family closes a named gap in the pilot. Same publisher-package pattern as #72.

Already in Ledger but unused by the calibration (no new package needed):

  • statbel/fiscal_income_commune_2023_nis_2025 carries per-commune fiscal income (581 communes, NIS 2025 crosswalk alongside). The pilot summed it to one national total; binding it at commune or arrondissement grain adds hundreds of geographic income targets and gives the population a real commune assignment (which the regional benefit routing and communal surcharge rates need).

New packages, in priority order:

  1. Statbel households by size and region (household/family statistics from the national register, published annually by commune). Binds the household count — the pilot's weight sum floats at 4.38M vs ~5.0M actual households — and the size distribution that drives equivalization, child benefit ranks, and the couple/single split.
  2. Statbel fiscal income distribution by bracket (the fiscal statistics publication includes counts and amounts by income class, not just totals/means). Turns the single income total into a distribution constraint — directly fixes the "US wage shape" artifact (e.g. the work-bonus mass at low wages).
  3. ONSS employment by regime (open-data quarterly stats: employees by full-time/part-time, blue/white-collar, region). Gives part-time/full-time targets so workers stop being labeled uniformly full-time-full-year — the largest driver of low-wage divergence between the engines' FTE-based work-bonus machinery.
  4. SFPD / PensionStat.be pension statistics (beneficiary counts and pension mass by scheme and region). Required to extend the PIT base beyond wages — pensions are the largest missing income category (fiscal income EUR 274.7B vs EUR 159.7B wages).
  5. ONEM/RVA unemployment by region and category (the existing package is national; the publisher tables carry region/age/household-status splits). Feeds the now-encoded unemployment pipeline's household-status rates.
  6. SPF Finances PIT assessed by bracket (statistics of assessment by income class). An out-of-sample check on the tax distribution, not just the total.
  7. Statbel births by region (for the birth-allowance aggregate) and kids by single year of age × region (child-benefit age supplements reconciliation; the NUTS1 package's bands are too coarse for the 4/11/17 age steps).
  8. Eurostat/Statbel published SILC indicators for BE (median equivalized income, AROP by region, quintile shares — the published tables are open even though microdata is licensed). These become validation targets for the distributional outputs rather than calibration constraints.

Each package: publisher CSV(s) under db/data/<publisher>/<package>/, value_id rows with period, geography_id, unit, and source_url per the facts-only store conventions. populace's be/target_references.json then binds them in a calibration v2.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading issue #72 and the populace#259 pilot, then inspect the existing publisher-package data under db/data/ and the calibration bindings in be/target_references.json. Follow the facts-only store conventions for publisher CSVs and value_id rows, and consider the listed target families in priority order. Done means the required open-data packages are recorded and bound in calibration v2.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.