TT Lab
Blog Get started
Learn Learning paths Courses

Insurance Domain Deep Dive

Compute the Net Premium From a Mortality Table

Continue in TT Lab

Goal

You calculate a term insurance net premium directly from a life table and an assumed interest rate, add the expense loading to build the gross premium, and then confirm by numbers how much the premium moves when the assumed interest rate changes.

Why it matters

A premium is not "a value the company sets" but a value computed from three assumptions. How many die or are injured (the risk rate), how much will be earned by investing the money received (the assumed interest rate), and how much it costs to sell and maintain a contract (expenses). These three are called the assumed risk rate, the assumed interest rate, and the assumed expense ratio, and the product definition in an insurance product system is ultimately a table of these three assumptions.

The net premium comes from the first two assumptions alone. You read from the life table when and with what probability the sum insured will be paid, and discounting it at the assumed interest rate into present value gives the single-premium net premium. Dividing that by "what is paid every year while alive" gives the annual net premium. Adding expenses to it gives the gross premium the customer actually pays.

If you know this structure, you can hear what people in the field say. "If we lower the assumed interest rate by 0.25 percentage points, the premium goes up" means the discount rate falls so the present value grows, and "this product has a high share of expense loading" means the expense assumption is large. In a product system, if a premium is off by 1 won, the answer is which assumption was rounded in which place and how.

Rules of this lab

Steps

  1. Save the generator in the example on the right as /root/ins/make_premium.py and run it with python3 make_premium.py. lifetable.csv (51 rows), params.csv, and quotes.csv (5 quotes) are created.
  2. In /root/ins/lx.csv, write 51 lines for ages 30–80 with the header age,qx,lx,dx.
  3. Write the single-premium net premium for the 5 quotes in /root/ins/nsp.csv with the header quote_id,age,term,sum_assured,nsp_rate,nsp. nsp_rate is A, and nsp is the sum insured × A (the unrounded value), rounded to the nearest won.
  4. Write the annuity-due present value for the 5 quotes in /root/ins/annuity.csv with the header quote_id,annuity_due.
  5. Write the annual and monthly net premiums in /root/ins/net_premium.csv with the header quote_id,net_annual,net_monthly. Divide by the unrounded A and ä, not the six-digit values in the file.
  6. Write the gross premiums in /root/ins/gross_premium.csv with the header quote_id,net_annual,loading,gross_annual,gross_monthly. loading is the gross premium minus the net premium.
  7. Calculate Q1's annual net premium at assumed interest rates of 1.5%, 2.5%, and 3.5%, and write four lines in /root/ins/sensitivity.txt: net_at_1.5=, net_at_2.5=, net_at_3.5=, and delta_pct=. delta_pct is how many % larger the 1.5% premium is than the 3.5% premium, written to one decimal place.
  8. In /root/ins/quote_report.md, write a quote explanation in four sections: ## Premium Breakdown, ## Calculation Basis, ## Interest Rate Sensitivity, and ## Limitations. The section titles can be the English ones or titles with the same meaning in Korean, Japanese, or Chinese, and you can also write both, one in parentheses.

Notes

Create the life table and quote requests

Save the generator in the example on the right as /root/ins/make_premium.py and run it with python3 make_premium.py. lifetable.csv (51 rows), params.csv, and quotes.csv (5 quotes) are created.

Save the generator in the lab instructions as /root/ins/make_premium.py and run it with python3. If you edit it by hand, all the numbers in the later steps go off.

Build the number of survivors from the mortality rates

In /root/ins/lx.csv, write 51 lines for ages 30–80 with the header age,qx,lx,dx.

Start from l30 = 100000 and apply l(x+1) = l(x) × (1 − q(x)) and d(x) = l(x) × q(x). Continue the calculation in floating point and write with %.2f only in the file.

Find the single-premium net premium

Write the single-premium net premium for the 5 quotes in /root/ins/nsp.csv with the header quote_id,age,term,sum_assured,nsp_rate,nsp. nsp_rate is A, and nsp is the sum insured × A (the unrounded value), rounded to the nearest won.

A = Σ(t=0..n−1) v^(t+1) × l(x+t) × q(x+t) ÷ l(x), v = 1/1.025. Death is assumed at the end of the year, so the exponent is t+1. nsp = int(S × A + 0.5).

Find the value of paying the premium in installments

Write the annuity-due present value for the 5 quotes in /root/ins/annuity.csv with the header quote_id,annuity_due.

ä = Σ(t=0..n−1) v^t × l(x+t) ÷ l(x). It is annuity-due, so the first term is v^0 = 1.

Find the annual and monthly net premiums

Write the annual and monthly net premiums in /root/ins/net_premium.csv with the header quote_id,net_annual,net_monthly. Divide by the unrounded A and ä, not the six-digit values in the file.

net_annual = int(S × A ÷ ä + 0.5), net_monthly = int(net_annual ÷ 12 + 0.5). Divide using the floating-point values, not the six-digit values in the file.

Add expenses to build the gross premium

Write the gross premiums in /root/ins/gross_premium.csv with the header quote_id,net_annual,loading,gross_annual,gross_monthly. loading is the gross premium minus the net premium.

G = (P + 0.01 × S ÷ ä) ÷ (1 − 0.05 − 0.03), rounded to the nearest won. For P, use the rounded annual net premium from step 5 as it is, and loading = G − P.

Shake the assumed interest rate and watch the premium change

Calculate Q1's annual net premium at assumed interest rates of 1.5%, 2.5%, and 3.5%, and write four lines in /root/ins/sensitivity.txt: net_at_1.5=, net_at_2.5=, net_at_3.5=, and delta_pct=. delta_pct is how many % larger the 1.5% premium is than the 3.5% premium, written to one decimal place.

Run the calculation from step 5 three times with i = 0.015, 0.025, and 0.035. delta_pct = (net_1.5 − net_3.5) ÷ net_3.5 × 100, as %.1f.

Write the quote explanation

In /root/ins/quote_report.md, write a quote explanation in four sections: ## Premium Breakdown, ## Calculation Basis, ## Interest Rate Sensitivity, and ## Limitations. The section titles can be the English ones or titles with the same meaning in Korean, Japanese, or Chinese, and you can also write both, one in parentheses.

Use the four section titles exactly as given, either the English titles or titles with the same meaning in Korean, Japanese, or Chinese. In the Premium Breakdown section, write Q1's gross premium, net premium, and loading; in the Calculation Basis section, the assumed interest rate of 2.5%; and in the Sensitivity section, delta_pct, all as numbers.