Skip to content

Repository files navigation

Lowering premiums and increasing investor returns by issuing multi-country CAT bonds

Code basis to create and evaluate parametric sovereign CAT bonds and replicate the results from the paper: Lowering premiums and increasing investor returns by issuing multi-country CAT bonds

The used hazard dataset was extracted from: Bloemendaal, Nadia; de Moel, H. (Hans); Muis, S; Haigh, I.D. (Ivan); Aerts, J.C.J.H. (Jeroen) (2023): STORM tropical cyclone wind speed return periods. Version 4. 4TU.ResearchData. dataset. https://doi.org/10.4121/12705164.v4, containing 10'000 years of statistically resampled tropical cyclone tracks. Part of the calculations were performed on the ETH Euler cluster, due to the heavy computational load.

To derive results of the paper first calculate the 25 single-country CAT bonds with:

  • calc_sng_cty_bonds.py

The output of the single country CAT bonds is saved to your local storage and then imported to derive optimal risk pools with:

  • pooling_n_pools.py

The pooling script ouptuts the convergence plots and the allocation of each country into a pool. The output is imported into a new script to create and simulate the respective multi-country CAT bonds with:

  • calc_multi_cty_bonds.py

The outputs are saved. With the following notebook the results can be analysed and figures of the paper can be printed:

  • paper_figures.ipynb

The construction of single country CAT bonds depends on various specialized scripts. The scripts are the following:

  • exposures_alt.py -> derive exposure, TC boundary, subareas, and hazard data; this script makes use of
  • impact.py -> takes the hazard and subarea data and derives the damage per event and subarea and the principal based on return periods of damage or the share of GDP
  • haz_int_grd.py -> takes the hazard and subarea data and derives the parametric index per event and subarea (wind speed or central pressure)
  • alt_pay_opt.py -> takes the damage, hazard, and parametric index data and calibrates the payout function and results in a dataframe indicating damage, payout, year, and month per hazard event
  • simulate_bond.py -> used to simulate the bond using all hazard events. First, the losses as well as the relevant metrics for the losses will be derived (expected loss, attachment probability, and various financial metrics)
  • calc_premium.py -> used to derive premiums using various pricing methods based on loss data
  • simulate_bond.py -> using the premium estimates now the returns of the bond can be simulated and the bond set up is complete
  • n_fct_t_rl_thm_ll.py-> includes a wrapper function to generate a single-country CAT bond on the fly

Results for the pooling set up are calculated in:

  • calc_mlt_cty_bonds.py

    The notebook first imports the data on the respective single country bonds which were calculated with the script:

    • calc_sng_cty_bonds.py
      This script makes use of the script:
      • n_fct_t_rl_thm_ll.py
        includes a wrapper function to design multi-country CAT bonds on the fly making use of
        • simulate_multi_cty_bond.py → create tranches, simulate multi-country bonds used to derive losses and related metrics as well as returns
          Premiums were calculated with the same script as for single_country bonds

    Optimal pools for the set of countries were calculated with:

    • pooling_n_pools.py
      based on the optimization function from Ciullo et al. (2022) and Elsener (2024) saved in:
      • pooling_functions_ciullo.py

    All figures of the paper are derived in the script:

    • paper_figures.ipynb
      with the help of the script:
      • figures_helper_fcts.py

Other scripts:

  • For each country, damage for the 250-year return period event was derived with:
    • assess_tc_danger.py
  • test.py includes a full running minimal example which can be called to see if the scripts are working

Data

In Zenodo under the DOI: 10.5281/zenodo.14879604 (https://doi.org/10.5281/zenodo.14879604) generated data is saved.

Requirements

  • Python ≥ 3.9
  • CLIMADA 5.0
  • NumPy, Pandas, Matplotlib, and other standard Python packages

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages