To run this notebook and get all the outputs below, Go to the Cell menu above, and then click Run All.
This noteook demonstrates the usage of ifrs17sim project in lifelib, by building and running a model and drawing waterfall graphs that depict how balancesheet items change and cashflows emerge over one or multiple periods using cashflows of a single modelpoint.
Those charts are:
under the senario that actual cashflows are equal to expected.
Jupter notebook enables you to run a Python script piece by piece. You can run each piece of code (called a "cell") by putting the cursor in the cell and pressing Shift + Enter, and get the output right below the input code of the cell.
If you want to learn more about Jupyter Notebook, this tutorial will help you. There are also plenty of other resources on the internet as Jupyter Notebook is quite popular.
The first line
%matplotlib notebook, is for specifying drawing mode.
The next few lines are import statements, by which functions defined in other modules become avaialbe in this script.
draw_charts modules are in the project directory of this project. To see what fiels are in the project directory, select Open from the File menu in the tool bar above.
%matplotlib notebook import pandas as pd import collections import matplotlib.pyplot as plt from draw_charts import draw_waterfall, get_waterfalldata
The next line is to create a model from
build function defined in
ifrs17sim module which has just been imported.
load_saved parameter of the
build function, the input data is read from
ifrs17sim.mx, the 'pickled' file to save loading time. To read input from
load_saved=False or without any parameter because
False is the default value of
If you run this code multiple time, the previous model is renamed to
ifrs17sim_BAK*, and a new model is created and returned as
model thre is a space called
OuterProj and other spaces.
OuterProj is parametrized by Policy ID, i.e. each of the spaces with parameters corresponds to a projection of one policy. For example,
model.OuterProj return the projection of policy ID 1,
model.OuterProj return the projection of policy ID 171.
The first line below sets
proj as a shorthand for the projection of Policy ID 1. To see what cells are in
proj.cells in an empty cell.
You can change the sample policy to output by supplying some other ID.
import modelx as mx model = mx.read_model("model") proj = model.OuterProj
The code below generate a waterfall chart that shows how the present value of expected insurance cashflows unwinds over time. No adjustment is made to match actual in-force and no changes in assumptions are made.
estcf = get_waterfalldata( proj, items=['PV_FutureCF', 'EstPremIncome', 'EstIntOnCF', 'EstAcqCashflow', 'EstClaim', 'EstExps'], length=3, reverseitems=['EstPremIncome']) draw_waterfall(estcf, title='Expected Cashflows')
The CSM amortization chart below depicts items that increase/decrease CSM balance under the senario that actual cashflows are equal to expected. The chart below is explained in more details in another notebook.
csmrf = get_waterfalldata( proj, items=['CSM', 'IntAccrCSM', 'AdjCSM_FlufCF', 'TransServices'], length=3, reverseitems=['TransServices']) draw_waterfall(csmrf, title='CSM Amortization')
The code below generate a waterfall chart that simulate actual insurance cashflows that are assumed to be equal to the expected. The net cashflow of each period is withheld as accumulated cashflow and credited with interests at the same rate as the discount rate.
actcf = get_waterfalldata( proj, items=['PremIncome', 'IntAccumCF', 'ExpsAcqTotal', 'BenefitTotal', 'ExpsMaintTotal', 'ActualNetCF'], length=3, reverseitems=['ExpsAcqTotal', 'BenefitTotal', 'ExpsMaintTotal']) draw_waterfall(actcf, stocks=[0, 5], title='Actual Cashflows')
The chart below simulates P&L accounts based on IFRS17 from the background data used to draw the charts above. The profit in each period is retained and accumulated as
ifrspl = get_waterfalldata( proj, items=['InsurRevenue', 'InsurServiceExps', 'InsurFinIncomeExps', 'ProfitBefTax'], length=5, reverseitems=['InsurServiceExps']) draw_waterfall(ifrspl, stocks=[0, 3], title='IFRS17 Profit/Loss')