チュートリアル2¶
次に、養老保険のキャッシュフロー計算を行いプロフィットマージンを計算するまでのモデルについて説明します。
(Web上でモデルを参照する場合は、モデル2 をご覧下さい)
モデルのランを行う¶
チュートリアル1 と同様に、ランを実行して下さい。
コマンドウィンドウで
delver
と入力し、Enterを押して実行して下さいresultフォルダが作成され、その中に計算結果のファイルが作成されていれば成功です
インフォース、デバッグ用計算結果の他に、
- endow-bspl.txtでPL項目・BS項目をインフォースごとに出力しています
- endow-profitability.txtでプロフィットマージンや保険料収入現価などをインフォースごとに出力しています
モデルを理解する¶
チュートリアル1では扱わなかった部分を中心に説明をしていきます。
モデル¶
このサンプルのモデルは、model\base.modelに記述されています。
モデルの内容¶
- 計算クラスがBaseで、それはモジュールUtil, CT_P, CT_V, Rate, CashFlow, OutputProfitability, OutputBSPLを持ちます
- Utilは他のモジュールで共通に使用する変数・関数のためのモジュールです
- Rateはレート計算用のモジュールです
- CT_P, CT_Vは基数を表します。P基礎とV基礎の基数がともに必要なため、ほぼ同じ算式で2つのモジュールを記述しています
- CashFlowはキャッシュフロー計算用のモジュールです。前提、生命表、キャッシュフロー、収益性の計算などを行います。
- OutputProfitability, OutputBSPLは出力用の変数を指定するためのモジュールです。
- 計算は、基数(CT_P, CT_V) ⇒ レート(Rate) ⇒ キャッシュフロー(CashFlow) という流れで進んでいきます
モジュール¶
モジュール は計算クラスの意味的な区切りです。 以下の使い方や制約があります。
- 出力対象の変数はモジュール単位で設定できます。そのため、あるモジュールの一部の変数のみ出力させたい場合は、出力変数のみを集めたモジュールを作ります。
- モジュールごとにタイムステップを持つことができます。なので、レート計算では年齢x、キャッシュフローでは経過期間tでタイムステップを持つということができます。
- モジュール間では、<モジュール名>.<変数名/関数名>という形で他のモジュールの変数・関数を使用することができます。例えば、保険料や給付現価を計算するときに、基数や年金現価を
CT_P.Dx(x + n)
やCT_P.annuity_xn(x, n)
として参照しています。// 月払保険料 double baseP = ( benefit_P(0) + alpha + CT_P.annuity_xn(x, n) * gamma ) / ( (1.0 - beta) * CT_P.annuity_xn_12(x, m) * 12.0 )
// 経過t年での給付現価 double[] benefit_P = if (t > n) { 0.0 } elseif (CT_P.Dx(x + t) <= 0.0) { 0.0 } else { (CT_P.Mx(x + t) - CT_P.Mx(x + n) + CT_P.Dx(x + n)) / CT_P.Dx(x + t) }
- モジュール間で参照関係が循環していてはいけません。例えば、モジュールAの変数⇒モジュールBの変数⇒モジュールAの変数 のような計算はできません。
インプット¶
ラン定義¶
- ラン定義のoutputでカンマ区切りで指定することによって、複数の出力定義を指定しています。
出力定義¶
デバッグ用のdebug, 収益性を表形式で表すためのprofitability, BSPLを確認するためのbsplを定義しています
- profitabilityでは、pivotでvariableと指定することにより、モジュールOutputProfitabilityをインフォース・シナリオ・ショックを行のキー、変数を列のキーとした表形式で出力します。(なお、表形式にできないため、配列型の変数は出力されず、スカラー値の変数のみが出力されます)また、sc_st, sc_la, sh_st, sc_laに指定をしないことにより、すべてのシナリオ・ショックでの計算結果を出力します。どのように出力されるかはresultフォルダのendow-profitablitiy.txtをご覧下さい。
インフォース¶
- チュートリアル1より実務での契約の情報に近くなっており、プランplan, 契約年齢x, 保険期間n, 払込期間m, 性別sex, 保険金額Sを設定しています。