アクチュアリーのためのPython入門(第11回)
性別の引数を加えた給付現価
📚 アクチュアリーのためのPython入門
この記事は入門編の一部です。
▶ 目次はこちら
▶ 逆引きガイドはこちら
はじめに
前回は、男女別の死亡率を用いて、
計算基数表($D_x$, $N_x$, $C_x$, $M_x$)を性別ごとに
一括で作成しました。
今回は、その続きとして、
- 給付現価、年金現価の関数を性別対応に修正
- 年満期だけではなく、年齢満期を同じロジックで扱えるように整理
ということを行います。
前提条件
前回と同様に、
<対象商品>
- 定期保険:保険期間10年、20年、30年
- 養老保険:保険期間10年、20年、30年
- 終身保険:払込満了60歳、65歳、70歳
<加入範囲>
- 加入年齢:20~50歳
- 性別:男女
としていきます。
給付現価の修正
給付現価、年金現価については基本的に同じです。
ただし、今回は
- 性別ごとに計算基数表を持つ
- 呼び出し時にsexを指定する
という点が加わっています。
また、終身保険を追加するので、
対象となる給付現価を増やしています。
# 養老給付現価の関数
def Axn(sex, start_age, n):
# 給付現価の計算
value = (Mx[sex][start_age] - Mx[sex][start_age + n] \
+ Dx[sex][start_age + n]) / Dx[sex][start_age]
return value
# 定期給付現価の関数
def A1xn(sex, start_age, n):
# 給付現価の計算
value = (Mx[sex][start_age] - Mx[sex][start_age + n]) / Dx[sex][start_age]
return value
# 終身給付現価の関数
def A1x(sex, start_age):
# 給付現価の計算
value = Mx[sex][start_age] / Dx[sex][start_age]
return value
# 定期年金現価の関数
def axn(sex, start_age, n):
# 年金現価の計算
value = (Nx[sex][start_age] - Nx[sex][start_age + n]) / Dx[sex][start_age]
return value
# 終身年金現価の関数
def ax(sex, start_age):
# 年金現価の計算
value = Nx[sex][start_age] / Dx[sex][start_age]
return value
保険期間の変換
実務では、保険期間は必ずしも「10年」「20年」といった
年満期だけで指定されるわけではなく、
- 65歳満期
- 70歳満期
のように、満期年齢で保険期間が定義されることもあります。
ここでは、
- 年満期:10,20など
- 年齢満期:"A65"のように年齢に"A"を付けて指定
という形式を取り、
保険料の計算の際に、「保険期間n」に変換してから計算する
という設計にします。
この形にしておくと、年満期も年齢満期も、
同じ保険料計算ロジックで処理できます。
変換する関数のコードは次のとおりです。
# 保険期間の変換
def parse_term(period, age):
# 数値の場合はそのまま保険期間
if isinstance(period, int): # ←isinstanceは整数かどうかの判定
return period
# 文字列かつAではじまる場合は保険期間=満期年齢-加入年齢
# startswithはAではじまっているかの判定
if isinstance(period, str) and period.upper().startswith("A"):
maturity_age = int(period[1:])
term = maturity_age - age
# 保険期間が0以下ならエラー
if term <= 0:
raise ValueError("満期年齢が加入年齢以下です")
return term
raise ValueError(f"不正な期間指定: {period}")
-
periodは先ほどの年または年齢Aの保険期間の引数とします -
ageは加入年齢を引数とします
-
isinstance(period, int)は、periodが整数ならtrueとなります -
isinstance(period, str)は、periodが文字ならtrueとなります - それ以外は
raise ValueErrorで例外処理としてエラーを出力します
-
upper().startswith("A")はAで始まる場合はtrueとなります -
upperをつけて、小文字のaでもtrueになるようにしています
この関数を次回に保険料を計算する関数へ組み込んでいきます。
まとめ
今回は、給付現価に性別を加えて修正しました。
また、年齢満期を保険期間へ変換する関数を作成しました。
これらを使って、次回は保険料の計算とレート表を作成します。
📚 ナビゲーション
◀ 前の記事
性別を加えた計算基数
▶ 次の記事
保険料レート表の作成
📚 目次
アクチュアリーのためのPython入門