Skip to content
Actuarial Science and Insurance

actuarial-science-ai999x

Life tables and survival models, life insurances and annuities, net and gross premiums, reserves and Thiele's equation, interest theory, loss models with deductibles and limits, Panjer's recursion, VaR and TVaR, credibility and loss reserving (chain-ladder, Bornhuetter-Ferguson, Cape Cod, Mack).

91capabilities
15topics
91formulas typeset
4ways to run: desktop app, command line, browser, Python
1.0.0version
What it does

What Actuarial Science and Insurance does

Actuarial Science and Insurance (actuarial-science-ai999x) is an offline Python package for actuarial science and insurance. It covers life tables and survival models, life insurances and annuities, net and gross premiums, reserves and Thiele's equation, interest theory, loss models with deductibles and limits, Panjer's recursion, VaR and TVaR, credibility and loss reserving (chain-ladder, Bornhuetter-Ferguson, Cape Cod, Mack).

It has 91 capabilities — 91 computational procedures — in 15 topics, the largest being Loss models, Interest theory, Life tables, Reserves, Credibility and Loss reserving. Ask a question in words with ask(), or call a capability by name with typed inputs with solve(). Every answer carries its value and unit, the steps that produced it and the formula in LaTeX.

When a question is not determined — a value is missing, an input is out of range, or the request is outside the package — it says so and names what it needs, instead of guessing. It runs on an ordinary CPU without a network connection (Python >=3.10), and the same question always gets the same answer.

What it covers

Credibility7Buhlmann credibility premium (known structural parameters) · Buhlmann-Straub credibility with exposures · Empirical Buhlmann credibility from a data table …Interest theory11Accumulated and present value of a single amount · Annuity-certain present and accumulated values · Effective annual rate from a nominal rate …Life annuities5Deferred whole life annuity-due · m-thly whole life annuity-due under UDD · Temporary life annuity …Life insurance5Continuous whole life insurance and annuity under UDD · Deferred whole life insurance · Endowment insurance (fully discrete) …Life tables9Commutation functions D, N, C and M · Curtate and complete expectation of life · Death probability from the central death rate …Loss models16Compound Poisson mean, variance and skewness · Deductible, policy limit, coinsurance and inflation with exponential losses · Deductible, policy limit, coinsurance and inflation with Pareto losses …Loss reserving7Bornhuetter-Ferguson reserve · Cape Cod (Stanard-Buhlmann) reserve · Chain-ladder age-to-age and cumulative development factors …Multiple decrements2Associated single decrement rates from a multiple decrement table (UDD) · Multiple decrement probabilities from single decrement rates (UDD)Multiple lives2Joint life and last survivor annuities and insurances · Reversionary annuityPremiums6Gross annual premium for whole life insurance with expenses · Loss at issue of whole life insurance: mean, standard deviation, probability of loss · Net annual premium for endowment insurance …Ratemaking2Indicated rate by the pure premium method · Indicated rate change by the loss ratio methodReserves8Continuous whole life insurance, premium and reserve under Makeham's law · Gross premium reserve for whole life insurance with expenses · Net premium reserve for endowment insurance …Risk measures4VaR and TVaR of a lognormal loss · VaR and TVaR of a normal loss · VaR and TVaR of a Pareto loss …Survival estimation3Exponential maximum-likelihood fit with censoring · Kaplan-Meier product-limit survival estimate · Nelson-Aalen cumulative hazard estimateSurvival models4Constant force of mortality (exponential lifetime) · De Moivre's law of mortality · Gompertz's law of mortality …
Get it

Use Actuarial Science and Insurance your way

Use it right here in your browser now: the compiled program runs on your own device, with nothing sent anywhere. The AI999X desktop app for Windows and Linux and the command-line program actuarial-science follow in their next releases.

Desktop app

One app with every AI999X model: search, ask in words, input forms, live figures and explanations. Actuarial Science and Insurance joins it in its next release; until then, compute with it in your browser.

The desktop app today · Compute in your browser

Command line

One program per model, for terminals and scripts. This model's program, actuarial-science, joins the command-line bundle in its next release.

What it answers, command by command

Python

The Python package, for notebooks and your own programs (Python 3.10 or newer).

pip install actuarial-science-ai999x

Examples · Python guide

From here to first answer

The browser works now; the downloads follow with the next release.

  1. Type a question in words in the calculator below, or choose a capability (or open any capability further down).
  2. Its inputs come filled in with a worked example: change any of them, in any unit of the right kind.
  3. Press Compute: the answer, what it means and its figures, computed on your device.

Open the calculator

In your browser

Compute something now

Ask a question in words, or choose a capability and open its calculator: the inputs come filled in with a worked example; change any of them (any unit of the right kind) and press Compute. It runs on your device; nothing is sent anywhere.

The same capabilities as the desktop app and the command line, as WebAssembly in this page. Every capability below also has its own Compute in your browser button.

Worked examples

One example, every way to run it

Each worked example with its answer, then the same question on the command line, from Python and in your browser. A command-line output is exactly what the program printed for that command.

Premiums

Net premium for whole life insurance: q = [0.1, 0.2, 0.5, 1], i = 5%, S = 1000

P = S\,\frac{A_x}{\ddot a_x} = S\left(\frac{1}{\ddot a_x} – d\right)
P = 306.8418549
A = 0.8656578278
a_due = 2.821185617
How it was worked out
  1. Net annual premium for whole life insurance
    P = S\,\frac{A_x}{\ddot a_x} = S\left(\frac{1}{\ddot a_x} – d\right)
    with q = [0.1, 0.2, 0.5, 1], i = 0.05, S = 1000
    → P = 306.8418549, A = 0.8656578278, a_due = 2.821185617
Terminal
$ actuarial-science solve act_net_premium_whole_life "q=[0.1, 0.2, 0.5, 1]" i=0.05 S=1000
P = 306.8418549
A = 0.8656578278
a_due = 2.821185617
  by: Net annual premium for whole life insurance  (equivalence principle: P ä_x = S A_x)
  i = 0.05
  S = 1000
  assumes: the table closes; 0 < i < 1; S > 0
Loss reserving

Chain-ladder reserve: T = [[100, 150, 175], [110, 168, 0], [120, 0, 0]]

\hat C_{i,N} = C_{i,N-i}\prod_{k\ge N-i}\hat f_k,\qquad R_i = \hat C_{i,N} – C_{i,N-i}
ultimate = [175, 196, 212]
reserve = [0, 28, 92]
total_reserve = 120
How it was worked out
  1. Chain-ladder ultimate losses and reserves
    \hat C_{i,N} = C_{i,N-i}\prod_{k\ge N-i}\hat f_k,\qquad R_i = \hat C_{i,N} – C_{i,N-i}
    with T = [100 150 175; 110 168 0; 120 0 0]
    → ultimate = [175, 196, 212], reserve = [0, 28, 92], total_reserve = 120
Terminal
$ actuarial-science solve act_chain_ladder_reserve "T=[[100, 150, 175], [110, 168, 0], [120, 0, 0]]"
ultimate = [175.0,196.0,212.0]
reserve = [0.0,28.0,92.0]
total_reserve = 120
  by: Chain-ladder ultimate losses and reserves  (ultimate_i = latest_i x CDF at its age; reserve_i = ultimate_i - latest_i)
  assumes: square triangle with N >= 2; known cells positive, unknown cells 0; no tail factor
Interest theory

Annuity-certain present and accumulated values

a_{\overline{n}|} = \frac{1-v^n}{i},\ \ddot a_{\overline{n}|} = \frac{1-v^n}{d},\ s_{\overline{n}|} = \frac{(1+i)^n-1}{i},\ \bar a_{\overline{n}|} = \frac{1-v^n}{\delta}
a_n = 7.721734929
a_due = 8.107821676
s_n = 12.57789254
s_due = 13.20678716
a_cont = 7.913208595
How it was worked out
  1. Annuity-certain present and accumulated values
    a_{\overline{n}|} = \frac{1-v^n}{i},\ \ddot a_{\overline{n}|} = \frac{1-v^n}{d},\ s_{\overline{n}|} = \frac{(1+i)^n-1}{i},\ \bar a_{\overline{n}|} = \frac{1-v^n}{\delta}
    with n = 10, i = 0.05
    → a_n = 7.721734929, a_due = 8.107821676, s_n = 12.57789254, s_due = 13.20678716, a_cont = 7.913208595
Terminal
$ actuarial-science solve act_annuity_certain n=10 i=0.05
a_n = 7.721734929
a_due = 8.107821676
s_n = 12.57789254
s_due = 13.20678716
a_cont = 7.913208595
  by: Annuity-certain present and accumulated values  (a_n = (1 - v^n)/i, a-due = (1 - v^n)/d, s_n = ((1+i)^n - 1)/i, s-due = ((1+i)^n - 1)/d, continuous = (1 - v^n)/delta)
  i = 0.05
  assumes: n >= 1; 0 < i < 1
Credibility

Buhlmann credibility premium: mu = 1000, EPV = 50000, VHM = 10000, n = 5, xbar = 1200

k = \frac{\mathrm{EPV}}{\mathrm{VHM}},\quad Z = \frac{n}{n+k},\quad P_C = Z\bar X + (1-Z)\mu
k = 5
Z = 0.5
premium = 1100
How it was worked out
  1. Buhlmann credibility premium (known structural parameters)
    k = \frac{\mathrm{EPV}}{\mathrm{VHM}},\quad Z = \frac{n}{n+k},\quad P_C = Z\bar X + (1-Z)\mu
    with mu = 1000, EPV = 50000, VHM = 10000, n = 5, xbar = 1200
    → k = 5, Z = 0.5, premium = 1100
Terminal
$ actuarial-science solve act_buhlmann_credibility mu=1000 EPV=50000 VHM=10000 n=5 xbar=1200
k = 5
Z = 0.5
premium = 1100
  by: Buhlmann credibility premium (known structural parameters)  (k = EPV/VHM; Z = n/(n + k); P = Z xbar + (1 - Z) mu)
  mu = 1000
  EPV = 50000
  VHM = 10000
  n = 5
  xbar = 1200
  assumes: EPV, VHM > 0; n > 0
Loss models

Pareto losses with a deductible: alpha = 3, theta = 2000, d = 500

E[X\wedge d] = \frac{\theta}{\alpha-1}\left[1-\left(\frac{\theta}{\theta+d}\right)^{\alpha-1}\right],\quad e(d) = \frac{\theta+d}{\alpha-1}
mean = 1000
lev_d = 360
per_loss = 640
per_payment = 1250
LER = 0.36
How it was worked out
  1. Ordinary deductible with Pareto losses
    E[X\wedge d] = \frac{\theta}{\alpha-1}\left[1-\left(\frac{\theta}{\theta+d}\right)^{\alpha-1}\right],\quad e(d) = \frac{\theta+d}{\alpha-1}
    with alpha = 3, theta = 2000, d = 500
    → mean = 1000, lev_d = 360, per_loss = 640, per_payment = 1250, LER = 0.36
Terminal
$ actuarial-science solve act_pareto_deductible alpha=3 theta=2000 d=500
mean = 1000
lev_d = 360
per_loss = 640
per_payment = 1250
LER = 0.36
  by: Ordinary deductible with Pareto losses  (per loss = E[X] - E[X ∧ d]; per payment = per loss / S(d); LER = E[X ∧ d]/E[X]; E[X ∧ d] = theta/(alpha-1) [1 - (theta/(theta+d))^(alpha-1)])
  alpha = 3
  theta = 2000
  d = 500
  assumes: alpha > 1; theta > 0; d >= 0
Life annuities

Deferred annuity: q = [0.1, 0.2, 0.5, 1], i = 0.05, u = 2, P = 1000

{}_{u|}\ddot a_x = \sum_{k\ge u} v^k\,{}_kp_x = {}_uE_x\,\ddot a_{x+u}
ua_due = 0.96404276
EPV = 964.04276
How it was worked out
  1. Deferred whole life annuity-due
    {}_{u|}\ddot a_x = \sum_{k\ge u} v^k\,{}_kp_x = {}_uE_x\,\ddot a_{x+u}
    with q = [0.1, 0.2, 0.5, 1], i = 0.05, u = 2, P = 1000
    → ua_due = 0.96404276, EPV = 964.04276
Terminal
$ actuarial-science solve act_deferred_annuity "q=[0.1, 0.2, 0.5, 1]" i=0.05 u=2 P=1000
ua_due = 0.96404276
EPV = 964.04276
  by: Deferred whole life annuity-due  (u|ä_x = sum_(k>=u) v^k k_p_x = u_E_x ä_(x+u))
  i = 0.05
  P = 1000
  assumes: the table closes; u < length of the table; 0 < i < 1
Life insurance

Continuous insurance under UDD: q = [0.1, 0.2, 0.5, 1], i = 0.05

\bar A_x = \frac{i}{\delta}A_x,\qquad \bar a_x = \frac{1-\bar A_x}{\delta}
A_bar = 0.8871232988
A = 0.8656578278
a_bar = 2.313513453
How it was worked out
  1. Continuous whole life insurance and annuity under UDD
    \bar A_x = \frac{i}{\delta}A_x,\qquad \bar a_x = \frac{1-\bar A_x}{\delta}
    with q = [0.1, 0.2, 0.5, 1], i = 0.05
    → A_bar = 0.8871232988, A = 0.8656578278, a_bar = 2.313513453
Terminal
$ actuarial-science solve act_continuous_insurance_udd "q=[0.1, 0.2, 0.5, 1]" i=0.05
A_bar = 0.8871232988
A = 0.8656578278
a_bar = 2.313513453
  by: Continuous whole life insurance and annuity under UDD  (Ā_x = (i/delta) A_x; ā_x = (1 - Ā_x)/delta)
  i = 0.05
  assumes: the table closes; 0 < i < 1; uniform distribution of deaths within each year
Life tables

Death probability from the central death rate: m = 0.02, assumption = udd

\text{UDD: } q_x = \frac{2m_x}{2+m_x},\qquad \text{constant force: } q_x = 1-e^{-m_x}
q = 0.0198019802
p = 0.9801980198
How it was worked out
  1. Death probability from the central death rate
    \text{UDD: } q_x = \frac{2m_x}{2+m_x},\qquad \text{constant force: } q_x = 1-e^{-m_x}
    with m = 0.02, assumption = udd
    → q = 0.0198019802, p = 0.9801980198
Terminal
$ actuarial-science solve act_central_death_rate m=0.02 assumption=udd
q = 0.0198019802
p = 0.9801980198
  by: Death probability from the central death rate  (UDD: q = 2m/(2+m); constant force: q = 1 - e^(-m))
  m = 0.02
  assumption = udd
  assumes: m > 0; m < 2 under UDD
Command line

Use it from the command line

Every command below was run as shown, and the text under it is exactly what actuarial-science printed. The same commands work in a Linux terminal and in Windows PowerShell. actuarial-science joins the command-line bundle in its next release. The user guide covers install, inputs, outcomes, scripting, and every capability with a command and what it printed: PDF · text.

1

Check the install

Prints the model, its version and that this is the Rust build.

Terminal
$ actuarial-science --version
actuarial-science-ai999x 1.0.0 (Rust build, ax-engine 0.1.0)
2

Find a capability

Search the capabilities by what you want to know; the first column is the id to pass to info and solve.

Terminal
$ actuarial-science search "net annual premium for whole life insurance"
act_net_premium_whole_life           Net annual premium for whole life insurance  (premiums / net premiums)
act_net_premium_limited_pay          Net annual premium for limited-payment whole life insurance  (premiums / net premiums)
act_reserve_whole_life               Net premium reserve for whole life insurance  (reserves / prospective reserves)
act_gross_premium                    Gross annual premium for whole life insurance with expenses  (premiums / gross premiums)
act_makeham_continuous_whole_life    Continuous whole life insurance, premium and reserve under Makeham's law  (reserves / Thiele's differential equation)
act_net_premium_term                 Net annual premium for term insurance  (premiums / net premiums)
act_net_premium_endowment            Net annual premium for endowment insurance  (premiums / net premiums)
act_gross_premium_reserve            Gross premium reserve for whole life insurance with expenses  (reserves / gross premium reserves)
… 12 more
3

List the capabilities

Every capability the program answers: its id (what you pass to solve) and its name.

Terminal
$ actuarial-science list
act_accumulated_value                    Accumulated and present value of a single amount
act_annuity_certain                      Annuity-certain present and accumulated values
act_annuity_yield                        Yield rate of a level annuity
act_bornhuetter_ferguson                 Bornhuetter-Ferguson reserve
act_buhlmann_credibility                 Buhlmann credibility premium (known structural parameters)
act_buhlmann_empirical                   Empirical Buhlmann credibility from a data table
act_buhlmann_straub                      Buhlmann-Straub credibility with exposures
act_cape_cod                             Cape Cod (Stanard-Buhlmann) reserve
… 83 more
4

What a capability needs

The equation or method, every input and output with its SI unit. Read this before solve: it tells you the input names.

Terminal
$ actuarial-science info act_net_premium_whole_life
Net annual premium for whole life insurance
  equivalence principle: P ä_x = S A_x
  in   q        death probabilities q_x, q_(x+1), ... ending with 1 (a list) (vector) []
  in   i        annual effective interest rate (5% or 0.05) []
  in   S        sum insured []
  out  P        annual net premium S A_x / ä_x []
  out  A        whole life insurance A_x []
  out  a_due    whole life annuity-due ä_x []
5

Solve

Inputs as name=value, each with any unit of the right kind. The answer lists every output, the method used, each input converted to SI, and the conditions the answer assumes.

Terminal
$ actuarial-science solve act_net_premium_whole_life "q=[0.1, 0.2, 0.5, 1]" i=0.05 S=1000.0
P = 306.8418549
A = 0.8656578278
a_due = 2.821185617
  by: Net annual premium for whole life insurance  (equivalence principle: P ä_x = S A_x)
  i = 0.05
  S = 1000
  assumes: the table closes; 0 < i < 1; S > 0
6

Machine-readable answer

–json prints the same answer as one line of JSON (values in SI): for scripts and other programs.

Terminal
$ actuarial-science solve act_net_premium_whole_life "q=[0.1, 0.2, 0.5, 1]" i=0.05 S=1000.0 --json
{"outcome":"SOLVED","message":"","value":306.841854896,"unit":"","solved_for":"P","si":[["i",0.05],["S",1000.0]],"values":[["P",306.841854896,""],["A",0.865657827757,""],["a_due",2.8211856171,""]],"target":"P","phrase":"annual net premium S A_x / ä_x","assumptions":["the table closes","0 < i < 1","S > 0"],"name":"Net annual premium for whole life insurance","equation":"equivalence principle: P ä_x = S A_x"}
7

When an input is missing

No number is guessed: the answer names what is missing, shows a complete call, and the program exits with status 1.

Terminal
$ actuarial-science solve act_net_premium_whole_life "q=[0.1, 0.2, 0.5, 1]" i=0.05
NEEDS_INPUT: act_net_premium_whole_life needs S (sum insured). Example: solve('act_net_premium_whole_life', q=[0.1, 0.2, 0.5, 1.0], i=0.05, S=1000).
8

Many questions at once

One JSON request per line in, one JSON answer per line out, in order: for scripts, notebooks and agents (the program starts once). In PowerShell: Get-Content cases.jsonl | actuarial-science batch

Terminal
cases.jsonl
{"key": "act_net_premium_whole_life", "inputs": {"q": "[0.1, 0.2, 0.5, 1]", "i": 0.05, "S": 1000.0}}
{"key": "act_annuity_certain", "inputs": {"n": 10, "i": 0.05}}
$ actuarial-science batch < cases.jsonl
{"outcome":"SOLVED","message":"","value":306.841854896,"unit":"","solved_for":"P","si":[["i",0.05],["S",1000.0]],"values":[["P",306.841854896,""],["A",0.865657827757,""],["a_due",2.8211856171,""]],"target":"P","phrase":"annual net premium S A_x / ä_x","assumptions":["the table closes","0 < i < 1","S > 0"],"name":"Net annual premium for whole life insurance","equation":"equivalence principle: P ä_x = S A_x"}
{"outcome":"SOLVED","message":"","value":7.72173492918,"unit":"","solved_for":"a_n","si":[["i",0.05]],"values":[["a_n",7.72173492918,""],["a_due",8.10782167564,""],["s_n",12.5778925355,""],["s_due",13.2067871623,""],["a_cont",7.91320859505,""]],"target":"a_n","phrase":"present value of an annuity-immediate a_n","assumptions":["n >= 1","0 < i < 1"],"name":"Annuity-certain present and accumulated values","equation":"a_n = (1 - v^n)/i, a-due = (1 - v^n)/d, s_n = ((1+i)^n - 1)/i, s-due = ((1+i)^n - 1)/d, continuous = (1 - v^n)/delta"}

All commands

CommandWhat it does
actuarial-science search "<words>"find the capabilities that match
actuarial-science listevery capability: its id and name
actuarial-science info <capability>the equation or method, its inputs and outputs with their units
actuarial-science solve <capability> name=value …the answer; add –target X to solve an equation for X, –json for JSON
actuarial-science figures <capability> name=value … --out DIRthe live figures for those inputs, as SVG files in DIR
actuarial-science batch < requests.jsonlone JSON answer per line, for scripts and agents
actuarial-science catalogevery capability with its inputs, as JSON
actuarial-science --versionthe model and its version

Exit status: 0 when the question was answered, 1 when it was not (the message says why: a missing input, an invalid value, a question outside the model), 2 for a command it does not know.

Python

Use it from Python

After pip install actuarial-science-ai999x, ask in words or call a capability. Every snippet was run as shown; the output under it is what it printed. The Python guide covers ask in words, solve, and every capability with a Python example: PDF · text.

import actuarial_science_ai999x as m

a = m.ask("Net premium for whole life insurance: q = [0.1, 0.2, 0.5, 1], i = 5%, S = 1000")
print(a.outcome)
print(a.values)
for step in a.steps:
    print(step["name"])
