責任準備金・IFRS17・ソルベンシーのパイプライン
目標
保有契約の責任準備金を、加入当時の仮定で計算し、同じ契約を現行の割引率で再評価して、IFRS17の最善推定負債・リスク調整・契約上のサービスマージンを出したあと、会社の数字で単純化した支払余力比率まで、1つのパイプラインで作ります。
なぜ重要なのか
保険会社は、今日受け取った保険料で、数十年後の約束を守ります。そのため、会計の核心の質問は「将来払うお金を、今いくらで確保しておくか」で、その答えが責任準備金です。定期保険の準備金は、将来支払う給付の現在価値から、将来受け取る純保険料の現在価値を引いた値です。契約の初期には小さく、リスクが大きくなる後半に行くほど大きくなります。
IFRS17は、同じ質問に別の答えを求めます。加入当時の仮定ではなく、今の仮定で負債を評価し(最善推定負債、BEL)、不確実性に対する補償(リスク調整、RA)を上乗せし、それでも残る未実現利益を、契約上のサービスマージン(CSM)という負債として計上しておき、契約期間にわたって分けて利益として認識します。利益を前倒しで認識できないようにする仕組みで、損失が予想される契約は、すぐに損失として計上します。
支払余力制度(K-ICS)は、会社全体を見ます。保険・市場・信用リスクを、それぞれ資本の要求量に換算して合算し、可用資本がその要求量の何%かを見ます。この3つの層、つまり原価の準備金、時価の負債、支払余力が、保険会社の決算システムの骨格で、同じ契約が、3つの層で別の数字として現れます。
このラボのルール
- 計理関数は、モジュール1と同じです。
A(x, n, i)はn年定期保険の一時払純保険料率、ä(x, n, i)はn年の期始払年金現価。経過t年時点の年齢はissue_age + elapsed、残りの期間はterm − elapsed。 - 責任準備金(原価)
V = S × A(x+t, n−t, 2.5%) − P × ä(x+t, n−t, 2.5%)、ウォン未満四捨五入。Pはinforce.csvの年払純保険料です。A・äは、ファイルに書く6桁の値ではなく、丸めていない値で掛けます(採点は1ウォン単位まで見ます)。 - 漸化式による検証:
(V_t + P) × (1 + i) = q(x+t) × S + (1 − q(x+t)) × V_(t+1)。V_(t+1)は、年齢を1つ進め、残りの期間を1つ減らして、同じ式で計算した1年後の準備金で、満期時点のV_nは0です。 - IFRS17は、当初認識時点(加入時点)で計算します。最善推定負債
BEL = S × A(x, n, 3.0%) − P × ä(x, n, 3.0%)(経過を引かない加入時の年齢と全期間)。リスク調整RA = PV(benefits) × 0.5%(給付現価の0.5%、ステップ5のpv_claims)。履行キャッシュフローFCF = BEL + RA。FCF < 0ならCSM = −FCF、損失要素0。FCF ≥ 0ならCSM = 0、損失要素 =FCF。(以降の期間のロールフォワードは、省略するラボの単純化です。) - 支払余力の要求資本
= √(I² + M² + C² + 2ρ(IM + IC + MC)) + O、I·M·C·Oはcapital.csvの保険・市場・信用・オペレーショナルリスク、ρはcorrelation。億ウォン単位で整数に四捨五入。比率 = 可用資本 ÷ 要求資本 × 100、小数第1位。 A・annuityのような計理比率は小数第6位、金額は整数で書きます。支払余力比率ratio_pctだけは小数第1位です。- 合計の行(
total_reserve・total_csm・total_loss_component)は、契約ごとに四捨五入して書いた列の合計です。
ステップ
- 右の例にあるジェネレーターを
/root/ins/make_reserve.pyとして保存し、python3 make_reserve.pyで実行してください。lifetable.csv、inforce.csv(契約5件)、params.csv、capital.csvが作られます。後のステップで使う計理関数のファイル/root/ins/act.pyも、右の例のとおりに保存してください。term_insurance(qx, lx, x, n, i)・annuity_due(qx, lx, x, n, i)が入っています。 P001の現時点の準備金を/root/ins/reserve_P001.txtにA=、annuity=、reserve=の3行で書いてください。- 契約5件すべてを
/root/ins/reserves.csvにpolicy_no,age_now,remaining,A,annuity,reserveのヘッダーで書き、/root/ins/reserves.txtにtotal_reserve=の1行(reserve列の合計)を書いてください。 - 漸化式の検証を
/root/ins/recursion_check.csvにpolicy_no,v_next,lhs,rhs,diffのヘッダーで書いてください。v_nextは1年後の準備金V_(t+1)(満期なら0)、v_next・lhs・rhsは整数に四捨五入、diffはlhs − rhsです。 - 加入時点基準で現行の割引率を適用した
/root/ins/bel.csvを、policy_no,pv_claims,pv_premiums,belのヘッダーで書いてください。 /root/ins/csm.csvにpolicy_no,bel,ra,fcf,csm,loss_componentのヘッダーで書き、/root/ins/csm.txtにtotal_csm=、total_loss_component=の2行(各列の合計)を書いてください。/root/ins/kics.txtにrequired_capital=、available_capital=、ratio_pct=、meets_100=の4行を書いてください。ratio_pctは小数第1位、meets_100はYESまたはNOです。/root/ins/valuation_report.mdに、## Policy Reserves(責任準備金)、## IFRS17 Summary(IFRS17の要約)、## Solvency(支払余力)、## Data and Regulatory Notes(データと規制上の留意事項)の4つの節で決算メモを書いてください。節の見出しは、英語の見出しでも、同じ意味の韓国語・日本語・中国語の見出しでもよく、両方を括弧で併記してもかまいません。
参考
- 計理関数は、ステップ1で右の例のとおりに
/root/ins/act.pyに保存します(モジュール1と同じファイル)。このラボではPodが新しく起動するので、モジュール1のファイルは残っていません。 - 漸化式の検証は、
V_(t+1)をA・äで別に計算したときだけ検証になります(漸化式で逆に解くと、diffは常に0です)。そうして計算してdiffが0に近ければ(±2ウォン)、準備金の計算が合っているという意味で、大きく外れるなら、Aの割引指数(t+1)や年齢の移動を疑ってください。 - よくある間違い1: BELを計算するときに、純保険料
Pも現行の利率で計算し直したり、経過を引いた年齢で計算したりすることです。Pは契約に固定された値で、当初認識は加入時点です。 - よくある間違い2: 要求資本で、オペレーショナルリスクを2乗和の中に入れてしまうことです。このラボでは、外で足します。
- よくある間違い3:
P005(経過0年)の準備金がちょうど0ではないといって直してしまうことです。Pをウォン単位で四捨五入したので、数ウォンは残ります。
保有契約と仮定を作る
右の例にあるジェネレーターを/root/ins/make_reserve.pyとして保存し、python3 make_reserve.pyで実行してください。lifetable.csv、inforce.csv(契約5件)、params.csv、capital.csvが作られます。後のステップで使う計理関数のファイル/root/ins/act.pyも、右の例のとおりに保存してください。term_insurance(qx, lx, x, n, i)・annuity_due(qx, lx, x, n, i)が入っています。
ラボの案内にあるジェネレーターを/root/ins/make_reserve.pyとして保存し、python3で実行してください。右の例の計理関数も/root/ins/act.pyとして保存してください。term_insurance(qx, lx, x, n, i)・annuity_due(qx, lx, x, n, i)の2つの関数を採点ツールが呼び出して値を確認します(このラボではPodが新しく起動するので、モジュール1のファイルは残っていません)。
契約1件の準備金を計算する
P001の現時点の準備金を/root/ins/reserve_P001.txtにA=、annuity=、reserve=の3行で書いてください。
年齢 = 35 + 5 = 40、残りの期間 = 20 − 5 = 15。A(40, 15, 2.5%)、ä(40, 15, 2.5%)を求めて、reserve = int(S × A − P × ä + 0.5)。Pはinforce.csvの198386です。
保有契約全体の準備金を出す
契約5件すべてを/root/ins/reserves.csvにpolicy_no,age_now,remaining,A,annuity,reserveのヘッダーで書き、/root/ins/reserves.txtにtotal_reserve=の1行(reserve列の合計)を書いてください。
ステップ2をinforce.csvの5行に繰り返し、reserveを合計してください。age_now = issue_age + elapsed、remaining = term − elapsed。
漸化式で準備金を検証する
漸化式の検証を/root/ins/recursion_check.csvにpolicy_no,v_next,lhs,rhs,diffのヘッダーで書いてください。v_nextは1年後の準備金V_(t+1)(満期なら0)、v_next・lhs・rhsは整数に四捨五入、diffはlhs − rhsです。
V(t+1)は、年齢を1つ進め、残りの期間を1つ減らして、同じ式で計算します(満期なら0)。lhs = (V_t + P) × 1.025、rhs = q(x+t) × S + (1 − q(x+t)) × V_(t+1)。lhs・rhsはそれぞれ真の値から±2ウォン以内である必要があり、diffは0付近になります。v_next列には、rhsに入れたV_(t+1)をウォン未満四捨五入して書きます。
現行の割引率で最善推定負債を求める
加入時点基準で現行の割引率を適用した/root/ins/bel.csvを、policy_no,pv_claims,pv_premiums,belのヘッダーで書いてください。
加入時点なので、issue_ageとtermをそのまま使い(経過を引かない)、利率はparams.csvのcurrent_rate(0.030)です。pv_claims = int(S × A + 0.5)、pv_premiums = int(P × ä + 0.5)、bel = 2つの差。Pはそのまま使います。
リスク調整と契約上のサービスマージンを分ける
/root/ins/csm.csvにpolicy_no,bel,ra,fcf,csm,loss_componentのヘッダーで書き、/root/ins/csm.txtにtotal_csm=、total_loss_component=の2行(各列の合計)を書いてください。
ra = int(pv_claims × 0.005 + 0.5)、fcf = bel + ra。fcf < 0ならcsm = −fcf、loss_component = 0。そうでなければcsm = 0、loss_component = fcf。ステップ5のファイルを読んで計算すればよいです。
支払余力比率を計算する
/root/ins/kics.txtにrequired_capital=、available_capital=、ratio_pct=、meets_100=の4行を書いてください。ratio_pctは小数第1位、meets_100はYESまたはNOです。
required = round(√(I² + M² + C² + 2 × 0.25 × (IM + IC + MC)) + O)、ratio = available ÷ required × 100を%.1fで。単純合計(6600)より小さい値が出なければなりません。
決算メモを書く
/root/ins/valuation_report.mdに、## Policy Reserves(責任準備金)、## IFRS17 Summary(IFRS17の要約)、## Solvency(支払余力)、## Data and Regulatory Notes(データと規制上の留意事項)の4つの節で決算メモを書いてください。節の見出しは、英語の見出しでも、同じ意味の韓国語・日本語・中国語の見出しでもよく、両方を括弧で併記してもかまいません。
節の見出し4つは、英語の見出しか、同じ意味の韓国語・日本語・中国語の見出しのとおりに。責任準備金(policy reserves)の節には合計を、IFRS17の節にはCSM(契約上のサービスマージン、contractual service margin)の合計を「CSM」と同じ行に、現行の割引率(discount rate)3.0%を「割引率(discount)」と同じ行に、支払余力(solvency)の節には比率を、留意事項の節には機微情報(sensitive data)の話を書いてください。