Life Module

The life module provides tools for life insurance calculations including assurance, annuities, and reserves.

Life Module

Life assurance, annuities, reserves, and premium calculations.

This module provides tools for: - Life assurance calculations - Annuity pricing and valuation - Reserve calculations - Premium determination - Policy value calculations

class actuneo.life.Annuities(mortality_table: MortalityTable | None = None, interest_rate: float = 0.05)[source]

Bases: object

A class for calculating various types of annuities and annuity values.

__init__(mortality_table: MortalityTable | None = None, interest_rate: float = 0.05)[source]

Initialize Annuities calculator.

Parameters:
  • mortality_table – MortalityTable instance (None for deterministic annuities)

  • interest_rate – Annual interest rate for discounting

annuity_certain_with_life_contingency(x: int, n: int, payment: float = 1.0) float[source]

Calculate present value of annuity certain with life contingency.

Parameters:
  • x – Age

  • n – Certain period

  • payment – Annual payment amount

Returns:

Present value of annuity certain with life contingency

annuity_due(periods: int, payment: float = 1.0) float[source]

Calculate present value of annuity-due.

Parameters:
  • periods – Number of periods

  • payment – Periodic payment amount

Returns:

Present value of annuity-due

annuity_with_withdrawal(principal: float, withdrawal_rate: float, periods: int | None = None) dict[source]

Calculate annuity payments from principal with systematic withdrawals.

Parameters:
  • principal – Initial principal amount

  • withdrawal_rate – Annual withdrawal rate (decimal)

  • periods – Number of periods (None for perpetual)

Returns:

Dictionary with payment amount, remaining principal, etc.

contingent_annuity(x: int, y: int, payment: float = 1.0) float[source]

Calculate present value of contingent annuity.

Parameters:
  • x – Age of annuitant

  • y – Age of contingent beneficiary

  • payment – Annual payment amount

Returns:

Present value of contingent annuity

decreasing_annuity(periods: int, payment: float = 1.0, decrease_rate: float = 1.0) float[source]

Calculate present value of decreasing annuity.

Parameters:
  • periods – Number of periods

  • payment – Initial payment amount

  • decrease_rate – Rate of decrease per period

Returns:

Present value of decreasing annuity

deferred_life_annuity(x: int, u: int, payment: float = 1.0) float[source]

Calculate present value of deferred life annuity.

Parameters:
  • x – Age

  • u – Deferment period

  • payment – Annual payment amount

Returns:

Present value of deferred life annuity

guaranteed_annuity(x: int, n: int, payment: float = 1.0) float[source]

Calculate present value of guaranteed annuity.

Parameters:
  • x – Age

  • n – Guarantee period

  • payment – Annual payment amount

Returns:

Present value of guaranteed annuity

immediate_annuity(periods: int, payment: float = 1.0) float[source]

Calculate present value of immediate annuity.

Parameters:
  • periods – Number of periods

  • payment – Periodic payment amount

Returns:

Present value of immediate annuity

increasing_annuity(periods: int, payment: float = 1.0, increase_rate: float = 1.0) float[source]

Calculate present value of increasing annuity.

Parameters:
  • periods – Number of periods

  • payment – Initial payment amount

  • increase_rate – Rate of increase per period

Returns:

Present value of increasing annuity

joint_life_annuity(x: int, y: int, payment: float = 1.0) float[source]

Calculate present value of joint life annuity (last survivor).

Parameters:
  • x – Age of first life

  • y – Age of second life

  • payment – Annual payment amount

Returns:

Present value of joint life annuity

life_annuity_due(x: int, payment: float = 1.0) float[source]

Calculate present value of life annuity-due.

Parameters:
  • x – Age

  • payment – Annual payment amount

Returns:

Present value of life annuity-due

life_annuity_immediate(x: int, payment: float = 1.0) float[source]

Calculate present value of immediate life annuity.

Parameters:
  • x – Age

  • payment – Annual payment amount

Returns:

Present value of immediate life annuity

temporary_life_annuity_due(x: int, n: int, payment: float = 1.0) float[source]

Calculate present value of temporary life annuity-due.

Parameters:
  • x – Age

  • n – Number of years

  • payment – Annual payment amount