Output
SOLVED
{'P': 306.841854896, 'A': 0.865657827757, 'a_due': 2.8211856171}
Net annual premium for whole life insurance
Capabilities

Every capability, explained

Search by name, formula, input or topic. Each capability opens to say what it does, what it needs, what it gives back and why, with its worked example, how to run it (on the command line, from Python, in your browser) and its figures.

91 capabilities

Credibility 7

Buhlmann credibility premium (known structural parameters)1 fig.act_buhlmann_credibility

The Buhlmann credibility factor Z = n/(n + k), k = EPV/VHM, and the credibility premium Z xbar + (1 – Z) mu from the overall mean, the expected process variance, the variance of the hypothetical means and n observations with mean xbar.

k = \frac{\mathrm{EPV}}{\mathrm{VHM}},\quad Z = \frac{n}{n+k},\quad P_C = Z\bar X + (1-Z)\mu

You give

MeaningUnitExample
\mu
Overall (collective) mean—1000
\text{EPV}
Expected process variance—50000
\text{VHM}
Variance of the hypothetical means—10000
n
Number of observations—5
\text{xbar}
Mean of the observations—1200

You get

MeaningUnitExample
k
Buhlmann k = EPV/VHM—5
Z
Credibility factor n/(n + k)—0.5
\text{premium}
Buhlmann credibility premium—1100

Applies when

  • EPV, VHM > 0
  • n > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Buhlmann credibility premium: mu = 1000, EPV = 50000, VHM = 10000, n = 5, xbar = 1200
k = 5
Z = 0.5
premium = 1100

Run it

Terminal
$ actuarial-science solve act_buhlmann_credibility mu=1000 EPV=50000 VHM=10000 n=5 xbar=1200
k = 5
Z = 0.5
premium = 1100
  by: Buhlmann credibility premium (known structural parameters)  (k = EPV/VHM; Z = n/(n + k); P = Z xbar + (1 - Z) mu)
  mu = 1000
  EPV = 50000
  VHM = 10000
  n = 5
  xbar = 1200
  assumes: EPV, VHM > 0; n > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Buhlmann-Straub credibility with exposures2 fig.act_buhlmann_straub

The nonparametric Buhlmann-Straub estimates of the expected process variance and of the variance of the hypothetical means from losses per unit of exposure and the exposures of r risks over n periods, each risk's credibility factor and its credibility premium (complement: the exposure-weighted overall mean).

\hat v = \frac{\sum_{i,j} m_{ij}(X_{ij}-\bar X_i)^2}{r(n-1)},\quad \hat a = \frac{\sum_i m_i(\bar X_i-\bar X)^2 – \hat v(r-1)}{m – \sum_i m_i^2/m},\quad Z_i = \frac{m_i}{m_i + \hat v/\hat a}

You give

MeaningUnitExample
X
Losses per unit of exposure: one row per risk, one column per period matrix—[100 120 110; 200 180 230]
m
Exposures, the same shape as X matrix—[10 20 15; 30 25 20]

You get

MeaningUnitExample
\text{EPV}
Estimated expected process variance—7661.111111
\text{VHM}
Estimated variance of the hypothetical means—3834.197531
k
k = EPV/VHM—1.998100267
Z
Credibility factor of each risk m_i/(m_i + k) (a list)—[0.9574855099, 0.9740500056]
\text{premiums}
Credibility premium per unit of exposure of each risk (a list)—[114.5900431, 200.466171]
\text{mean}
Exposure-weighted overall mean—167.9166667

Applies when

  • at least 2 risks and 2 periods
  • positive exposures
  • estimated VHM > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Buhlmann-Straub credibility: X = [[100, 120, 110], [200, 180, 230]], m = [[10, 20, 15], [30, 25, 20]]
EPV = 7661.111111
VHM = 3834.197531
k = 1.998100267
Z = [0.9574855099, 0.9740500056]
premiums = [114.5900431, 200.466171]
mean = 167.9166667

Run it

Terminal
$ actuarial-science solve act_buhlmann_straub "X=[[100, 120, 110], [200, 180, 230]]" "m=[[10, 20, 15], [30, 25, 20]]"
EPV = 7661.111111
VHM = 3834.197531
k = 1.998100267
Z = [0.957485509927,0.974050005645]
premiums = [114.590043128,200.466171022]
mean = 167.9166667
  by: Buhlmann-Straub credibility with exposures  (v = sum m_ij (X_ij - Xbar_i)^2 / (r(n-1)); a = [sum m_i (Xbar_i - Xbar)^2 - v (r-1)] / (m - sum m_i^2/m); Z_i = m_i/(m_i + v/a))
  assumes: at least 2 risks and 2 periods; positive exposures; estimated VHM > 0

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Empirical Buhlmann credibility from a data table1 fig.act_buhlmann_empirical

The nonparametric estimates of the expected process variance and of the variance of the hypothetical means from r risks observed for n periods each, the Buhlmann k and Z, and each risk's credibility premium.

\hat v = \frac{1}{r(n-1)}\sum_{i,j}\left(X_{ij}-\bar X_i\right)^2,\quad \hat a = \frac{1}{r-1}\sum_i\left(\bar X_i-\bar X\right)^2 – \frac{\hat v}{n}

You give

MeaningUnitExample
X
Observations: one row per risk, one column per period (rows of equal length) matrix—[3 5 7; 6 12 9]

You get

MeaningUnitExample
\text{EPV}
Estimated expected process variance—6.5
\text{VHM}
Estimated variance of the hypothetical means—5.833333333
k
Buhlmann k = EPV/VHM—1.114285714
Z
Credibility factor n/(n + k)—0.7291666667
\text{premiums}
Credibility premium of each risk (a list)—[5.541666667, 8.458333333]
\text{mean}
Overall mean—7

Applies when

  • at least 2 risks and 2 periods
  • estimated VHM > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Empirical Buhlmann credibility: X = [[3, 5, 7], [6, 12, 9]]
EPV = 6.5
VHM = 5.833333333
k = 1.114285714
Z = 0.7291666667
premiums = [5.541666667, 8.458333333]
mean = 7

Run it

Terminal
$ actuarial-science solve act_buhlmann_empirical "X=[[3, 5, 7], [6, 12, 9]]"
EPV = 6.5
VHM = 5.833333333
k = 1.114285714
Z = 0.7291666667
premiums = [5.54166666667,8.45833333333]
mean = 7
  by: Empirical Buhlmann credibility from a data table  (EPV = mean of the within-risk sample variances; VHM = sample variance of the risk means - EPV/n; Z = n/(n + EPV/VHM))
  assumes: at least 2 risks and 2 periods; estimated VHM > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Limited fluctuation full credibility for severity and aggregate losses1 fig.act_limited_fluctuation_severity_aggregate

The expected number of claims needed for full credibility of the claim severity, of aggregate losses (pure premium) and of the claim frequency, for Poisson claim counts and a severity with the given mean and standard deviation.

n_S = n_0\left(1 + \frac{\sigma_X^2}{\mu_X^2}\right),\quad n_0 = \left(\frac{z_{(1+p)/2}}{k}\right)^2

You give

MeaningUnitExample
p
Probability level (90% or 0.9)—0.9
k
Tolerance as a fraction of the mean (5% or 0.05)—0.05
\text{mean\_x}
Mean claim severity—1000
\text{sd\_x}
Standard deviation of the claim severity—2000

You get

MeaningUnitExample
\text{claims\_aggregate}
Claims for full credibility of aggregate losses n0 (1 + CV^2)—5411.086908
\text{claims\_severity}
Claims for full credibility of severity n0 CV^2—4328.869527
\text{claims\_frequency}
Claims for full credibility of frequency n0—1082.217382

Applies when

  • 0 < p < 1
  • 0 < k < 1
  • Poisson claim counts

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Full credibility for aggregate losses: p = 0.9, k = 0.05, mean_x = 1000, sd_x = 2000
claims_aggregate = 5411.086908
claims_severity = 4328.869527
claims_frequency = 1082.217382

Run it

Terminal
$ actuarial-science solve act_limited_fluctuation_severity_aggregate p=0.9 k=0.05 mean_x=1000 sd_x=2000
claims_aggregate = 5411.086908
claims_severity = 4328.869527
claims_frequency = 1082.217382
  by: Limited fluctuation full credibility for severity and aggregate losses  (n0 = (z/k)^2; aggregate: n0 (1 + (sd/mean)^2); severity: n0 (sd/mean)^2)
  p = 0.9
  k = 0.05
  mean_x = 1000
  sd_x = 2000
  assumes: 0 < p < 1; 0 < k < 1; Poisson claim counts

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Limited fluctuation full credibility standard for claim counts3 fig.act_limited_fluctuation_full_credibility

The expected number of claims needed for full credibility of the claim frequency so that the observed number is within a fraction k of its mean with probability p (Poisson claim counts).

n_F = \left(\frac{z_{(1+p)/2}}{k}\right)^2

You give

MeaningUnitExample
p
Probability level (90% or 0.9)—0.9
k
Tolerance as a fraction of the mean (5% or 0.05)—0.05

You get

MeaningUnitExample
n_{\mathrm{full}}
Expected claims needed for full credibility (z/k)^2—1082.217382
z
Standard normal quantile z_((1+p)/2)—1.644853627

Applies when

  • 0 < p < 1
  • 0 < k < 1
  • Poisson claim counts

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Full credibility standard: p = 0.9, k = 0.05
n_full = 1082.217382
z = 1.644853627

Run it

Terminal
$ actuarial-science solve act_limited_fluctuation_full_credibility p=0.9 k=0.05
n_full = 1082.217382
z = 1.644853627
  by: Limited fluctuation full credibility standard for claim counts  (n_F = (z_((1+p)/2) / k)^2)
  p = 0.9
  k = 0.05
  assumes: 0 < p < 1; 0 < k < 1; Poisson claim counts

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Partial credibility (square root rule)1 fig.act_partial_credibility

The credibility factor Z = min(1, sqrt(n/n_F)) of an experience with n claims against a full credibility standard n_F, and the credibility-weighted estimate Z xbar + (1 – Z) M.

Z = \min\!\left(1, \sqrt{n/n_F}\right),\quad P_C = Z\bar X + (1-Z)M

You give

MeaningUnitExample
n
Observed (or expected) number of claims—300
n_{\mathrm{full}}
Full credibility standard in claims—1082
\text{xbar}
Observed experience (mean or rate)—800
M
Complement of credibility (manual rate)—1000

You get

MeaningUnitExample
Z
Credibility factor—0.5265589476
\text{premium}
Credibility-weighted estimate—894.6882105

Applies when

  • n >= 0
  • n_F > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Partial credibility: n = 300, n_full = 1082, xbar = 800, M = 1000
Z = 0.5265589476
premium = 894.6882105

Run it

Terminal
$ actuarial-science solve act_partial_credibility n=300 n_full=1082 xbar=800 M=1000
Z = 0.5265589476
premium = 894.6882105
  by: Partial credibility (square root rule)  (Z = min(1, sqrt(n / n_F)); estimate = Z xbar + (1 - Z) M)
  n = 300
  n_full = 1082
  xbar = 800
  M = 1000
  assumes: n >= 0; n_F > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Poisson-gamma Bayesian credibility2 fig.act_poisson_gamma_credibility

The posterior (Bayesian) mean claim frequency of a risk whose Poisson claim rate has a gamma prior (alpha, theta: mean alpha theta), after observing claim counts in n periods, with the equivalent credibility factor and the posterior gamma parameters.

E[\Lambda\mid x] = \frac{(\alpha + \sum x_j)\,\theta}{1+n\theta} = Z\bar x + (1-Z)\alpha\theta,\quad Z = \frac{n\theta}{1+n\theta}

You give

MeaningUnitExample
\alpha
gamma prior shape alpha—3
\theta
gamma prior scale theta—0.5
\text{counts}
Observed claim counts, one per period (a list) vector—[2, 1, 3]

You get

MeaningUnitExample
\text{post\_mean}
Posterior mean claim rate (alpha + sum x) theta/(1 + n theta)—1.8
Z
Credibility factor n theta/(1 + n theta)—0.6
\text{prior\_mean}
Prior mean alpha theta—1.5
\text{post\_alpha}
Posterior shape alpha + sum x—9
\text{post\_theta}
Posterior scale theta/(1 + n theta)—0.2

Applies when

  • alpha, theta > 0
  • whole-number counts

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Poisson-gamma credibility: alpha = 3, theta = 0.5, counts = [2, 1, 3]
post_mean = 1.8
Z = 0.6
prior_mean = 1.5
post_alpha = 9
post_theta = 0.2

Run it

Terminal
$ actuarial-science solve act_poisson_gamma_credibility alpha=3 theta=0.5 "counts=[2, 1, 3]"
post_mean = 1.8
Z = 0.6
prior_mean = 1.5
post_alpha = 9
post_theta = 0.2
  by: Poisson-gamma Bayesian credibility  (posterior Gamma(alpha + sum x, theta/(1 + n theta)); its mean = Z xbar + (1 - Z) alpha theta with Z = n theta/(1 + n theta))
  alpha = 3
  theta = 0.5
  assumes: alpha, theta > 0; whole-number counts

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Interest theory 11

Accumulated and present value of a single amount1 fig.act_accumulated_value

The value of an amount accumulated for t years at compound interest, the present value of the same amount due in t years, and the accumulation factor (1+i)^t.

AV = P(1+i)^t,\quad PV = P\,v^t

You give

MeaningUnitExample
P
Amount—1000
i
Annual effective interest rate (5% or 0.05)—0.05
t
Time in years—10

You get

MeaningUnitExample
\text{AV}
Accumulated value P(1+i)^t—1628.894627
\text{PV}
Present value P v^t—613.9132535
\text{factor}
Accumulation factor (1+i)^t—1.628894627

Applies when

  • 0 < i < 1
  • 0 <= t <= 200

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Accumulated value: P = 1000, i = 0.05, t = 10
AV = 1628.894627
PV = 613.9132535
factor = 1.628894627

Run it

Terminal
$ actuarial-science solve act_accumulated_value P=1000 i=0.05 t=10
AV = 1628.894627
PV = 613.9132535
factor = 1.628894627
  by: Accumulated and present value of a single amount  (AV = P(1+i)^t; PV = P(1+i)^(-t))
  P = 1000
  i = 0.05
  t = 10
  assumes: 0 < i < 1; 0 <= t <= 200

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Annuity-certain present and accumulated values3 fig.act_annuity_certain

The present value of n level payments of 1 at the end (immediate) or start (due) of each year, their accumulated values at time n, and the continuously payable annuity over n years.

a_{\overline{n}|} = \frac{1-v^n}{i},\ \ddot a_{\overline{n}|} = \frac{1-v^n}{d},\ s_{\overline{n}|} = \frac{(1+i)^n-1}{i},\ \bar a_{\overline{n}|} = \frac{1-v^n}{\delta}

You give

MeaningUnitExample
n
Number of annual payments (term in years)—10
i
Annual effective interest rate (5% or 0.05)—0.05

You get

MeaningUnitExample
a_{n}
Present value of an annuity-immediate a_n—7.721734929
a_{\mathrm{due}}
Present value of an annuity-due—8.107821676
s_{n}
Accumulated value of an annuity-immediate s_n—12.57789254
s_{\mathrm{due}}
Accumulated value of an annuity-due—13.20678716
a_{\mathrm{cont}}
Present value of a continuous annuity over n years—7.913208595

Applies when

  • n >= 1
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Annuity-certain: n = 10, i = 0.05
a_n = 7.721734929
a_due = 8.107821676
s_n = 12.57789254
s_due = 13.20678716
a_cont = 7.913208595

Run it

Terminal
$ actuarial-science solve act_annuity_certain n=10 i=0.05
a_n = 7.721734929
a_due = 8.107821676
s_n = 12.57789254
s_due = 13.20678716
a_cont = 7.913208595
  by: Annuity-certain present and accumulated values  (a_n = (1 - v^n)/i, a-due = (1 - v^n)/d, s_n = ((1+i)^n - 1)/i, s-due = ((1+i)^n - 1)/d, continuous = (1 - v^n)/delta)
  i = 0.05
  assumes: n >= 1; 0 < i < 1

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Effective annual rate from a nominal rate2 fig.act_nominal_to_effective_rate

The annual effective interest and discount rates, force of interest and discount factor equivalent to a nominal interest or discount rate convertible m times a year.

1+i = \left(1+\frac{i^{(m)}}{m}\right)^m = \left(1-\frac{d^{(m)}}{m}\right)^{-m}

You give

MeaningUnitExample
\text{rate}
Nominal annual rate (6% or 0.06)—0.06
m
Conversion periods per year (12 = monthly)—12
\text{kind}
The nominal rate is an interest rate i(m) or a discount rate d(m) choice—interest

You get

MeaningUnitExample
i
Annual effective interest rate—0.06167781186
d
Annual effective discount rate—0.05809466033
\delta
Force of interest—0.05985049813
v
Annual discount factor—0.9419053397

Applies when

  • 0 < rate < 1
  • 1 <= m <= 365

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Effective rate from a nominal rate: rate = 0.06, m = 12, kind = interest
i = 0.06167781186
d = 0.05809466033
delta = 0.05985049813
v = 0.9419053397

Run it

Terminal
$ actuarial-science solve act_nominal_to_effective_rate rate=0.06 m=12 kind=interest
i = 0.06167781186
d = 0.05809466033
delta = 0.05985049813
v = 0.9419053397
  by: Effective annual rate from a nominal rate  (1 + i = (1 + i(m)/m)^m or (1 - d(m)/m)^(-m); d = i/(1+i); delta = ln(1+i))
  rate = 0.06
  kind = interest
  assumes: 0 < rate < 1; 1 <= m <= 365

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Effective rates from a constant force of interest1 fig.act_force_of_interest

The annual effective interest rate, discount rate and discount factor for a constant force of interest delta.

i = e^{\delta}-1,\quad d = 1-e^{-\delta},\quad v = e^{-\delta}

You give

MeaningUnitExample
\delta
Constant force of interest per year (0.05 or 5%)—0.05

You get

MeaningUnitExample
i
Annual effective interest rate—0.05127109638
d
Annual effective discount rate—0.0487705755
v
Annual discount factor—0.9512294245

Applies when

  • 0 < delta < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Force of interest: delta = 0.05
i = 0.05127109638
d = 0.0487705755
v = 0.9512294245

Run it

Terminal
$ actuarial-science solve act_force_of_interest delta=0.05
i = 0.05127109638
d = 0.0487705755
v = 0.9512294245
  by: Effective rates from a constant force of interest  (i = e^delta - 1, d = 1 - e^(-delta), v = e^(-delta))
  delta = 0.05
  assumes: 0 < delta < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Equivalent rates from an effective annual interest rate1 fig.act_interest_rate_conversion

The effective discount rate, discount factor, force of interest and the nominal interest and discount rates convertible m times a year equivalent to an annual effective interest rate.

d = \frac{i}{1+i},\ \delta = \ln(1+i),\ i^{(m)} = m\left[(1+i)^{1/m}-1\right],\ d^{(m)} = m\left[1-v^{1/m}\right]

You give

MeaningUnitExample
i
Annual effective interest rate (5% or 0.05)—0.05
m
Conversion periods per year for the nominal rates (12 = monthly)—12

You get

MeaningUnitExample
d
Effective annual discount rate—0.04761904762
v
Annual discount factor 1/(1+i)—0.9523809524
\delta
Force of interest ln(1+i)—0.04879016417
i_{m}
Nominal interest rate convertible m-thly—0.0488894854
d_{m}
Nominal discount rate convertible m-thly—0.04869111179

Applies when

  • 0 < i < 1
  • 1 <= m <= 365

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Interest rate conversion: i = 0.05, m = 12
d = 0.04761904762
v = 0.9523809524
delta = 0.04879016417
i_m = 0.0488894854
d_m = 0.04869111179

Run it

Terminal
$ actuarial-science solve act_interest_rate_conversion i=0.05 m=12
d = 0.04761904762
v = 0.9523809524
delta = 0.04879016417
i_m = 0.0488894854
d_m = 0.04869111179
  by: Equivalent rates from an effective annual interest rate  (d = i/(1+i), v = 1/(1+i), delta = ln(1+i), i(m) = m[(1+i)^(1/m) - 1], d(m) = m[1 - v^(1/m)])
  i = 0.05
  assumes: 0 < i < 1; 1 <= m <= 365

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Increasing and decreasing annuities-certain2 fig.act_increasing_decreasing_annuity

The present values of an n-year annuity paying 1, 2, …, n (increasing) and n, n-1, …, 1 (decreasing), immediate and due.

(Ia)_{\overline{n}|} = \frac{\ddot a_{\overline{n}|}-nv^n}{i},\quad (Da)_{\overline{n}|} = \frac{n-a_{\overline{n}|}}{i}

You give

MeaningUnitExample
n
Term in years—10
i
Annual effective interest rate (5% or 0.05)—0.05

You get

MeaningUnitExample
\text{Ia}
Increasing annuity-immediate (Ia)_n—39.3737828
\text{Ia\_due}
Increasing annuity-due—41.34247194
\text{Da}
Decreasing annuity-immediate (Da)_n—45.56530142
\text{Da\_due}
Decreasing annuity-due—47.84356649

Applies when

  • n >= 1
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Increasing and decreasing annuity: n = 10, i = 0.05
Ia = 39.3737828
Ia_due = 41.34247194
Da = 45.56530142
Da_due = 47.84356649

Run it

Terminal
$ actuarial-science solve act_increasing_decreasing_annuity n=10 i=0.05
Ia = 39.3737828
Ia_due = 41.34247194
Da = 45.56530142
Da_due = 47.84356649
  by: Increasing and decreasing annuities-certain  ((Ia)_n = (a-due_n - n v^n)/i; (Da)_n = (n - a_n)/i; due values times (1+i))
  i = 0.05
  assumes: n >= 1; 0 < i < 1

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Loan amortization: level payment, interest and principal, outstanding balance1 fig.act_loan_amortization

