Extra Risk#

If the underwriter determines that an individual should be offered insurance but at above standard rates, there are different ways in which we can model the extra mortality risk in a premium calculation.

Age rating#

\((x) \gets (x+k)\)

  • add years to age, referred to as age rating: the insurer may compensate for extra risk by treating the individual as being older, for example, an impaired life aged 40 might be asked to pay the same premium paid by a non- impaired life aged 45.

Multiple of mortality rate#

\(q_{x} \gets q_{x} \cdot k\)

  • multiply mortality rate by a constant, which assumes that lives are subject to mortality rates that are higher than the standard lives’ mortality rates.

Force of mortality#

A linear transformation of \(\mu_x\) affects survival probability in the following ways: Recall that \(\mu\) is exponentiated to get \(p\), hence adding a constant to \(\mu\) requires multiplying \(~_tp_x\) by the constant exponentiated, while multiplying \(\mu\) by a factor requires raising \(~_tp_x\) to that power

\(\mu_{x+t} \gets \mu_{x+t} + k \Rightarrow ~_tp_x \gets ~_tp_x ~ e^{-kt}\)

  • add constant to force of mortality, when the extra risk is largely independent of age

\(\mu_{x+t} \gets \mu_{x+t} \cdot k \Rightarrow ~_tp_x \gets ~(_tp_x)^{k}\)

  • multiply force of mortality by constant

Methods#

The ExtraRisk class implements methods to adjust the survival or mortality function by extra risks.

from actuarialmath import ExtraRisk, SelectLife, SULT
import describe
describe.methods(ExtraRisk)
class ExtraRisk - Adjust mortality by extra risk

    Args:
      life : contains original survival and mortality rates
      extra : amount of extra risk to adjust
      risk : adjust by {"ADD_FORCE", "MULTIPLY_FORCE", "ADD_AGE", "MULTIPLY_RATE"}

    Methods:
    --------

    q_x(x, s):
      Return q_[x]+s after adding age rating or multipliying mortality rate

    p_x(x, s):
      Return p_[x]+s after adding or multiplying force of mortality

    __getitem__(col):
      Returns survival function values adjusted by extra risk

Examples#

The ExtraRisk class is initialized with its life argument set to an instance of a survival model, with amount of extra risk and type of risk (either “ADD_FORCE”, “MULTIPLY_FORCE”, “ADD_AGE” or “MULTIPLY_RATE”) specified. The q_x or p_x methods can then be called to return the adjusted mortality rate or survival probability respectively, or an entire column of values by age can be retrieved as the item “q” or “p”.

SOA Question 5.5

For an annuity-due that pays 100 at the beginning of each year that (45) is alive, you are given:

  • Mortality for standard lives follows the Standard Ultimate Life Table

  • The force of mortality for standard lives age 45 + t is represented as \(\mu_{45+t}^{SULT}\)

  • The force of mortality for substandard lives age 45 + t, \(\mu_{45+t}^{S}\), is defined as:

\[\begin{split}\begin{align*} \mu_{45+t}^{S} &= \mu_{45+t}^{SULT} + 0.05, \quad 0 \le t < 1\\ &= \mu_{45+t}^{SULT}, \quad t \ge 1 \end{align*}\end{split}\]
  • \(i = 0.05\)

Calculate the actuarial present value of this annuity for a substandard life age 45.

print("SOA Question 5.5: (A) 1699.6")
life = SULT()
extra = ExtraRisk(life=life, extra=0.05, risk="ADD_FORCE")
select = SelectLife(periods=1).set_interest(i=.05)\
                              .set_select(s=0, age_selected=True, q=extra['q'])\
                              .set_select(s=1, age_selected=False, a=life['a'])\
                              .fill_table()
print(100*select['a'][45][0])
SOA Question 5.5: (A) 1699.6
1699.6076593190103

SOA Question 4.19

(80) purchases a whole life insurance policy of 100,000. You are given:

  • The policy is priced with a select period of one year

  • The select mortality rate equals 80% of the mortality rate from the Standard Ultimate Life Table

  • Ultimate mortality follows the Standard Ultimate Life Table

  • \(i = 0.05\)

Calculate the actuarial present value of the death benefits for this insurance

print("SOA Question 4.19:  (B) 59050")
life = SULT()
extra = ExtraRisk(life=life, extra=0.8, risk="MULTIPLY_RATE")
select = SelectLife(periods=1).set_interest(i=.05)\
                              .set_select(s=0, age_selected=True, q=extra['q'])\
                              .set_select(s=1, age_selected=False, q=life['q'])\
                              .fill_table()
print(100000*select.whole_life_insurance(80, s=0))
SOA Question 4.19:  (B) 59050
59050.59973285648

Other examples

life = SULT()
extra = ExtraRisk(life=life, extra=2, risk="MULTIPLY_FORCE")
print(life.p_x(45), extra.p_x(45))
0.9992288829941123 0.9984583606096613