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:
\(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