アクチュアリーのためのPython入門(第8回)
将来収支における解約返戻金
📚 アクチュアリーのためのPython入門
この記事は入門編の一部です。
▶ 目次はこちら
▶ 逆引きガイドはこちら
はじめに
前回では、
死亡指数・解約率を用いて将来の件数・保険金額の推移を作成しました。
将来収支モデルでは、
それらを使って次のような計算をしていきます。
- 保険料収入
- 保険金支出
- 解約返戻金支出
今回はこのうち、解約返戻金の計算について整理します。
前提条件
- 8年の養老保険
- 保険金額:100万円
- 契約時年齢・性別:40歳男性
- 解約控除をアルファ基準で最大10年間とします
$W_t$ = $V_t$ - $\alpha$ (1-$\frac{t}{10}$)
今回は、保険料と保険料積立金を計算した定期保険ではなく、養老保険で計算してみます。
- 年払の想定ですので、解約返戻金は期末Vを基準とした額とします
- 将来収支の目的は金額の方向感・規模感の把握ですので、
→ Decimal型ではなくfloat型で進めていきます
保険料積立金の計算
養老保険のため、保険料積立金の計算式を少し手直しします。
n年経過後の生存給付を加えます。
# 養老給付現価
def Axn(start_age, n):
age_index = start_age - 40
return (Mx[age_index] - Mx[age_index + n] + Dx[age_index + n]) / Dx[age_index]
# 純保険料
def netPremE(start_age, n):
return Axn(start_age, n) / axn(start_age, n)
# 営業保険料
def PremE(start_age, n):
alpha = 0.025
delta = 0.02
gamma = 0.00215
beta = 0.03
value = (Axn(start_age, n) + alpha + gamma * axn(start_age, n)) \
/ ((1 - beta - delta) * axn(start_age, n))
return roundhu(value, 6)
# 保険料積立金
def ResE(start_age, n, t):
benefit = Axn(start_age + t, n - t)
income = netPremE(start_age, n) * axn(start_age + t, n - t)
value = Decimal(str(benefit)) - Decimal(str(income))
return roundhu(value, 6)
保険料・保険料積立金の計算と将来収支との両方で使えるように、
ここまでは、Decimal型にしておきます。
解約返戻金の計算
解約返戻金を計算します。
ここまでは解約返戻金額がレート表でも使えるようにDecimal型で計算します。
if 条件:~で条件がtrueのとき、~が実行されます。
複数条件の場合は、if elif elseという使い方をします。
# 解約返戻金の計算
def SVE(start_age, n, t):
if t <= 10:
surrender_fact = 0.025 * (1 - t / min(n , 10))
else:
surrender_fact = 0
value = ResE(start_age, n, t) - Decimal(str(surrender_fact))
return max(roundhu(value, 6), 0)
計算結果を確認してみます。
for t in range(0,8):
print(t, ResE(40,8,t), SVE(40,8,t))
0 0.000000 0
1 0.121991 0.100116
2 0.244776 0.226026
3 0.368387 0.352762
4 0.492858 0.480358
5 0.618219 0.608844
6 0.744502 0.738252
7 0.871745 0.868620
定期保険と終身保険の解約返戻金
養老保険は先のコードで計算結果を確認しましたが、
定期保険と終身保険については、コードだけを載せます。
新契約費alphaを解約控除部分としているだけで形は同じです。
# 定期保険の解約返戻金
def SVT(sex, start_age, term, t):
n = parse_term(term, start_age)
if t <= 10:
surrender_fact = 0.001 * (1 - t / min(n , 10))
else:
surrender_fact = 0
value = ResT(sex, start_age, n, t) - Decimal(str(surrender_fact))
return max(roundhu(value, 6),0)
# 終身保険の解約返戻金
def SVW(sex, start_age, term, t):
n = parse_term(term, start_age)
if t <= 10:
surrender_fact = 0.02 * (1 - t / min(n , 10))
else:
surrender_fact = 0
value = ResW(sex, start_age, n, t) - Decimal(str(surrender_fact))
return max(roundhu(value, 6),0)
まとめ
今回は、解約返戻金の計算を行いました。
次回は、生命表に保険料、保険料積立金、解約返戻金を乗じていき、
最終的に保険収支の形にしていきます。
📚 ナビゲーション
◀ 前の記事
将来収支の件数と金額の推移
▶ 次の記事
キャッシュフローと保険収支の計算
📚 目次
アクチュアリーのためのPython入門