생명표로 순보험료 계산하기
목표
생명표와 예정이율로 정기보험의 순보험료를 직접 계산하고, 부가보험료를 얹어 영업보험료를 만든 뒤, 예정이율이 바뀌면 보험료가 얼마나 움직이는지 숫자로 확인합니다.
왜 중요한가
보험료는 "회사가 정한 값" 이 아니라 세 가지 가정에서 계산되는 값입니다. 얼마나 죽거나 다치는가(위험률), 받은 돈을 굴려 얼마를 벌 것인가(예정이율), 계약을 팔고 유지하는 데 얼마가 드는가(사업비). 이 셋을 각각 예정위험률·예정이율·예정사업비율이라 부르고, 보험 상품 시스템의 상품 정의는 결국 이 세 가정의 표입니다.
순보험료는 앞의 두 가정만으로 나옵니다. 가입금액을 언제 얼마의 확률로 지급하게 될지를 생명표에서 읽고, 그것을 예정이율로 할인해 현재가치로 만든 것이 일시납 순보험료입니다. 그것을 "살아 있는 동안 매년 내는 것" 으로 나누면 연납 순보험료가 됩니다. 여기에 사업비를 얹은 것이 고객이 실제로 내는 영업보험료입니다.
이 구조를 알면 현장의 말이 들립니다. "예정이율을 0.25%p 내리면 보험료가 오른다" 는 할인율이 낮아져 현재가치가 커진다는 뜻이고, "이 상품은 부가보험료 비중이 높다" 는 사업비 가정이 크다는 뜻입니다. 상품 시스템에서 보험료가 1원 다르면 어느 가정이 어느 자리에서 어떻게 반올림됐는지가 답입니다.
이 실습의 규칙
- 생명표는 30~80세
qx이고l30 = 100000.l(x+1) = l(x) × (1 − q(x)),d(x) = l(x) × q(x).lx는 반올림하지 않은 값으로 이어 계산하고 파일에는 소수 둘째 자리까지 적습니다. - 사망은 연말에 일어난다고 가정합니다. n년 정기보험의 일시납 순보험료율(가입금액 1원당)
A = Σ(t=0..n−1) v^(t+1) × d(x+t) ÷ l(x),v = 1 ÷ (1 + i). - 기시급 연금현가
ä = Σ(t=0..n−1) v^t × l(x+t) ÷ l(x). 연납 순보험료 = 가입금액 × A ÷ ä, 원 미만 반올림. 월납은 연납 ÷ 12 반올림(실습 단순화). - 3·4단계 파일에는
A·ä를 소수 여섯째 자리로 적지만, 3단계의nsp와 5~7단계의 계산은 반올림하지 않은A·ä로 합니다. 파일의 여섯 자리 값을 다시 읽어 나누면 몇 원이 어긋나고, 채점은 1원까지 봅니다. - 영업보험료
G = (P + α × S ÷ ä) ÷ (1 − β − γ).P는 연납 순보험료,S는 가입금액,α신계약비율,β유지비율,γ수금비율은params.csv에 있습니다. 원 미만 반올림. - 비율은 소수 여섯째 자리까지 적습니다.
단계
- 오른쪽 예시의 생성기를
/root/ins/make_premium.py로 저장하고python3 make_premium.py로 실행하세요.lifetable.csv(51행),params.csv,quotes.csv(견적 5건)가 만들어집니다. /root/ins/lx.csv에age,qx,lx,dx머리글로 30~80세 51줄을 적으세요.- 견적 5건의 일시납 순보험료를
/root/ins/nsp.csv에quote_id,age,term,sum_assured,nsp_rate,nsp머리글로 적으세요.nsp_rate는 A,nsp는 가입금액 × A(반올림하지 않은 값)를 원 미만 반올림한 값입니다. - 견적 5건의 기시급 연금현가를
/root/ins/annuity.csv에quote_id,annuity_due머리글로 적으세요. - 연납·월납 순보험료를
/root/ins/net_premium.csv에quote_id,net_annual,net_monthly머리글로 적으세요.A·ä는 파일의 여섯 자리 값이 아니라 반올림하지 않은 값으로 나눕니다. - 영업보험료를
/root/ins/gross_premium.csv에quote_id,net_annual,loading,gross_annual,gross_monthly머리글로 적으세요.loading은 영업보험료에서 순보험료를 뺀 값입니다. Q1의 연납 순보험료를 예정이율 1.5%·2.5%·3.5% 로 각각 계산해/root/ins/sensitivity.txt에net_at_1.5=,net_at_2.5=,net_at_3.5=,delta_pct=네 줄을 적으세요.delta_pct는 1.5% 보험료가 3.5% 보험료보다 몇 % 큰지를 소수 첫째 자리까지 적은 값입니다./root/ins/quote_report.md에## Premium Breakdown(보험료 구성),## Calculation Basis(계산 근거),## Interest Rate Sensitivity(예정이율 민감도),## Limitations(한계와 주의) 네 절로 견적 설명서를 쓰세요. 절 제목은 영어 제목이나 같은 뜻의 한국어·일본어·중국어 제목 어느 쪽이든 되고, 둘을 괄호로 함께 적어도 됩니다.
참고
- 2단계에서 만든 표를 함수로 감싸 두면 3~7단계가 전부 그 함수를 씁니다.
lx를 딕셔너리로 들고 다니세요. - 파이썬
round()는 .5 를 짝수 쪽으로 보냅니다. 원 미만 반올림은int(x + 0.5)로 하세요. - 흔한 실수 1: 사망 급부의 할인 지수를
t로 쓰는 것. 연말 사망 가정이라t+1입니다. - 흔한 실수 2:
lx를 소수 둘째 자리로 반올림한 값으로 다음 해를 계산하는 것. 파일에만 반올림합니다. - 흔한 실수 3: 부가보험료를 순보험료의 몇 % 로 얹는 것. 유지비·수금비는 영업보험료 의 비율이라 나누기로 풀립니다.
생명표와 견적 요청 만들기
오른쪽 예시의 생성기를 /root/ins/make_premium.py 로 저장하고 python3 make_premium.py 로 실행하세요. lifetable.csv(51행), params.csv, quotes.csv(견적 5건)가 만들어집니다.
실습 안내에 있는 생성기를 /root/ins/make_premium.py 로 저장하고 python3 로 실행하세요. 손으로 고치면 뒤 단계의 숫자가 전부 어긋납니다.
사망률에서 생존자 수 만들기
/root/ins/lx.csv 에 age,qx,lx,dx 머리글로 30~80세 51줄을 적으세요.
l30 = 100000 에서 시작해 l(x+1) = l(x) × (1 − q(x)), d(x) = l(x) × q(x). 계산은 실수로 이어 가고 파일에만 %.2f 로 적으세요.
일시납 순보험료 구하기
견적 5건의 일시납 순보험료를 /root/ins/nsp.csv 에 quote_id,age,term,sum_assured,nsp_rate,nsp 머리글로 적으세요. nsp_rate 는 A, nsp 는 가입금액 × A(반올림하지 않은 값)를 원 미만 반올림한 값입니다.
A = Σ(t=0..n−1) v^(t+1) × l(x+t) × q(x+t) ÷ l(x), v = 1/1.025. 연말 사망 가정이라 지수가 t+1 입니다. nsp = int(S × A + 0.5).
보험료를 나눠 낼 때의 가치 구하기
견적 5건의 기시급 연금현가를 /root/ins/annuity.csv 에 quote_id,annuity_due 머리글로 적으세요.
ä = Σ(t=0..n−1) v^t × l(x+t) ÷ l(x). 기시급이라 첫 항은 v^0 = 1 입니다.
연납·월납 순보험료 구하기
연납·월납 순보험료를 /root/ins/net_premium.csv 에 quote_id,net_annual,net_monthly 머리글로 적으세요. A·ä 는 파일의 여섯 자리 값이 아니라 반올림하지 않은 값으로 나눕니다.
net_annual = int(S × A ÷ ä + 0.5), net_monthly = int(net_annual ÷ 12 + 0.5). 파일의 여섯 자리 값이 아니라 실수 값으로 나누세요.
사업비를 얹어 영업보험료 만들기
영업보험료를 /root/ins/gross_premium.csv 에 quote_id,net_annual,loading,gross_annual,gross_monthly 머리글로 적으세요. loading 은 영업보험료에서 순보험료를 뺀 값입니다.
G = (P + 0.01 × S ÷ ä) ÷ (1 − 0.05 − 0.03), 원 미만 반올림. P 는 5단계의 반올림된 연납 순보험료를 그대로 쓰고, loading = G − P 입니다.
예정이율을 흔들어 보험료 변화 보기
Q1 의 연납 순보험료를 예정이율 1.5%·2.5%·3.5% 로 각각 계산해 /root/ins/sensitivity.txt 에 net_at_1.5=, net_at_2.5=, net_at_3.5=, delta_pct= 네 줄을 적으세요. delta_pct 는 1.5% 보험료가 3.5% 보험료보다 몇 % 큰지를 소수 첫째 자리까지 적은 값입니다.
5단계의 계산을 i = 0.015, 0.025, 0.035 로 세 번 돌리세요. delta_pct = (net_1.5 − net_3.5) ÷ net_3.5 × 100 을 %.1f 로.
견적 설명서 쓰기
/root/ins/quote_report.md 에 ## Premium Breakdown(보험료 구성), ## Calculation Basis(계산 근거), ## Interest Rate Sensitivity(예정이율 민감도), ## Limitations(한계와 주의) 네 절로 견적 설명서를 쓰세요. 절 제목은 영어 제목이나 같은 뜻의 한국어·일본어·중국어 제목 어느 쪽이든 되고, 둘을 괄호로 함께 적어도 됩니다.
절 제목 네 개는 영어 제목이나 같은 뜻의 한국어·일본어·중국어 제목 그대로. 보험료 구성(Premium Breakdown) 절에는 Q1 의 영업보험료(gross premium)와 순보험료(net premium)·부가보험료(loading)를, 계산 근거(Calculation Basis) 절에는 예정이율(assumed interest rate) 2.5% 를, 민감도(Sensitivity) 절에는 delta_pct 를 숫자로 적으세요.