Returns:

Present value of temporary life annuity-due

temporary_life_annuity_immediate(x: int, n: int, payment: float = 1.0) float[source]

Calculate present value of temporary immediate life annuity.

Parameters:
  • x – Age

  • n – Number of years

  • payment – Annual payment amount

Returns:

Present value of temporary immediate life annuity

class actuneo.life.LifeAssurance(mortality_table: MortalityTable, interest_rate: float = 0.05, expense_loading: float = 0.0)[source]

Bases: object

A class for calculating life assurance premiums, reserves, and values.

__init__(mortality_table: MortalityTable, interest_rate: float = 0.05, expense_loading: float = 0.0)[source]

Initialize LifeAssurance calculator.

Parameters:
  • mortality_table – MortalityTable instance

  • interest_rate – Annual interest rate for discounting

  • expense_loading – Expense loading as percentage of premium

annual_premium(net_single_premium: float, annuity_factor: float, gross_margin: float = 0.0) float[source]

Calculate annual premium using annuity factor.

Parameters:
  • net_single_premium – Net single premium

  • annuity_factor – Annuity factor for premium payments

  • gross_margin – Additional margin for expenses and profit

Returns:

Annual premium

contingent_assurance(x: int, y: int, n: int) float[source]

Calculate net single premium for contingent assurance (last survivor).

Parameters:
  • x – Age of first life

  • y – Age of second life

  • n – Term in years

Returns:

Net single premium for contingent assurance

deferred_assurance(x: int, u: int, n: int) float[source]

Calculate net single premium for deferred assurance.

Parameters:
  • x – Age at entry

  • u – Deferment period in years

  • n – Assurance term in years

Returns:

Net single premium for deferred assurance

endowment_assurance(x: int, n: int) float[source]

Calculate net single premium for endowment assurance.

Parameters:
  • x – Age at entry

  • n – Term of assurance in years

Returns:

Net single premium for endowment assurance

gross_premium(net_premium: float, initial_expenses: float = 0.0) float[source]

Calculate gross premium including loadings.

Parameters:
  • net_premium – Net single premium

  • initial_expenses – Initial expense loading

Returns:

Gross premium

joint_life_assurance(x: int, y: int) float[source]

Calculate net single premium for joint life assurance.

Parameters:
  • x – Age of first life

  • y – Age of second life

Returns:

Net single premium for joint life assurance

pure_endowment(x: int, n: int) float[source]

Calculate net single premium for pure endowment.

Parameters:
  • x – Age at entry

  • n – Term in years

Returns:

Net single premium for pure endowment

reserve_endowment(x: int, n: int, duration: int) float[source]

Calculate prospective reserve for endowment assurance.

Parameters:
  • x – Original age at entry

  • n – Original term

  • duration – Number of years policy has been in force

Returns:

Prospective reserve

reserve_term(x: int, n: int, duration: int) float[source]

Calculate prospective reserve for term assurance.

Parameters:
  • x – Original age at entry

  • n – Original term

  • duration – Number of years policy has been in force

Returns:

Prospective reserve

reserve_whole_life(x: int, duration: int) float[source]

Calculate prospective reserve for whole life assurance.

Parameters:
  • x – Original age at entry

  • duration – Number of years policy has been in force

Returns:

Prospective reserve

temporary_life_annuity(x: int, n: int) float[source]

Calculate net single premium for temporary life annuity.

Parameters:
  • x – Age at entry

  • n – Term in years

Returns:

Net single premium for temporary life annuity

term_assurance(x: int, n: int, discrete: bool = True) float[source]

Calculate net single premium for term assurance.

Parameters:
  • x – Age at entry

  • n – Term of assurance in years

  • discrete – True for discrete model, False for continuous

Returns:

Net single premium for n-year term assurance

whole_life_annuity(x: int) float[source]

Calculate net single premium for whole life annuity.

Parameters:

x – Age at entry

Returns:

Net single premium for whole life annuity

whole_life_assurance(x: int, discrete: bool = True) float[source]

Calculate net single premium for whole life assurance.

Parameters:
  • x – Age at entry

  • discrete – True for discrete model, False for continuous

Returns:

Net single premium for whole life assurance