The level annual payment that repays a loan over n years, the interest and principal parts of payment t and the outstanding balance just after it.

R = \frac{L}{a_{\overline{n}|}},\quad I_t = R\left(1-v^{n-t+1}\right),\quad P_t = R\,v^{n-t+1},\quad B_t = R\,a_{\overline{n-t}|}

You give

MeaningUnitExample
L
Loan amount—100000
i
Annual effective interest rate (5% or 0.05)—0.06
n
Number of annual payments—20
t
Payment number of interest (1 to n)—5

You get

MeaningUnitExample
R
Level annual payment—8718.455698
\text{interest\_t}
Interest part of payment t—5286.468013
\text{principal\_t}
Principal repaid in payment t—3431.987685
\text{balance\_t}
Outstanding balance just after payment t—84675.81252
\text{total\_interest}
Total interest paid over the loan—74369.11395

Applies when

  • L > 0
  • 0 < i < 1
  • 1 <= t <= n

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Loan amortization: L = 100000, i = 0.06, n = 20, t = 5
R = 8718.455698
interest_t = 5286.468013
principal_t = 3431.987685
balance_t = 84675.81252
total_interest = 74369.11395

Run it

Terminal
$ actuarial-science solve act_loan_amortization L=100000 i=0.06 n=20 t=5
R = 8718.455698
interest_t = 5286.468013
principal_t = 3431.987685
balance_t = 84675.81252
total_interest = 74369.11395
  by: Loan amortization: level payment, interest and principal, outstanding balance  (R = L/a_n; balance before payment t = R a_(n-t+1); interest = i x balance; principal = R v^(n-t+1); balance after = R a_(n-t))
  L = 100000
  i = 0.06
  assumes: L > 0; 0 < i < 1; 1 <= t <= n

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Macaulay and modified duration and convexity of cash flows2 fig.act_duration_convexity

The present value, Macaulay duration, modified duration and convexity (second derivative of price with respect to i over price) of a set of non-negative cash flows.

D_{mac} = \frac{\sum t\,C_t v^t}{P},\quad D_{mod} = \frac{D_{mac}}{1+i},\quad C = \frac{\sum t(t+1)C_t v^{t+2}}{P}

You give

MeaningUnitExample
\text{amounts}
Cash flow amounts (a list, non-negative) vector—[5, 5, 105]
\text{times}
Payment times in years (a list) vector—[1, 2, 3]
i
Annual effective interest rate (5% or 0.05)—0.05

You get

MeaningUnitExample
\text{PV}
Present value—100
\text{macaulay}
Macaulay duration (years)—2.859410431
\text{modified}
Modified duration -P'(i)/P—2.723248029
\text{convexity}
Convexity P''(i)/P—10.2056242

Applies when

  • amounts >= 0 with a positive total
  • one time per amount
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Duration and convexity: amounts = [5, 5, 105], times = [1, 2, 3], i = 0.05
PV = 100
macaulay = 2.859410431
modified = 2.723248029
convexity = 10.2056242

Run it

Terminal
$ actuarial-science solve act_duration_convexity "amounts=[5, 5, 105]" "times=[1, 2, 3]" i=0.05
PV = 100
macaulay = 2.859410431
modified = 2.723248029
convexity = 10.2056242
  by: Macaulay and modified duration and convexity of cash flows  (D_mac = sum t C v^t / P; D_mod = D_mac/(1+i); convexity = sum t(t+1) C v^(t+2) / P)
  i = 0.05
  assumes: amounts >= 0 with a positive total; one time per amount; 0 < i < 1

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Present value of a perpetuity1 fig.act_perpetuity

The present value of payments of 1 a year forever, at the end (immediate) or start (due) of each year, and paid continuously.

a_{\overline{\infty}|} = \frac1i,\quad \ddot a_{\overline{\infty}|} = \frac1d,\quad \bar a_{\overline{\infty}|} = \frac1\delta

You give

MeaningUnitExample
i
Annual effective interest rate (5% or 0.05)—0.05

You get

MeaningUnitExample
a_{\mathrm{inf}}
Perpetuity-immediate 1/i—20
a_{\mathrm{due},\mathrm{inf}}
Perpetuity-due 1/d—21
a_{\mathrm{cont},\mathrm{inf}}
Continuous perpetuity 1/delta—20.49593431

Applies when

  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Perpetuity: i = 0.05
a_inf = 20
a_due_inf = 21
a_cont_inf = 20.49593431

Run it

Terminal
$ actuarial-science solve act_perpetuity i=0.05
a_inf = 20
a_due_inf = 21
a_cont_inf = 20.49593431
  by: Present value of a perpetuity  (a_inf = 1/i, a-due_inf = 1/d = (1+i)/i, continuous 1/delta)
  i = 0.05
  assumes: 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Present value of a series of cash flows2 fig.act_present_value_cash_flows

The present value at time 0 of amounts paid at stated times (years), and their accumulated value at the last payment time.

PV = \sum_k C_k\,v^{t_k}

You give

MeaningUnitExample
\text{amounts}
Cash flow amounts (a list) vector—[100, 200, 300]
\text{times}
Payment times in years (a list) vector—[1, 2, 3]
i
Annual effective interest rate (5% or 0.05)—0.05

You get

MeaningUnitExample
\text{PV}
Present value at time 0—535.7952705
\text{AV\_at\_last}
Accumulated value at the last payment time—620.25

Applies when

  • one time per amount
  • 0 <= t <= 200
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Present value of cash flows: amounts = [100, 200, 300], times = [1, 2, 3], i = 0.05
PV = 535.7952705
AV_at_last = 620.25

Run it

Terminal
$ actuarial-science solve act_present_value_cash_flows "amounts=[100, 200, 300]" "times=[1, 2, 3]" i=0.05
PV = 535.7952705
AV_at_last = 620.25
  by: Present value of a series of cash flows  (PV = sum C_k v^(t_k); AV = PV (1+i)^(t_max))
  i = 0.05
  assumes: one time per amount; 0 <= t <= 200; 0 < i < 1

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Yield rate of a level annuity1 fig.act_annuity_yield

The annual effective interest rate at which n level payments R at the ends of the years are worth a given present value.

R\,\frac{1-(1+i)^{-n}}{i} = PV

You give

MeaningUnitExample
\text{PV}
Present value (price) of the annuity—7721.73
R
Level annual payment—1000
n
Number of annual payments—10

You get

MeaningUnitExample
i
Yield rate (annual effective)—0.05000013145
a_{n}
Annuity factor PV/R—7.72173

Applies when

  • 0 < PV < n R
  • yield below 99%

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Yield of an annuity: PV = 7721.73, R = 1000, n = 10
i = 0.05000013145
a_n = 7.72173

Run it

Terminal
$ actuarial-science solve act_annuity_yield PV=7721.73 R=1000 n=10
i = 0.05000013145
a_n = 7.72173
  by: Yield rate of a level annuity  (solve R a_n(i) = PV for i by bisection (a_n decreases in i, so the root is unique))
  PV = 7721.73
  R = 1000
  assumes: 0 < PV < n R; yield below 99%

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Life annuities 5

Deferred whole life annuity-due1 fig.act_deferred_annuity

The actuarial present value of a whole life annuity-due of P a year starting u years from now if the life is then alive (u|ä_x = uE_x ä_(x+u)).

{}_{u|}\ddot a_x = \sum_{k\ge u} v^k\,{}_kp_x = {}_uE_x\,\ddot a_{x+u}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
u
Deferment in years—2
P
Annual payment—1000

You get

MeaningUnitExample
\text{ua\_due}
Deferred annuity-due u|ä_x—0.96404276
\text{EPV}
Actuarial present value P u|ä_x—964.04276

Applies when

  • the table closes
  • u < length of the table
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Deferred annuity: q = [0.1, 0.2, 0.5, 1], i = 0.05, u = 2, P = 1000
ua_due = 0.96404276
EPV = 964.04276

Run it

Terminal
$ actuarial-science solve act_deferred_annuity "q=[0.1, 0.2, 0.5, 1]" i=0.05 u=2 P=1000
ua_due = 0.96404276
EPV = 964.04276
  by: Deferred whole life annuity-due  (u|ä_x = sum_(k>=u) v^k k_p_x = u_E_x ä_(x+u))
  i = 0.05
  P = 1000
  assumes: the table closes; u < length of the table; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

m-thly whole life annuity-due under UDD2 fig.act_mthly_annuity_udd

The actuarial present value of a whole life annuity-due paying 1/m at the start of every 1/m of a year, from an annual life table under the uniform distribution of deaths (ä^(m)_x = alpha(m) ä_x – beta(m)).

\ddot a^{(m)}_x = \alpha(m)\,\ddot a_x – \beta(m),\quad \alpha(m) = \frac{id}{i^{(m)}d^{(m)}},\ \beta(m) = \frac{i-i^{(m)}}{i^{(m)}d^{(m)}}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
m
Payments per year (12 = monthly)—12

You get

MeaningUnitExample
a_{m}
m-thly annuity-due ä^(m)_x (total 1 a year)—2.355233403
\alpha
alpha(m) = i d/(i(m) d(m))—1.000197011
\beta
beta(m) = (i – i(m))/(i(m) d(m))—0.4665080196
a_{\mathrm{due}}
Annual annuity-due ä_x—2.821185617

Applies when

  • the table closes
  • 0 < i < 1
  • 1 <= m <= 365
  • UDD within each year

Outside these conditions it says what is wrong instead of returning a number.

Worked example

m-thly annuity under UDD: q = [0.1, 0.2, 0.5, 1], i = 0.05, m = 12
a_m = 2.355233403
alpha = 1.000197011
beta = 0.4665080196
a_due = 2.821185617

Run it

Terminal
$ actuarial-science solve act_mthly_annuity_udd "q=[0.1, 0.2, 0.5, 1]" i=0.05 m=12
a_m = 2.355233403
alpha = 1.000197011
beta = 0.4665080196
a_due = 2.821185617
  by: m-thly whole life annuity-due under UDD  (ä^(m)_x = alpha(m) ä_x - beta(m))
  i = 0.05
  assumes: the table closes; 0 < i < 1; 1 <= m <= 365; UDD within each year

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Temporary life annuity1 fig.act_temporary_annuity

The actuarial present values of an n-year temporary life annuity-due (ä_(x:n)) and annuity-immediate (a_(x:n)), and the value of an annual payment P paid in advance.

