Input Assumptions for Modelling the Macro Parameters in the negaWatt-BE Scenario
MACRO PARAMETERS IN BELGIUM
Developer: LATERRE Antoine, BERNAERTS Valentine, QUOILIN Sylvain, MEYER Sébastien
To ensure transparency and consistency within the negaWatt-BE project, this notebook documents all key input assumptions related to the macro parameters. It generates the numerical values and hypotheses presented in the negaWatt-BE Scenario over the energy transition period (2020–2050).
Note: The reference year is 2019 instead of 2020, due to the disruptions caused by the COVID-19 pandemic in 2020. This choice ensures greater consistency and realism in the baseline and future projections.
# Automatically reload the file if it is modified:
%load_ext autoreload
%autoreload 2
# Import projection functions:
from nW_BE_demand_model_sub_functions import *
# Import packages:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
References¶
- [1] Bureau fédéral du Plan; SPF Economie - Statbel (2025). Population projections 2024-2070. Population de la Belgique par âge, au 1er janvier - FR (xlsx). Retrieved November 10, 2025. [Database].
Available at: https://www.plan.be/en/data/population-projections-2024-2070 - [2] Rozsai, Mate; Jaxa-Rozen, Marc; Salvucci, Raffaele; Sikora, Przemyslaw; Gea Bermudez, Juan; Neuwahl, Frederik (2025): JRC-IDEES-2023. European Commission, Joint Research Centre (JRC). [Dataset].
PID: http://data.europa.eu/89h/1f0b480c-6d21-4d95-897d-20c7ca33df6f - [3] Rozsai, Mate; Jaxa-Rozen, Marc; Salvucci, Raffaele; Sikora, Przemyslaw; Tattini, Jacopo; Neuwahl, Frederik (2024): JRC-IDEES-2021: the Integrated Database of the European Energy System – Data update and technical documentation, Publications Office of the European Union, Luxembourg, 2024. [Report].
DOI: https://doi.org/10.2760/614599 - [4] Eurostat (2025). Population on 1 January. (TPS00001) Retrieved December 18, 2025. [Database].
DOI: https://doi.org/10.2908/TPS00001 - [5] Eurostat (2023). Population on 1st January by age, sex and type of projection. (PROJ_23NP) Retrieved December 18, 2025. [Database].
DOI: https://doi.org/10.2908/PROJ_23NP - [6] Bureau fédéral du Plan; SPF Economie - Statbel (2025). Perspectives de ménages 2024-2070. Ménages privés Belgique par âge, au 1er janvier - FR (xlsx). Retrieved November 20, 2025. [Database].
Available at: https://www.plan.be/fr/donn%C3%A9es/perspectives-de-menages-2024-20
Time horizon¶
The time horizon considered for our energy transition scenarios spans from 2019 to 2050 and is discretised in 5-year intervals.
# Define the time horizon: [2019, 2025, 2030, 2035, 2040, 2045, 2050]
years = generate_target_years(2019)
Demography¶
The Belgian population data are retrieved from the Federal Planning Bureau and Statbel [1]. The figure for 2019 is from observations (Stabel statistics) while the data from 2025 onwards follow demographic projections for the period 2025–2071 (from the Federal Planning Bureau and Statbel).
We selected this database to ensure consistency between historical statistics and projections (integrated methodology), as well as consistency with the other statistical datasets used for Belgium. It should nevertheless be noted that other statistical databases could have been used to determine the population for the reference year (2019) and its projection. For example, the Joint Research Centre (JRC) of the European Commission [2,3] uses Eurostat data [4,5] and reports a population of 11.455.519 inhabitants in 2019, compared to 11.431.406 according to Statbel (+0,21%). The small discrepancies that may arise (typically < 0,5%) are due to differences in definitions and compilation methods: Statbel data are based on the National Register of Natural Persons, whereas Eurostat includes all effective residents (e.g. asylum seekers, etc.).
Data for households are also from the Federal Planning Bureau and Statbel [1].
# Define population size
population_dict = pd.Series([11_431_406, 11_816_102, 12_023_862, 12_186_730, 12_347_171, 12_490_658, 12_600_911], index=years)
# Define the number of households
households_dict = pd.Series([4_948_398, 5_199_667, 5_355_123, 5_489_927, 5_609_698, 5_702_818, 5_770_867], index=years)
Conversion parameters¶
ktoe_to_GWh = 11.63
kgoe_to_kWh = 11.63
kgh2_to_kWh = 120/3.6
kgLNG_to_kWh= 45.1/3.6
J_to_kWh = 1/3.6e+6
Physical constants¶
cp_h2o = 4184*J_to_kWh # kWh/kg/K
rho_h2o = 0.99906 # kg/l
Website export
The cell below exports the macro context (population, households and household
size) to the public website (website/data/macro.js). Re-run it after updating
the demographic projections. See the Public sufficiency website section of
README.md.
# ===== Website export: build website/data/macro.js =====
_NB = "../notebooks/nW_BE_demand_model_macro.html"
_y0, _y1 = years[0], years[-1]
_pop0, _pop1 = float(population_dict[_y0]), float(population_dict[_y1])
_hh0, _hh1 = float(households_dict[_y0]), float(households_dict[_y1])
_pph0, _pph1 = _pop0 / _hh0, _pop1 / _hh1
_H = [
make_hypothesis("population", "Population", "Demographics",
round(_pop0), round(_pop1), unit="people",
ref_year=_y0, target_year=_y1, notebook=_NB,
reference="Federal Planning Bureau / Statbel"),
make_hypothesis("households", "Households", "Demographics",
round(_hh0), round(_hh1), unit="households",
ref_year=_y0, target_year=_y1, notebook=_NB,
reference="Federal Planning Bureau / Statbel"),
make_hypothesis("persons-per-household", "People per household", "Demographics",
round(_pph0, 2), round(_pph1, 2), unit="persons/household",
ref_year=_y0, target_year=_y1, notebook=_NB,
reference="derived from population / households"),
]
write_hypotheses_js("macro", _H, title="Population & context")
import pandas as _pd
_pd.DataFrame([{ "id": h["id"], "hypothesis": h["name"],
str(_y0): h["refValue"], str(_y1): h["targetValue"], "unit": h["unit"] }
for h in _H])