class actuneo.life.Reserves(mortality_table: MortalityTable, interest_rate: float = 0.05, expense_rate: float = 0.0, profit_margin: float = 0.0)[source]

Bases: object

A class for calculating policy reserves and actuarial valuations.

__init__(mortality_table: MortalityTable, interest_rate: float = 0.05, expense_rate: float = 0.0, profit_margin: float = 0.0)[source]

Initialize Reserves calculator.

Parameters:
  • mortality_table – MortalityTable instance

  • interest_rate – Annual interest rate for discounting

  • expense_rate – Annual expense rate as percentage of premium

  • profit_margin – Required profit margin

contingency_reserve(base_reserve: float, risk_factor: float = 0.05) float[source]

Calculate contingency reserve for adverse deviations.

Parameters:
  • base_reserve – Base mathematical reserve

  • risk_factor – Risk factor for contingency

Returns:

Contingency reserve

gross_reserve(net_reserve: float, duration: int, expense_reserve: float | None = None) float[source]

Calculate gross reserve including expenses and contingencies.

Parameters:
  • net_reserve – Net mathematical reserve

  • duration – Duration in years

  • expense_reserve – Additional expense reserve

Returns:

Gross reserve

net_level_premium_reserve(x: int, duration: int, net_premium: float, sum_assured: float = 1000.0) float[source]

Calculate net level premium reserve.

Parameters:
  • x – Original age at entry

  • duration – Number of years in force

  • net_premium – Net level annual premium

  • sum_assured – Sum assured amount

Returns:

Net level premium reserve

prospective_reserve_endowment(x: int, n: int, duration: int, annual_premium: float, sum_assured: float = 1000.0) float[source]

Calculate prospective reserve for endowment assurance.

Parameters:
  • x – Original age at entry

  • n – Original term

  • duration – Number of years in force

  • annual_premium – Annual premium amount

  • sum_assured – Sum assured amount

Returns:

Prospective reserve

prospective_reserve_term(x: int, n: int, duration: int, annual_premium: float, sum_assured: float = 1000.0) float[source]

Calculate prospective reserve for term assurance.

Parameters:
  • x – Original age at entry

  • n – Original term

  • duration – Number of years in force

  • annual_premium – Annual premium amount

  • sum_assured – Sum assured amount

Returns:

Prospective reserve

prospective_reserve_whole_life(x: int, duration: int, annual_premium: float, sum_assured: float = 1000.0) float[source]

Calculate prospective reserve for whole life assurance.

Parameters:
  • x – Original age at entry

  • duration – Number of years in force

  • annual_premium – Annual premium amount

  • sum_assured – Sum assured amount

Returns:

Prospective reserve

reserve_distribution(reserves: List[float], total_portfolio_value: float) Dict[str, float][source]

Analyze reserve distribution across portfolio.

Parameters:
  • reserves – List of individual policy reserves

  • total_portfolio_value – Total portfolio value

Returns:

Dictionary with distribution statistics

reserve_release(initial_reserve: float, final_reserve: float, duration: int) float[source]

Calculate reserve release over a period.

Parameters:
  • initial_reserve – Reserve at start of period

  • final_reserve – Reserve at end of period

  • duration – Duration in years

Returns:

Reserve release amount

retrospective_reserve_whole_life(x: int, duration: int, annual_premium: float, sum_assured: float = 1000.0) float[source]

Calculate retrospective reserve for whole life assurance.

Parameters:
  • x – Original age at entry

  • duration – Number of years in force

  • annual_premium – Annual premium amount

  • sum_assured – Sum assured amount

Returns:

Retrospective reserve

terminal_reserve(x: int, n: int, sum_assured: float = 1000.0) float[source]

Calculate terminal reserve (reserve at maturity).

Parameters:
  • x – Original age at entry

  • n – Term of policy

  • sum_assured – Sum assured amount

Returns:

Terminal reserve (should be sum assured for endowment)

zillmerized_reserve(net_reserve: float, initial_expenses: float, duration: int, amortization_period: int = 10) float[source]

Calculate Zillmerized reserve (reserve net of unamortized acquisition costs).

Parameters:
  • net_reserve – Net mathematical reserve

  • initial_expenses – Initial acquisition expenses

  • duration – Duration in years

  • amortization_period – Period over which to amortize expenses