\ddot a_{x:\overline{n}|} = \sum_{k=0}^{n-1} v^k\,{}_kp_x,\quad a_{x:\overline{n}|} = \ddot a_{x:\overline{n}|} – 1 + {}_nE_x

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … for at least n years (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
n
Number of years—3
P
Annual payment—1000

You get

MeaningUnitExample
a_{\mathrm{due}}
Temporary annuity-due ä_(x:n)—2.510204082
a_{\mathrm{imm}}
Temporary annuity-immediate a_(x:n)—1.821185617
\text{EPV}
Actuarial present value P ä_(x:n)—2510.204082

Applies when

  • at least n death probabilities
  • 0 < i < 1
  • P > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Temporary life annuity: q = [0.1, 0.2, 0.5, 1], i = 0.05, n = 3, P = 1000
a_due = 2.510204082
a_imm = 1.821185617
EPV = 2510.204082

Run it

Terminal
$ actuarial-science solve act_temporary_annuity "q=[0.1, 0.2, 0.5, 1]" i=0.05 n=3 P=1000
a_due = 2.510204082
a_imm = 1.821185617
EPV = 2510.204082
  by: Temporary life annuity  (ä_(x:n) = sum_(k<n) v^k k_p_x; a_(x:n) = ä_(x:n) - 1 + n_E_x)
  i = 0.05
  P = 1000
  assumes: at least n death probabilities; 0 < i < 1; P > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Whole life annuity1 fig.act_whole_life_annuity

The actuarial present values of a whole life annuity-due (ä_x) and annuity-immediate (a_x) for a life aged x, the value of an annual payment P, and the standard deviation of the present value of the annuity-due payments.

\ddot a_x = \sum_{k\ge0} v^k\,{}_kp_x,\quad a_x = \ddot a_x – 1,\quad \mathrm{Var}(Y) = \frac{{}^2A_x – A_x^2}{d^2}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
P
Annual payment—1000

You get

MeaningUnitExample
a_{\mathrm{due}}
Whole life annuity-due ä_x—2.821185617
a_{\mathrm{imm}}
Whole life annuity-immediate a_x—1.821185617
\text{EPV}
Actuarial present value P ä_x—2821.185617
\text{sd}
Standard deviation of the annuity-due present value—872.3551839

Applies when

  • the table closes
  • 0 < i < 1
  • P > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Whole life annuity: q = [0.1, 0.2, 0.5, 1], i = 0.05, P = 1000
a_due = 2.821185617
a_imm = 1.821185617
EPV = 2821.185617
sd = 872.3551839

Run it

Terminal
$ actuarial-science solve act_whole_life_annuity "q=[0.1, 0.2, 0.5, 1]" i=0.05 P=1000
a_due = 2.821185617
a_imm = 1.821185617
EPV = 2821.185617
sd = 872.3551839
  by: Whole life annuity  (ä_x = sum_k v^k k_p_x; a_x = ä_x - 1; Var = P^2 (2A_x - A_x^2)/d^2)
  i = 0.05
  P = 1000
  assumes: the table closes; 0 < i < 1; P > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Woolhouse approximation for an m-thly annuity1 fig.act_woolhouse_approximation

Woolhouse's two- and three-term approximations of the m-thly whole life annuity-due ä^(m)_x from the annual annuity-due ä_x, the interest rate and the force of mortality at x.

\ddot a^{(m)}_x \approx \ddot a_x – \frac{m-1}{2m} – \frac{m^2-1}{12m^2}\left(\delta + \mu_x\right)

You give

MeaningUnitExample
a_{\mathrm{due}}
Annual whole life annuity-due ä_x—14.8166
m
Payments per year (12 = monthly)—12
i
Annual effective interest rate (5% or 0.05)—0.05
\mu
Force of mortality at age x (per year)—0.00473

You get

MeaningUnitExample
a_{\mathrm{m3}}
Three-term Woolhouse approximation—14.35383763
a_{\mathrm{m2}}
Two-term approximation ä_x – (m-1)/(2m)—14.35826667

Applies when

  • ä_x >= 1
  • 1 <= m <= 365
  • 0 < i < 1
  • 0 <= mu < 5

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Woolhouse approximation: a_due = 14.8166, m = 12, i = 0.05, mu = 0.00473
a_m3 = 14.35383763
a_m2 = 14.35826667

Run it

Terminal
$ actuarial-science solve act_woolhouse_approximation a_due=14.8166 m=12 i=0.05 mu=0.00473
a_m3 = 14.35383763
a_m2 = 14.35826667
  by: Woolhouse approximation for an m-thly annuity  (ä^(m)_x ≈ ä_x - (m-1)/(2m) - (m^2-1)/(12 m^2) (delta + mu_x))
  a_due = 14.8166
  i = 0.05
  mu = 0.00473
  assumes: ä_x >= 1; 1 <= m <= 365; 0 < i < 1; 0 <= mu < 5

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Life insurance 5

Continuous whole life insurance and annuity under UDD1 fig.act_continuous_insurance_udd

The actuarial present value of a whole life insurance paid at the moment of death (Ā_x = (i/delta) A_x) and of a continuous whole life annuity, from an annual life table with deaths uniformly distributed within each year.

\bar A_x = \frac{i}{\delta}A_x,\qquad \bar a_x = \frac{1-\bar A_x}{\delta}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05

You get

MeaningUnitExample
A_{\mathrm{bar}}
Insurance payable at the moment of death Ā_x—0.8871232988
A
Insurance payable at the end of the year of death A_x—0.8656578278
a_{\mathrm{bar}}
Continuous whole life annuity ā_x—2.313513453

Applies when

  • the table closes
  • 0 < i < 1
  • uniform distribution of deaths within each year

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Continuous insurance under UDD: q = [0.1, 0.2, 0.5, 1], i = 0.05
A_bar = 0.8871232988
A = 0.8656578278
a_bar = 2.313513453

Run it

Terminal
$ actuarial-science solve act_continuous_insurance_udd "q=[0.1, 0.2, 0.5, 1]" i=0.05
A_bar = 0.8871232988
A = 0.8656578278
a_bar = 2.313513453
  by: Continuous whole life insurance and annuity under UDD  (Ā_x = (i/delta) A_x; ā_x = (1 - Ā_x)/delta)
  i = 0.05
  assumes: the table closes; 0 < i < 1; uniform distribution of deaths within each year

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Deferred whole life insurance1 fig.act_deferred_insurance

The actuarial present value of a whole life insurance of S that pays only if death occurs after u years (u|A_x = uE_x A_(x+u)).

{}_{u|}A_x = \sum_{k\ge u} v^{k+1}\,{}_kp_x\,q_{x+k} = {}_uE_x\,A_{x+u}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
u
Deferment in years—1
S
Sum insured—1000

You get

MeaningUnitExample
\text{uA}
Deferred insurance u|A_x per unit—0.7704197325
\text{EPV}
Actuarial present value S u|A_x—770.4197325
\text{uEx}
Pure endowment u_E_x—0.8571428571

Applies when

  • the table closes
  • u < length of the table
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Deferred insurance: q = [0.1, 0.2, 0.5, 1], i = 0.05, u = 1, S = 1000
uA = 0.7704197325
EPV = 770.4197325
uEx = 0.8571428571

Run it

Terminal
$ actuarial-science solve act_deferred_insurance "q=[0.1, 0.2, 0.5, 1]" i=0.05 u=1 S=1000
uA = 0.7704197325
EPV = 770.4197325
uEx = 0.8571428571
  by: Deferred whole life insurance  (u|A_x = sum_(k>=u) v^(k+1) k_p_x q_(x+k) = u_E_x A_(x+u))
  i = 0.05
  S = 1000
  assumes: the table closes; u < length of the table; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Endowment insurance (fully discrete)1 fig.act_endowment_insurance

The actuarial present value of an n-year endowment insurance paying S at the end of the year of death within n years or at time n on survival, split into its term insurance and pure endowment parts, with the second moment and standard deviation.

A_{x:\overline{n}|} = A^1_{x:\overline{n}|} + {}_nE_x

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … for at least n years (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
n
Term in years—2
S
Sum insured—1000

You get

MeaningUnitExample
A
Endowment insurance A_(x:n) per unit—0.9115646258
\text{A1}
Term insurance part A^1_(x:n)—0.2585034014
\text{nEx}
Pure endowment part n_E_x—0.6530612245
\text{A2}
Second moment at double the force of interest—0.8311351752
\text{EPV}
Actuarial present value S A_(x:n)—911.5646258
\text{sd}
Standard deviation of the present value—13.60544218

Applies when

  • at least n death probabilities
  • 0 < i < 1
  • S > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Endowment insurance: q = [0.1, 0.2, 0.5, 1], i = 0.05, n = 2, S = 1000
A = 0.9115646258
A1 = 0.2585034014
nEx = 0.6530612245
A2 = 0.8311351752
EPV = 911.5646258
sd = 13.60544218

Run it

Terminal
$ actuarial-science solve act_endowment_insurance "q=[0.1, 0.2, 0.5, 1]" i=0.05 n=2 S=1000
A = 0.9115646258
A1 = 0.2585034014
nEx = 0.6530612245
A2 = 0.8311351752
EPV = 911.5646258
sd = 13.60544218
  by: Endowment insurance (fully discrete)  (A_(x:n) = A^1_(x:n) + n_E_x)
  i = 0.05
  S = 1000
  assumes: at least n death probabilities; 0 < i < 1; S > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Term insurance (fully discrete)1 fig.act_term_insurance

The actuarial present value of an n-year term insurance paying S at the end of the year of death if death occurs within n years, its second moment and the standard deviation of the present value.

A^1_{x:\overline{n}|} = \sum_{k=0}^{n-1} v^{k+1}\,{}_kp_x\,q_{x+k}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … for at least n years (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
n
Term in years—2
S
Sum insured—1000

You get

MeaningUnitExample
\text{A1}
Term insurance A^1_(x:n) per unit—0.2585034014
\text{A1\_2}
Second moment at double the force of interest—0.2387893933
\text{EPV}
Actuarial present value S A^1_(x:n)—258.5034014
\text{sd}
Standard deviation of the present value—414.6870926

Applies when

  • at least n death probabilities
  • 0 < i < 1
  • S > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Term insurance: q = [0.1, 0.2, 0.5, 1], i = 0.05, n = 2, S = 1000
A1 = 0.2585034014
A1_2 = 0.2387893933
EPV = 258.5034014
sd = 414.6870926

Run it

Terminal
$ actuarial-science solve act_term_insurance "q=[0.1, 0.2, 0.5, 1]" i=0.05 n=2 S=1000
A1 = 0.2585034014
A1_2 = 0.2387893933
EPV = 258.5034014
sd = 414.6870926
  by: Term insurance (fully discrete)  (A^1_(x:n) = sum_(k<n) v^(k+1) k_p_x q_(x+k))
  i = 0.05
  S = 1000
  assumes: at least n death probabilities; 0 < i < 1; S > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Whole life insurance (fully discrete)1 fig.act_whole_life_insurance

The actuarial present value of a whole life insurance paying S at the end of the year of death of a life aged x (A_x), its second moment at double the force of interest, and the standard deviation of the present value of the benefit.

A_x = \sum_{k\ge0} v^{k+1}\,{}_kp_x\,q_{x+k},\quad \mathrm{Var}(Z) = S^2\left({}^2A_x – A_x^2\right)

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
S
Sum insured—1000

You get

MeaningUnitExample
A
A_x per unit sum insured—0.8656578278
\text{A2}
Second moment 2A_x (at double the force of interest)—0.7510891064
\text{EPV}
Actuarial present value S A_x—865.6578278
\text{sd}
Standard deviation of the present value S sqrt(2A – A^2)—41.54072304

Applies when

  • the table closes (last q = 1)
  • 0 < i < 1
  • S > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Whole life insurance: q = [0.1, 0.2, 0.5, 1], i = 0.05, S = 1000
A = 0.8656578278
A2 = 0.7510891064
EPV = 865.6578278
sd = 41.54072304

Run it

Terminal
$ actuarial-science solve act_whole_life_insurance "q=[0.1, 0.2, 0.5, 1]" i=0.05 S=1000
A = 0.8656578278
A2 = 0.7510891064
EPV = 865.6578278
sd = 41.54072304
  by: Whole life insurance (fully discrete)  (A_x = sum_k v^(k+1) k_p_x q_(x+k); 2A_x with v^2; Var Z = S^2 (2A - A^2))
  i = 0.05
  S = 1000
  assumes: the table closes (last q = 1); 0 < i < 1; S > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Life tables 9

Commutation functions D, N, C and M1 fig.act_commutation_functions

The commutation functions D_x = v^x l_x, N_x, C_x = v^(x+1) d_x and M_x at age x of a complete life table, with the whole life insurance A_x = M_x/D_x and annuity-due ä_x = N_x/D_x.

D_x = v^x l_x,\ C_x = v^{x+1}d_x,\ N_x = \sum_{y\ge x}D_y,\ M_x = \sum_{y\ge x}C_y,\ A_x = \frac{M_x}{D_x},\ \ddot a_x = \frac{N_x}{D_x}

You give

MeaningUnitExample
\text{lx}
Survivors at consecutive integer ages from x0, ending with 0 (a list) vector—[1000, 900, 700, 400, 0]
\text{x0}
Age of the first entry of lx—95
x
Age at which the functions are wanted—95
i
Annual effective interest rate (5% or 0.05)—0.05

You get

MeaningUnitExample
D_{x}
D_x = v^x l_x—9.705470376
N_{x}
N_x = sum of D_y for y >= x—27.54022849
C_{x}
C_x = v^(x+1) d_x—0.924330512
M_{x}
M_x = sum of C_y for y >= x—8.394030925
A_{x}
Whole life insurance M_x/D_x—0.8648762604
a_{\mathrm{due},x}
Whole life annuity-due N_x/D_x—2.837598531

Applies when

  • the table closes (last lx = 0)
  • x inside the table
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Commutation functions: lx = [1000, 900, 700, 400, 0], x0 = 95, x = 95, i = 0.05
D_x = 9.705470376
N_x = 27.54022849
C_x = 0.924330512
M_x = 8.394030925
A_x = 0.8648762604
a_due_x = 2.837598531

Run it

Terminal
$ actuarial-science solve act_commutation_functions "lx=[1000, 900, 700, 400, 0]" x0=95 x=95 i=0.05
D_x = 9.705470376
N_x = 27.54022849
C_x = 0.924330512
M_x = 8.394030925
A_x = 0.8648762604
a_due_x = 2.837598531
  by: Commutation functions D, N, C and M  (D_y = v^y l_y, C_y = v^(y+1) d_y, N_x = sum D_y, M_x = sum C_y; A_x = M_x/D_x, ä_x = N_x/D_x)
  i = 0.05
  assumes: the table closes (last lx = 0); x inside the table; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Curtate and complete expectation of life1 fig.act_life_expectancy

The curtate expectation of life e_x (whole years lived) and the complete expectation e°_x under a uniform distribution of deaths within each year, for a life aged x in a complete life table.

e_x = \sum_{k\ge 1}{}_kp_x,\quad \mathring e_x = e_x + \tfrac12

You give

MeaningUnitExample
\text{lx}
Survivors at consecutive integer ages from x0, ending with 0 (a list) vector—[1000, 900, 700, 400, 0]
\text{x0}
Age of the first entry of lx—95
x
Age of the life—95

You get

MeaningUnitExample
e_{\mathrm{curtate}}
Curtate expectation of life e_x (years)—2
e_{\mathrm{complete}}
Complete expectation of life under UDD (years)—2.5

Applies when

  • the table closes (last lx = 0)
  • x inside the table

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Expectation of life: lx = [1000, 900, 700, 400, 0], x0 = 95, x = 95
e_curtate = 2
e_complete = 2.5

Run it

Terminal
$ actuarial-science solve act_life_expectancy "lx=[1000, 900, 700, 400, 0]" x0=95 x=95
e_curtate = 2
e_complete = 2.5
  by: Curtate and complete expectation of life  (e_x = sum_(k>=1) l_(x+k)/l_x; e°_x = e_x + 1/2 under UDD)
  assumes: the table closes (last lx = 0); x inside the table

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Death probability from the central death rate1 fig.act_central_death_rate

The one-year death probability q_x corresponding to a central death rate m_x (deaths per year lived), under a uniform distribution of deaths or a constant force of mortality within the year.

\text{UDD: } q_x = \frac{2m_x}{2+m_x},\qquad \text{constant force: } q_x = 1-e^{-m_x}

You give

MeaningUnitExample
m
Central death rate m_x (deaths per person-year)—0.02
\text{assumption}
Fractional-age assumption: udd or constant_force choice—udd

You get

MeaningUnitExample
q
One-year death probability q_x—0.0198019802
p
One-year survival probability p_x—0.9801980198

Applies when

  • m > 0
  • m < 2 under UDD

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Death probability from the central death rate: m = 0.02, assumption = udd
q = 0.0198019802
p = 0.9801980198

Run it

Terminal
$ actuarial-science solve act_central_death_rate m=0.02 assumption=udd
q = 0.0198019802
p = 0.9801980198
  by: Death probability from the central death rate  (UDD: q = 2m/(2+m); constant force: q = 1 - e^(-m))
  m = 0.02
  assumption = udd
  assumes: m > 0; m < 2 under UDD

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Deferred death probability u|t q x1 fig.act_deferred_death_probability

The probability that a life aged x survives u years and then dies within the following t years, from survivor numbers lx starting at age x0.

{}_{u|t}q_x = \frac{l_{x+u}-l_{x+u+t}}{l_x} = {}_up_x\;{}_tq_{x+u}

You give

MeaningUnitExample
\text{lx}
Survivors at consecutive integer ages from x0 (a list) vector—[1000, 950, 880, 780, 650]
\text{x0}
Age of the first entry of lx—60
x
Age of the life—60
u
Years of deferment—2
t
Length of the death interval in years—2

You get

MeaningUnitExample
\text{prob}
Deferred death probability u|t q_x—0.23
\text{upx}
Probability of surviving the deferment—0.88

Applies when

  • x + u + t inside the table
  • t >= 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Deferred death probability: lx = [1000, 950, 880, 780, 650], x0 = 60, x = 60, u = 2, t = 2
prob = 0.23
upx = 0.88

Run it

Terminal
$ actuarial-science solve act_deferred_death_probability "lx=[1000, 950, 880, 780, 650]" x0=60 x=60 u=2 t=2
prob = 0.23
upx = 0.88
  by: Deferred death probability u|t q x  (u|t q_x = (l_(x+u) - l_(x+u+t))/l_x = u_p_x * t_q_(x+u))
  assumes: x + u + t inside the table; t >= 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Life table functions dx, qx and px from survivor numbers1 fig.act_life_table_functions

The numbers dying, the one-year death probabilities and the one-year survival probabilities at each age of a life table given by its survivor numbers lx.

d_x = l_x – l_{x+1},\quad q_x = \frac{d_x}{l_x},\quad p_x = \frac{l_{x+1}}{l_x}

You give

MeaningUnitExample
\text{lx}
Survivors at consecutive integer ages (a list) vector—[1000, 950, 880, 780]

You get

MeaningUnitExample
\text{dx}
Deaths between ages x and x+1 (a list)—[50, 70, 100]
\text{qx}
One-year death probabilities (a list)—[0.05, 0.07368421053, 0.1136363636]
\text{px}
One-year survival probabilities (a list)—[0.95, 0.9263157895, 0.8863636364]

Applies when

  • lx non-increasing
  • only the last lx may be 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Life table functions: lx = [1000, 950, 880, 780]
dx = [50, 70, 100]
qx = [0.05, 0.07368421053, 0.1136363636]
px = [0.95, 0.9263157895, 0.8863636364]

Run it

Terminal
$ actuarial-science solve act_life_table_functions "lx=[1000, 950, 880, 780]"
dx = [50.0,70.0,100.0]
qx = [0.05,0.0736842105263,0.113636363636]
px = [0.95,0.926315789474,0.886363636364]
  by: Life table functions dx, qx and px from survivor numbers  (d_x = l_x - l_(x+1), q_x = d_x/l_x, p_x = l_(x+1)/l_x)
  assumes: lx non-increasing; only the last lx may be 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Probability of surviving t years from a life table1 fig.act_survival_probability

The probability that a life aged x survives t more years, the probability of dying within t years, and the number of deaths between ages x and x+t, from survivor numbers lx starting at age x0.

{}_tp_x = \frac{l_{x+t}}{l_x},\quad {}_tq_x = \frac{l_x – l_{x+t}}{l_x}

You give

MeaningUnitExample
\text{lx}
Survivors at consecutive integer ages from x0 (a list) vector—[1000, 950, 880, 780]
\text{x0}
Age of the first entry of lx—60
x
Age of the life—61
t
Number of years—2

You get

MeaningUnitExample
\text{tpx}
Probability of surviving t years—0.8210526316
\text{tqx}
Probability of dying within t years—0.1789473684
\text{deaths}
Number dying between ages x and x+t—170

Applies when

  • x0 <= x and x + t inside the table
  • l_x > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Survival probability from a life table: lx = [1000, 950, 880, 780], x0 = 60, x = 61, t = 2
tpx = 0.8210526316
tqx = 0.1789473684
deaths = 170

Run it

Terminal
$ actuarial-science solve act_survival_probability "lx=[1000, 950, 880, 780]" x0=60 x=61 t=2
tpx = 0.8210526316
tqx = 0.1789473684
deaths = 170
  by: Probability of surviving t years from a life table  (t_p_x = l_(x+t)/l_x; t_q_x = 1 - t_p_x)
  assumes: x0 <= x and x + t inside the table; l_x > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Pure endowment (actuarial discount factor)1 fig.act_pure_endowment

The actuarial present value of 1 paid at time n if a life aged x is then alive, nEx = v^n n_p_x, and the actuarial accumulation factor 1/nEx.

{}_nE_x = v^n\,{}_np_x = v^n\frac{l_{x+n}}{l_x}

You give

MeaningUnitExample
\text{lx}
Survivors at consecutive integer ages from x0 (a list) vector—[100000, 99500, 98900, 98200, 97300]
\text{x0}
Age of the first entry of lx—40
x
Age of the life—40
n
Years until the payment—4
i
Annual effective interest rate (5% or 0.05)—0.05

You get

MeaningUnitExample
\text{nEx}
Pure endowment n_E_x = v^n n_p_x—0.800489508
\text{accumulation}
Actuarial accumulation factor 1/n_E_x—1.249235612

Applies when

  • x + n inside the table
  • l_(x+n) > 0
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Pure endowment: lx = [100000, 99500, 98900, 98200, 97300], x0 = 40, x = 40, n = 4, i = 0.05
nEx = 0.800489508
accumulation = 1.249235612

Run it

Terminal
$ actuarial-science solve act_pure_endowment "lx=[100000, 99500, 98900, 98200, 97300]" x0=40 x=40 n=4 i=0.05
nEx = 0.800489508
accumulation = 1.249235612
  by: Pure endowment (actuarial discount factor)  (nEx = v^n l_(x+n)/l_x)
  i = 0.05
  assumes: x + n inside the table; l_(x+n) > 0; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Survival to a fractional age (UDD, constant force, Balducci)2 fig.act_fractional_age

The probability of surviving (or dying within) a fraction s of a year from integer age x, and the force of mortality at x+s, under a uniform distribution of deaths, a constant force of mortality or the Balducci assumption.

\text{UDD: } {}_sp_x = 1-sq_x,\ \mu_{x+s} = \frac{q_x}{1-sq_x};\quad \text{CF: } {}_sp_x = p_x^{\,s};\quad \text{Balducci: } {}_sp_x = \frac{p_x}{1-(1-s)q_x}

You give

MeaningUnitExample
q
One-year death probability q_x—0.1
s
Fraction of the year (0 < s < 1)—0.5
\text{assumption}
Fractional-age assumption choice—udd

You get

MeaningUnitExample
\text{spx}
Probability of surviving to age x+s—0.95
\text{sqx}
Probability of dying before age x+s—0.05
\mu
Force of mortality at age x+s—0.1052631579

Applies when

  • 0 < q < 1
  • 0 < s < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Fractional age survival: q = 0.1, s = 0.5, assumption = udd
spx = 0.95
sqx = 0.05
mu = 0.1052631579

Run it

Terminal
$ actuarial-science solve act_fractional_age q=0.1 s=0.5 assumption=udd
spx = 0.95
sqx = 0.05
mu = 0.1052631579
  by: Survival to a fractional age (UDD, constant force, Balducci)  (UDD: s_p_x = 1 - s q, mu = q/(1 - s q); constant force: (1-q)^s, mu = -ln(1-q); Balducci: (1-q)/(1-(1-s)q), mu = q/(1-(1-s)q))
  q = 0.1
  s = 0.5
  assumption = udd
  assumes: 0 < q < 1; 0 < s < 1

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Temporary (n-year) expectation of life1 fig.act_temporary_expectation

The expected number of whole years (curtate) and of years (complete, UDD) lived within the next n years by a life aged x.

e_{x:\overline{n}|} = \sum_{k=1}^{n}{}_kp_x,\quad \mathring e_{x:\overline{n}|} = \sum_{k=0}^{n-1}\frac{{}_kp_x+{}_{k+1}p_x}{2}

You give

MeaningUnitExample
\text{lx}
Survivors at consecutive integer ages from x0 (a list) vector—[1000, 900, 700, 400, 0]
\text{x0}
Age of the first entry of lx—95
x
Age of the life—95
n
Term in years—2

You get

MeaningUnitExample
e_{\mathrm{curtate}}
Curtate n-year temporary expectation e_(x:n)—1.6
e_{\mathrm{complete}}
Complete n-year temporary expectation under UDD—1.75

Applies when

  • x + n inside the table
  • n >= 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Temporary expectation of life: lx = [1000, 900, 700, 400, 0], x0 = 95, x = 95, n = 2
e_curtate = 1.6
e_complete = 1.75

Run it

Terminal
$ actuarial-science solve act_temporary_expectation "lx=[1000, 900, 700, 400, 0]" x0=95 x=95 n=2
e_curtate = 1.6
e_complete = 1.75
  by: Temporary (n-year) expectation of life  (e_(x:n) = sum_(k=1..n) k_p_x; e°_(x:n) = sum_(k=0..n-1) (k_p_x + (k+1)_p_x)/2)
  assumes: x + n inside the table; n >= 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Loss models 16

Compound Poisson mean, variance and skewness1 fig.act_compound_poisson_moments

The mean, variance and coefficient of skewness of aggregate losses when the claim count is Poisson(lambda), from the first three raw moments of the claim severity.

\kappa_n(S) = \lambda\,E[X^n],\quad \gamma_S = \frac{\lambda E[X^3]}{(\lambda E[X^2])^{3/2}}

You give

MeaningUnitExample
\text{lam}
Poisson mean number of claims lambda—3
\text{m1}
E[X]—2
\text{m2}
E[X^2]—6
\text{m3}
E[X^3]—24

You get

MeaningUnitExample
\text{mean}
lambda E[X]—6
\text{var}
lambda E[X^2]—18
\text{skew}
lambda E[X^3] / (lambda E[X^2])^(3/2)—0.9428090416

Applies when

  • lambda > 0
  • moments positive
  • E[X^2] >= E[X]^2

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Compound Poisson moments: lam = 3, m1 = 2, m2 = 6, m3 = 24
mean = 6
var = 18
skew = 0.9428090416

Run it

Terminal
$ actuarial-science solve act_compound_poisson_moments lam=3 m1=2 m2=6 m3=24
mean = 6
var = 18
skew = 0.9428090416
  by: Compound Poisson mean, variance and skewness  (cumulants of a compound Poisson sum: kappa_n = lambda E[X^n])
  lam = 3
  m1 = 2
  m2 = 6
  m3 = 24
  assumes: lambda > 0; moments positive; E[X^2] >= E[X]^2

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Deductible, policy limit, coinsurance and inflation with exponential losses1 fig.act_exponential_coverage_modifications

The expected insurer payment per loss and per payment for exponential losses (mean theta) under an ordinary deductible, a policy limit (maximum covered loss), coinsurance and uniform inflation.

E[Y^L] = c\,(1+r)\left[E\!\left[X\wedge\tfrac{u}{1+r}\right] – E\!\left[X\wedge\tfrac{d}{1+r}\right]\right],\quad E[Y^P] = \frac{E[Y^L]}{S_X\!\left(\frac{d}{1+r}\right)}

You give

MeaningUnitExample
\theta
Mean loss theta before inflation—1000
d
Ordinary deductible—200
u
Policy limit (maximum covered loss)—3000
c
Coinsurance fraction paid by the insurer (80% or 0.8)—0.8
r
Uniform loss inflation (0 for none)—0.1

You get

MeaningUnitExample
\text{per\_loss}
Expected payment per loss—676.1528531
\text{per\_payment}
Expected payment per payment—810.9750963
\text{max\_payment}
Largest possible payment c (u – d)—2240

Applies when

  • theta > 0
  • 0 <= d < u
  • 0 < c <= 1
  • 0 <= r < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Exponential losses with deductible, limit and coinsurance: theta = 1000, d = 200, u = 3000, c = 0.8, r = 0.1
per_loss = 676.1528531
per_payment = 810.9750963
max_payment = 2240

Run it

Terminal
$ actuarial-science solve act_exponential_coverage_modifications theta=1000 d=200 u=3000 c=0.8 r=0.1
per_loss = 676.1528531
per_payment = 810.9750963
max_payment = 2240
  by: Deductible, policy limit, coinsurance and inflation with exponential losses  (per loss = c (1 + r) [E[X ∧ u/(1+r)] - E[X ∧ d/(1+r)]]; per payment = per loss / S(d/(1+r)))
  theta = 1000
  d = 200
  u = 3000
  c = 0.8
  r = 0.1
  assumes: theta > 0; 0 <= d < u; 0 < c <= 1; 0 <= r < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Deductible, policy limit, coinsurance and inflation with Pareto losses1 fig.act_pareto_coverage_modifications

The expected insurer payment per loss and per payment for two-parameter Pareto losses under an ordinary deductible, a policy limit (maximum covered loss), coinsurance and uniform inflation.

E[Y^L] = c\,(1+r)\left[E\!\left[X\wedge\tfrac{u}{1+r}\right] – E\!\left[X\wedge\tfrac{d}{1+r}\right]\right],\quad E[Y^P] = \frac{E[Y^L]}{S_X\!\left(\frac{d}{1+r}\right)}

You give

MeaningUnitExample
\alpha
Pareto shape alpha (> 1)—3
\theta
Pareto scale theta before inflation—2000
d
Ordinary deductible—500
u
Policy limit (maximum covered loss)—5000
c
Coinsurance fraction paid by the insurer (80% or 0.8)—0.8
r
Uniform loss inflation (0 for none)—0.05

You get

MeaningUnitExample
\text{per\_loss}
Expected payment per loss—474.5027461
\text{per\_payment}
Expected payment per payment—900.535608
\text{max\_payment}
Largest possible payment c (u – d)—3600

Applies when

  • alpha > 1
  • theta > 0
  • 0 <= d < u
  • 0 < c <= 1
  • 0 <= r < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Pareto losses with deductible, limit and coinsurance: alpha = 3, theta = 2000, d = 500, u = 5000, c = 0.8, r = 0.05
per_loss = 474.5027461
per_payment = 900.535608
max_payment = 3600

Run it

Terminal
$ actuarial-science solve act_pareto_coverage_modifications alpha=3 theta=2000 d=500 u=5000 c=0.8 r=0.05
per_loss = 474.5027461
per_payment = 900.535608
max_payment = 3600
  by: Deductible, policy limit, coinsurance and inflation with Pareto losses  (per loss = c (1 + r) [E[X ∧ u/(1+r)] - E[X ∧ d/(1+r)]]; per payment = per loss / S(d/(1+r)))
  alpha = 3
  theta = 2000
  d = 500
  u = 5000
  c = 0.8
  r = 0.05
  assumes: alpha > 1; theta > 0; 0 <= d < u; 0 < c <= 1; 0 <= r < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Individual risk model: aggregate mean and variance1 fig.act_individual_risk_model

The mean and variance of total claims, and the probability of no claim, for a portfolio of independent policies each paying a fixed benefit b_i with probability q_i.

E[S] = \sum_i q_i b_i,\quad \mathrm{Var}(S) = \sum_i q_i(1-q_i)\,b_i^2

You give

MeaningUnitExample
q
Claim probabilities of the policies (a list) vector—[0.01, 0.02, 0.05]
b
Benefit amounts of the policies (a list) vector—[10000, 5000, 2000]

You get

MeaningUnitExample
\text{mean}
Expected total claims sum q b—300
\text{var}
Variance sum q (1-q) b^2—1670000
\text{prob\_no\_claim}
Probability of no claim at all—0.92169

Applies when

  • one benefit per probability
  • 0 <= q <= 1
  • b > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Individual risk model: q = [0.01, 0.02, 0.05], b = [10000, 5000, 2000]
mean = 300
var = 1670000
prob_no_claim = 0.92169

Run it

Terminal
$ actuarial-science solve act_individual_risk_model "q=[0.01, 0.02, 0.05]" "b=[10000, 5000, 2000]"
mean = 300
var = 1670000
prob_no_claim = 0.92169
  by: Individual risk model: aggregate mean and variance  (E[S] = sum q_i b_i; Var S = sum q_i (1 - q_i) b_i^2; P(S = 0) = prod (1 - q_i))
  assumes: one benefit per probability; 0 <= q <= 1; b > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Insurer payment for one loss (deductible, limit, coinsurance)1 fig.act_single_loss_payment

The amount the insurer pays and the amount the insured retains for a single loss x under an ordinary deductible d, a policy limit u (maximum covered loss) and coinsurance c.

Y = c\left(\min(X,u) – d\right)_+

You give

MeaningUnitExample
x
Loss amount—5000
d
Ordinary deductible—500
u
Policy limit (maximum covered loss)—4000
c
Coinsurance fraction paid by the insurer (80% or 0.8)—0.8

You get

MeaningUnitExample
\text{payment}
Insurer payment c (min(x, u) – d)+—2800
\text{retained}
Amount retained by the insured—2200

Applies when

  • x, d >= 0
  • u > d
  • 0 < c <= 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Insurer payment for a loss: x = 5000, d = 500, u = 4000, c = 0.8
payment = 2800
retained = 2200

Run it

Terminal
$ actuarial-science solve act_single_loss_payment x=5000 d=500 u=4000 c=0.8
payment = 2800
retained = 2200
  by: Insurer payment for one loss (deductible, limit, coinsurance)  (payment = c x (min(x, u) - d)+)
  x = 5000
  d = 500
  u = 4000
  c = 0.8
  assumes: x, d >= 0; u > d; 0 < c <= 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Mean and variance of aggregate losses (compound distribution)1 fig.act_compound_distribution_moments

The mean and variance of aggregate losses S = X_1 + … + X_N from the mean and variance of the claim count N and of the claim severity X (independent, identically distributed severities).

E[S] = E[N]\,E[X],\quad \mathrm{Var}(S) = E[N]\,\mathrm{Var}(X) + \mathrm{Var}(N)\,E[X]^2

You give

MeaningUnitExample
\text{EN}
Mean number of claims E[N]—3
\text{VarN}
Variance of the number of claims—3
\text{EX}
Mean claim severity E[X]—1000
\text{VarX}
Variance of the claim severity—250000

You get

MeaningUnitExample
\text{ES}
Mean aggregate loss E[N] E[X]—3000
\text{VarS}
Variance E[N] Var X + Var N E[X]^2—3750000

Applies when

  • moments non-negative
  • N and the X's independent

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Aggregate loss mean and variance: EN = 3, VarN = 3, EX = 1000, VarX = 250000
ES = 3000
VarS = 3750000

Run it

Terminal
$ actuarial-science solve act_compound_distribution_moments EN=3 VarN=3 EX=1000 VarX=250000
ES = 3000
VarS = 3750000
  by: Mean and variance of aggregate losses (compound distribution)  (E[S] = E[N] E[X]; Var S = E[N] Var X + Var N (E[X])^2)
  EN = 3
  VarN = 3
  EX = 1000
  VarX = 250000
  assumes: moments non-negative; N and the X's independent

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Negative binomial claim frequency probabilities1 fig.act_negative_binomial_frequency

The probability of exactly k claims and of at most k claims, with the mean and variance, for a negative binomial claim count with parameters r and beta (mean r beta).

P(N=k) = \binom{r+k-1}{k}\left(\frac{1}{1+\beta}\right)^{r}\left(\frac{\beta}{1+\beta}\right)^{k}

You give

MeaningUnitExample
r
Negative binomial r—2
\beta
Negative binomial beta—1.5
k
Number of claims—3

You get

MeaningUnitExample
\text{pmf}
P(N = k)—0.13824
\text{cdf}
P(N <= k)—0.66304
\text{mean}
Mean r beta—3
\text{var}
Variance r beta (1 + beta)—7.5

Applies when

  • r, beta > 0
  • k >= 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Negative binomial claim frequency: r = 2, beta = 1.5, k = 3
pmf = 0.13824
cdf = 0.66304
mean = 3
var = 7.5

Run it

Terminal
$ actuarial-science solve act_negative_binomial_frequency r=2 beta=1.5 k=3
pmf = 0.13824
cdf = 0.66304
mean = 3
var = 7.5
  by: Negative binomial claim frequency probabilities  (P(N = k) = Gamma(r+k)/(Gamma(r) k!) (1/(1+beta))^r (beta/(1+beta))^k)
  r = 2
  beta = 1.5
  assumes: r, beta > 0; k >= 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Normal approximation to aggregate losses1 fig.act_normal_approximation_aggregate

The probability that aggregate losses exceed an amount s under the normal approximation with the given mean and variance.

P(S>s) \approx 1-\Phi\!\left(\frac{s-E[S]}{\sqrt{\mathrm{Var}(S)}}\right)

You give

MeaningUnitExample
\text{mean}
Mean of aggregate losses—3000
\text{var}
Variance of aggregate losses—1000000
s
Threshold amount—5000

You get

MeaningUnitExample
\text{prob\_exceed}
P(S > s) by the normal approximation—0.02275013195
z
Standardized threshold (s – mean)/sd—2

Applies when

  • variance > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Normal approximation to aggregate losses: mean = 3000, var = 1000000, s = 5000
prob_exceed = 0.02275013195
z = 2

Run it

Terminal
$ actuarial-science solve act_normal_approximation_aggregate mean=3000 var=1000000 s=5000
prob_exceed = 0.02275013195
z = 2
  by: Normal approximation to aggregate losses  (P(S > s) = 1 - Phi((s - E[S])/sd(S)))
  mean = 3000
  var = 1000000
  s = 5000
  assumes: variance > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Ordinary deductible with exponential losses2 fig.act_exponential_deductible

The expected payment per loss and per payment, the limited expected value and the loss elimination ratio of an ordinary deductible d when losses are exponential with mean theta.

E[X\wedge d] = \theta\left(1-e^{-d/\theta}\right),\quad E[(X-d)_+] = \theta e^{-d/\theta},\quad e(d) = \theta

You give

MeaningUnitExample
\theta
Mean loss theta—1000
d
Ordinary deductible—500

You get

MeaningUnitExample
\text{mean}
Mean loss E[X]—1000
\text{lev\_d}
Limited expected value E[X ∧ d]—393.4693403
\text{per\_loss}
Expected payment per loss E[(X – d)+]—606.5306597
\text{per\_payment}
Expected payment per payment (mean excess loss e(d))—1000
\text{LER}
Loss elimination ratio E[X ∧ d]/E[X]—0.3934693403

Applies when

  • theta > 0
  • d >= 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Exponential losses with a deductible: theta = 1000, d = 500
mean = 1000
lev_d = 393.4693403
per_loss = 606.5306597
per_payment = 1000
LER = 0.3934693403

Run it

Terminal
$ actuarial-science solve act_exponential_deductible theta=1000 d=500
mean = 1000
lev_d = 393.4693403
per_loss = 606.5306597
per_payment = 1000
LER = 0.3934693403
  by: Ordinary deductible with exponential losses  (per loss = E[X] - E[X ∧ d]; per payment = per loss / S(d); LER = E[X ∧ d]/E[X]; E[X ∧ d] = theta (1 - e^(-d/theta)))
  theta = 1000
  d = 500
  assumes: theta > 0; d >= 0

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Ordinary deductible with lognormal losses1 fig.act_lognormal_deductible

The expected payment per loss and per payment, the limited expected value and the loss elimination ratio of an ordinary deductible d when losses are lognormal (mu, sigma of the log of the loss).

E[X\wedge d] = e^{\mu+\sigma^2/2}\,\Phi\!\left(\frac{\ln d-\mu-\sigma^2}{\sigma}\right) + d\left[1-\Phi\!\left(\frac{\ln d-\mu}{\sigma}\right)\right]

You give

MeaningUnitExample
\mu
Mean of the log of the loss—7
\sigma
Standard deviation of the log of the loss—1
d
Ordinary deductible—1000

You get

MeaningUnitExample
\text{mean}
Mean loss E[X]—1808.042414
\text{lev\_d}
Limited expected value E[X ∧ d]—785.1059202
\text{per\_loss}
Expected payment per loss E[(X – d)+]—1022.936494
\text{per\_payment}
Expected payment per payment (mean excess loss e(d))—1905.803319
\text{LER}
Loss elimination ratio E[X ∧ d]/E[X]—0.4342298134

Applies when

  • sigma > 0
  • d >= 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Lognormal losses with a deductible: mu = 7, sigma = 1, d = 1000
mean = 1808.042414
lev_d = 785.1059202
per_loss = 1022.936494
per_payment = 1905.803319
LER = 0.4342298134

Run it

Terminal
$ actuarial-science solve act_lognormal_deductible mu=7 sigma=1 d=1000
mean = 1808.042414
lev_d = 785.1059202
per_loss = 1022.936494
per_payment = 1905.803319
LER = 0.4342298134
  by: Ordinary deductible with lognormal losses  (per loss = E[X] - E[X ∧ d]; per payment = per loss / S(d); LER = E[X ∧ d]/E[X]; E[X ∧ d] = e^(mu + sigma^2/2) Phi((ln d - mu - sigma^2)/sigma) + d [1 - Phi((ln d - mu)/sigma)])
  mu = 7
  sigma = 1
  d = 1000
  assumes: sigma > 0; d >= 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Ordinary deductible with Pareto losses2 fig.act_pareto_deductible

The expected payment per loss and per payment, the limited expected value and the loss elimination ratio of an ordinary deductible d when losses follow a two-parameter Pareto distribution (alpha, theta).

E[X\wedge d] = \frac{\theta}{\alpha-1}\left[1-\left(\frac{\theta}{\theta+d}\right)^{\alpha-1}\right],\quad e(d) = \frac{\theta+d}{\alpha-1}

You give

MeaningUnitExample
\alpha
Pareto shape alpha (> 1)—3
\theta
Pareto scale theta—2000
d
Ordinary deductible—500

You get

MeaningUnitExample
\text{mean}
Mean loss E[X]—1000
\text{lev\_d}
Limited expected value E[X ∧ d]—360
\text{per\_loss}
Expected payment per loss E[(X – d)+]—640
\text{per\_payment}
Expected payment per payment (mean excess loss e(d))—1250
\text{LER}
Loss elimination ratio E[X ∧ d]/E[X]—0.36

Applies when

  • alpha > 1
  • theta > 0
  • d >= 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Pareto losses with a deductible: alpha = 3, theta = 2000, d = 500
mean = 1000
lev_d = 360
per_loss = 640
per_payment = 1250
LER = 0.36

Run it

Terminal
$ actuarial-science solve act_pareto_deductible alpha=3 theta=2000 d=500
mean = 1000
lev_d = 360
per_loss = 640
per_payment = 1250
LER = 0.36
  by: Ordinary deductible with Pareto losses  (per loss = E[X] - E[X ∧ d]; per payment = per loss / S(d); LER = E[X ∧ d]/E[X]; E[X ∧ d] = theta/(alpha-1) [1 - (theta/(theta+d))^(alpha-1)])
  alpha = 3
  theta = 2000
  d = 500
  assumes: alpha > 1; theta > 0; d >= 0

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Panjer recursion for a compound negative binomial distribution2 fig.act_panjer_negative_binomial

The probabilities of aggregate losses 0, 1, …, smax units for a negative binomial (r, beta) number of claims with claim severities on 0, 1, 2, … units, by Panjer's recursion, and P(S ≤ smax).

g_s = \frac{1}{1-af_0}\sum_{j=1}^{s}\left(a+\frac{bj}{s}\right)f_j\,g_{s-j},\quad a = \frac{\beta}{1+\beta},\ b = (r-1)a

You give

MeaningUnitExample
r
Negative binomial r—2
\beta
Negative binomial beta—1
f
Severity probabilities of 0, 1, 2, … units (a list adding to 1) vector—[0, 0.5, 0.3, 0.2]
\text{smax}
Largest aggregate amount wanted—5

You get

MeaningUnitExample
g
P(S = s) for s = 0..smax (a list)—[0.25, 0.125, 0.121875, 0.121875, 0.0873828125, 0.07130859375]
F_{\mathrm{smax}}
P(S ≤ smax)—0.7774414063

Applies when

  • r, beta > 0
  • severity probabilities add to 1
  • smax <= 300

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Panjer recursion for compound negative binomial: r = 2, beta = 1, f = [0, 0.5, 0.3, 0.2], smax = 5
g = [0.25, 0.125, 0.121875, 0.121875, 0.0873828125, 0.07130859375]
F_smax = 0.7774414063

Run it

Terminal
$ actuarial-science solve act_panjer_negative_binomial r=2 beta=1 "f=[0, 0.5, 0.3, 0.2]" smax=5
g = [0.25,0.125,0.121875,0.121875,0.0873828125,0.07130859375]
F_smax = 0.7774414063
  by: Panjer recursion for a compound negative binomial distribution  ((a, b, 0) class: a = beta/(1+beta), b = (r-1) a; g_0 = (1 + beta(1 - f_0))^(-r); g_s = [sum (a + b j/s) f_j g_(s-j)]/(1 - a f_0))
  r = 2
  beta = 1
  assumes: r, beta > 0; severity probabilities add to 1; smax <= 300

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Panjer recursion for a compound Poisson distribution2 fig.act_panjer_poisson

The probabilities of aggregate losses 0, 1, …, smax (in monetary units) for a Poisson(lambda) number of claims with claim severities on 0, 1, 2, … units, by Panjer's recursion, and P(S ≤ smax).

g_0 = e^{-\lambda(1-f_0)},\quad g_s = \frac{\lambda}{s}\sum_{j=1}^{s} j\,f_j\,g_{s-j}

You give

MeaningUnitExample
\text{lam}
Poisson mean number of claims lambda—2
f
Severity probabilities of 0, 1, 2, … units (a list adding to 1) vector—[0, 0.5, 0.3, 0.2]
\text{smax}
Largest aggregate amount wanted—5

You get

MeaningUnitExample
g
P(S = s) for s = 0..smax (a list)—[0.1353352832, 0.1353352832, 0.1488688116, 0.1578911638, 0.1247340194, 0.09856919796]
F_{\mathrm{smax}}
P(S ≤ smax)—0.8007337592

Applies when

  • 0 < lambda <= 200
  • severity probabilities add to 1
  • smax <= 300

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Panjer recursion for compound Poisson: lam = 2, f = [0, 0.5, 0.3, 0.2], smax = 5
g = [0.1353352832, 0.1353352832, 0.1488688116, 0.1578911638, 0.1247340194, 0.09856919796]
F_smax = 0.8007337592

Run it

Terminal
$ actuarial-science solve act_panjer_poisson lam=2 "f=[0, 0.5, 0.3, 0.2]" smax=5
g = [0.135335283237,0.135335283237,0.14886881156,0.157891163776,0.124734019383,0.0985691979573]
F_smax = 0.8007337592
  by: Panjer recursion for a compound Poisson distribution  (g_0 = e^(-lambda(1 - f_0)); g_s = (1/s) sum_(j=1..s) lambda j f_j g_(s-j))
  lam = 2
  assumes: 0 < lambda <= 200; severity probabilities add to 1; smax <= 300

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Poisson claim frequency probabilities2 fig.act_poisson_frequency

The probability of exactly k claims and of at most k claims when the number of claims is Poisson with mean lambda.

P(N=k) = \frac{e^{-\lambda}\lambda^k}{k!}

You give

MeaningUnitExample
\text{lam}
Poisson mean number of claims lambda—2
k
Number of claims—3

You get

MeaningUnitExample
\text{pmf}
P(N = k)—0.1804470443
\text{cdf}
P(N <= k)—0.8571234605
\text{mean}
Mean number of claims—2
\text{var}
Variance of the number of claims—2

Applies when

  • 0 < lambda <= 500
  • k >= 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Poisson claim frequency: lam = 2, k = 3
pmf = 0.1804470443
cdf = 0.8571234605
mean = 2
var = 2

Run it

Terminal
$ actuarial-science solve act_poisson_frequency lam=2 k=3
pmf = 0.1804470443
cdf = 0.8571234605
mean = 2
var = 2
  by: Poisson claim frequency probabilities  (P(N = k) = e^(-lambda) lambda^k / k!)
  lam = 2
  assumes: 0 < lambda <= 500; k >= 0

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Premium principles: expected value, variance, standard deviation1 fig.act_premium_principles

The premium for a risk with a given mean and variance of loss by the expected value principle (1 + theta) E[X], the variance principle E[X] + theta Var X or the standard deviation principle E[X] + theta sd(X).

\pi = (1+\theta)E[X],\quad \pi = E[X] + \theta\,\mathrm{Var}(X),\quad \pi = E[X] + \theta\sqrt{\mathrm{Var}(X)}

You give

MeaningUnitExample
\text{mean}
Expected loss—1000
\text{var}
Variance of the loss—250000
\theta
Loading factor—0.2
\text{principle}
Premium principle choice—expected_value

You get

MeaningUnitExample
\text{premium}
Premium—1200
\text{loading}
Risk loading added to the expected loss—200

Applies when

  • mean, variance, loading >= 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Premium principle: mean = 1000, var = 250000, theta = 0.2, principle = expected_value
premium = 1200
loading = 200

Run it

Terminal
$ actuarial-science solve act_premium_principles mean=1000 var=250000 theta=0.2 principle=expected_value
premium = 1200
loading = 200
  by: Premium principles: expected value, variance, standard deviation  (expected value: (1 + theta) E[X]; variance: E[X] + theta Var X; standard deviation: E[X] + theta sd(X))
  mean = 1000
  var = 250000
  theta = 0.2
  principle = expected_value
  assumes: mean, variance, loading >= 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Stop-loss premium for a compound Poisson distribution2 fig.act_stop_loss_premium

The net stop-loss premium E[(S – d)+] for a retention of d units, with E[S] and the limited expectation E[S ∧ d], when S is compound Poisson with claim severities on 0, 1, 2, … units.

E[(S-d)_+] = E[S] – \sum_{s=0}^{d-1}\left(1 – F_S(s)\right)

You give

MeaningUnitExample
\text{lam}
Poisson mean number of claims lambda—2
f
Severity probabilities of 0, 1, 2, … units (a list adding to 1) vector—[0, 0.5, 0.3, 0.2]
d
Retention (whole number of units)—3

You get

MeaningUnitExample
\text{premium}
Net stop-loss premium E[(S – d)+]—1.225545228
\text{ES}
Expected aggregate loss E[S]—3.4
\text{limited}
Limited expectation E[S ∧ d]—2.174454772

Applies when

  • 0 < lambda <= 200
  • severity probabilities add to 1
  • whole-number retention

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Stop-loss premium: lam = 2, f = [0, 0.5, 0.3, 0.2], d = 3
premium = 1.225545228
ES = 3.4
limited = 2.174454772

Run it

Terminal
$ actuarial-science solve act_stop_loss_premium lam=2 "f=[0, 0.5, 0.3, 0.2]" d=3
premium = 1.225545228
ES = 3.4
limited = 2.174454772
  by: Stop-loss premium for a compound Poisson distribution  (E[(S - d)+] = E[S] - sum_(s=0..d-1) P(S > s), with P(S = s) from Panjer's recursion)
  lam = 2
  assumes: 0 < lambda <= 200; severity probabilities add to 1; whole-number retention

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Loss reserving 7

Bornhuetter-Ferguson reserve2 fig.act_bornhuetter_ferguson

The Bornhuetter-Ferguson reserve and ultimate losses of each origin year from a cumulative loss triangle, the earned premiums and an expected loss ratio: the unreported part (1 – 1/CDF) of the expected losses, with chain-ladder volume-weighted factors.

R_i^{BF} = P_i\cdot\mathrm{ELR}\left(1-\frac{1}{F_{N-i}}\right),\qquad \hat U_i = C_{i,N-i} + R_i^{BF}

You give

MeaningUnitExample
T
Cumulative loss triangle: origin years in rows, development ages in columns, unknown cells written as 0 matrix—[100 150 175; 110 168 0; 120 0 0]
P
Earned premium of each origin year (a list) vector—[200, 210, 220]
\text{elr}
Expected (a priori) loss ratio (70% or 0.7)—0.8

You get

MeaningUnitExample
\text{ultimate}
Ultimate losses of each origin year (a list)—[175, 192, 196.3773585]
\text{reserve}
Reserve of each origin year (a list)—[0, 24, 76.37735849]
\text{total\_reserve}
Total reserve—100.3773585

Applies when

  • square triangle
  • one positive premium per origin year
  • 0 < ELR <= 500%

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Bornhuetter-Ferguson reserve: T = [[100, 150, 175], [110, 168, 0], [120, 0, 0]], P = [200, 210, 220], elr = 0.8
ultimate = [175, 192, 196.3773585]
reserve = [0, 24, 76.37735849]
total_reserve = 100.3773585

Run it

Terminal
$ actuarial-science solve act_bornhuetter_ferguson "T=[[100, 150, 175], [110, 168, 0], [120, 0, 0]]" "P=[200, 210, 220]" elr=0.8
ultimate = [175.0,192.0,196.377358491]
reserve = [0.0,24.0,76.3773584906]
total_reserve = 100.3773585
  by: Bornhuetter-Ferguson reserve  (reserve_i = P_i ELR (1 - 1/CDF_i); ultimate_i = latest_i + reserve_i)
  elr = 0.8
  assumes: square triangle; one positive premium per origin year; 0 < ELR <= 500%

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Cape Cod (Stanard-Buhlmann) reserve2 fig.act_cape_cod

The Cape Cod expected loss ratio (reported losses over used-up premium), and the resulting reserves and ultimate losses of each origin year, from a cumulative loss triangle and the earned premiums.

\mathrm{ELR}_{CC} = \frac{\sum_i C_{i,N-i}}{\sum_i P_i/F_{N-i}},\qquad R_i = P_i\,\mathrm{ELR}_{CC}\left(1-\frac{1}{F_{N-i}}\right)

You give

MeaningUnitExample
T
Cumulative loss triangle: origin years in rows, development ages in columns, unknown cells written as 0 matrix—[100 150 175; 110 168 0; 120 0 0]
P
Earned premium of each origin year (a list) vector—[200, 210, 220]

You get

MeaningUnitExample
\text{elr}
Cape Cod expected loss ratio—0.9176888556
\text{ultimate}
Ultimate losses of each origin year (a list)—[175, 195.5306657, 207.6133134]
\text{reserve}
Reserve of each origin year (a list)—[0, 27.53066567, 87.61331339]
\text{total\_reserve}
Total reserve—115.1439791

Applies when

  • square triangle
  • one positive premium per origin year
  • no trend, no decay

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Cape Cod reserve: T = [[100, 150, 175], [110, 168, 0], [120, 0, 0]], P = [200, 210, 220]
elr = 0.9176888556
ultimate = [175, 195.5306657, 207.6133134]
reserve = [0, 27.53066567, 87.61331339]
total_reserve = 115.1439791

Run it

Terminal
$ actuarial-science solve act_cape_cod "T=[[100, 150, 175], [110, 168, 0], [120, 0, 0]]" "P=[200, 210, 220]"
elr = 0.9176888556
ultimate = [175.0,195.530665669,207.613313388]
reserve = [0.0,27.5306656694,87.6133133882]
total_reserve = 115.1439791
  by: Cape Cod (Stanard-Buhlmann) reserve  (ELR = sum latest_i / sum (P_i / CDF_i); reserve_i = P_i ELR (1 - 1/CDF_i))
  assumes: square triangle; one positive premium per origin year; no trend, no decay

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Chain-ladder age-to-age and cumulative development factors2 fig.act_chain_ladder_factors

The volume-weighted age-to-age development factors of a cumulative loss triangle and the cumulative factors to ultimate from each development age (no tail factor).

\hat f_j = \frac{\sum_{i} C_{i,j+1}}{\sum_{i} C_{i,j}},\qquad F_j = \prod_{k\ge j}\hat f_k

You give

MeaningUnitExample
T
Cumulative loss triangle: origin years in rows, development ages in columns, unknown cells written as 0 matrix—[100 150 175; 110 168 0; 120 0 0]

You get

MeaningUnitExample
\text{ldf}
Age-to-age factors f_1 … f_(N-1) (a list)—[1.514285714, 1.166666667]
\text{cdf}
Cumulative development factors to ultimate from each age, last = 1 (a list)—[1.766666667, 1.166666667, 1]

Applies when

  • square triangle with N >= 2
  • known cells positive, unknown cells 0
  • no tail factor

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Chain-ladder development factors: T = [[100, 150, 175], [110, 168, 0], [120, 0, 0]]
ldf = [1.514285714, 1.166666667]
cdf = [1.766666667, 1.166666667, 1]

Run it

Terminal
$ actuarial-science solve act_chain_ladder_factors "T=[[100, 150, 175], [110, 168, 0], [120, 0, 0]]"
ldf = [1.51428571429,1.16666666667]
cdf = [1.76666666667,1.16666666667,1.0]
  by: Chain-ladder age-to-age and cumulative development factors  (f_j = sum_i C_(i,j+1) / sum_i C_(i,j) over origins with both ages known; CDF_j = product of f from age j on)
  assumes: square triangle with N >= 2; known cells positive, unknown cells 0; no tail factor

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Chain-ladder ultimate losses and reserves2 fig.act_chain_ladder_reserve

The ultimate losses, the reserve (ultimate less reported to date) of each origin year and the total reserve of a cumulative loss triangle by the volume-weighted chain-ladder method (no tail factor).

\hat C_{i,N} = C_{i,N-i}\prod_{k\ge N-i}\hat f_k,\qquad R_i = \hat C_{i,N} – C_{i,N-i}

You give

MeaningUnitExample
T
Cumulative loss triangle: origin years in rows, development ages in columns, unknown cells written as 0 matrix—[100 150 175; 110 168 0; 120 0 0]

You get

MeaningUnitExample
\text{ultimate}
Ultimate losses of each origin year (a list)—[175, 196, 212]
\text{reserve}
Reserve of each origin year (a list)—[0, 28, 92]
\text{total\_reserve}
Total reserve—120

Applies when

  • square triangle with N >= 2
  • known cells positive, unknown cells 0
  • no tail factor

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Chain-ladder reserve: T = [[100, 150, 175], [110, 168, 0], [120, 0, 0]]
ultimate = [175, 196, 212]
reserve = [0, 28, 92]
total_reserve = 120

Run it

Terminal
$ actuarial-science solve act_chain_ladder_reserve "T=[[100, 150, 175], [110, 168, 0], [120, 0, 0]]"
ultimate = [175.0,196.0,212.0]
reserve = [0.0,28.0,92.0]
total_reserve = 120
  by: Chain-ladder ultimate losses and reserves  (ultimate_i = latest_i x CDF at its age; reserve_i = ultimate_i - latest_i)
  assumes: square triangle with N >= 2; known cells positive, unknown cells 0; no tail factor

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Chain-ladder with simple-average development factors2 fig.act_chain_ladder_simple_average

The simple-average age-to-age factors (mean of the individual link ratios), the ultimate losses of each origin year and the total reserve of a cumulative loss triangle (no tail factor).

\hat f_j = \frac{1}{n_j}\sum_i \frac{C_{i,j+1}}{C_{i,j}}

You give

MeaningUnitExample
T
Cumulative loss triangle: origin years in rows, development ages in columns, unknown cells written as 0 matrix—[100 150 175; 110 168 0; 120 0 0]

You get

MeaningUnitExample
\text{ldf}
Simple-average age-to-age factors (a list)—[1.513636364, 1.166666667]
\text{ultimate}
Ultimate losses of each origin year (a list)—[175, 196, 211.9090909]
\text{total\_reserve}
Total reserve—119.9090909

Applies when

  • square triangle with N >= 2
  • known cells positive, unknown cells 0
  • no tail factor

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Simple average chain-ladder: T = [[100, 150, 175], [110, 168, 0], [120, 0, 0]]
ldf = [1.513636364, 1.166666667]
ultimate = [175, 196, 211.9090909]
total_reserve = 119.9090909

Run it

Terminal
$ actuarial-science solve act_chain_ladder_simple_average "T=[[100, 150, 175], [110, 168, 0], [120, 0, 0]]"
ldf = [1.51363636364,1.16666666667]
ultimate = [175.0,196.0,211.909090909]
total_reserve = 119.9090909
  by: Chain-ladder with simple-average development factors  (f_j = mean over origins of C_(i,j+1)/C_(i,j); ultimate_i = latest_i x product of f)
  assumes: square triangle with N >= 2; known cells positive, unknown cells 0; no tail factor

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Expected claims reserving method2 fig.act_expected_claims_method

The ultimate losses (premium x expected loss ratio), the reserve (ultimate less paid or reported to date) of each origin year and the total reserve by the expected claims method.

\hat U_i = P_i\cdot\mathrm{ELR},\qquad R_i = \hat U_i – C_i

You give

MeaningUnitExample
P
Earned premium of each origin year (a list) vector—[1000, 1100, 1200]
\text{elr}
Expected loss ratio (65% or 0.65)—0.7
\text{paid}
Losses paid (or reported) to date of each origin year (a list) vector—[650, 500, 300]

You get

MeaningUnitExample
\text{ultimate}
Expected ultimate losses (a list)—[700, 770, 840]
\text{reserve}
Reserve of each origin year (a list)—[50, 270, 540]
\text{total\_reserve}
Total reserve—860

Applies when

  • one paid amount per premium
  • 0 < ELR <= 500%

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Expected claims method: P = [1000, 1100, 1200], elr = 0.7, paid = [650, 500, 300]
ultimate = [700, 770, 840]
reserve = [50, 270, 540]
total_reserve = 860

Run it

Terminal
$ actuarial-science solve act_expected_claims_method "P=[1000, 1100, 1200]" elr=0.7 "paid=[650, 500, 300]"
ultimate = [700.0,770.0,840.0]
reserve = [50.0,270.0,540.0]
total_reserve = 860
  by: Expected claims reserving method  (ultimate_i = P_i x ELR; reserve_i = ultimate_i - paid_i)
  elr = 0.7
  assumes: one paid amount per premium; 0 < ELR <= 500%

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Mack's standard error of chain-ladder reserves2 fig.act_mack_standard_error

The standard errors (root mean squared errors of prediction) of the chain-ladder reserve of each origin year and of the total reserve by Mack's distribution-free model, with the variance parameters sigma^2 of each development age.

\widehat{\mathrm{mse}}(\hat R_i) = \hat C_{iN}^2\sum_{k=N-i}^{N-1}\frac{\hat\sigma_k^2}{\hat f_k^2}\left(\frac{1}{\hat C_{ik}} + \frac{1}{\sum_{j} C_{jk}}\right)

You give

MeaningUnitExample
T
Cumulative loss triangle: origin years in rows, development ages in columns, unknown cells written as 0 matrix—[1000 1800 2100 2200; 1100 2000 2300 0; 1200 2100 0 0; 1300 0 0 0]

You get

MeaningUnitExample
\text{se}
Standard error of each origin year's reserve (a list)—[0, 15.2267486, 34.5563923, 72.21731511]
\text{total\_se}
Standard error of the total reserve—90.68083258
\text{sigma2}
Mack variance parameters sigma^2 of each age (a list)—[1.439393939, 0.2631578947, 0.04811196967]

Applies when

  • square triangle with N >= 4
  • known cells positive, unknown cells 0
  • last sigma^2 by Mack's extrapolation

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Mack standard error: T = [[1000, 1800, 2100, 2200], [1100, 2000, 2300, 0], [1200, 2100, 0, 0], [1300, 0, 0, 0]]
se = [0, 15.2267486, 34.5563923, 72.21731511]
total_se = 90.68083258
sigma2 = [1.439393939, 0.2631578947, 0.04811196967]

Run it

Terminal
$ actuarial-science solve act_mack_standard_error "T=[[1000, 1800, 2100, 2200], [1100, 2000, 2300, 0], [1200, 2100, 0, 0], [1300, 0, 0, 0]]"
se = [0.0,15.2267485994,34.5563923039,72.2173151114]
total_se = 90.68083258
sigma2 = [1.43939393939,0.263157894737,0.0481119696749]
  by: Mack's standard error of chain-ladder reserves  (sigma_k^2 = sum C_ik (C_(i,k+1)/C_ik - f_k)^2/(n_k - 1); mse(R_i) = C_iN^2 sum_k sigma_k^2/f_k^2 (1/C_ik + 1/S_k); total adds the covariance terms)
  assumes: square triangle with N >= 4; known cells positive, unknown cells 0; last sigma^2 by Mack's extrapolation

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Multiple decrements 2

Associated single decrement rates from a multiple decrement table (UDD)2 fig.act_multiple_decrement_to_single

The associated single decrement probabilities q'(1) and q'(2) from the two decrement probabilities of a double decrement table, assuming each decrement is uniformly distributed within the year in the multiple decrement table.

q'^{(j)}_x = 1 – \left(p^{(\tau)}_x\right)^{q^{(j)}_x/q^{(\tau)}_x}

You give

MeaningUnitExample
\text{q1}
Probability of leaving by decrement 1 within the year q(1)—0.1
\text{q2}
Probability of leaving by decrement 2 within the year q(2)—0.2

You get

MeaningUnitExample
\text{q1\_single}
Associated single decrement probability q'(1)—0.1120959983
\text{q2\_single}
Associated single decrement probability q'(2)—0.2116264837
q_{\mathrm{total}}
Total decrement probability q(tau)—0.3

Applies when

  • q1, q2 > 0
  • q1 + q2 < 1
  • UDD in the multiple decrement table

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Associated single decrement rates: q1 = 0.1, q2 = 0.2
q1_single = 0.1120959983
q2_single = 0.2116264837
q_total = 0.3

Run it

Terminal
$ actuarial-science solve act_multiple_decrement_to_single q1=0.1 q2=0.2
q1_single = 0.1120959983
q2_single = 0.2116264837
q_total = 0.3
  by: Associated single decrement rates from a multiple decrement table (UDD)  (q'(j) = 1 - (p(tau))^(q(j)/q(tau)))
  q1 = 0.1
  q2 = 0.2
  assumes: q1, q2 > 0; q1 + q2 < 1; UDD in the multiple decrement table

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Multiple decrement probabilities from single decrement rates (UDD)2 fig.act_single_to_multiple_decrement

The double decrement probabilities q(1) and q(2) from the associated single decrement probabilities q'(1) and q'(2), each uniformly distributed within the year in its single decrement table.

q^{(1)}_x = q'^{(1)}_x\left(1-\tfrac12 q'^{(2)}_x\right),\quad q^{(2)}_x = q'^{(2)}_x\left(1-\tfrac12 q'^{(1)}_x\right)

You give

MeaningUnitExample
\text{q1s}
Associated single decrement probability q'(1)—0.1
\text{q2s}
Associated single decrement probability q'(2)—0.2

You get

MeaningUnitExample
\text{q1}
Probability of leaving by decrement 1, q(1)—0.09
\text{q2}
Probability of leaving by decrement 2, q(2)—0.19
q_{\mathrm{total}}
Total decrement probability q(tau)—0.28

Applies when

  • 0 < q'(1), q'(2) < 1
  • UDD in each single decrement table

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Multiple decrement probabilities: q1s = 0.1, q2s = 0.2
q1 = 0.09
q2 = 0.19
q_total = 0.28

Run it

Terminal
$ actuarial-science solve act_single_to_multiple_decrement q1s=0.1 q2s=0.2
q1 = 0.09
q2 = 0.19
q_total = 0.28
  by: Multiple decrement probabilities from single decrement rates (UDD)  (q(1) = q'(1) (1 - q'(2)/2), q(2) = q'(2) (1 - q'(1)/2))
  q1s = 0.1
  q2s = 0.2
  assumes: 0 < q'(1), q'(2) < 1; UDD in each single decrement table

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Multiple lives 2

Joint life and last survivor annuities and insurances1 fig.act_joint_life_last_survivor

The joint life and last survivor annuities-due and whole life insurances (end of year of the first or second death) for two independent lives aged x and y with their own life tables.

\ddot a_{xy} = \sum_{k\ge0} v^k\,{}_kp_x\,{}_kp_y,\quad \ddot a_{\overline{xy}} = \ddot a_x + \ddot a_y – \ddot a_{xy},\quad A = 1 – d\,\ddot a

You give

MeaningUnitExample
\text{qx}
Death probabilities of the first life from age x, ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
\text{qy}
Death probabilities of the second life from age y, ending with 1 (a list) vector—[0.05, 0.1, 0.3, 0.6, 1]
i
Annual effective interest rate (5% or 0.05)—0.05

You get

MeaningUnitExample
a_{\mathrm{joint}}
Joint life annuity-due ä_xy—2.55877551
a_{\mathrm{last}}
Last survivor annuity-due—3.656643991
A_{\mathrm{joint}}
Joint life insurance A_xy—0.8781535471
A_{\mathrm{last}}
Last survivor insurance—0.8258740957

Applies when

  • both tables close
  • independent lives
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Joint life and last survivor: qx = [0.1, 0.2, 0.5, 1], qy = [0.05, 0.1, 0.3, 0.6, 1], i = 0.05
a_joint = 2.55877551
a_last = 3.656643991
A_joint = 0.8781535471
A_last = 0.8258740957

Run it

Terminal
$ actuarial-science solve act_joint_life_last_survivor "qx=[0.1, 0.2, 0.5, 1]" "qy=[0.05, 0.1, 0.3, 0.6, 1]" i=0.05
a_joint = 2.55877551
a_last = 3.656643991
A_joint = 0.8781535471
A_last = 0.8258740957
  by: Joint life and last survivor annuities and insurances  (ä_xy = sum v^k k_p_x k_p_y; last survivor ä = ä_x + ä_y - ä_xy; A = 1 - d ä)
  i = 0.05
  assumes: both tables close; independent lives; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Reversionary annuity1 fig.act_reversionary_annuity

The actuarial present value of an annuity-immediate of P a year paid to a life aged y after the death of a life aged x (a_(x|y) = a_y – a_xy), independent lives.

a_{x|y} = a_y – a_{xy} = \sum_{k\ge1} v^k\,{}_kp_y\left(1-{}_kp_x\right)

You give

MeaningUnitExample
\text{qx}
Death probabilities of the life whose death starts the annuity, ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
\text{qy}
Death probabilities of the annuitant from age y, ending with 1 (a list) vector—[0.05, 0.1, 0.3, 0.6, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
P
Annual payment—1000

You get

MeaningUnitExample
a_{\mathrm{rev}}
Reversionary annuity a_(x|y) per unit—0.8354583738
\text{EPV}
Actuarial present value P a_(x|y)—835.4583738

Applies when

  • both tables close
  • independent lives
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Reversionary annuity: qx = [0.1, 0.2, 0.5, 1], qy = [0.05, 0.1, 0.3, 0.6, 1], i = 0.05, P = 1000
a_rev = 0.8354583738
EPV = 835.4583738

Run it

Terminal
$ actuarial-science solve act_reversionary_annuity "qx=[0.1, 0.2, 0.5, 1]" "qy=[0.05, 0.1, 0.3, 0.6, 1]" i=0.05 P=1000
a_rev = 0.8354583738
EPV = 835.4583738
  by: Reversionary annuity  (a_(x|y) = a_y - a_xy = sum_(k>=1) v^k k_p_y (1 - k_p_x))
  i = 0.05
  P = 1000
  assumes: both tables close; independent lives; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Premiums 6

Gross annual premium for whole life insurance with expenses1 fig.act_gross_premium

The level annual gross premium for a fully discrete whole life insurance of S by the equivalence principle with expenses: an initial fraction e0 of the first premium, a renewal fraction r of later premiums, a per-policy expense c every year (first year included) and a settlement expense E per claim; with the net premium and the loading.

G = \frac{(S+E)A_x + c\,\ddot a_x}{(1-r)\ddot a_x – (e_0 – r)}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
S
Sum insured—1000
\text{e0}
Initial expense as a fraction of the first gross premium (e.g. 40%)—0.4
r
Renewal expense as a fraction of each later gross premium (e.g. 5%)—0.05
c
Per-policy expense at the start of every year—10
E
Settlement expense per claim—20

You get

MeaningUnitExample
G
Annual gross premium—391.0443937
P
Annual net premium—306.8418549
\text{loading}
Expense loading G – P—84.20253884

Applies when

  • the table closes
  • 0 < i < 1
  • 0 <= e0, r < 1
  • c, E >= 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Gross premium: q = [0.1, 0.2, 0.5, 1], i = 0.05, S = 1000, e0 = 0.4, r = 0.05, c = 10, E = 20
G = 391.0443937
P = 306.8418549
loading = 84.20253884

Run it

Terminal
$ actuarial-science solve act_gross_premium "q=[0.1, 0.2, 0.5, 1]" i=0.05 S=1000 e0=0.4 r=0.05 c=10 E=20
G = 391.0443937
P = 306.8418549
loading = 84.20253884
  by: Gross annual premium for whole life insurance with expenses  (G ä_x = (S + E) A_x + e0 G + r G (ä_x - 1) + c ä_x)
  i = 0.05
  S = 1000
  e0 = 0.4
  r = 0.05
  c = 10
  E = 20
  assumes: the table closes; 0 < i < 1; 0 <= e0, r < 1; c, E >= 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Loss at issue of whole life insurance: mean, standard deviation, probability of loss1 fig.act_loss_at_issue

The mean and standard deviation of the insurer's loss at issue L0 = S v^(K+1) – P ä_(K+1) for a fully discrete whole life insurance of S with annual premium P, and the probability that the loss is positive.

L_0 = \left(S+\frac Pd\right)v^{K+1} – \frac Pd,\quad \mathrm{Var}(L_0) = \left(S+\frac Pd\right)^2\left({}^2A_x – A_x^2\right)

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
S
Sum insured—1000
P
Annual premium—450

You get

MeaningUnitExample
\text{mean}
Expected loss at issue S A_x – P ä_x—-403.8756999
\text{sd}
Standard deviation (S + P/d) sqrt(2A_x – A_x^2)—434.1005558
\text{prob\_loss}
Probability that the loss at issue is positive—0.28

Applies when

  • the table closes
  • 0 < i < 1
  • S, P > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Loss at issue: q = [0.1, 0.2, 0.5, 1], i = 0.05, S = 1000, P = 450
mean = -403.8756999
sd = 434.1005558
prob_loss = 0.28

Run it

Terminal
$ actuarial-science solve act_loss_at_issue "q=[0.1, 0.2, 0.5, 1]" i=0.05 S=1000 P=450
mean = -403.8756999
sd = 434.1005558
prob_loss = 0.28
  by: Loss at issue of whole life insurance: mean, standard deviation, probability of loss  (L0 = (S + P/d) v^(K+1) - P/d; E = S A - P ä; Var = (S + P/d)^2 (2A - A^2))
  i = 0.05
  S = 1000
  P = 450
  assumes: the table closes; 0 < i < 1; S, P > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Net annual premium for endowment insurance1 fig.act_net_premium_endowment

The level annual net premium, payable for n years while alive, for a fully discrete n-year endowment insurance of S, by the equivalence principle.

P = S\,\frac{A_{x:\overline{n}|}}{\ddot a_{x:\overline{n}|}} = S\left(\frac{1}{\ddot a_{x:\overline{n}|}} – d\right)

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … for at least n years (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
n
Term in years—3
S
Sum insured—1000

You get

MeaningUnitExample
P
Annual net premium S A_(x:n) / ä_(x:n)—350.7549361
A
Endowment insurance A_(x:n)—0.8804664723
a_{\mathrm{due}}
Temporary annuity-due ä_(x:n)—2.510204082

Applies when

  • at least n death probabilities
  • 0 < i < 1
  • S > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Net premium for endowment insurance: q = [0.1, 0.2, 0.5, 1], i = 0.05, n = 3, S = 1000
P = 350.7549361
A = 0.8804664723
a_due = 2.510204082

Run it

Terminal
$ actuarial-science solve act_net_premium_endowment "q=[0.1, 0.2, 0.5, 1]" i=0.05 n=3 S=1000
P = 350.7549361
A = 0.8804664723
a_due = 2.510204082
  by: Net annual premium for endowment insurance  (P ä_(x:n) = S A_(x:n); equivalently P = S (1/ä_(x:n) - d))
  i = 0.05
  S = 1000
  assumes: at least n death probabilities; 0 < i < 1; S > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Net annual premium for limited-payment whole life insurance1 fig.act_net_premium_limited_pay

The level annual net premium for a fully discrete whole life insurance of S with premiums payable for at most h years.

{}_hP_x = S\,\frac{A_x}{\ddot a_{x:\overline{h}|}}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
h
Premium paying period in years—2
S
Sum insured—1000

You get

MeaningUnitExample
P
Annual net premium S A_x / ä_(x:h)—466.1234457
A
Whole life insurance A_x—0.8656578278
a_{\mathrm{due},h}
h-year temporary annuity-due—1.857142857

Applies when

  • the table closes
  • 1 <= h ≤ length of the table
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Limited payment whole life premium: q = [0.1, 0.2, 0.5, 1], i = 0.05, h = 2, S = 1000
P = 466.1234457
A = 0.8656578278
a_due_h = 1.857142857

Run it

Terminal
$ actuarial-science solve act_net_premium_limited_pay "q=[0.1, 0.2, 0.5, 1]" i=0.05 h=2 S=1000
P = 466.1234457
A = 0.8656578278
a_due_h = 1.857142857
  by: Net annual premium for limited-payment whole life insurance  (P ä_(x:h) = S A_x)
  i = 0.05
  S = 1000
  assumes: the table closes; 1 <= h <= length of the table; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Net annual premium for term insurance1 fig.act_net_premium_term

The level annual net premium, payable for n years while alive, for a fully discrete n-year term insurance of S, by the equivalence principle.

P = S\,\frac{A^1_{x:\overline{n}|}}{\ddot a_{x:\overline{n}|}}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … for at least n years (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
n
Term in years—3
S
Sum insured—1000

You get

MeaningUnitExample
P
Annual net premium S A^1_(x:n) / ä_(x:n)—226.867983
\text{A1}
Term insurance A^1_(x:n)—0.5694849368
a_{\mathrm{due}}
Temporary annuity-due ä_(x:n)—2.510204082

Applies when

  • at least n death probabilities
  • 0 < i < 1
  • S > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Net premium for term insurance: q = [0.1, 0.2, 0.5, 1], i = 0.05, n = 3, S = 1000
P = 226.867983
A1 = 0.5694849368
a_due = 2.510204082

Run it

Terminal
$ actuarial-science solve act_net_premium_term "q=[0.1, 0.2, 0.5, 1]" i=0.05 n=3 S=1000
P = 226.867983
A1 = 0.5694849368
a_due = 2.510204082
  by: Net annual premium for term insurance  (P ä_(x:n) = S A^1_(x:n))
  i = 0.05
  S = 1000
  assumes: at least n death probabilities; 0 < i < 1; S > 0

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Net annual premium for whole life insurance2 fig.act_net_premium_whole_life

The level annual net premium, payable at the start of each year while alive, for a fully discrete whole life insurance of S, by the equivalence principle.

P = S\,\frac{A_x}{\ddot a_x} = S\left(\frac{1}{\ddot a_x} – d\right)

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
S
Sum insured—1000

You get

MeaningUnitExample
P
Annual net premium S A_x / ä_x—306.8418549
A
Whole life insurance A_x—0.8656578278
a_{\mathrm{due}}
Whole life annuity-due ä_x—2.821185617

Applies when

  • the table closes
  • 0 < i < 1
  • S > 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Net premium for whole life insurance: q = [0.1, 0.2, 0.5, 1], i = 0.05, S = 1000
P = 306.8418549
A = 0.8656578278
a_due = 2.821185617

Run it

Terminal
$ actuarial-science solve act_net_premium_whole_life "q=[0.1, 0.2, 0.5, 1]" i=0.05 S=1000
P = 306.8418549
A = 0.8656578278
a_due = 2.821185617
  by: Net annual premium for whole life insurance  (equivalence principle: P ä_x = S A_x)
  i = 0.05
  S = 1000
  assumes: the table closes; 0 < i < 1; S > 0

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Ratemaking 2

Indicated rate by the pure premium method1 fig.act_pure_premium_rate

The pure premium (losses per exposure) and the indicated rate per exposure from projected losses, exposures, the fixed expense per exposure, the variable expense ratio and the profit provision.

R = \frac{L/X + F}{1 – V – Q}

You give

MeaningUnitExample
L
Projected ultimate losses and LAE—500000
X
Earned exposures—2000
\text{Fe}
Fixed expense per exposure—30
V
Variable expense ratio—0.15
Q
Profit and contingencies provision—0.05

You get

MeaningUnitExample
\text{pure\_premium}
Pure premium L/X—250
\text{rate}
Indicated rate per exposure (PP + F)/(1 – V – Q)—350

Applies when

  • X > 0
  • 0 <= V < 1
  • V + Q < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Pure premium rate: L = 500000, X = 2000, Fe = 30, V = 0.15, Q = 0.05
pure_premium = 250
rate = 350

Run it

Terminal
$ actuarial-science solve act_pure_premium_rate L=500000 X=2000 Fe=30 V=0.15 Q=0.05
pure_premium = 250
rate = 350
  by: Indicated rate by the pure premium method  (rate = (L/X + F)/(1 - V - Q))
  L = 500000
  X = 2000
  Fe = 30
  V = 0.15
  Q = 0.05
  assumes: X > 0; 0 <= V < 1; V + Q < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Indicated rate change by the loss ratio method1 fig.act_loss_ratio_rate_change

The indicated rate change from projected losses (with loss adjustment expenses), earned premium at current rates, the fixed expense ratio, the variable expense ratio and the profit provision.

\Delta = \frac{L/EP + F}{1 – V – Q} – 1

You give

MeaningUnitExample
L
Projected ultimate losses and LAE—650000
\text{EP}
Earned premium at current rates—1000000
F
Fixed expense ratio (to premium)—0.1
V
Variable expense ratio—0.15
Q
Profit and contingencies provision—0.05

You get

MeaningUnitExample
\text{change}
Indicated rate change (0.05 = +5%)—-0.0625
\text{loss\_ratio}
Projected loss ratio L/EP—0.65
\text{permissible}
Permissible loss ratio 1 – V – Q—0.8

Applies when

  • EP > 0
  • 0 <= F, V < 1
  • V + Q < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Loss ratio rate change: L = 650000, EP = 1000000, F = 0.1, V = 0.15, Q = 0.05
change = -0.0625
loss_ratio = 0.65
permissible = 0.8

Run it

Terminal
$ actuarial-science solve act_loss_ratio_rate_change L=650000 EP=1000000 F=0.1 V=0.15 Q=0.05
change = -0.0625
loss_ratio = 0.65
permissible = 0.8
  by: Indicated rate change by the loss ratio method  (indicated change = (L/EP + F)/(1 - V - Q) - 1)
  L = 650000
  EP = 1000000
  F = 0.1
  V = 0.15
  Q = 0.05
  assumes: EP > 0; 0 <= F, V < 1; V + Q < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Reserves 8

Continuous whole life insurance, premium and reserve under Makeham's law1 fig.act_makeham_continuous_whole_life

The continuous whole life annuity, the insurance paid at the moment of death, the continuous net premium rate and the reserve at time t for a life aged x following Makeham's law, at a constant interest rate.

\bar a_x = \int_0^\infty e^{-\delta s}{}_sp_x\,ds,\quad \bar A_x = 1-\delta\bar a_x,\quad {}_t\bar V = S\left(1-\frac{\bar a_{x+t}}{\bar a_x}\right)

You give

MeaningUnitExample
A
Makeham's A (per year)—0.00022
B
Makeham's B (per year)—2.7e-06
c
Makeham's c (> 1)—1.124
x
Age at issue (years)—50
i
Annual effective interest rate (5% or 0.05)—0.05
S
Sum insured—100000
t
Time since issue in years—10

You get

MeaningUnitExample
a_{\mathrm{bar}}
Continuous whole life annuity ā_x—16.52037321
A_{\mathrm{bar}}
Insurance payable at death Ā_x—0.1939682791
P
Continuous annual net premium rate—1174.1156
V
Reserve at time t—12836.47174

Applies when

  • Makeham parameters 0 <= A < 0.1, 0 < B < 0.1, 1 < c < 1.5
  • 0 <= x <= 120
  • 0 <= t <= 100
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Continuous whole life under Makeham: A = 0.00022, B = 2.7e-06, c = 1.124, x = 50, i = 0.05, S = 100000, t = 10
a_bar = 16.52037321
A_bar = 0.1939682791
P = 1174.1156
V = 12836.47174

Run it

Terminal
$ actuarial-science solve act_makeham_continuous_whole_life A=0.00022 B=2.7e-06 c=1.124 x=50 i=0.05 S=100000 t=10
a_bar = 16.52037321
A_bar = 0.1939682791
P = 1174.1156
V = 12836.47174
  by: Continuous whole life insurance, premium and reserve under Makeham's law  (ā_x = integral of e^(-delta s) s_p_x (Gauss-Legendre); Ā_x = 1 - delta ā_x; P = S Ā_x/ā_x; tV = S (1 - ā_(x+t)/ā_x))
  A = 0.00022
  B = 2.7e-06
  c = 1.124
  x = 50
  i = 0.05
  S = 100000
  t = 10
  assumes: Makeham parameters 0 <= A < 0.1, 0 < B < 0.1, 1 < c < 1.5; 0 <= x <= 120; 0 <= t <= 100; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Gross premium reserve for whole life insurance with expenses1 fig.act_gross_premium_reserve

The gross premium policy value at integer duration t of a fully discrete whole life insurance of S, with the gross premium set by the equivalence principle with initial, renewal, per-policy and settlement expenses.

{}_tV^g = (S+E)A_{x+t} + c\,\ddot a_{x+t} – (1-r)G\,\ddot a_{x+t}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
S
Sum insured—1000
\text{e0}
Initial expense as a fraction of the first gross premium—0.4
r
Renewal expense as a fraction of each later gross premium—0.05
c
Per-policy expense at the start of every year—10
E
Settlement expense per claim—20
t
Policy duration in years—1

You get

MeaningUnitExample
V
Gross premium reserve tV—148.7310756
G
Annual gross premium—391.0443937

Applies when

  • the table closes
  • 0 <= t < length of the table
  • 0 <= e0, r < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Gross premium reserve: q = [0.1, 0.2, 0.5, 1], i = 0.05, S = 1000, e0 = 0.4, r = 0.05, c = 10, E = 20, t = 1
V = 148.7310756
G = 391.0443937

Run it

Terminal
$ actuarial-science solve act_gross_premium_reserve "q=[0.1, 0.2, 0.5, 1]" i=0.05 S=1000 e0=0.4 r=0.05 c=10 E=20 t=1
V = 148.7310756
G = 391.0443937
  by: Gross premium reserve for whole life insurance with expenses  (tV = (S + E) A_(x+t) + c ä_(x+t) - G (1 - r) ä_(x+t) for t >= 1 (0 at issue by the equivalence principle))
  i = 0.05
  S = 1000
  e0 = 0.4
  r = 0.05
  c = 10
  E = 20
  assumes: the table closes; 0 <= t < length of the table; 0 <= e0, r < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Net premium reserve for endowment insurance1 fig.act_reserve_endowment

The net premium reserve at integer duration t of a fully discrete n-year endowment insurance of S with level net premiums payable for n years, by the prospective method (S at maturity).

{}_tV = S\,A_{x+t:\overline{n-t}|} – P\,\ddot a_{x+t:\overline{n-t}|}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … for at least n years (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
n
Term in years—3
S
Sum insured—1000
t
Policy duration in years—1

You get

MeaningUnitExample
V
Net premium reserve tV—298.102981
P
Annual net premium—350.7549361

Applies when

  • at least n death probabilities
  • 0 <= t <= n
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Endowment reserve: q = [0.1, 0.2, 0.5, 1], i = 0.05, n = 3, S = 1000, t = 1
V = 298.102981
P = 350.7549361

Run it

Terminal
$ actuarial-science solve act_reserve_endowment "q=[0.1, 0.2, 0.5, 1]" i=0.05 n=3 S=1000 t=1
V = 298.102981
P = 350.7549361
  by: Net premium reserve for endowment insurance  (tV = S A_(x+t:n-t) - P ä_(x+t:n-t))
  i = 0.05
  S = 1000
  assumes: at least n death probabilities; 0 <= t <= n; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Net premium reserve for term insurance1 fig.act_reserve_term

The net premium reserve at integer duration t of a fully discrete n-year term insurance of S with level net premiums payable for n years, by the prospective method.

{}_tV = S\,A^1_{x+t:\overline{n-t}|} – P\,\ddot a_{x+t:\overline{n-t}|}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … for at least n years (a list) vector—[0.01, 0.02, 0.04, 0.08]
i
Annual effective interest rate (5% or 0.05)—0.05
n
Term in years—4
S
Sum insured—1000
t
Policy duration in years—2

You get

MeaningUnitExample
V
Net premium reserve tV—43.21035282
P
Annual net premium—33.71740631

Applies when

  • at least n death probabilities
  • 0 <= t <= n
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Term insurance reserve: q = [0.01, 0.02, 0.04, 0.08], i = 0.05, n = 4, S = 1000, t = 2
V = 43.21035282
P = 33.71740631

Run it

Terminal
$ actuarial-science solve act_reserve_term "q=[0.01, 0.02, 0.04, 0.08]" i=0.05 n=4 S=1000 t=2
V = 43.21035282
P = 33.71740631
  by: Net premium reserve for term insurance  (tV = S A^1_(x+t:n-t) - P ä_(x+t:n-t))
  i = 0.05
  S = 1000
  assumes: at least n death probabilities; 0 <= t <= n; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Net premium reserve for whole life insurance1 fig.act_reserve_whole_life

The net premium reserve (policy value) at integer duration t of a fully discrete whole life insurance of S with the equivalence-principle net premium, by the prospective method.

{}_tV = S\,A_{x+t} – P\,\ddot a_{x+t} = S\left(1 – \frac{\ddot a_{x+t}}{\ddot a_x}\right)

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … ending with 1 (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
S
Sum insured—1000
t
Policy duration in years—1

You get

MeaningUnitExample
V
Net premium reserve tV—246.8710529
P
Annual net premium—306.8418549
A_{t}
A_(x+t)—0.8988230213
a_{\mathrm{due},t}
Ä_(x+t)—2.124716553

Applies when

  • the table closes
  • 0 <= t < length of the table
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Whole life reserve: q = [0.1, 0.2, 0.5, 1], i = 0.05, S = 1000, t = 1
V = 246.8710529
P = 306.8418549
A_t = 0.8988230213
a_due_t = 2.124716553

Run it

Terminal
$ actuarial-science solve act_reserve_whole_life "q=[0.1, 0.2, 0.5, 1]" i=0.05 S=1000 t=1
V = 246.8710529
P = 306.8418549
A_t = 0.8988230213
a_due_t = 2.124716553
  by: Net premium reserve for whole life insurance  (tV = S A_(x+t) - P ä_(x+t) = S (1 - ä_(x+t)/ä_x))
  i = 0.05
  S = 1000
  assumes: the table closes; 0 <= t < length of the table; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Policy value recursion (one year)1 fig.act_policy_value_recursion

The policy value at the end of a policy year from the value at its start, the premium and expense at the start of the year, the interest rate, the death probability, the sum insured and the settlement expense: (tV + P – e)(1+i) = q (S + E) + p (t+1)V.

\left({}_tV + P – e\right)(1+i) = q_{x+t}\,(S+E) + p_{x+t}\;{}_{t+1}V

You give

MeaningUnitExample
V
Policy value at the start of the year tV—100
P
Premium at the start of the year—50
e
Expense at the start of the year—5
i
Annual effective interest rate (5% or 0.05)—0.05
q
Death probability for the year q_(x+t)—0.01
S
Death benefit—1000
E
Settlement expense per claim—0

You get

MeaningUnitExample
V_{\mathrm{next}}
Policy value at the end of the year (t+1)V—143.6868687

Applies when

  • 0 <= q < 1
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Policy value recursion: V = 100, P = 50, e = 5, i = 0.05, q = 0.01, S = 1000, E = 0
V_next = 143.6868687

Run it

Terminal
$ actuarial-science solve act_policy_value_recursion V=100 P=50 e=5 i=0.05 q=0.01 S=1000 E=0
V_next = 143.6868687
  by: Policy value recursion (one year)  ((t+1)V = [(tV + P - e)(1 + i) - q (S + E)] / (1 - q))
  V = 100
  P = 50
  e = 5
  i = 0.05
  q = 0.01
  S = 1000
  E = 0
  assumes: 0 <= q < 1; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Retrospective reserve (accumulated fund per survivor)1 fig.act_retrospective_reserve

The retrospective reserve at integer duration t of a fully discrete life insurance of S with annual premium P: the actuarial accumulated value of the premiums received less the cost of insurance, per survivor.

{}_tV = \frac{P\,\ddot a_{x:\overline{t}|} – S\,A^1_{x:\overline{t}|}}{{}_tE_x}

You give

MeaningUnitExample
q
Death probabilities q_x, q_(x+1), … for at least t years (a list) vector—[0.1, 0.2, 0.5, 1]
i
Annual effective interest rate (5% or 0.05)—0.05
S
Sum insured—1000
P
Annual premium—450
t
Policy duration in years—2

You get

MeaningUnitExample
V
Retrospective reserve tV—883.8541667
\text{tEx}
Pure endowment t_E_x—0.6530612245

Applies when

  • at least t death probabilities
  • t_p_x > 0
  • 0 < i < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Retrospective reserve: q = [0.1, 0.2, 0.5, 1], i = 0.05, S = 1000, P = 450, t = 2
V = 883.8541667
tEx = 0.6530612245

Run it

Terminal
$ actuarial-science solve act_retrospective_reserve "q=[0.1, 0.2, 0.5, 1]" i=0.05 S=1000 P=450 t=2
V = 883.8541667
tEx = 0.6530612245
  by: Retrospective reserve (accumulated fund per survivor)  (tV = (P ä_(x:t) - S A^1_(x:t)) / t_E_x)
  i = 0.05
  S = 1000
  P = 450
  assumes: at least t death probabilities; t_p_x > 0; 0 < i < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Thiele's equation: continuous endowment insurance reserve (constant forces)1 fig.act_thiele_endowment

The continuous net premium rate and the reserve at time t of an n-year endowment insurance of S paid at the moment of death or at maturity, with a constant force of mortality mu and a constant force of interest delta (the solution of Thiele's equation dV/dt = delta V + P – mu (S – V), V(n) = S).

\frac{d\,{}_tV}{dt} = \delta\,{}_tV + \bar P – \mu\left(S – {}_tV\right),\quad {}_nV = S

You give

MeaningUnitExample
\mu
Constant force of mortality per year—0.02
\delta
Constant force of interest per year—0.05
n
Term in years—20
S
Sum insured—1000
t
Time since issue in years—10

You get

MeaningUnitExample
P
Continuous annual net premium rate—42.91175725
A_{\mathrm{bar}}
Endowment insurance Ā_(x:n)—0.4618549742
a_{\mathrm{bar}}
Continuous temporary annuity ā_(x:n)—10.76290052
V
Reserve at time t—331.8122278

Applies when

  • 0 < mu, delta < 1
  • 0 < n <= 100
  • 0 <= t <= n

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Thiele's equation for endowment insurance: mu = 0.02, delta = 0.05, n = 20, S = 1000, t = 10
P = 42.91175725
A_bar = 0.4618549742
a_bar = 10.76290052
V = 331.8122278

Run it

Terminal
$ actuarial-science solve act_thiele_endowment mu=0.02 delta=0.05 n=20 S=1000 t=10
P = 42.91175725
A_bar = 0.4618549742
a_bar = 10.76290052
V = 331.8122278
  by: Thiele's equation: continuous endowment insurance reserve (constant forces)  (Ā = mu/(mu+delta)(1 - e^(-(mu+delta)n)) + e^(-(mu+delta)n); ā = (1 - e^(-(mu+delta)n))/(mu+delta); P = S Ā/ā; tV = S Ā_(n-t) - P ā_(n-t))
  mu = 0.02
  delta = 0.05
  n = 20
  S = 1000
  t = 10
  assumes: 0 < mu, delta < 1; 0 < n <= 100; 0 <= t <= n

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Risk measures 4

VaR and TVaR of a lognormal loss1 fig.act_var_tvar_lognormal

The value at risk and tail value at risk at security level p of a lognormal loss (mu, sigma of the log of the loss).

\mathrm{VaR}_p = e^{\mu+\sigma z_p},\quad \mathrm{TVaR}_p = e^{\mu+\sigma^2/2}\,\frac{\Phi(\sigma – z_p)}{1-p}

You give

MeaningUnitExample
\mu
Mean of the log of the loss—7
\sigma
Standard deviation of the log of the loss—1
p
Security level (95% or 0.95)—0.95

You get

MeaningUnitExample
\text{VaR}
Value at risk at level p (the p-quantile)—5680.835676
\text{TVaR}
Tail value at risk E[X | X > VaR]—9384.138726

Applies when

  • sigma > 0
  • 0 < p < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

VaR and TVaR of a lognormal loss: mu = 7, sigma = 1, p = 0.95
VaR = 5680.835676
TVaR = 9384.138726

Run it

Terminal
$ actuarial-science solve act_var_tvar_lognormal mu=7 sigma=1 p=0.95
VaR = 5680.835676
TVaR = 9384.138726
  by: VaR and TVaR of a lognormal loss  (VaR = exp(mu + sigma z_p); TVaR = e^(mu + sigma^2/2) Phi(sigma - z_p)/(1 - p))
  mu = 7
  sigma = 1
  p = 0.95
  assumes: sigma > 0; 0 < p < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

VaR and TVaR of a normal loss1 fig.act_var_tvar_normal

The value at risk and tail value at risk at security level p of a normally distributed loss.

\mathrm{VaR}_p = \mu+\sigma z_p,\quad \mathrm{TVaR}_p = \mu + \sigma\frac{\phi(z_p)}{1-p}

You give

MeaningUnitExample
\mu
Mean loss—1000
\sigma
Standard deviation of the loss—200
p
Security level (95% or 0.95)—0.95

You get

MeaningUnitExample
\text{VaR}
Value at risk at level p (the p-quantile)—1328.970725
\text{TVaR}
Tail value at risk E[X | X > VaR]—1412.542561

Applies when

  • sigma > 0
  • 0 < p < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

VaR and TVaR of a normal loss: mu = 1000, sigma = 200, p = 0.95
VaR = 1328.970725
TVaR = 1412.542561

Run it

Terminal
$ actuarial-science solve act_var_tvar_normal mu=1000 sigma=200 p=0.95
VaR = 1328.970725
TVaR = 1412.542561
  by: VaR and TVaR of a normal loss  (VaR = mu + sigma z_p; TVaR = mu + sigma phi(z_p)/(1 - p))
  mu = 1000
  sigma = 200
  p = 0.95
  assumes: sigma > 0; 0 < p < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

VaR and TVaR of a Pareto loss1 fig.act_var_tvar_pareto

The value at risk and tail value at risk at security level p of a two-parameter Pareto loss (alpha, theta).

\mathrm{VaR}_p = \theta\left[(1-p)^{-1/\alpha}-1\right],\quad \mathrm{TVaR}_p = \mathrm{VaR}_p + \frac{\theta+\mathrm{VaR}_p}{\alpha-1}

You give

MeaningUnitExample
\alpha
Pareto shape alpha (> 1)—3
\theta
Pareto scale theta—2000
p
Security level (95% or 0.95)—0.95

You get

MeaningUnitExample
\text{VaR}
Value at risk at level p (the p-quantile)—3428.835233
\text{TVaR}
Tail value at risk E[X | X > VaR]—6143.25285

Applies when

  • alpha > 1
  • theta > 0
  • 0 < p < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

VaR and TVaR of a Pareto loss: alpha = 3, theta = 2000, p = 0.95
VaR = 3428.835233
TVaR = 6143.25285

Run it

Terminal
$ actuarial-science solve act_var_tvar_pareto alpha=3 theta=2000 p=0.95
VaR = 3428.835233
TVaR = 6143.25285
  by: VaR and TVaR of a Pareto loss  (VaR = theta [(1-p)^(-1/alpha) - 1]; TVaR = VaR + (theta + VaR)/(alpha - 1))
  alpha = 3
  theta = 2000
  p = 0.95
  assumes: alpha > 1; theta > 0; 0 < p < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

VaR and TVaR of an exponential loss1 fig.act_var_tvar_exponential

The value at risk and tail value at risk at security level p of an exponentially distributed loss with mean theta.

\mathrm{VaR}_p = -\theta\ln(1-p),\quad \mathrm{TVaR}_p = \mathrm{VaR}_p + \theta

You give

MeaningUnitExample
\theta
Mean loss theta—1000
p
Security level (95% or 0.95)—0.95

You get

MeaningUnitExample
\text{VaR}
Value at risk at level p (the p-quantile)—2995.732274
\text{TVaR}
Tail value at risk E[X | X > VaR]—3995.732274

Applies when

  • theta > 0
  • 0 < p < 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

VaR and TVaR of an exponential loss: theta = 1000, p = 0.95
VaR = 2995.732274
TVaR = 3995.732274

Run it

Terminal
$ actuarial-science solve act_var_tvar_exponential theta=1000 p=0.95
VaR = 2995.732274
TVaR = 3995.732274
  by: VaR and TVaR of an exponential loss  (VaR = -theta ln(1 - p); TVaR = VaR + theta)
  theta = 1000
  p = 0.95
  assumes: theta > 0; 0 < p < 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Survival estimation 3

Exponential maximum-likelihood fit with censoring1 fig.act_exponential_mle

The maximum-likelihood constant hazard (deaths divided by total time observed), the mean lifetime and the fitted survival probability at time t from times with death (1) or censoring (0) indicators.

\hat\lambda = \frac{\sum_i \delta_i}{\sum_i t_i},\quad \hat S(t) = e^{-\hat\lambda t}

You give

MeaningUnitExample
\text{times}
Observed times (a list) vector—[1, 2, 2, 3, 5]
\text{events}
1 for a death or failure, 0 for censoring (a list) vector—[1, 1, 0, 1, 0]
t
Time for the fitted survival probability—3

You get

MeaningUnitExample
\text{hazard}
Maximum-likelihood hazard rate (deaths / total exposure)—0.2307692308
\text{mean}
Fitted mean lifetime—4.333333333
S
Fitted survival probability exp(-lambda t)—0.5004199204

Applies when

  • one indicator per time
  • positive times
  • at least one death

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Exponential maximum likelihood fit: times = [1, 2, 2, 3, 5], events = [1, 1, 0, 1, 0], t = 3
hazard = 0.2307692308
mean = 4.333333333
S = 0.5004199204

Run it

Terminal
$ actuarial-science solve act_exponential_mle "times=[1, 2, 2, 3, 5]" "events=[1, 1, 0, 1, 0]" t=3
hazard = 0.2307692308
mean = 4.333333333
S = 0.5004199204
  by: Exponential maximum-likelihood fit with censoring  (lambda = sum of death indicators / sum of times; S(t) = e^(-lambda t))
  t = 3
  assumes: one indicator per time; positive times; at least one death

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Kaplan-Meier product-limit survival estimate1 fig.act_kaplan_meier

The Kaplan-Meier estimate of the survival function at time t from observed times with death (1) or censoring (0) indicators; a life censored at a death time is counted at risk then.

\hat S(t) = \prod_{t_j\le t}\left(1-\frac{d_j}{n_j}\right)

You give

MeaningUnitExample
\text{times}
Observed times (a list) vector—[1, 2, 2, 3, 5]
\text{events}
1 for a death or failure, 0 for censoring (a list) vector—[1, 1, 0, 1, 0]
t
Time at which the survival is wanted—3

You get

MeaningUnitExample
S
Kaplan-Meier survival estimate S(t)—0.3
F
Estimated probability of death by t—0.7
\text{deaths}
Number of deaths observed up to t—3

Applies when

  • one indicator per time
  • positive times
  • indicators 0 or 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Kaplan-Meier estimate: times = [1, 2, 2, 3, 5], events = [1, 1, 0, 1, 0], t = 3
S = 0.3
F = 0.7
deaths = 3

Run it

Terminal
$ actuarial-science solve act_kaplan_meier "times=[1, 2, 2, 3, 5]" "events=[1, 1, 0, 1, 0]" t=3
S = 0.3
F = 0.7
deaths = 3
  by: Kaplan-Meier product-limit survival estimate  (S(t) = product over death times t_j <= t of (1 - d_j/n_j))
  t = 3
  assumes: one indicator per time; positive times; indicators 0 or 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Nelson-Aalen cumulative hazard estimate1 fig.act_nelson_aalen

The Nelson-Aalen estimate of the cumulative hazard at time t from observed times with death (1) or censoring (0) indicators, and the survival estimate exp(-H(t)).

\hat H(t) = \sum_{t_j\le t}\frac{d_j}{n_j},\quad \hat S(t) = e^{-\hat H(t)}

You give

MeaningUnitExample
\text{times}
Observed times (a list) vector—[1, 2, 2, 3, 5]
\text{events}
1 for a death or failure, 0 for censoring (a list) vector—[1, 1, 0, 1, 0]
t
Time at which the estimate is wanted—3

You get

MeaningUnitExample
H
Nelson-Aalen cumulative hazard H(t)—0.95
S
Survival estimate exp(-H(t))—0.3867410235

Applies when

  • one indicator per time
  • positive times
  • indicators 0 or 1

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Nelson-Aalen estimate: times = [1, 2, 2, 3, 5], events = [1, 1, 0, 1, 0], t = 3
H = 0.95
S = 0.3867410235

Run it

Terminal
$ actuarial-science solve act_nelson_aalen "times=[1, 2, 2, 3, 5]" "events=[1, 1, 0, 1, 0]" t=3
H = 0.95
S = 0.3867410235
  by: Nelson-Aalen cumulative hazard estimate  (H(t) = sum over death times t_j <= t of d_j/n_j)
  t = 3
  assumes: one indicator per time; positive times; indicators 0 or 1

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Survival models 4

Constant force of mortality (exponential lifetime)2 fig.act_constant_force_mortality

Survival and death probabilities, the complete and curtate expectations of life and the variance of the future lifetime when the force of mortality mu is constant.

{}_tp_x = e^{-\mu t},\quad \mathring e_x = \frac1\mu,\quad e_x = \frac{e^{-\mu}}{1-e^{-\mu}}

You give

MeaningUnitExample
\mu
Constant force of mortality per year—0.02
t
Number of years—10

You get

MeaningUnitExample
\text{tpx}
Probability of surviving t years—0.8187307531
\text{tqx}
Probability of dying within t years—0.1812692469
e_{\mathrm{complete}}
Complete expectation 1/mu—50
e_{\mathrm{curtate}}
Curtate expectation p/(1-p)—49.50166666
\text{var\_T}
Variance of the future lifetime 1/mu^2—2500

Applies when

  • 0 < mu < 5
  • t >= 0

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Constant force of mortality: mu = 0.02, t = 10
tpx = 0.8187307531
tqx = 0.1812692469
e_complete = 50
e_curtate = 49.50166666
var_T = 2500

Run it

Terminal
$ actuarial-science solve act_constant_force_mortality mu=0.02 t=10
tpx = 0.8187307531
tqx = 0.1812692469
e_complete = 50
e_curtate = 49.50166666
var_T = 2500
  by: Constant force of mortality (exponential lifetime)  (t_p_x = e^(-mu t); e° = 1/mu; e_x = e^(-mu)/(1 - e^(-mu)))
  mu = 0.02
  t = 10
  assumes: 0 < mu < 5; t >= 0

Figures

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

De Moivre's law of mortality1 fig.act_de_moivre_law

Survival and death probabilities, the force of mortality, the complete expectation of life and the variance of the future lifetime under de Moivre's law (uniform future lifetime up to the limiting age omega).

{}_tp_x = \frac{\omega-x-t}{\omega-x},\ \mu_{x+t} = \frac{1}{\omega-x-t},\ \mathring e_x = \frac{\omega-x}{2}

You give

MeaningUnitExample
\omega
Limiting age omega (years)—100
x
Age of the life (years)—40
t
Number of years—10

You get

MeaningUnitExample
\text{tpx}
Probability of surviving t years—0.8333333333
\text{tqx}
Probability of dying within t years—0.1666666667
\mu
Force of mortality at age x+t—0.02
e_{\mathrm{complete}}
Complete expectation of life e°_x—30
\text{var\_T}
Variance of the future lifetime—300

Applies when

  • 0 <= x < omega
  • 0 <= t < omega – x

Outside these conditions it says what is wrong instead of returning a number.

Worked example

De Moivre's law: omega = 100, x = 40, t = 10
tpx = 0.8333333333
tqx = 0.1666666667
mu = 0.02
e_complete = 30
var_T = 300

Run it

Terminal
$ actuarial-science solve act_de_moivre_law omega=100 x=40 t=10
tpx = 0.8333333333
tqx = 0.1666666667
mu = 0.02
e_complete = 30
var_T = 300
  by: De Moivre's law of mortality  (t_p_x = (omega - x - t)/(omega - x); mu_(x+t) = 1/(omega - x - t); e°_x = (omega - x)/2; Var T = (omega - x)^2/12)
  omega = 100
  x = 40
  t = 10
  assumes: 0 <= x < omega; 0 <= t < omega - x

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Gompertz's law of mortality1 fig.act_gompertz_law

Survival and death probabilities, the force of mortality at x and x+t and the complete expectation of life under Gompertz's law mu_x = B c^x.

\mu_x = Bc^x,\quad {}_tp_x = \exp\!\left(-\frac{Bc^x(c^t-1)}{\ln c}\right)

You give

MeaningUnitExample
B
Gompertz B (per year)—0.0003
c
Gompertz c (> 1)—1.07
x
Age of the life (years)—50
t
Number of years—10

You get

MeaningUnitExample
\text{tpx}
Probability of surviving t years—0.8813304297
\text{tqx}
Probability of dying within t years—0.1186695703
\mu_{x}
Force of mortality at age x—0.008837107519
\mu_{\mathrm{xt}}
Force of mortality at age x+t—0.01738392805
e_{\mathrm{complete}}
Complete expectation of life e°_x—26.69114361

Applies when

  • 0 < B < 0.1
  • 1 < c < 1.5
  • 0 <= x <= 120
  • 0 <= t <= 100

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Gompertz's law: B = 0.0003, c = 1.07, x = 50, t = 10
tpx = 0.8813304297
tqx = 0.1186695703
mu_x = 0.008837107519
mu_xt = 0.01738392805
e_complete = 26.69114361

Run it

Terminal
$ actuarial-science solve act_gompertz_law B=0.0003 c=1.07 x=50 t=10
tpx = 0.8813304297
tqx = 0.1186695703
mu_x = 0.008837107519
mu_xt = 0.01738392805
e_complete = 26.69114361
  by: Gompertz's law of mortality  (t_p_x = exp(-B c^x (c^t - 1)/ln c); e°_x = integral of t_p_x (Gauss-Legendre))
  B = 0.0003
  c = 1.07
  x = 50
  t = 10
  assumes: 0 < B < 0.1; 1 < c < 1.5; 0 <= x <= 120; 0 <= t <= 100

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Makeham's law of mortality1 fig.act_makeham_law

Survival and death probabilities, the force of mortality at x and x+t and the complete expectation of life under Makeham's law mu_x = A + B c^x.

\mu_x = A + Bc^x,\quad {}_tp_x = \exp\!\left(-At – \frac{Bc^x(c^t-1)}{\ln c}\right),\quad \mathring e_x = \int_0^\infty {}_tp_x\,dt

You give

MeaningUnitExample
A
Makeham's age-independent term A (per year)—0.00022
B
Makeham's B (per year)—2.7e-06
c
Makeham's c (> 1)—1.124
x
Age of the life (years)—60
t
Number of years—10

You get

MeaningUnitExample
\text{tpx}
Probability of surviving t years—0.942549208
\text{tqx}
Probability of dying within t years—0.05745079201
\mu_{x}
Force of mortality at age x—0.00322152827
\mu_{\mathrm{xt}}
Force of mortality at age x+t—0.009880632256
e_{\mathrm{complete}}
Complete expectation of life e°_x—27.20968666

Applies when

  • 0 <= A < 0.1
  • 0 < B < 0.1
  • 1 < c < 1.5
  • 0 <= x <= 120
  • 0 <= t <= 100

Outside these conditions it says what is wrong instead of returning a number.

Worked example

Makeham's law: A = 0.00022, B = 2.7e-06, c = 1.124, x = 60, t = 10
tpx = 0.942549208
tqx = 0.05745079201
mu_x = 0.00322152827
mu_xt = 0.009880632256
e_complete = 27.20968666

Run it

Terminal
$ actuarial-science solve act_makeham_law A=0.00022 B=2.7e-06 c=1.124 x=60 t=10
tpx = 0.942549208
tqx = 0.05745079201
mu_x = 0.00322152827
mu_xt = 0.009880632256
e_complete = 27.20968666
  by: Makeham's law of mortality  (t_p_x = exp(-A t - B c^x (c^t - 1)/ln c); e°_x = integral of t_p_x (Gauss-Legendre))
  A = 0.00022
  B = 2.7e-06
  c = 1.124
  x = 60
  t = 10
  assumes: 0 <= A < 0.1; 0 < B < 0.1; 1 < c < 1.5; 0 <= x <= 120; 0 <= t <= 100

Figure

Each figure varies one input around the worked example and recomputes the result at every point. Press Compute above and they are redrawn for your own inputs.

Figures

Computed, not drawn by hand

Every point in these figures is an answer of the model: one input is varied, the others are held at the worked example, and the curve shows how the result responds. The marked point is the worked example itself.

Annuity-certain present and accumulated values

a_{\overline{n}|} = \frac{1-v^n}{i},\ \ddot a_{\overline{n}|} = \frac{1-v^n}{d},\ s_{\overline{n}|} = \frac{(1+i)^n-1}{i},\ \bar a_{\overline{n}|} = \frac{1-v^n}{\delta}
a_n against n: Annuity-certain present and accumulated valuesa_n (present value of an annuity-immediate a_n) against n (number of annual payments (term in years)), with i = 0.05. 12 points computed by actuarial-science-ai999x; marked: n = 10, a_n = 7.72173.51015468107.72173 n — number of annual payments (term in years)a_n
a_n (present value of an annuity-immediate a_n) against n (number of annual payments (term in years)), with i = 0.05. 12 points computed by actuarial-science-ai999x; marked: n = 10, a_n = 7.72173.

Ordinary deductible with Pareto losses

E[X\wedge d] = \frac{\theta}{\alpha-1}\left[1-\left(\frac{\theta}{\theta+d}\right)^{\alpha-1}\right],\quad e(d) = \frac{\theta+d}{\alpha-1}
per_loss against alpha: Ordinary deductible with Pareto lossesper_loss (expected payment per loss E[(X – d)+]) against alpha (Pareto shape alpha (> 1)), with d = 500, theta = 2000. 31 points computed by actuarial-science-ai999x; marked: alpha = 3, per_loss = 640.2340100020003000640 alpha — Pareto shape alpha (> 1)per_loss
per_loss (expected payment per loss E[(X – d)+]) against alpha (Pareto shape alpha (> 1)), with d = 500, theta = 2000. 31 points computed by actuarial-science-ai999x; marked: alpha = 3, per_loss = 640.

Limited fluctuation full credibility standard for claim counts

n_F = \left(\frac{z_{(1+p)/2}}{k}\right)^2
n_full against p: Limited fluctuation full credibility standard for claim countsn_full (expected claims needed for full credibility (z/k)^2) against p (probability level (90% or 0.9)), with k = 0.05. 19 points computed by actuarial-science-ai999x; marked: p = 0.9, n_full = 1082.22.0.60.80100020001082.22 p — probability level (90% or 0.9)n_full
n_full (expected claims needed for full credibility (z/k)^2) against p (probability level (90% or 0.9)), with k = 0.05. 19 points computed by actuarial-science-ai999x; marked: p = 0.9, n_full = 1082.22.

Associated single decrement rates from a multiple decrement table (UDD)

q'^{(j)}_x = 1 – \left(p^{(\tau)}_x\right)^{q^{(j)}_x/q^{(\tau)}_x}
q1_single against q1: Associated single decrement rates from a multiple decrement table (UDD)q1_single (associated single decrement probability q'(1)) against q1 (probability of leaving by decrement 1 within the year q(1)), with q2 = 0.2. 31 points computed by actuarial-science-ai999x; marked: q1 = 0.1, q1_single = 0.112096.0.050.0750.10.1250.150.050.10.150.112096 q1 — probability of leaving by decrement 1 within the year q(1)q1_single
q1_single (associated single decrement probability q'(1)) against q1 (probability of leaving by decrement 1 within the year q(1)), with q2 = 0.2. 31 points computed by actuarial-science-ai999x; marked: q1 = 0.1, q1_single = 0.112096.
Questions

Frequently asked

What does actuarial-science-ai999x do?

Actuarial Science and Insurance answers questions in actuarial science and insurance: life tables and survival models, life insurances and annuities, net and gross premiums, reserves and Thiele's equation, interest theory, loss models with deductibles and limits, Panjer's recursion, VaR and TVaR, credibility and loss reserving (chain-ladder, Bornhuetter-Ferguson, Cape Cod, Mack). Each answer gives the value with its unit, the steps and the formula in LaTeX.

Is there a desktop app or a command-line program?

Yes, both, for Windows and Linux, in their next release: the AI999X desktop app holds all AI999X models in one window, and the command-line bundle one program per model (actuarial-science for this one). Until then this model runs in your browser on this page. Downloads and checksums: https://www.ai999x.com/desktop-cli/

How do I install actuarial-science-ai999x?

With pip: pip install actuarial-science-ai999x. The same files are on Hugging Face (hf download AI999X/actuarial-science-ai999x –local-dir actuarial-science-ai999x) and GitHub.

Does it run offline?

Yes. It is a Python package that runs on an ordinary CPU without a network connection (Python >=3.10); no GPU and no API key are needed.

How many capabilities does actuarial-science-ai999x have?

91 capabilities in 15 topics, including Loss models, Interest theory, Life tables, Reserves, Credibility.

Which field and tasks does it cover?

Field: Economics & Finance. Tasks: Question Answering, Sentence Similarity, Feature Extraction.

What does an answer look like?

Asked "Net premium for whole life insurance: q = [0.1, 0.2, 0.5, 1], i = 5%, S = 1000", it answers: P = 306.842, A = 0.865658, a_due = 2.82119.

What happens when a question cannot be answered?

It says so and names what is missing or out of range, instead of guessing a number.

More from AI999X

Explore every model.