アクチュアリーのためのPython入門(保険数理モデリング編第6回)
死亡リスク額の計算1
📚 アクチュアリーのためのPython入門
この記事は保険数理モデリング編の一部です。
▶ 目次はこちら
▶ 逆引きガイドはこちら
はじめに
前回は金利を変動させた場合の
現在推計への影響を単純な例をあげてみました。
今回は、話を少し戻して、
キャシュフローについて再度考えます。
計算された現在推計は、
将来の支払いに備えるため留保しておくべき金額ですが、
もし、予想よりも死亡率が上昇した場合、
留保しておくべき金額は増加するでしょうか。
また、どれほど増加するでしょうか。
死亡リスク額
まずは、単純に全期間の死亡率を上昇させてみます。
死亡率が12.5%上昇した場合の現在推計を計算します。
cashflow.pyをコピーして、
ファイル名をcashflow_mort.pyとしておきます。
死亡指数に付け加えるのが分かりやすいので、
今回はそのようにします。
# 死亡指数の関数化
def mort_k(product):
match product:
case "E":
k = 0.8
case "T":
k = 0.7
case "W":
k = 0.85
return k * 1.125
上記以外はcashflow.pyと同じです。
続いて、presentvalue.pyもコピーして、
presentvalue_mort.pyとしておきます。
ヘッダー部分を変更するだけです。
from cashflow_mort import create_cashflow
実行して結果を確認すると、
977670
と表示されます。
死亡率を上昇させる前は、812213でしたので、
165457増加しています。
これが経済価値ベースでは死亡リスク額に当たります。
1年後の死亡リスク額
実務では、直近の死亡リスク額だけではなく、
1年後の死亡リスク額、2年後の死亡リスク額、$\cdots$
の計算を求められることもありますので、
その計算方法も考えてみましょう。
まずは、1年後の死亡リスク額です。
今、2022年度末を基準として、
キャッシュフローは2023年度からはじまっています。
ですので、2023年度の死亡率はそのまま進めて、
2023年度末の死亡リスク額を計算します。
そのため、2024年度以降の死亡率を12.5%上昇させます。
キャッシュフローの修正
cashflow_mort.pyの残存表の計算の中には、
計算年度を考慮する部分がありませんが、
計算年度を入れてしまうと、変更するときに
場所を探さないといけないので、
死亡率を上昇させる年度を判定させる関数を作成します。
# 死亡ストレスの計算
def mort_stress(policy_y, t):
if policy_y + t >= 2024:
str = 1.125
else:
str = 1
return str
policy_y + tが2024年度以上なら死亡ストレスを適用します。
残存表の中に、この関数を加えます。
# 生命表の作成
for t in range(n):
str = mort_stress(policy, t)
q = qdx(sex, age + t)
w = qwx(product, t, m)
next_d = lx[-1] * q * mort_k(product) * str
next_w = lx[-1] * w
if t == n - 1:
next_m = lx[-1] - next_d - next_w
next_l = 0
else:
next_m = 0
next_l = lx[-1] - next_d - next_w
他の箇所は変更しませんので省略します。
cashflow_mort.pyだけ実行すると、
キャッシュフローをExcelファイルに出力します。
それを確認すると、2023年度のキャッシュフローは今までと同じ、
2024年度以降のキャッシュフローが変化していると思います。
現在価値の修正
続いて、現在価値の計算を修正します。
presentvalue.pyをコピーしてpresentvalue_mort.py
としておきます。
ここでの修正箇所は主に2つです。
-
cashflow_mort.pyから2024年度以降のキャッシュフローを抽出 - 1年後の1年金利、2年金利、$\cdots$を求め、現在価値を計算する
1年後の金利はフォワードレートといいます。
アクチュアリー試験の投資理論のテキストで
解説されていますので、参考にしてください。
現価率はt=0から現価率を計算する想定で、
t年金利を順番tと順番0の金利から計算するので、
t+1やt+2があったり難しいですが、
一つ一つ数えながら、進めます。
# 現価率
def DF(t):
if t + 1 < len(rate0):
r = rate0[t + 1]
else:
r = rate0[-1]
fr = (((1 + r) ** (t + 2))/(1 + rate0[0])) ** (1/(t+1))
value = fr ** (-t-0.5)
return value
あとは、計算は同じく2022年度末基準ですが、
2024年度以降のキャッシュフローを使うので、
それを抽出する部分を加えます。
# 計算基準年度
base_year = 2022
# キャッシュフローの計算
summary = create_cashflow(base_year)
# Totalのみ抽出
summary = summary[summary["product"] == "Total"]
# 2024年度以降を抽出
summary = summary[summary["year"] >= 2024]
# 経過年数を追加
summary["t"] = summary["year"] - base_year - 1
# 現在価値を計算
PV = 0
for _, row in summary.iterrows():
t = int(row["t"])
cf = int(row["cashflow"])
PV += cf * DF(t-1)
print(int(PV))
DF(0)からはじまるように揃えるので、
ここではt-1としておきます。
計算結果は、
1648879
と表示されます。
なお、死亡ストレスを与えない場合は、1488397ですので、
死亡リスクは160482です。
これで1年後の死亡リスクが計算できました。
まとめ
今回は、死亡リスク額を計算しました。
死亡リスク額の自体は難しくないですが、
t年経過後のリスク額をすぐに一般化するのは難しいので、
まず、1年後のキャッシュフロー、次に1年後の金利、$\cdots$
と計算してから、t年後の計算をしていきます。
今回は1年後しか計算しませんでしたので、
次回は、これを一般化して、t年後の死亡リスク額を計算します。
📚 ナビゲーション
◀ 前の記事
保険負債の金利変動による影響
▶ 次の記事
死亡リスク額の計算2
📚 目次
アクチュアリーのためのPython入門