Returns:

Zillmerized reserve

LifeAssurance

class actuneo.life.LifeAssurance(mortality_table: MortalityTable, interest_rate: float = 0.05, expense_loading: float = 0.0)[source]

Bases: object

A class for calculating life assurance premiums, reserves, and values.

__init__(mortality_table: MortalityTable, interest_rate: float = 0.05, expense_loading: float = 0.0)[source]

Initialize LifeAssurance calculator.

Parameters:
  • mortality_table – MortalityTable instance

  • interest_rate – Annual interest rate for discounting

  • expense_loading – Expense loading as percentage of premium

annual_premium(net_single_premium: float, annuity_factor: float, gross_margin: float = 0.0) float[source]

Calculate annual premium using annuity factor.

Parameters:
  • net_single_premium – Net single premium

  • annuity_factor – Annuity factor for premium payments

  • gross_margin – Additional margin for expenses and profit

Returns:

Annual premium

contingent_assurance(x: int, y: int, n: int) float[source]

Calculate net single premium for contingent assurance (last survivor).

Parameters:
  • x – Age of first life

  • y – Age of second life

  • n – Term in years

Returns:

Net single premium for contingent assurance

deferred_assurance(x: int, u: int, n: int) float[source]

Calculate net single premium for deferred assurance.

Parameters:
  • x – Age at entry

  • u – Deferment period in years

  • n – Assurance term in years

Returns:

Net single premium for deferred assurance

endowment_assurance(x: int, n: int) float[source]

Calculate net single premium for endowment assurance.

Parameters:
  • x – Age at entry

  • n – Term of assurance in years

Returns:

Net single premium for endowment assurance

gross_premium(net_premium: float, initial_expenses: float = 0.0) float[source]

Calculate gross premium including loadings.

Parameters:
  • net_premium – Net single premium

  • initial_expenses – Initial expense loading

Returns:

Gross premium

joint_life_assurance(x: int, y: int) float[source]

Calculate net single premium for joint life assurance.

Parameters:
  • x – Age of first life

  • y – Age of second life

Returns:

Net single premium for joint life assurance

pure_endowment(x: int, n: int) float[source]

Calculate net single premium for pure endowment.

Parameters:
  • x – Age at entry

  • n – Term in years

Returns:

Net single premium for pure endowment

reserve_endowment(x: int, n: int, duration: int) float[source]

Calculate prospective reserve for endowment assurance.

Parameters:
  • x – Original age at entry

  • n – Original term

  • duration – Number of years policy has been in force

Returns:

Prospective reserve

reserve_term(x: int, n: int, duration: int) float[source]

Calculate prospective reserve for term assurance.

Parameters:
  • x – Original age at entry

  • n – Original term

  • duration – Number of years policy has been in force

Returns:

Prospective reserve

reserve_whole_life(x: int, duration: int) float[source]

Calculate prospective reserve for whole life assurance.

Parameters:
  • x – Original age at entry

  • duration – Number of years policy has been in force

Returns:

Prospective reserve

temporary_life_annuity(x: int, n: int) float[source]

Calculate net single premium for temporary life annuity.

Parameters:
  • x – Age at entry

  • n – Term in years

Returns:

Net single premium for temporary life annuity

term_assurance(x: int, n: int, discrete: bool = True) float[source]

Calculate net single premium for term assurance.

Parameters:
  • x – Age at entry

  • n – Term of assurance in years

  • discrete – True for discrete model, False for continuous

Returns:

Net single premium for n-year term assurance

whole_life_annuity(x: int) float[source]

Calculate net single premium for whole life annuity.

Parameters:

x – Age at entry

Returns:

Net single premium for whole life annuity

whole_life_assurance(x: int, discrete: bool = True) float[source]

Calculate net single premium for whole life assurance.

Parameters:
  • x – Age at entry

  • discrete – True for discrete model, False for continuous

Returns:

Net single premium for whole life assurance

Annuities

class actuneo.life.Annuities(mortality_table: MortalityTable | None = None, interest_rate: float = 0.05)[source]

Bases: object

A class for calculating various types of annuities and annuity values.

