↓ ↑ページトップへ
表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

PR
9/10

【補講・特別論考】 南海トラフ巨大地震によるマクロ供給ショックと公的年金財政の持続可能性:確率論的モンテカルロ・シミュレーションによるテールリスク評価

【要旨(Abstract)】

本稿は、巨大災害による社会保障へのマクロ経済供給ショック(サプライショック)および復興スタグフレーションの枠組みを基礎とし、金融工学およびアクチュアリー実務の標準的手法である「モンテカルロ・シミュレーション」を用いて、南海トラフ巨大地震の発生リスクを公的年金の「100年財政検証」に実装した定量分析である。政府の地震調査研究推進本部が示す発生確率モデル(BPT分布)に基づき、1万通りの並行世界(パラレルワールド)を生成した。従来の確定的(デターミニスティック)な財政検証モデルが災害リスクを捨象している点を踏まえ、ショックの規模や復興期間等の諸変数を確率変数として乱数化した上で、100年後における実質年金(リアル)購買力(ペンション)の期待値およびテールリスク(VaR)をモデル出力値として算出する。


分析の結果、地震が発生しない平時モデルにおける試算値(81.86)に対し、ベースケースの災害リスクを確率論的(ストカスティック)に織り込んだ場合、政府主流の「時間予測モデル」ではモデル期待値54.99(95% VaR: 38.47)まで低下し、より楽観的な「標準モデル」を採用したケースであっても期待値58.92(95% VaR: 44.07)まで深刻なダメージを受けることが示唆された。さらに感度分析を通じて特定パラメータへの依存性を検証し、モデルの構造的限界(外生性等)を明示する。本稿は、年金制度の持続可能性評価を単なる「ケース分析」から「確率分布とテールリスク管理」へと拡張することを提言するものである。


第1章 序論:確定的(デターミニスティック)(Deterministic)検証から確率論的(ストカスティック)(Stochastic)検証への飛躍


厚生労働省が実施する「公的年金財政検証」は、将来の人口動態と経済成長の複数シナリオを前提に、おおむね100年後の財政均衡期間の終了年度まで所得代替率(リプレイスメント)50%が維持できるかを検証するものである。しかし、この検証プロセスの構造的限界は、すべての前提が「確定的(デターミニスティック)(Deterministic)」に与えられており、発生時期と規模が不確実な巨大自然災害や低頻度・高影響(テールリスク)イベントを原則として織り込んでいない点にある。


金融・保険数理の実務においては、100年という長期の債務評価において滑らかな平時パスのみを用いることは許されない。必ず「モンテカルロ・シミュレーション」を用いて数万通りの経済・災害パスを生成し、最悪の5%や1%の確率で発生する損失(VaR:Value at Risk)を計測し、それに耐えうるバッファーの有無を厳格に検証する必要がある。本稿の核となる問題意識は、「100年という年金制度の評価期間において、大規模災害のようなテールリスクイベントを確率論的(ストカスティック)に組み込んで評価すべきではないか」という点にある。特定の数値の絶対視ではなく、モデルの挙動に基づくリスクプロファイルの可視化を通じて、学術的かつ客観的な検証を行うことを目的とする。


第2章 南海トラフ巨大地震の発生確率モデルとBPT分布の数理的実装


シミュレーションの構築にあたり、地震の発生確率は政府の地震調査研究推進本部の最新知見に基づく「BPT(Brownian Passage Time)分布」を採用する。これは前回の昭和東南海・南海地震(1944・1946年)からの経過年数(現時点で約81.7年)とともに、プレート境界のひずみ蓄積に伴うハザード率が非線形に上昇する更新過程モデルである。


政府(地震調査研究推進本部)は現在、南海トラフ巨大地震の評価において『時間予測モデル(すべり量依存モデル)』と『標準モデル』の2つの評価手法を併記している。前者は前回の地殻変動量から次回の発生限界を予測するものであり、長期的に政府の主流として採用されてきた(30年以内発生確率70〜80%の根拠)。後者(20〜50%)は過去の発生間隔の単純平均を用いるものである。

いずれにしても、公的年金の「100年間」というタイムホライズンにおいては、100年以内に巨大地震が少なくとも1回発生するモデル上の累積確率は極めて高くなる。


後述する『標準モデル(20〜50%)』を適用したシミュレーションにおいてすら、10,000パス中9,016パス(約90.2%)で100年以内に少なくとも1回以上の地震が発生した。政府の財政検証がこのイベントを原則として除外していることは、金融工学的観点から言えば経済・災害リスクの評価において重要な前提の欠落を含んでいると言える。


第3章 確率論的(ストカスティック)・動的マクロ経済モデルの実装と再現性


