An Actuarial Programming Language for Life Insurance and Pensions - - PowerPoint PPT Presentation

an actuarial programming language for life insurance and
SMART_READER_LITE
LIVE PREVIEW

An Actuarial Programming Language for Life Insurance and Pensions - - PowerPoint PPT Presentation

An Actuarial Programming Language for Life Insurance and Pensions David R. Christiansen 1 Klaus Grue 2 Henning Niss 2 Peter Sestoft 1 Kristjn S. Sigtryggsson 2 1 IT University of Copenhagen 2 Edlund A/S 1 / 31 Contracts have a longer


slide-1
SLIDE 1

An Actuarial Programming Language for Life Insurance and Pensions

David R. Christiansen 1 Klaus Grue 2 Henning Niss 2 Peter Sestoft 1 Kristján S. Sigtryggsson2

1IT University of Copenhagen 2Edlund A/S 1 / 31

slide-2
SLIDE 2

◮ Contracts have a longer lifespan than IT systems ◮ At any given time, multiple systems must administer a

contract

2 / 31

slide-3
SLIDE 3

Our Vision

◮ A formalized description of life insurance and pension

products

◮ Supporting automated administration and reporting ◮ Readable and manageable by humans

3 / 31

slide-4
SLIDE 4

Participants

Supported by

4 / 31

slide-5
SLIDE 5

Overview

Context AML Models Safety Status and Continuing Work

5 / 31

slide-6
SLIDE 6

Overview

Context AML Models Safety Status and Continuing Work

slide-7
SLIDE 7

Context

◮ Solvency II: new EU rules require more flexible calculations ◮ Contracts are held longer than IT systems exist ◮ Current programming tools are too slow or too difficult

6 / 31

slide-8
SLIDE 8

Reporting

7 / 31

slide-9
SLIDE 9

Reporting Solvency calculations

7 / 31

slide-10
SLIDE 10

Reporting Solvency calculations Ongoing administration

7 / 31

slide-11
SLIDE 11

Reporting Solvency calculations Ongoing administration

AML

7 / 31

slide-12
SLIDE 12

Models

Sample product

◮ Pay $1 on death before some time g ◮ Before some expiry time n, pay $1 per year while disabled ◮ Allow an unlimited number of disability diagnoses and

reentries to the workforce

Modeling risk

◮ 3-state continuous-time Markov model ◮ States: 0 active, 1 disabled, 2 dead ◮ Transition intensities: µij(t) at time t

8 / 31

slide-13
SLIDE 13

Models

0: active 1: disabled

b1(t) = 1t<n

2: dead

µ01(t) µ10(t) µ02(t) b

2(

t) = 1

t < g

µ12(t) b02( t) = 1t

< g

9 / 31

slide-14
SLIDE 14

Thiele’s Differential Equations

d dt Vj(t) =r(t)Vj(t) − bj(t) −

  • k=j

µjk(t)

  • bjk(t) + Vk (t) − Vj (t)
  • 10 / 31
slide-15
SLIDE 15

Overall Architecture

Calculation Kernel Other solvers: cloud, GPU, etc. (next talk) ODEs AML Other descriptions

11 / 31

slide-16
SLIDE 16

Overview

Context AML Models Safety Status and Continuing Work

slide-17
SLIDE 17

AML Models

◮ Separate risk models from product definitions ◮ Define transformations on products and risk models ◮ Generate ODEs from the flexible, readable models ◮ Allow fast experimentation with new products

12 / 31

slide-18
SLIDE 18

Whole-Life Insurance

0: alive 1: dead

µ01(t) b01(t) = 1 Upon death of insured, pay $1. Intensity of mortality is µ01(t).

13 / 31

slide-19
SLIDE 19

AML : Whole-Life Insurance

alive dead

b01(t) = 1

alive dead

µ01(t) Separate payment from risk information and name the states.

14 / 31

slide-20
SLIDE 20

State Models

alive dead

statemodel LifeDeath(p : Person) where states = alive dead transitions = alive -> dead

15 / 31

slide-21
SLIDE 21

Risk Models

riskmodel RiskLifeDeath(p : Person) : LifeDeath(p) where intensities = alive -> dead by gompertzMakehamDeath(p) ◮ Risk models give transition intensities ◮ Here information about the insured is used to calculate the

intensities

◮ RiskLifeDeath is defined inside LifeDeath

16 / 31

slide-22
SLIDE 22

Whole-Life Insurance in AML

product WholeLifeInsurance(p : Person) : LifeDeath(p) where

  • bligations =

pay $1 when(alive -> dead) ◮ Products consist of payment specifications ◮ Payment specifications determine who will pay what when,

and under which circumstances

17 / 31

slide-23
SLIDE 23

Calculation Bases

basis BasisLifeDeath(p : Person) : LifeDeath(p) where riskModel = RiskLifeDeath(p) interestRate = constant(0.05) maxtime = p.BirthDate + 120

◮ A basis contains everything needed to compute a reserve ◮ The interest rate is an arbitrary function, and the constant

  • perator creates a constant function

◮ Some bases will have more information for products that

need additional phenomena modeled

18 / 31

slide-24
SLIDE 24

Computing Reserves

value jane : Person = Person("Jane", TimePoint(2000,1,1), Female) value r : Money = reserve(TimePoint(2030, 1, 1), alive, WholeLifeInsurance(jane), BasisLifeDeath(jane))

