0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アクチュアリーのためのPython入門(解約返戻金の計算)

0
Last updated at Posted at 2026-01-29

アクチュアリーのための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入門

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?