Get a regulator’s published scenario set: the thousands of simulated paths of interest rates, equity returns and inflation that pension funds or insurers must use, generated by a documented and reviewed economic scenario generator. It is a reference to calibrate and validate an own scenario generator against, both for the real-world distribution and for the market-consistent one.

Available is the scenario set of De Nederlandsche Bank (authority=”dnb”), which Dutch pension funds use for their feasibility test and the transition to the new pension contract: 20,000 scenarios over a horizon of 100 years, generated every quarter with the model the Commissie Parameters 2022 specified, under the real-world measure (measure=”real_world”, the P-set) and the market-consistent measure (measure=”market_consistent”, the Q-set, arbitrage-free and calibrated to market prices including swaptions).

The variables, as decimals per year of the horizon (year 0 is the end of the quarter the set is for): the annually compounded nominal zero rates “Nominal rate 1Y”, “5Y”, “10Y”, “20Y” and “30Y” and the euro area “Real rate EU 10Y”, derived from the model’s term structure, and the annual “Equity return”, “Inflation EU” and “Inflation NL” (from year 1).

By default the distribution per year is returned: the quantiles of the 20,000 scenarios and their mean. With scenarios=True every scenario is returned instead (20,000 columns per variable). The set is a large workbook (around 180 MB) that takes a minute or two to download and read the first time; it is cached for 30 days. No API key is needed.

See definition: https://www.dnb.nl/voor-de-sector/open-boek-toezicht/sectoren/pensioenfondsen/

Also known as: DNB scenarioset, uniform scenario set, CP2022 scenarios, P-set, Q-set, regulatory economic scenario generator.

Regulatory Scenario Set in Python

Install the Finance Toolkit with:

pip install financetoolkit -U

Then call get_scenario_set as shown below.

from financetoolkit import Economics

economics = Economics(end_date="2025-12-31")

scenario_set = economics.get_scenario_set(
    measure='real_world', variables='Nominal rate 10Y', quantiles=[0.05, 0.5, 0.95]
)

scenario_set['Nominal rate 10Y'].loc[[0, 1, 5, 10, 30, 100]]

Which returns:

Horizon 5% 50% 95% Mean
0 0.0293 0.0293 0.0293 0.0293
1 0.0203 0.0281 0.0363 0.0282
5 0.0139 0.028 0.0435 0.0283
10 0.0069 0.0235 0.0416 0.0238
30 -0.0001 0.0178 0.037 0.018
100 0.0024 0.0197 0.039 0.0201

Parameters

The function accepts the following parameters:

  • authority (str, optional): The regulator: “dnb”. Defaults to “dnb”.
  • measure (str, optional): “real_world” or “market_consistent”. Defaults to “real_world”.
  • variables (list[str] | str | None, optional): The variables to include, from “Nominal rate 1Y”, “Nominal rate 5Y”, “Nominal rate 10Y”, “Nominal rate 20Y”, “Nominal rate 30Y”, “Real rate EU 10Y”, “Equity return”, “Inflation EU” and “Inflation NL”. Defaults to None, which includes all of them.
  • quantiles (list[float] | None, optional): The quantiles of the distribution per year. Defaults to None, which is [0.01, 0.05, 0.25, 0.5, 0.75, 0.95, 0.99].
  • scenarios (bool, optional): Whether to return every scenario instead of the distribution. Defaults to False.
  • rounding (int | None, optional): The number of decimals to round the results to. Defaults to None.
Share