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
Posted at

アクチュアリーのためのPython入門(決算数理編第6回)

決算における利源分析

📚 アクチュアリーのためのPython入門
この記事は決算数理編の一部です。
▶ 目次はこちら
▶ 逆引きガイドはこちら

はじめに

前回までで、保有契約、異動契約(支払)、入金データから、
保険料積立金や危険保険料、予定事業費などの計算を行いました。

決算処理では、これらの保険収支に加えて、
損益計算書の項目から、利源分析を行います。

ここでは、保険収支だけで構成される、
死差損益と責任準備金関係損益だけ計算してみましょう。

利源分析の前に

まず、保有保険金額、異動保険金額から、
保有と異動が整合していることを確認します。

年度始保険金額 - 異動による減少保険金額 - 年度末保険金額 = 0
となることを確認しましょう。

まずは、ヘッダー部分です。
今まで作成してきた関数をインポートします。
また、決算期の設定を行います。
今回のデータは2025年度の設定です。

surplas_analysis.py
from core_b import *
from calc_inforce import calc_inforce
from calc_movement import calc_movement
from calc_premium import calc_premium
import pandas as pd

# 決算期の設定
year = 2025

各関数の結果はデータフレーム化されていますので、
ここで使用する項目を抜き出して、.sum()で集計します。

surplas_analysis.py
# 年度始保有契約の計算
begin_inforce_df = calc_inforce(year-1)
begin_summary = begin_inforce_df[["UPR", "calc_Vn", "UPRz", "P_Vz", "amount"]].sum()
# 年度末保有契約の計算
end_inforce_df = calc_inforce(year)
end_summary = end_inforce_df[["UPR", "calc_Vn", "UPRz", "P_Vz", "amount"]].sum()
# 異動契約の計算
movement_df = calc_movement(year)
move_summary = movement_df[["death_ben", "death_reserve", "SV", "surrender_reserve", "amount"]].sum()
# 保険料の計算
premium_df = calc_premium(year)
prem_summary = premium_df[["income_prem", "risk_prem", "expected_expenses"]].sum()

保険金額の整合しているか確認します。
結果は0と表示されるはずです。
実務では、0とならないこともあります。

その場合、どのデータが原因なのか突き止め、
データ修正やプログラムが必要なのか確認します。

surplas_analysis.py
# 保険金額の確認
amount_check = begin_summary["amount"] - move_summary["amount"] - end_summary["amount"]
print("amount_check:", amount_check)

死差損益

続いて、死差損益です。
次の集計または計算を行います。

  • 年度始と年度末の5年チルメル式の責任準備金
  • 予定利息
  • 年度始諸積増
  • 年度末諸積増

また、死差損益の項目はアクチュアリー会のテキスト
「保険2(生命保険)」を参考にします。

収益の部の小計は、
premium : 収入保険料
begining_reserve : 年度始保険料積立金
begining_unearned_prem : 年度始未経過保険料
interest : 予定利息
end_difference : 年度末諸積増
の合計としています。

損失の部の小計は、
benefit : 支払保険金
expected_expenses : 予定事業費
surrender_reserve : 解約失効契約の消滅時保険料積立金
end_reserve : 年度末保険料積立金
end_unearned_prem : 年度末未経過保険料
begining_difference : 年度始諸積増
の合計としています。

収益の小計 - 損失の小計 = 死差損益(death_gain)
を計算しています。

surplas_analysis.py
# 死差損益の計算
# 5年チルメル式責任準備金の集計
Vzt = begin_summary["UPRz"] + begin_summary["P_Vz"]
Vzt1 = end_summary["UPRz"] + end_summary["P_Vz"]
# 予定利息の計算
interest = roundhu((Vzt + Vzt1) * Decimal(ival["P"]) / Decimal((2 + ival["P"])), 0)
# 年始諸積増の計算
begin_difference = (begin_summary["UPR"] + begin_summary["calc_Vn"]) - Vzt
# 年末諸積増の計算
end_difference = (end_summary["UPR"] + end_summary["calc_Vn"]) - Vzt1
# 小計
death_subtotal1 = prem_summary["income_prem"] + begin_summary["calc_Vn"] + begin_summary["UPR"] \
        + interest + end_difference