◮ jane represents a customer: name, birthdate, and sex ◮ reserve calculates a reserve at some time for some state,

from a product and a basis

19 / 31

slide-25
SLIDE 25

Reserves for Whole Life Insurance

0,2 0,4 0,6 0,8 2030 2040 2050 2060 2070 2080 2090 2100 2110 2120

V alive (r) V dead (r)

20 / 31

slide-26
SLIDE 26

Real-World Payments

statemodel Riskless where states = noMatterWhen

21 / 31

slide-27
SLIDE 27

Real-World Payments

statemodel Riskless where states = noMatterWhen product RDA(start: TimePoint, expiry: TimePoint) : Riskless where

  • bligations =

at t pay $1 per year provided(start < t < expiry)

21 / 31

slide-28
SLIDE 28

Real-World Payments

statemodel Riskless where states = noMatterWhen product RDA(start: TimePoint, expiry: TimePoint) : Riskless where

  • bligations =

at t pay $1 per year provided(start < t < expiry) product RDA’(start: TimePoint, expiry: TimePoint) : Riskless where

  • bligations =

at t pay payments((expiry-start)*2, $1, 1/2 years, start, t)

21 / 31

slide-29
SLIDE 29

Two-Life Insurance

statemodel TwoLife where states = alive_alive | alive_dead | dead_alive | dead_dead transitions = alive_alive -> alive_dead | alive_alive -> dead_alive | alive_dead

  • > dead_dead

| dead_alive

  • > dead_dead

product TwoLifeSum : TwoLife where

  • bligations = pay $1 when(alive_alive -> alive_dead)

pay $1 when(alive_alive -> dead_alive)

22 / 31

slide-30
SLIDE 30

Expressive Power

◮ AML can represent all standard Danish reference pension

products — even those with unknown beneficiaries

product SpouseBenefits(p : Person) : LifeDeath(p) where

  • bligations = at t pay $1

when(alive -> dead) provided(married) given(married ~ basis.marriageProb(p, t))

23 / 31

slide-31
SLIDE 31

Expressive Power

function marriage(p : Person, t : TimePoint) : Dist(Bool) = boolDist(if p.Gender == Male then 0.8 else 0.55) basis SpouseBasis(p : Person) where riskModel = RiskLifeDeath(p) interestRate = constant(0.02) maxtime = p.BirthDate + 120 marriageProb = marriage

24 / 31

slide-32
SLIDE 32

Perspective

Calculation Kernel Other solvers: cloud, GPU, etc. ODEs AML Other descriptions

25 / 31

slide-33
SLIDE 33

Perspective

Calculation Kernel Other solvers ODEs AML Other Other models

25 / 31

slide-34
SLIDE 34

Overview

Context AML Models Safety Status and Continuing Work

slide-35
SLIDE 35

Domain-Specific Languages

◮ "Little languages" that support one area very well and

  • thers not at all

◮ Can be safer and faster due to special knowledge ◮ Examples: SQL, R, T

EX

26 / 31

slide-36
SLIDE 36

AML Properties

◮ Type system — prevent errors before the code is run ◮ Termination — no infinite loops ◮ Functions are mathematical functions

27 / 31

slide-37
SLIDE 37

Preventing Mistakes

Catch errors such as multiplying a date by a dollar:

value hourly : Money = $5 value hours : TimePoint = TimePoint(2014,4,3) value wage = hourly * hours

28 / 31

slide-38
SLIDE 38

Preventing Mistakes

Catch errors such as multiplying a date by a dollar:

value hourly : Money = $5 value hours : TimePoint = TimePoint(2014,4,3) value wage = hourly * hours

Catch mismatches between products, state models, and bases:

product DisabilityInsurance(p : Person) : LifeDeath(p) where

  • bligations = pay $1 provided(disabled)

28 / 31

slide-39
SLIDE 39

Preventing Mistakes

Catch errors such as multiplying a date by a dollar:

value hourly : Money = $5 value hours : TimePoint = TimePoint(2014,4,3) value wage = hourly * hours

Catch mismatches between products, state models, and bases:

product DisabilityInsurance(p : Person) : LifeDeath(p) where

  • bligations = pay $1 provided(disabled)

Even catch the wrong person:

value r : Money = reserve(TimePoint(2030, 1, 1), alive, WholeLifeInsurance(joe), BasisLifeDeath(jane))

28 / 31

slide-40
SLIDE 40

Overview

Context AML Models Safety Status and Continuing Work

slide-41
SLIDE 41

Status

◮ The Actulus calculation kernel is part of a product available

from Edlund

◮ AML has been implemented, but the type checker is not

yet ready

◮ Alternate calculation kernels from ITU and Edlund

demonstrate the flexibility of the approach

29 / 31

slide-42
SLIDE 42

Continuing Work

◮ Continued development and implementation of the AML

type system

◮ Express calculations in AML directly: accounting, solvency,

prognosis, etc.

◮ Long-term administration of AML-defined contracts ◮ Find ways to make it go faster — see next talk

30 / 31

slide-43
SLIDE 43

Come talk with us!

We appreciate your feedback! Try out AML programming at Booth 10, or drop by for questions or dicsussion.

31 / 31