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入門(保険料と保険料積立金の計算)

Posted at

アクチュアリーのためのPython入門(第4回)

保険料と保険料積立金を計算する

はじめに

前回は、死亡給付現価と年金給付現価を計算しました。
今回はそれらを使って、

  • 営業保険料(年払)
  • 保険料積立金

を計算します。

ようやく「保険数理」の根幹部分に来ました。

今回やること

今回扱うのは、次の2つです。

  • 定期保険の年払営業保険料
  • 定期保険の経過年数ごとの平準純保険料式の保険料積立金

営業保険料の計算

数理の理論説明は省略し、
前回に計算した給付現価をそのまま使う形にします。

# 定期保険の純保険料の計算
def netPremT(start_age, n):
    value = 0
    # 純保険料の計算
    value = A1xn(start_age, n) / axn(start_age, n)
    return value

# 営業保険料の計算
def PremT(start_age, n):
    value = 0
    # 予定事業費
    # 新契約費(初回のみ保険金比例)
    alpha = 0.001
    # 新契約費(払込中保険料比例)
    delta = 0.06
    # 維持費(払込中保険金比例)
    gamma = 0.00115
    # 集金費(払込中保険料比例)
    beta = 0.03
    # 営業保険料の計算
    value = (A1xn(start_age, n) + alpha + gamma * axn(start_age, n)) / ((1 - beta - delta) * axn(start_age, n))
    # 端数処理
    value = roundhu(value, 6)
    return value

netPremTは純保険料を計算する関数として定義しています。
start_ageは年齢、nは保険期間です。
同様にPremTは営業保険料の関数です。
alpha、delta、gammma、betaは予定事業費です。
営業保険料の計算式はテキストどおりの計算式です。
端数処理のroundhu(value, 6)はvalueを小数第6位まで求める(第7位を四捨五入)関数で、
コードは後述、説明は次回とさせてください。

保険料積立金の計算

続いて、保険料積立金です。
実務では、保険料と保険料積立金の計算基数や給付現価の基礎率は
必ずしも一致しませんが、ここでは、Pythonに慣れることが目的ですので、
同じと仮定しておきます。

# 保険料積立金の計算
def ResT(start_age, n, t):
    value = 0
    # 保険料積立金の計算
    value = A1xn(start_age + t, n - t) - netPremT(start_age, n) * axn(start_age + t, n - t)
    # 端数処理
    value = roundhu(value, 6)
    return value

start_ageは年齢、nは保険期間、tは経過年数です。
保険料積立金の計算は先の純保険料を使っています。
こちらもテキストどおりの計算式です。

あとは、先の端数処理のroundhuを定義しておきます。

# 端数処理 四捨五入
# decimalのインポート
from decimal import Decimal, ROUND_HALF_UP, getcontext
# 四捨五入の関数
def roundhu(value, ndigits):
    getcontext().prec = 28
    d = Decimal(str(value))
    quant = Decimal("1").scaleb(-ndigits)
    return d.quantize(quant, rounding=ROUND_HALF_UP)

valueをndigits桁まで求めるという意味です。
次回、このdecimalの意味と、なぜroundではなく、
四捨五入する関数を作成するのか説明します。

最後に計算結果を確認してみます。まずは、
40歳5年定期保険の年払営業保険料、年払純保険料、
41歳5年定期保険の年払営業保険料、年払純保険料です。

print(PremT(40,5), round(netPremT(40,5),6)) 
print(PremT(41,5), round(netPremT(41,5),6)) 

出力例は次のようになります。

0.003021 0.001396
0.003150 0.001514

続いて、40歳5年定期保険の保険料積立金の計算結果で、
1年経過後、2年経過後、3年経過後、4年経過後です。

print(ResT(40, 5, 1), ResT(40, 5, 2), ResT(40, 5, 3), ResT(40, 5, 4))

出力例は次のようになります。

0.000221 0.000334 0.000337 0.000229

まとめ

今回は、

  • 営業保険料
  • 保険料積立金

をPythonで計算しました。
次回は、

  • round関数ではなく、関数を定義して端数処理を行うのか
  • 浮動小数点誤差の考え方

について整理します。

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?