アクチュアリーのための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
ここまでで、収支試算モデルの最低限の形ができました。
まとめ
今回は、これまで作成してきた
生命表・基数表・保険料・保険料積立金を使って、
将来収支のキャッシュフローを作成しました。
新しい数理的な考え方はほとんどなく、
これまでの内容を組み合わせることで
将来収支の形が見えてきたと思います。
以降は、これまでのことを拡張していきたいのですが、
どこまでできるか分かりません。少しずつ進めさせてください。