Net premium reserves

In this post, we will shed light on what net premium reserves are, how to calculate them and even build a simple actuarial cash flow model to determine their value.


List of content:

  1. The concept behind net premium reserves
  2. Formulas for Net Premium Reserves
  3. Modelling

The concept behind net premium reserves

In a previous blog post, we discussed the concept of net premiums. We mentioned the use of the equivalent principle to derive the value of net premiums paid periodically. What was the equivalent principle all about?

To put it simply, when an insurance contract is established, two parties come together, agreeing to exchange sets of payments. For example, an insured individual might pay a series of net premiums to an insurer, which is equivalent, at the time of policy issuance, to the sum insured upon the insured person's death.

However, over time, the equivalence between the future financial obligations of both parties may no longer hold. The insured may still be required to pay further net premiums, while the insurer must fulfill the duty of paying the sum assured upon the insured's death. But the present value of expected premiums does not equal the present value of the expected benefit anymore. This is where the concept of net premium reserves comes into play.

In this post, we'll primarily focus on the periods beyond the contract's start. To apply the equivalent principle, we need a balancing item, one that serves as a liability for one party and an asset for the other. This balancing item is referred to as the net premium reserve.

Formulas for Net Premium Reserves

The net premium reserve is defined as the expectation of prospective loss. The prospective method states that the reserve is the difference between the actuarial present values of future benefits and future net premiums.

We can categorize net premium reserve formulas based on the type of insurance product. For this discussion, we will focus on discrete reserves as they are commonly used in cash flow models.

Product Reserve notation Prospective formula
Whole Life Insurance \( {}_{k} {V}_{x} \) \( A_{x+k} - P_{x} \cdot \ddot{a}_{x+k} \)
n-Year Term Insurance \( \require{enclose} {}_{k} V^1_{x:} {}^{}_{\enclose{actuarial}{n}} \) \( \require{enclose} A^1_{x+k:} {}^{}_{\enclose{actuarial}{n-k}} - P^1_{x:} {}^{}_{\enclose{actuarial}{n}} \cdot \ddot{a}^{}_{x+k:} {}^{}_{\enclose{actuarial}{n-k}} \)
n-Year Endowment Insurance \( \require{enclose} {}_{k} V^{}_{x:} {}^{}_{\enclose{actuarial}{n}} \) \( \require{enclose} A^{}_{x+k:} {}^{}_{\enclose{actuarial}{n-k}} - P^{}_{x:} {}^{}_{\enclose{actuarial}{n}} \cdot \ddot{a}^{}_{x+k:} {}^{}_{\enclose{actuarial}{n-k}} \)
n-Year Pure Endowment \( \require{enclose} {}_{k} V^{}_{x:} {}^{1}_{\enclose{actuarial}{n}} \) \( \require{enclose} A^{}_{x+k:} {}^{1}_{\enclose{actuarial}{n-k}} - P^{}_{x:} {}^{1}_{\enclose{actuarial}{n}} \cdot \ddot{a}^{}_{x+k:} {}^{}_{\enclose{actuarial}{n-k}} \)

Modelling

Now, let's move on to the practical side of things. In this section, we will build a model for term life insurance and calculate net premium reserves using the Python programming language and the cashflower package. If you're not yet familiar with the cashflower package, don't worry; you can refer to the User's Guide for assistance.

Scenario

Imagine a 35-year-old individual who has purchased a 5-year term life insurance policy with a sum assured of 200 000 and a monthly premium of 37.96. We'll assume a constant interest rate of 0.005 per month and use illustrative life tables for mortality rates. You can download illustrative life tables as a CSV file here.

Input

Before we dive into the calculations, let's start by defining the model's input. We'll describe the policyholder's attributes in the model point set. We have already transformed the term of 5 years into 60 months.

# input.py
import pandas as pd
from cashflower import ModelPointSet