__init__(mortality_table: MortalityTable | None = None, interest_rate: float = 0.05)[source]

Initialize Annuities calculator.

Parameters:
  • mortality_table – MortalityTable instance (None for deterministic annuities)

  • interest_rate – Annual interest rate for discounting

annuity_certain_with_life_contingency(x: int, n: int, payment: float = 1.0) float[source]

Calculate present value of annuity certain with life contingency.

Parameters:
  • x – Age

  • n – Certain period

  • payment – Annual payment amount

Returns:

Present value of annuity certain with life contingency

annuity_due(periods: int, payment: float = 1.0) float[source]

Calculate present value of annuity-due.

Parameters:
  • periods – Number of periods

  • payment – Periodic payment amount

Returns:

Present value of annuity-due

annuity_with_withdrawal(principal: float, withdrawal_rate: float, periods: int | None = None) dict[source]

Calculate annuity payments from principal with systematic withdrawals.

Parameters:
  • principal – Initial principal amount

  • withdrawal_rate – Annual withdrawal rate (decimal)

  • periods – Number of periods (None for perpetual)

Returns:

Dictionary with payment amount, remaining principal, etc.

contingent_annuity(x: int, y: int, payment: float = 1.0) float[source]

Calculate present value of contingent annuity.

Parameters:
  • x – Age of annuitant

  • y – Age of contingent beneficiary

  • payment – Annual payment amount

Returns:

Present value of contingent annuity

decreasing_annuity(periods: int, payment: float = 1.0, decrease_rate: float = 1.0) float[source]

Calculate present value of decreasing annuity.

Parameters:
  • periods – Number of periods

  • payment – Initial payment amount

  • decrease_rate – Rate of decrease per period

Returns:

Present value of decreasing annuity

deferred_life_annuity(x: int, u: int, payment: float = 1.0) float[source]

Calculate present value of deferred life annuity.

Parameters:
  • x – Age

  • u – Deferment period

  • payment – Annual payment amount

Returns:

Present value of deferred life annuity

guaranteed_annuity(x: int, n: int, payment: float = 1.0) float[source]

Calculate present value of guaranteed annuity.

Parameters:
  • x – Age

  • n – Guarantee period

  • payment – Annual payment amount

Returns:

Present value of guaranteed annuity

immediate_annuity(periods: int, payment: float = 1.0) float[source]

Calculate present value of immediate annuity.

Parameters:
  • periods – Number of periods

  • payment – Periodic payment amount

Returns:

Present value of immediate annuity

increasing_annuity(periods: int, payment: float = 1.0, increase_rate: float = 1.0) float[source]

Calculate present value of increasing annuity.

Parameters:
  • periods – Number of periods

  • payment – Initial payment amount

  • increase_rate – Rate of increase per period

Returns:

Present value of increasing annuity

joint_life_annuity(x: int, y: int, payment: float = 1.0) float[source]

Calculate present value of joint life annuity (last survivor).

Parameters:
  • x – Age of first life

  • y – Age of second life

  • payment – Annual payment amount

Returns:

Present value of joint life annuity

life_annuity_due(x: int, payment: float = 1.0) float[source]

Calculate present value of life annuity-due.

Parameters:
  • x – Age

  • payment – Annual payment amount

Returns:

Present value of life annuity-due

life_annuity_immediate(x: int, payment: float = 1.0) float[source]

Calculate present value of immediate life annuity.

Parameters:
  • x – Age

  • payment – Annual payment amount

Returns:

Present value of immediate life annuity

temporary_life_annuity_due(x: int, n: int, payment: float = 1.0) float[source]

Calculate present value of temporary life annuity-due.

Parameters:
  • x – Age

  • n – Number of years

  • payment – Annual payment amount

Returns:

Present value of temporary life annuity-due

temporary_life_annuity_immediate(x: int, n: int, payment: float = 1.0) float[source]

Calculate present value of temporary immediate life annuity.

Parameters:
  • x – Age

  • n – Number of years

  • payment – Annual payment amount

Returns:

Present value of temporary immediate life annuity

Reserves

class actuneo.life.Reserves(mortality_table: MortalityTable, interest_rate: float = 0.05, expense_rate: float = 0.0, profit_margin: float = 0.0)[source]

