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入門(第9回)

キャッシュフローと保険収支を計算する

はじめに

これまでは、将来収支の計算に必要な

  • 件数の推移
  • 保険金額の推移

に加えて、前回は解約返戻金の計算を行いました。

今回は、これまで計算してきた各要素を使って、
将来収支の簡単なモデルを作成します。

前提条件

これまでと同じ条件に加えて、
将来収支の計算に必要な条件を加えています。

  • 40歳加入、8年満期の養老保険
  • 死亡率は前回までと同じもの
  • 保険料・保険料積立金・解約返戻金は
    前回までに作成した関数を使用
  • 将来収支ではfloat型を使用
  • 事業費は保険料収入の10%と仮定

また、将来収支では厳密な端数処理を行わないため、
ここではfloat型で十分と判断しています。

キャッシュフローの作成

ここからは、給付現価や保険料のように
「1つの値を計算する」処理ではなく、

各年の

  • 保険料収入
  • 保険金
  • 解約返戻金
  • 事業費

といった 推移(時系列) を扱います。

このような場合は、関数で1年分ずつ計算するよりも、
各年の値をリストとしてまとめて持っておいた方が、
将来収支の確認や可視化がしやすくなります。

そのため、ここでは関数ではなく、
リストを使ってキャッシュフローを作成します。

まず、各キャッシュフロー項目のリストを作成します。

# キャッシュフロー
inprem = []      # 保険料収入
benefit = []     # 保険金支払い
surrender = []   # 解約返戻金支払い
expenses = []    # 事業費
netcash = []     # 当期キャッシュフロー

# 保険料(float型へ変換)
P = float(PremE(40,8)) 

続いて、保険金額推移に従って、
各年のキャッシュフローを計算していきます。

# キャッシュフロー
for t in range(0,8):
    # 保険料の収入
    inprem.append(lx_amt[t] * P)
    # 死亡保険金+満期返戻金の支払い
    if t==7:
        benefit.append((lx_amt[t] - wx_amt[t]))
    # 死亡保険金の支払い
    else:
        benefit.append(dx_amt[t])
    # 解約返戻金の支払い
    W = float(SVE(40,8,t+1))
    surrender.append(wx_amt[t] * W)
    # 事業費の支払い
    expenses.append(inprem[t] * 0.1)
    # キャッシュフローの計算
    netcash.append(inprem[t] - benefit[t] - surrender[t] - expenses[t])
  • 保険料収入 = 期始保険金額 × 保険料
  • 解約返戻金支払 = 解約保険金額 × 解約返戻金額
  • 事業費 = 保険料収入 × 10%
  • キャッシュフロー = 保険料 - 保険金 - 解約返戻金 - 事業費

と計算しています。

また、保険金支払いに関して、
経過7年の最後(8年経過時)は、
死亡保険金額 + 満期保険金額 = 期始保険金額 - 解約保険金額
で、満期保険金額を加えています。

結果を確認してみます。
桁数が多いので、百万円単位にします。

for t in range(0,8):
    print(t, int(inprem[t]/1000000), int(benefit[t]/1000000), \
          int(surrender[t]/1000000), int(expenses[t]/1000000), int(netcash[t]/1000000))
0 13437 82 200 1343 11810
1 13157 88 442 1315 11310
2 12882 93 676 1288 10823
3 12612 99 901 1261 10349
4 12346 104 1118 1234 9888
5 12085 111 1327 1208 9437
6 11828 119 1529 1182 8997
7 11576 84426 1722 1157 -75731

保険収支の計算

次に、期末の保険料積立金を考慮した保険収支を計算します。

# 収支(期末保険料積立金を加える)
reserve =[]
inout =[]
for t in range(0,8):
    # 期末Vの計算
    if t==0:
        # 初年度はV額そのまま
        V = float(ResE(40,8,1))
        reserve.append(lx_amt[1] * V)
    elif t==7:
        # 最終年度は全額取り崩し
        V = float(ResE(40,8,t))
        reserve.append( - lx_amt[t] * V)
        print(Vt)
    else:
        # その他はV繰入額を計算
        Vt = float(ResE(40,8,t))
        Vt1 = float(ResE(40,8,t+1))
        reserve.append(lx_amt[t+1] * Vt1 - lx_amt[t] *Vt)
    
    # 収支の計算
    inout.append(netcash[t] - reserve[t])

初年度は期末の保険料積立金を、
次年度以降は、期末の保険料積立金 - 期始の保険料積立金を、
計算して、キャッシュフローから差し引きます。

計算結果を確認してみます。

for t in range(0,8):
    print(t, int(inprem[t]/1000000), int(benefit[t]/1000000), int(surrender[t]/1000000),\
           int(expenses[t]/1000000),int(reserve[t]/1000000), int(inout[t]/1000000))
0 13437 82 200 1343 11945 -134
1 13157 88 442 1315 11521 -211
2 12882 93 676 1288 11109 -285
3 12612 99 901 1261 10708 -358
4 12346 104 1118 1234 10317 -429
5 12085 111 1327 1208 9935 -498
6 11828 119 1529 1182 9562 -565
7 11576 84426 1722 1157 -75100 -630

ここまでで、収支試算モデルの最低限の形ができました。

まとめ

今回は、これまで作成してきた
生命表・基数表・保険料・保険料積立金を使って、
将来収支のキャッシュフローを作成しました。

新しい数理的な考え方はほとんどなく、
これまでの内容を組み合わせることで
将来収支の形が見えてきたと思います。

以降は、これまでのことを拡張していきたいのですが、
どこまでできるか分かりません。少しずつ進めさせてください。

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?