policy = ModelPointSet(data=pd.DataFrame({
    "age_at_entry": [35],
    "term": [60],
    "sum_assured": [200_000],
    "premium": [37.96],
}))

Next, we'll define the assumptions:

# input.py
assumption = {
    "illustrative_life_table": pd.read_csv("./input/illustrative_life_table.csv", index_col="age"),
    "interest_rate": 0.005,
}

Model

In the modelling phase, we'll break down the calculations step by step. We'll begin by preparing the probability of survival.

# model.py
from cashflower import variable
from input import assumption, policy
from settings import settings


@variable()
def age(t):
    if t == 0:
        return policy.get("age_at_entry")
    elif t % 12 == 0:
        return age(t-1) + 1
    else:
        return age(t-1)

@variable()
def yearly_mortality_rate(t):
    return assumption["illustrative_life_table"].loc[age(t)]["qx"]

@variable()
def monthly_mortality_rate(t):
    return 1 - (1 - yearly_mortality_rate(t))**(1/12)

@variable()
def survival_for_t_periods(t):
    if t == 0:
        return 1
    else:
        return survival_for_t_periods(t-1) * (1 - monthly_mortality_rate(t))

The benefit is paid out, if the policyholder survives until period t-1 and then dies in period t.

# model.py
@variable()
def expected_benefit(t):
    if t == 0 or t > policy.get("term"):
        return 0
    else:
        return policy.get("sum_assured") * survival_for_t_periods(t-1) * monthly_mortality_rate(t)

@variable()
def pv_expected_benefit(t):
    v = 1/(1+assumption["interest_rate"])
    if t == settings["T_MAX_CALCULATION"]:
        return expected_benefit(t)
    else:
        return expected_benefit(t) + pv_expected_benefit(t+1) * v

The premium is paid as long as the policyholder survives.

# model.py
@variable()
def expected_premium(t):
    if t >= policy.get("term"):
        return 0
    return policy.get("premium") * survival_for_t_periods(t)

@variable()
def pv_expected_premium(t):
    v = 1 / (1 + assumption["interest_rate"])
    if t == settings["T_MAX_CALCULATION"]:
        return expected_premium(t)
    else:
        return expected_premium(t) + pv_expected_premium(t+1) * v

The net premium reserve the difference between present value of benefits and premiums.

# model.py
@variable()
def net_premium_reserves(t):
    return pv_expected_benefit(t) - pv_expected_premium(t)

Results

Let's take a closer look at some key results to better understand the concept:

# output
 t  expected_benefit  pv_expected_benefit  expected_premium  pv_expected_premium  net_premium_reserve
 0              0.00              1963.42             37.96              1963.32                 0.10
 1             33.59              1973.24             37.95              1934.98                38.25
 2             33.59              1949.34             37.95              1906.52                42.83
 3             33.58              1925.34             37.94              1877.91                47.43
...
35             37.79              1015.99             37.72               886.70               129.29
36             40.31               983.09             37.72               853.23               129.86
37             40.31               947.49             37.71               819.59               127.90
...
58             42.89               130.98             37.54                74.89                56.10
59             42.88                88.54             37.53                37.53                51.01
60             45.89                45.89              0.00                 0.00                45.89
61              0.00                 0.00              0.00                 0.00                 0.00

The net premium reserve is close to zero at the start of the projection, in alignment with the contract's commencement. The premium has been set in accordance with the equivalence principle.

The expected benefit is initially lower than the expected premium and then rises above it, resulting in the net premium reserve first increasing and then declining.


We hope this blog post has provided you with a clear understanding of net premium reserves in actuarial science. If you have any questions or would like to discuss this topic further, feel free to comment below or use the discussions section in the repository. Happy modelling!

Read also:

Log in to add your comment.

Comments

future_actuary (2024-11-14)

This is exactly what I was looking for! The practical example and code snippets bring so much clarity to the topic of net premium reserves. Nicely done!