death_subtotal2 = move_summary["death_ben"] + prem_summary["expected_expenses"] + move_summary["surrender_reserve"] \
        + end_summary["calc_Vn"] + end_summary["UPR"] + begin_difference
# 死差損益
death_gain = ([{
    "premium": prem_summary["income_prem"],
    "begining_reserve": begin_summary["calc_Vn"],
    "begining_unearned_prem": begin_summary["UPR"],
    "interest": interest,
    "end_difference": end_difference,
    "subtotal": death_subtotal1,
    "benefit": move_summary["death_ben"],
    "expected_expenses":prem_summary["expected_expenses"],
    "surrender_reserve":move_summary["surrender_reserve"],
    "end_reserve":end_summary["calc_Vn"],
    "end_unearned_prem":end_summary["UPR"],
    "begining_difference":begin_difference,
    "subtotal2":death_subtotal2,
    "death_gain":death_subtotal1 - death_subtotal2
}])
death_gain_df = pd.DataFrame(death_gain)
print(death_gain_df.T)

なお、death_gain_df.Tの.Tはデータフレームの行と列を入れ替えます。
では、結果を確認しています。

print(death_gain)

結果は次のように表示なります。

                               0
premium                  1915265
begining_reserve         8194279
begining_unearned_prem     73747
interest                   42696
end_difference            560308
subtotal                10786295
benefit                  3000000
expected_expenses         284359
surrender_reserve        1583922
end_reserve              7223111
end_unearned_prem          53655
begining_difference       709625
subtotal2               12854672
death_gain              -2068377

このサンプルでは、約200万円の死差損となりました。
この水準が妥当なのか確認するために、
別の計算でも死差損益を計算してみます。

収入危険保険料 - (死亡保険金 - 死亡時の保険料積立金)
でも死差損益が計算できますので、それを実行してみましょう。

surplas_analysis.py
# 確認用(危険保険料 - (死亡保険金 - 死亡時V))
death_gain = prem_summary["risk_prem"] - (move_summary["death_ben"] \
- move_summary["death_reserve"])
print(death_gain)

結果は次のように表示されます。

-2040845

こちらも約200万円の死差損となりました。
実務でも両方で計算して妥当性の検証を行っています。

責任準備金関係損益

続いて、責任準備金化関係損益です。
実際は、危険準備金も関係するのですが、ここでは省略します。

項目は同じくアクチュアリー会のテキストを参照ください。

surplas_analysis.py
# 責任準備金関係損益の計算
# 小計
reserve_subtotal1 = begin_difference + move_summary["surrender_reserve"]
reserve_subtotal2 = end_difference + move_summary["SV"]

# 責任準備金関係損益(危険準備金は除く)
reserve_gain = ([{
    "begining_difference":begin_difference,
    "surrender_reserve":move_summary["surrender_reserve"],
    "subtotal1":reserve_subtotal1,
    "end_difference":end_difference,
    "surrender_value":move_summary["SV"],
    "subtotal2":reserve_subtotal2,
    "reserve_gain":reserve_subtotal1 - reserve_subtotal2,
    "surrender_gain":move_summary["surrender_reserve"] - move_summary["SV"]}])
reserve_gain_df = pd.DataFrame(reserve_gain)
print(reserve_gain_df.T)

結果は次のようになります。

                           0
begining_difference   709625
surrender_reserve    1583922
subtotal1            2293547
end_difference        560308
surrender_value      1499994
subtotal2            2060302
reserve_gain          233245
surrender_gain         83928

約20万円の責任準備金関係益で、
うち約8万円の解約失効益となりました。

まとめ

今回はサンプルの決算データを使用して、利源分析を行いました。
利源分析自体はアクチュアリー会のテキストにもありますで、
機械的に集計して計算していくだけです。

その前に異動や保有契約がただしく反映されているか確認したり、
死差損益の妥当性を検証したりということも行います。
サンプルではレコード数が少ないので、
誤りがあればすぐに分かりますが、
実務では数十万とか数百万といったレコードを扱いますので、
こういった確認や検証が非常に大事になります。


📚 ナビゲーション
◀ 前の記事
危険保険料と予定事業費の計算

▶ 次の記事

📚 目次
アクチュアリーのための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?