Bases: object

A class for calculating policy reserves and actuarial valuations.

__init__(mortality_table: MortalityTable, interest_rate: float = 0.05, expense_rate: float = 0.0, profit_margin: float = 0.0)[source]

Initialize Reserves calculator.

Parameters:
  • mortality_table – MortalityTable instance

  • interest_rate – Annual interest rate for discounting

  • expense_rate – Annual expense rate as percentage of premium

  • profit_margin – Required profit margin

contingency_reserve(base_reserve: float, risk_factor: float = 0.05) float[source]

Calculate contingency reserve for adverse deviations.

Parameters:
  • base_reserve – Base mathematical reserve

  • risk_factor – Risk factor for contingency

Returns:

Contingency reserve

gross_reserve(net_reserve: float, duration: int, expense_reserve: float | None = None) float[source]

Calculate gross reserve including expenses and contingencies.

Parameters:
  • net_reserve – Net mathematical reserve

  • duration – Duration in years

  • expense_reserve – Additional expense reserve

Returns:

Gross reserve

net_level_premium_reserve(x: int, duration: int, net_premium: float, sum_assured: float = 1000.0) float[source]

Calculate net level premium reserve.

Parameters:
  • x – Original age at entry

  • duration – Number of years in force

  • net_premium – Net level annual premium

  • sum_assured – Sum assured amount

Returns:

Net level premium reserve

prospective_reserve_endowment(x: int, n: int, duration: int, annual_premium: float, sum_assured: float = 1000.0) float[source]

Calculate prospective reserve for endowment assurance.

Parameters:
  • x – Original age at entry

  • n – Original term

  • duration – Number of years in force

  • annual_premium – Annual premium amount

  • sum_assured – Sum assured amount

Returns:

Prospective reserve

prospective_reserve_term(x: int, n: int, duration: int, annual_premium: float, sum_assured: float = 1000.0) float[source]

Calculate prospective reserve for term assurance.

Parameters:
  • x – Original age at entry

  • n – Original term

  • duration – Number of years in force

  • annual_premium – Annual premium amount

  • sum_assured – Sum assured amount

Returns:

Prospective reserve

prospective_reserve_whole_life(x: int, duration: int, annual_premium: float, sum_assured: float = 1000.0) float[source]

Calculate prospective reserve for whole life assurance.

Parameters:
  • x – Original age at entry

  • duration – Number of years in force

  • annual_premium – Annual premium amount

  • sum_assured – Sum assured amount

Returns:

Prospective reserve

reserve_distribution(reserves: List[float], total_portfolio_value: float) Dict[str, float][source]

Analyze reserve distribution across portfolio.

Parameters:
  • reserves – List of individual policy reserves

  • total_portfolio_value – Total portfolio value

Returns:

Dictionary with distribution statistics

reserve_release(initial_reserve: float, final_reserve: float, duration: int) float[source]

Calculate reserve release over a period.

Parameters:
  • initial_reserve – Reserve at start of period

  • final_reserve – Reserve at end of period

  • duration – Duration in years

Returns:

Reserve release amount

retrospective_reserve_whole_life(x: int, duration: int, annual_premium: float, sum_assured: float = 1000.0) float[source]

Calculate retrospective reserve for whole life assurance.

Parameters:
  • x – Original age at entry

  • duration – Number of years in force

  • annual_premium – Annual premium amount

  • sum_assured – Sum assured amount

Returns:

Retrospective reserve

terminal_reserve(x: int, n: int, sum_assured: float = 1000.0) float[source]

Calculate terminal reserve (reserve at maturity).

Parameters:
  • x – Original age at entry

  • n – Term of policy

  • sum_assured – Sum assured amount

Returns:

Terminal reserve (should be sum assured for endowment)

zillmerized_reserve(net_reserve: float, initial_expenses: float, duration: int, amortization_period: int = 10) float[source]

Calculate Zillmerized reserve (reserve net of unamortized acquisition costs).

Parameters:
  • net_reserve – Net mathematical reserve

  • initial_expenses – Initial acquisition expenses

  • duration – Duration in years

  • amortization_period – Period over which to amortize expenses

Returns:

Zillmerized reserve