3.1 実装コードとパラメータ設定


本モデルにおける数理的妥当性と頑健性を担保するため、以下に実務水準のPythonコードを提示する。実質(リアル)購買力(ペンション)の低下率(SHOCK_DROP)や復興期間(RECOVERY_YEARS)は固定値ではなく、パスごとに異なる被害の大きさを表現する確率変数として正規分布からサンプリングしている。


【パラメータ設定の根拠】

コード内のショック低下率(平均30%、標準偏差7%)および復興期間(平均10年、標準偏差2年)については、土木学会等が示すフロー逸失推計を参考にしつつ、本稿における感度分析用のベースケースとして設定した仮定値である。これらは将来のより精緻なマクロ経済推計やオープンデータに基づき柔軟に更新・検証可能なパラメータとして設計されている。


※本稿の実装コードでは、政府が提示する2つのモデルを同時に実行・比較できるよう設計した。なお、1回目の巨大地震が発生したのち、2回目以降の発生予測プロセスは未知のすべり量に依存しない「標準モデル(過去の歴史的平均)」へと自動的に回帰(レジーム・スイッチ)するよう厳格に構築している。


```python


"""

Copyright 2026 kutta_neko


Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:


The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.


THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

"""

# ※「なろう」の表示仕様上、インデントに全角スペースを使用しています。

# ※コピーしてPythonで実行する場合は、全角スペースを半角スペースに一括置換してください。


import numpy as np

import warnings


warnings.filterwarnings('ignore')


# ==========================================

# 1. パラメーター設定(全体共通)

# ==========================================

N_PATHS = 10000 # パス数

YEARS = 100 # 検証期間(100年間)


# モデルの定義

MU_EQ_TIME_PRED = 88.2 # 時間予測モデル(政府主流):期待発生間隔

ALPHA_EQ_TIME_PRED = 0.24

MU_EQ_STANDARD = 119.1 # 標準モデル(歴史的平均):平均発生間隔

ALPHA_EQ_STANDARD = 0.34


ELAPSED_YEARS = 81.7 # 前回からの経過年数(2026年時点)

INITIAL_POWER = 100.0 # 実質年金購買力指数(初期値)

NORMAL_DECAY = 0.002 # 平時における目減り(年率-0.2%)


# ==========================================

# 2. 地震発生ジェネレーター(BPTモデル)

# ==========================================

def get_next_earthquake(mu, alpha, elapsed):

  shape = mu / (alpha ** 2)

  while True:

    t = np.random.wald(mu, shape)

    if t > elapsed:

      return t - elapsed


# ==========================================

# 3. シミュレーション実行関数

# ==========================================

def run_simulation(use_time_predictable_for_1st):

  np.random.seed(42) # 純粋なモデル比較のためシードを固定して条件を揃える

  paths = np.zeros((N_PATHS, YEARS))

  eq_counts = np.zeros(N_PATHS)

  

  for i in range(N_PATHS):

    current_power = INITIAL_POWER

    elapsed_current = ELAPSED_YEARS

    

    # 1回目の地震モデルの適用

    if use_time_predictable_for_1st:

      current_mu = MU_EQ_TIME_PRED

      current_alpha = ALPHA_EQ_TIME_PRED

    else:

      current_mu = MU_EQ_STANDARD

      current_alpha = ALPHA_EQ_STANDARD

      

    next_eq_year = get_next_earthquake(current_mu, current_alpha, elapsed_current)

    shock_remaining = 0

    

    # パスごとの被害と復興期間のサンプリング

    path_shock_drop = np.clip(np.random.normal(0.30, 0.07), 0.10, 0.50)

    path_recovery_years = int(np.clip(np.random.normal(10, 2), 5, 15))

    

    for y in range(YEARS):

      current_power *= (1 - NORMAL_DECAY)

      

      # 地震発生判定

      if y >= next_eq_year:

        eq_counts[i] += 1

        shock_remaining = path_recovery_years

        elapsed_current = 0.0

        

        # 2回目以降は「標準モデル」に強制回帰(レジーム・スイッチ)

        current_mu = MU_EQ_STANDARD

        current_alpha = ALPHA_EQ_STANDARD

        next_eq_year = y + get_next_earthquake(current_mu, current_alpha, elapsed_current)

        

      # 復興スタグフレーション適用

      if shock_remaining > 0:

        annual_shock = 1 - (1 - path_shock_drop) ** (1 / path_recovery_years)

        current_power *= (1 - annual_shock)

        shock_remaining -= 1

        

      paths[i, y] = current_power


  # 結果の集計

  final_values = paths[:, -1]

  return {

    "expected": np.mean(final_values),

    "var_5": np.percentile(final_values, 5),

    "var_1": np.percentile(final_values, 1),

    "eq_paths": np.sum(eq_counts > 0),

    "avg_eq": np.mean(eq_counts),

    "normal_base": INITIAL_POWER * ((1 - NORMAL_DECAY) ** YEARS)

  }


# ==========================================

# 4. 両モデルの実行と結果の比較出力

# ==========================================

# ケースA:時間予測モデル(1回目発生後は標準モデルに回帰)

res_time_pred = run_simulation(use_time_predictable_for_1st=True)


# ケースB:標準モデル(最初から歴史的平均を適用)

res_standard = run_simulation(use_time_predictable_for_1st=False)


# 出力フォーマット

print("=" * 65)

print("【公的年金 100年後の実質購買力 シミュレーション結果】")

print(f" ※平時モデル(地震リスク捨象)試算値 : {res_time_pred['normal_base']:.2f}")

print("=" * 65)


print("\n▼ ケースA:【時間予測モデル】適用時(政府主流・高確率)")

print(f" ・100年以内の被災パス数 : {res_time_pred['eq_paths']:,} / {N_PATHS:,} パス (約 {(res_time_pred['eq_paths'] / N_PATHS) * 100:.1f}%)")

print(f" ・平均地震発生回数 : {res_time_pred['avg_eq']:.2f} 回")

print(f" ・モデル期待値 (平均) : {res_time_pred['expected']:.2f}")

print(f" ・ワースト5% (95% VaR) : {res_time_pred['var_5']:.2f}")

print(f" ・ワースト1% (99% VaR) : {res_time_pred['var_1']:.2f}")


print("\n▼ ケースB:【標準モデル】適用時(歴史的平均・低確率)")

print(f" ・100年以内の被災パス数 : {res_standard['eq_paths']:,} / {N_PATHS:,} パス (約 {(res_standard['eq_paths'] / N_PATHS) * 100:.1f}%)")

print(f" ・平均地震発生回数 : {res_standard['avg_eq']:.2f} 回")

print(f" ・モデル期待値 (平均) : {res_standard['expected']:.2f}")

print(f" ・ワースト5% (95% VaR) : {res_standard['var_5']:.2f}")

print(f" ・ワースト1% (99% VaR) : {res_standard['var_1']:.2f}")

print("=" * 65)


---


3.2 再現性(Reproducibility)の確保

本稿で用いたシミュレーション・コードは、PythonのNumPy標準ライブラリのみを用いて実装されている。純粋なモデル間比較を行うため乱数シード(seed=42)を固定しており、本稿の計算結果は完全に再現可能(Reproducible)である。


第4章 シミュレーション出力データの解説とモデル比較


コードの実行によって得られた【ベースケース】の出力値は以下の通りである。

=================================================================

【公的年金 100年後の実質購買力 シミュレーション結果】

※平時モデル(地震リスク捨象)試算値 : 81.86

=================================================================


▼ ケースA:【時間予測モデル】適用時(政府主流・高確率)

・100年以内の被災パス数 : 9,987 / 10,000 パス (約 99.9%)

・平均地震発生回数 : 1.16 回

・モデル期待値 (平均) : 54.99

・ワースト5% (95% VaR) : 38.47

・ワースト1% (99% VaR) : 30.23


▼ ケースB:【標準モデル】適用時(歴史的平均・低確率)

・100年以内の被災パス数 : 9,016 / 10,000 パス (約 90.2%)

・平均地震発生回数 : 0.98 回

・モデル期待値 (平均) : 58.92

・ワースト5% (95% VaR) : 44.07

・ワースト1% (99% VaR) : 34.15

=================================================================


4.1 平時モデル試算値と「モデル期待値」の不可逆な乖離


政府の財政検証が暗黙の前提とする「地震が起きない平時モデル」では、100年後の購買力は 81.86 に落ち着く。しかし、巨大地震のリスクを確率論的(ストカスティック)に織り込んだ1万回の並行世界(パラレルワールド)においては、政府が主流とする「時間予測モデル(ケースA)」で期待値は 54.99 まで下落する。

特筆すべきは、政府内で確率が低いとされ、論争の的となっている「標準モデル(ケースB)」を採用し、意図的に災害リスクを極小化して評価したとしても、100年間の被災確率は約90.2%に達し、期待値は 58.92 にとどまる点である。100年というタイムホライズンにおいて「巨大地震の発生」は例外的なイベントではなく確定的な前提であり、年金の実質(リアル)購買力(ペンション)はベースラインから23〜26ポイント削り取られることが数学的に証明された。


4.2 テールリスク(VaR)の可視化とモデル論争の無意味さ


金融リスク管理の要であるワースト5%(95% VaR)の数値は、ケースAで 38.47、より楽観的なケースBであっても 44.07 と算出された。

ショックの大きさと復興期間の遅延が最悪の形で重なる世界線においては、名目支給額が維持されていても、ハイパーインフレとマクロ経済スライドの累積適用によって高齢者の購買力が実質的に半減する「生活水準(スタンダード)のデフォルト」が、テールリスクとして確実に存在している。

これは、「どちらの発生予測モデルが正しいか」という地震学的な論争が、100年スパンの社会保障財政においては実質的に無意味であることを示している。「100年以内に1発は国難が直撃する」という事実は揺るがず、モデルの前提をいかに楽観的に書き換えてもテールリスクの破壊的帰結は覆らないのである。


4.3 感度分析(Sensitivity Analysis)による頑健性の検証


本結論が特定の仮定のみに依存していないことを確認するため、ショック低下率(平均および標準偏差)と復興期間のパラメータを変更した感度分析を実施した(各ケースとも独立した1万パスで実行)。


* ケース(マイルド):ショック平均20%(標準偏差5%)、復興期間平均5年

* ケース(ベース): ショック平均30%(標準偏差7%)、復興期間平均10年

* ケース(セビア):ショック平均40%(標準偏差10%)、復興期間平均15年


いずれのショック想定においても、平時モデル(81.86)からの有意な下方乖離が確認された。これにより、マクロ経済パラメータの変動にかかわらず「巨大災害が年金の実質価値を大きく引き下げる」という本モデルの構造的結論は頑健(Robust)であることが確認できる。


第5章 本モデルの限界(Limitations)と今後の課題


学術的な客観性を担保するため、本モンテカルロ・シミュレーションが内包する構造的・方法論的な限界(Limitations)を以下に明記する。今後のさらなる研究の精緻化に向けた課題でもある。


1. ショック低下率(SHOCK_DROP)の外生性:

本モデルではGDPや賃金の低下幅を外生的な確率変数として与えている。実際には、資本ストックの損壊、労働力制約、TFPの低下といった要素から生産関数を通じて内生的に推計されるべきである。

2. マクロ経済変数の非連立化:

GDPの変動、インフレ率、賃金上昇率、為替レートなどをマクロ経済学的に連立・動学化(DSGEモデル等)させておらず、それらの複雑なフィードバックループを簡略化して単一の「購買力低下率」に統合している。

3. 医療介護需要の爆発やGPIF制約の非内生化:

被災による医療・介護需要の急増がもたらす他会計からの財政圧迫や、GPIFが直面する外国資産の換金制約(為替ディスカウント)、市場インパクト(流動性枯渇)による資産毀損効果をモデル内に明示的に組み込んでいない。

4. 国債市場との相互作用の省略:

復興国債の大量増発による長期金利(国債利回り)の急騰と、それがもたらす国家財政のクラウディング・アウト効果については省略している。


これらの要因をすべて内生化した場合、実際のテールリスク(VaR)は本稿の推計値よりもさらに悪化(下方シフト)する可能性が高い点に留意が必要である。


第6章 結論:確率論的(ストカスティック)リアリズムへの転換


本モデルが示した通り、南海トラフ巨大地震は単なる「もし起きたら困るリスク」ではない。100年のタイムホライズンにおいては「本モデル上で90〜99%の確率で発生し、国家のキャッシュフローを確実に揺さぶる不可避のシステム変数」として取り扱われるべきである。


本稿では、ショック幅や復興期間を確率変数化し、2つの地震発生モデルを網羅する再現可能なコードベースとして実装を完結させた。このモデル出力値(期待値54〜58台、95% VaR 38〜44台)は、政府に対して「平時を前提とした財政検証の限界」を客観的データとして突きつけるものである。


同時に、このモデルの挙動は、実物経済(インフラ・国内サプライチェーン)に対する事前の強靱化投資によって、ショック関数(SHOCK_DROP)のパラメータを縮小できる可能性を示唆している。事前の防災・減災投資は、社会保障財政への波及を緩和する有力な政策手段となり得るものであり、今後の年金財政やマクロ経済の政策評価モデルに明示的に組み込む価値があることを本稿は提言する。


年金財政の検証は、確定的(デターミニスティック)で平穏なケース分析から、確率分布とテールリスク管理に基づく「確率論的(ストカスティック)リアリズム」へと転換されなければならない。

読んで頂きありがとうございます。

ブクマや☆での評価・応援、どうかよろしくお願いします。


ELAPSED_YEARS = 81.7 # 前回の地震からの経過年数(2026年時点)なので、後からやる人は増やしてね。


現代のリアルSFホラー小説はいかがでしたでしょうか。100年安心という割には、どう考えても穴多すぎのような。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。