生命表で純保険料を計算する
目標
生命表と予定利率で定期保険の純保険料を自分で計算し、付加保険料を上乗せして営業保険料を作ったあと、予定利率が変わると保険料がどれだけ動くかを、数字で確認します。
なぜ重要なのか
保険料は「会社が決めた値」ではなく、3つの仮定から計算される値です。どれだけ死亡したりけがをしたりするか(危険率)、受け取ったお金を運用していくら稼ぐか(予定利率)、契約を売って維持するのにいくらかかるか(事業費)。この3つを、それぞれ予定危険率・予定利率・予定事業費率と呼び、保険商品システムの商品定義は、結局、この3つの仮定の表です。
純保険料は、前の2つの仮定だけで出ます。加入金額をいつどれだけの確率で支払うことになるかを生命表から読み、それを予定利率で割り引いて現在価値にしたものが、一時払純保険料です。それを「生きている間、毎年払うもの」で割ると、年払純保険料になります。ここに事業費を上乗せしたものが、顧客が実際に払う営業保険料です。
この構造を知っていれば、現場の言葉が聞き取れます。「予定利率を0.25%ポイント下げると保険料が上がる」は、割引率が下がって現在価値が大きくなるという意味で、「この商品は付加保険料の比重が高い」は、事業費の仮定が大きいという意味です。商品システムで保険料が1ウォン違えば、どの仮定がどの場所でどう丸められたかが、答えです。
このラボのルール
- 生命表は、30–80歳の
qxで、l30 = 100000。l(x+1) = l(x) × (1 − q(x))、d(x) = l(x) × q(x)。lxは丸めない値でつないで計算し、ファイルには小数第2位まで書きます。 - 死亡は年末に起きると仮定します。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・äを小数第6位で書きますが、ステップ3のnspとステップ5–7の計算は、丸めていないA・äで行います。ファイルの6桁の値を読み直して割ると数ウォンずれ、採点は1ウォン単位まで見ます。 - 営業保険料
G = (P + α × S ÷ ä) ÷ (1 − β − γ)。Pは年払純保険料、Sは加入金額、α新契約費率、β維持費率、γ集金費率は、params.csvにあります。ウォン未満四捨五入。 - 比率は、小数第6位まで書きます。
ステップ
- 右の例にあるジェネレーターを
/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・äは、ファイルの6桁の値ではなく、丸めていない値で割ります。 - 営業保険料を
/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=の4行を書いてください。delta_pctは、1.5%の保険料が3.5%の保険料より何%大きいかを、小数第1位まで書いた値です。/root/ins/quote_report.mdに、## Premium Breakdown(保険料の構成)、## Calculation Basis(計算の根拠)、## Interest Rate Sensitivity(予定利率の感度)、## Limitations(限界と注意)の4つの節で見積説明書を書いてください。節の見出しは、英語の見出しでも、同じ意味の韓国語・日本語・中国語の見出しでもよく、両方を括弧で併記してもかまいません。
参考
- ステップ2で作った表を関数に包んでおけば、ステップ3から7までが、すべてその関数を使います。
lxを辞書として持ち回ってください。 - Pythonの
round()は.5を偶数側に送ります。ウォン未満の四捨五入はint(x + 0.5)で行ってください。 - よくある間違い1: 死亡給付の割引指数を
tにしてしまうことです。年末死亡の仮定なのでt+1です。 - よくある間違い2:
lxを小数第2位で丸めた値で翌年を計算してしまうことです。ファイルにだけ丸めます。 - よくある間違い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・äは、ファイルの6桁の値ではなく、丸めていない値で割ります。
net_annual = int(S × A ÷ ä + 0.5)、net_monthly = int(net_annual ÷ 12 + 0.5)。ファイルの6桁の値ではなく、実数の値で割ってください。
事業費を上乗せして営業保険料を作る
営業保険料を/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=の4行を書いてください。delta_pctは、1.5%の保険料が3.5%の保険料より何%大きいかを、小数第1位まで書いた値です。
ステップ5の計算を、i = 0.015、0.025、0.035で3回回してください。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(限界と注意)の4つの節で見積説明書を書いてください。節の見出しは、英語の見出しでも、同じ意味の韓国語・日本語・中国語の見出しでもよく、両方を括弧で併記してもかまいません。
節の見出し4つは、英語の見出しか、同じ意味の韓国語・日本語・中国語の見出しのとおりに。保険料の構成(Premium Breakdown)の節にはQ1の営業保険料(gross premium)と純保険料(net premium)・付加保険料(loading)を、計算の根拠(Calculation Basis)の節には予定利率(assumed interest rate)2.5%を、感度(Sensitivity)の節にはdelta_pctを、数字で書いてください。