nestedlife cashflow

Draw a graph of present value of cashflow

../../_images/sphx_glr_plot_pvnetcf_001.png

Out:

Started loading data from 'input.xlsx'.
Loading PolicyData...Done. (0.50secs)
Loading MortalityTables...Done. (0.28secs)
Loading ProductSpec...Done. (0.40secs)
Loading OtherParam1...Done. (0.23secs)
Loading OtherParams2...Done. (0.23secs)
Loading Assumption...Done. (0.26secs)
Loading AssumptionTables...Done. (0.25secs)
Loading Scenarios...Done. (0.27secs)
Input space and its sub spaces are saved in '[project name].mx'.
You can load input data from the saved file instead of 'input.xlsx'
by passing 'load_saved=True' to simplelife.build function.

import modelx as mx

try:
    import nestedlife.nestedlife as nestedlife
except ImportError:
    import nestedlife

model = nestedlife.build()

# Policy point ID and aliases
polid = 171
outer = model.OuterProj[polid]
inner = outer.InnerProj

# Code block for overwiting the defaut model

def SurrRateMult(t):
    if t == 0:
        return 1
    else:
        return SurrRateMult(t-1)


def PolsSurr(t):
    """Number of policies: Surrender"""
    return PolsIF_Beg1(t) * asmp.SurrRate(t) * SurrRateMult(t)


def PolsIF_End_inner(t):
    """Number of policies: End of period"""
    if t == t0:
        return outer.PolsIF_End(t)
    else:
        return PolsIF_Beg1(t-1) - PolsDeath(t-1) - PolsSurr(t-1)


model.BaseProj.new_cells(formula=SurrRateMult)
model.BaseProj.PolsSurr.set_formula(PolsSurr)
model.OuterProj.InnerProj.PolsIF_End.set_formula(PolsIF_End_inner)

outer.SurrRateMult[1] = 2
outer.SurrRateMult[2] = 0.5
outer.SurrRateMult[3] = 1

inner[1].SurrRateMult[1] = 2
inner[2].SurrRateMult[2] = 0.5
inner[3].SurrRateMult[3] = 1

# Code block for PV graph

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()


def draw_bars(item):

    term = 5

    expect = []
    for t0 in range(term):
        expect_t0 = [np.nan] * term
        for t in range(t0, term):
            cells = outer.InnerProj[t0].cells[item]
            expect_t0[t] = cells[t]

        expect.append(expect_t0)

    fg, ax = plt.subplots()
    ax.set_xlim(left=-0.5, right=term + 1)

    for t0 in range(term):
        draw_single_bar(expect[t0], ax, t0)


def draw_single_bar(data, ax, t0):

    size = len(data)
    width = 1/ (size + 1)
    ax.bar(np.arange(size) + t0 * (width + 0.05), data, width)


# PV Test
if __name__ == '__main__':
    draw_bars('PV_NetCashflow')

Total running time of the script: ( 0 minutes 4.177 seconds)

Gallery generated by Sphinx-Gallery