論文一覧に戻る 🕸 論文ネットワーク 🗺 用語ネットワーク 統計データ分析コンペ 教育用再現集
審査員奨励賞[高校生の部] ★

景気の変動要因と景気の変動による影響の分析

⏱️ 推定読了時間: 約20分
2022年度(令和4年度)統計データ分析コンペティション | 佐々木俊輔・鈴木櫂人(東京都立大泉高等学校) | SSDSE-B-2022・SSDSE-2019B+日本銀行・FRB・Yahoo! Finance・内閣府(+本ページ実再現はSSDSE-B-2026) | 回帰型ニューラルネットワーク・SHAP・相関分析
🔬 SHAP🔬 ニューラルネット🔬 ニューラルネットワーク🔬 相関分析🏷 経済・産業🏷 子育て・保育
🔬 手法タグ / 🏷 応用タグ(クリックで同タグの論文をネットワーク検索)
🔬 再現カルテ — 原論文と同じデータ・同じ手法で再現

この教材は原論文と同じデータを読み込み、同じ手順で計算し直しています。画面に出る数値と図は、あなたのブラウザがその場で計算した結果です。

原論文が使ったデータSSDSE-B・日本銀行・Federal Reserve Board・Yahoo! Finance・県民経済計算
分析単位:都道府県
中核手法:ニューラルネットワーク・SHAP
この教材が使うデータ
原論文(PDF)景気の変動要因と景気の変動による影響の分析
審査員奨励賞/佐々木 俊輔、鈴木 櫂人(東京都立大泉高等学校)
✅ この教材でできること
  • 分析に使うデータは同梱済みで、ブラウザ上でそのまま読み込める
  • 数値・図を最後まで再計算できる(相関分析)
突合監査の結果、主要データと中核手法はいずれも原論文と一致しています。

▶ ここに書いてある分析は、ページ下部の「🐍 ブラウザで動かす」でそのまま実行できます(インストール不要)。動かしているのは code/2022_H5_6_shorei.py(305 行)そのものです。

📝 3行で分かる要約

目次

  1. 研究のテーマと目的
  2. 使用データと再現可能性の整理
  3. 分析の流れ:NN構築 → SHAP → 解釈
  4. 図1:有効求人倍率の推移(実再現)
  5. 図2:有効求人倍率と年齢構成(実再現)
  6. 図3:有効求人倍率と各説明変数の相関(実再現)
  7. 図4:モデル性能とSHAPの相関の向き(報告値)
  8. 結果の解釈
  9. まとめと今後の課題
  10. データ・コードのDL
  11. ⚠️ よくある誤解
  12. 📖 用語集
  13. 📐 手法ガイド
  14. 🚀 発展の可能性
  15. 🎯 自分でやってみよう
  16. 🤔 Q&A
  17. 🐍 ブラウザで動かす

🎯 この記事を読むと何ができるようになるか

📥 データの準備(再現コードを動かす前に)

このページで実再現できるのは図1・図2・図3(有効求人倍率とその説明変数のうち SSDSE-B に収録されている分)です。コードの編集は不要です。(原論文の中心である回帰型NN+SHAPの数値、および景気指標 NYダウ・米FRB金利などは再現できないため、図4は原論文の報告値を可視化します。)

1
データをダウンロードする 独立行政法人統計センターの SSDSE(教育用標準データセット)配布ページから、以下をダウンロードします。
SSDSE-B-2026.csv ← SSDSE-B(都道府県別・基礎データ、社会・人口統計体系)📥 直接DL
⬇ SSDSEダウンロードページを開く
2
ファイルを所定のフォルダに配置する ダウンロードしたCSVを、プロジェクトの data/raw/ フォルダに入れます。
2026 統計・データ解析コンペ/ ├── code/ │ └── 2022_H5_6_shorei.py ← 実行するスクリプト └── data/ └── raw/ SSDSE-B-2026.csv ← ここに置く
3
スクリプトをそのまま実行する ターミナルでプロジェクトルートに移動し、以下を実行します。
python3 code/2022_H5_6_shorei.py
図は html/figures/ に自動保存されます。SSDSE-B 収録外の指標(NYダウ・米FRB金利など)とモデル性能はスクリプト内に原論文の報告値を転記して可視化します。
研究のテーマと目的

著者たちは東京都立大泉高校の生徒である。研究の背景には円安の進行があり、原論文は「令和4年9月5日現在、1ドル=140.42円」と、当時の厳しい日本経済の状況を出発点にしている。

景気の良し悪しを測る代表的な指標のひとつが有効求人倍率(有効求人数を有効求職者数で割った値)である。この値が高いほど「人手を求める企業が多い=景気が良い」と読める。そこで著者は「有効求人倍率を高めるには、どの要素が効いているのか」を突き止めようとした。ただし関係は複雑に絡むと考え、単純な回帰ではなく表現力の高い予測モデル(ニューラルネットワーク)を作り、その中身を SHAP で開けるという二段構えの発想を採った。

0.939
テストデータの決定係数 R²(原論文の報告値・4.1節)高精度な予測モデル
N=705
2005〜2019年 × 47都道府県のパネル(原論文・3.1節)
NYダウ・米FRB金利と有効求人倍率の相関(原論文の報告値・5.3節、SSDSE未収録)
Mish
活性化関数(最適化AdaGrad・中間層16・ノード41)原論文の構成
研究の問い 苦しい状況にあるとされる日本経済の景気を上げるために、景気の指標である有効求人倍率の向上に作用する要素は何か。高精度な予測モデルの「中身」から、それを読み取れないか。
分析のキモ:予測してから「なぜ効くのか」を開ける ニューラルネットワークは精度が高い一方で「なぜその予測になるのか」が見えにくいブラックボックスである。著者はまず高精度モデル(R²=0.939)を作り、その上で SHAP という説明可能AIの手法で各説明変数の効き方を取り出した。「当てる」だけで終わらず「なぜ当たるのか」まで踏み込むのが本研究の見どころ。

高校生の部 SSDSE-B+日銀・FRB・Yahoo! Finance・内閣府 回帰型ニューラルネットワーク SHAP(説明可能AI) 相関分析

使用データと再現可能性の整理

原論文は2005〜2019年・47都道府県のパネル(N=705)を組み、40以上の指標を説明変数に使っている。多くは人口・世帯・教育・消費といった SSDSE 由来の指標だが、景気指標(ドル円為替・日銀金利・米FRB金利・日経平均・NYダウ)は日本銀行・FRB・Yahoo! Financeから、県内総生産は内閣府「県民経済計算」から補っている。景気指標は47都道府県で同じ値を用いる全国共通の系列である。

主なデータと出典(原論文 表1)

役割データ出典本ページでの扱い
目的量月間有効求人倍率(一般)=求人数/求職者数SSDSE-B-2022・SSDSE-2019B実再現(F3103/F3102)
人口構成男性割合・15歳未満/15〜64歳/65歳以上人口割合SSDSE-B実再現
行動一般旅券発行件数・合計特殊出生率SSDSE-B実再現
消費食料費・保健医療費ほか(二人以上の世帯)SSDSE-B実再現
景気指標NYダウ・米FRB金利・日経平均・ドル円・日銀金利日本銀行・FRB・Yahoo! Finance報告値の可視化(SSDSE未収録)
経済規模県内総生産(名目)内閣府 県民経済計算使用しない(SSDSE-B未収録)
モデル性能損失・決定係数 R²=0.939、SHAP貢献度原論文の推定結果報告値の可視化(再計算不可)
再現可能性の整理(このページの図の作り方)
  • 実再現できる部分:目的変数の月間有効求人倍率(一般)F3103 月間有効求人数F3102 月間有効求職者数 から計算でき、年齢構成・一般旅券発行件数・消費支出も SSDSE-B に列がある。そこで図1(有効求人倍率の推移)・図2(年齢構成との関係)・図3(各説明変数との相関)をSSDSE-B の実データで再計算する。原論文が SHAP で示した符号の主張を、単純な相関係数で追試する位置づけである。
  • 報告値の可視化(再計算ではない):原論文の中心である回帰型NN+SHAPの数値(損失・R²・貢献度)は、モデルもハイパーパラメータも乱数も完全一致させない限り再現できない。また景気指標(NYダウ・米FRB金利・日経平均・ドル円・日銀金利)は SSDSE-B に列が無い。よって図4は原論文の報告値(R²=0.939、損失、相関の向き)を転記して可視化する。
  • 新しい数値の捏造はしない:報告値と再計算値はラベルで分離する。県内総生産(GDP)など SSDSE-B に無い列は一切使わない。図3の相関は SHAP そのものではなく単純相関であり、期間(本ページは2023年断面、原論文は2005〜2019年パネル)も手法も異なる点を図注に明記する。

分析の流れ:NN構築 → SHAP → 解釈

分析の流れ
データ整備
2005〜2019
×47都道府県
N=705
NN構築
Mish・AdaGrad
MSE+L2
高精度化
R²=0.939
(テスト)
SHAP
各要因の
貢献度・向き
解釈
米国連動・
男女格差など

① データセットの加工と前処理(原論文 3章)

各年・各都道府県の月間有効求人倍率(一般)を目的変数に、人口・世帯・教育・消費・景気指標など多数の指標を説明変数として並べる。人数系の指標は総人口で割って規模の違いをそろえ、N=705を訓練60%・検証20%・テスト20%に分けたうえで標準化(平均0・分散1)する。

② 回帰型ニューラルネットワークの構築(原論文 2.1・4.1)

全結合層のみの回帰型ニューラルネットワークPyTorch で組む。活性化関数は MishReLUに似た滑らかな曲線)、損失は平均二乗誤差に L2正則化を足したもの。最適化は精度が最も安定した AdaGrad を選び、中間層16・ノード41・正則化係数0.002・バッチ3・学習率0.01・150エポックで学習した。

③ SHAP で予測の中身を開ける(原論文 2.2・4.2)

SHAP(SHapley Additive exPlanations)は、モデルの各予測に対してどの説明変数がどれだけ効いたかを定量化する説明可能AIの手法。NNには DeepExplainer を用い、各説明変数の貢献度(重要度)と、予測値との相関の向きを可視化する。

④ 結果を解釈する(原論文 5章)

SHAP の結果から、社会・経済(米国株・金利)、生活環境(消費)、教育、人口構成の各分野で、有効求人倍率に効く要因を読み解く。

⑤ SSDSE-Bでの実再現(本ページ)

目的変数の有効求人倍率と、SSDSEに収録された説明変数(年齢構成・一般旅券発行件数・消費)について、実データで推移と相関を確かめる。SHAPの数値そのものは再現できないため、原論文の符号の主張を単純相関で追試する。

SHAPの相関は「向き」であって因果ではない SHAP は「この変数が予測をどちら向きにどれだけ動かしたか」を示すが、因果の順序(何が先に起きたか)は分からない。著者自身も「事象の発生順序は読み取れない」と限界を明記している。相関の向きが分かっても、その変数を動かせば景気が上向くとは限らない。
1
図1:有効求人倍率の推移(実再現)

研究の主役は目的変数の有効求人倍率である。まずこの指標が景気の波をどう映すかを、SSDSE-Bで全国について実再現する。ここは都道府県データから計算できる実再現部分である。

やってみようSSDSE-B を読み込み、有効求人倍率と各説明変数の指標を作る【実再現の準備】
  • ① このコードの目的:SSDSE-B-2026 を cp932・ラベル行 skiprows=[1] で読み込み、F3103 月間有効求人数F3102 月間有効求職者数・年齢別人口・一般旅券発行件数・消費支出を数値化する。そこから目的変数の有効求人倍率(F3103/F3102)と、男性割合・年齢構成・旅券発行率などの説明変数を作る。
  • ② 前後のつながり:この読み込みが実再現(図1〜図3)の土台になる。景気指標(NYダウ・米FRB金利)や県内総生産はSSDSE-Bに無いが、有効求人倍率とその主要な説明変数はここから再計算できる。
📝 コード
72
73
74
75
76
77
78
79
80
81
82
83
84
85
df = pd.read_csv(DATA_B, encoding='cp932', skiprows=[1])
NUM_COLS = ['F3103', 'F3102', 'A1101', 'A110101',
            'A1301', 'A1302', 'A1303', 'A4103', 'G5105', 'L322101', 'L322106']
for c in NUM_COLS:
    df[c] = pd.to_numeric(df[c], errors='coerce')
df['年度'] = df['SSDSE-B-2026'].astype(int)

# 指標づくり(SSDSE-B に実在する列だけを使用)
df['有効求人倍率'] = df['F3103'] / df['F3102']            # 月間有効求人数 / 月間有効求職者数
df['男性割合']   = df['A110101'] / df['A1101'] * 100      # 総人口に占める男性の割合
df['若年割合']   = df['A1301']  / df['A1101'] * 100      # 15歳未満人口割合
df['生産年齢割合'] = df['A1302'] / df['A1101'] * 100      # 15〜64歳人口割合
df['高齢割合']   = df['A1303']  / df['A1101'] * 100      # 65歳以上人口割合
df['旅券発行率'] = df['G5105']  / df['A1101'] * 1000     # 一般旅券発行件数(人口千人あたり)
  • ④ 実行結果の読み取り:エラーなく読み込めれば準備完了。有効求人倍率を「完成した列」として持たず、求人数÷求職者数で自分で組み立てるのがポイント。SSDSE-Bは都道府県粒度・2012〜2023年で、原論文の2005〜2019年パネルとは期間が異なる。
やってみよう全国の月間有効求人倍率(一般)の推移を計算する【実再現・図1】
  • ① このコードの目的:各年の「求人数の合計/求職者数の合計」で全国の有効求人倍率を求め、都道府県の最小〜最大の幅も出す。原論文の被説明変数そのものを、実データで時系列に可視化する。
  • ② 前後のつながり:原論文は有効求人倍率を「景気を表す指標」として分析の中心に据えた。まずその指標が実際にどう動いてきたかを確かめる。
📝 コード
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
nat = (df.dropna(subset=['F3103', 'F3102'])
         .groupby('年度')
         .apply(lambda g: g['F3103'].sum() / g['F3102'].sum())
         .rename('全国有効求人倍率')
         .reset_index())
band = (df.dropna(subset=['有効求人倍率'])
          .groupby('年度')['有効求人倍率']
          .agg(['min', 'max']).reset_index())

years = nat['年度'].values
peak_year = int(nat.loc[nat['全国有効求人倍率'].idxmax(), '年度'])
peak_val = nat['全国有効求人倍率'].max()
val_2012 = nat['全国有効求人倍率'].iloc[0]
val_2020 = float(nat.loc[nat['年度'] == 2020, '全国有効求人倍率'].values[0])
print(f"対象年度: {years.min()}{years.max()}{len(years)}か年)")
print(f"全国の有効求人倍率: {val_2012:.3f}{years.min()}年) → ピーク {peak_val:.3f}{peak_year}年)")
▼ 実行結果
=== [1] 月間有効求人倍率(一般)の推移(全国, 実再現) ===
対象年度: 2012〜2023(12か年)
全国の有効求人倍率: 0.708(2012年) → ピーク 1.517(2018年)
コロナ禍の 2020年に 1.056 まで低下(景気後退を反映)
  • ④ 実行結果の読み取り:全国の有効求人倍率は0.708(2012年)→ 1.517(2018年ピーク)と上昇(アベノミクス期の景気拡大)した後、コロナ禍の2020年に1.056へ急落し、その後回復している。有効求人倍率が景気の波をよく捉えていることが実データで確認でき、これを目的変数にした原論文の着眼が妥当だと分かる。
全国の月間有効求人倍率の推移(SSDSE-B F3103/F3102・実再現)
図1:全国の月間有効求人倍率(一般)の推移(2012〜2023年)。実再現。SSDSE-B の F3103(求人数)/F3102(求職者数)から算出。0.708(2012)→1.517(2018ピーク)→コロナ禍2020に1.056へ低下。期間注:原論文は2005〜2019年パネルで、本ページは収録年(2012〜2023)での実再現。
📊 この図の読み方
山と谷
2018年前後に山(好景気)、2020年に谷(コロナ禍の景気後退)。有効求人倍率が景気を映すことが分かる。
1.0の赤線
倍率1.0は「求人=求職」。これを超えると人手不足(売り手市場)の目安。
位置づけ
実再現。原論文の目的変数そのものを、SSDSE-Bの実データで可視化した。
2
図2:有効求人倍率と年齢構成(実再現)

原論文の主張のうち直感に反するのが「65歳以上割合は正・15〜64歳割合は負」である。これをSSDSE-Bの実データで検証する。

やってみよう有効求人倍率と年齢構成(65歳以上/15〜64歳割合)の相関を計算する【実再現・図2】
  • ① このコードの目的:2023年の47都道府県で、有効求人倍率と「65歳以上人口割合」「15〜64歳人口割合」の相関scipy.stats.pearsonr で求める。原論文の「65歳以上は正・15〜64歳は負」という一見不思議な主張を実データで検証する。
  • ② 前後のつながり:原論文はSHAPから「有効求人倍率は65歳以上割合と正、15〜64歳割合と負」と報告した。有効求人倍率の定義(求人÷求職)に生産年齢人口が絡むためだと説明している。この符号を実データで追試する。
📝 コード
140
141
142
143
144
145
d23 = df[df['SSDSE-B-2026'] == 2023].dropna(subset=['有効求人倍率']).copy()
r_old, p_old = stats.pearsonr(d23['有効求人倍率'], d23['高齢割合'])
r_work, p_work = stats.pearsonr(d23['有効求人倍率'], d23['生産年齢割合'])
print(f"標本数 N = {len(d23)} 都道府県(2023年)")
print(f"有効求人倍率 × 65歳以上人口割合  : r = {r_old:+.4f}(p = {p_old:.4f})… 原論文の報告は正 → 符号一致")
print(f"有効求人倍率 × 15〜64歳人口割合 : r = {r_work:+.4f}(p = {p_work:.4f})… 原論文の報告は負 → 符号一致")
▼ 実行結果
=== [2] 有効求人倍率 × 年齢構成(2023年・47都道府県, 実再現) ===
標本数 N = 47 都道府県(2023年)
有効求人倍率 × 65歳以上人口割合  : r = +0.2871(p = 0.0504)… 原論文の報告は正 → 符号一致
有効求人倍率 × 15〜64歳人口割合 : r = -0.3129(p = 0.0323)… 原論文の報告は負 → 符号一致
  • ④ 実行結果の読み取り:実データでも65歳以上割合 r=+0.287、15〜64歳割合 r=−0.313と、原論文の報告どおりの符号になった。高齢化が進む(=生産年齢人口が相対的に少ない)地域ほど、求職者が少なく有効求人倍率が高く出やすい、という原論文の説明と整合する。符号が両方一致した点は、SHAPの主張の妥当性を裏づける。
有効求人倍率と年齢構成の散布図(2023年・47都道府県・実再現)
図2:有効求人倍率と年齢構成(2023年・47都道府県)。実再現。左=65歳以上人口割合(r=+0.287)、右=15〜64歳人口割合(r=−0.313)。いずれも原論文の報告した符号(正・負)と一致。有効求人倍率の定義(求人÷求職)と生産年齢人口の関係による、と原論文は説明している。
📊 この図の読み方
左(右上がり)
65歳以上割合が高い県ほど有効求人倍率が高い傾向。原論文の「正」と一致。
右(右下がり)
15〜64歳割合が高い県ほど有効求人倍率が低い傾向。原論文の「負」と一致。
なぜ逆符号?
高齢者割合が上がると相対的に生産年齢人口割合は下がる。求職者は生産年齢人口と密接なので、両者の符号が逆になる、と原論文は説明する。
3
図3:有効求人倍率と各説明変数の相関(実再現)

原論文がSHAPで示した符号の主張を、SSDSE-B収録の説明変数について単純相関で追試する。SHAPの数値そのものは再現できないため、あくまで符号の照合である。

やってみよう有効求人倍率と各説明変数のピアソン相関を計算する【実再現・図3】
  • ① このコードの目的:2023年の47都道府県で、有効求人倍率と各説明変数(65歳以上割合・合計特殊出生率・男性割合・食料費・保健医療費・15歳未満割合・15〜64歳割合・一般旅券発行件数)の相関係数を一括で計算し、原論文がSHAPで報告した符号と照合する。
  • ② 前後のつながり:これは SHAP そのものの再現ではなく、単純なピアソン相関での追試である。SHAPは非線形の貢献度を測るのに対し、相関は直線的な結びつきの強さを測る。符号の向きが一致するかを見る。
📝 コード
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
CORR_VARS = [
    ('65歳以上人口割合',      '高齢割合',   '+'),
    ('合計特殊出生率',        'A4103',      None),
    ('総人口に占める男性割合', '男性割合',   '+'),
    ('食料費(二人以上世帯)', 'L322101',    '+'),
    ('保健医療費(二人以上世帯)', 'L322106', None),
    ('15歳未満人口割合',      '若年割合',   None),
    ('15〜64歳人口割合',      '生産年齢割合', '-'),
    ('一般旅券発行件数(率)', '旅券発行率', '-'),
]
rows3 = []
print(f"{'説明変数':<26}{'相関係数':>9}{'p値':>9}   原論文SHAPの符号 / 一致")
for name, col, reported in CORR_VARS:
    dd = d23.dropna(subset=[col])
    r, p = stats.pearsonr(dd['有効求人倍率'], dd[col])
    if reported is None:
        judge = '(報告なし)'
    else:
        same = (reported == '+' and r > 0) or (reported == '-' and r < 0)
        judge = f'報告={reported} → ' + ('符号一致' if same else '符号不一致')
    print(f"{name:<26}{r:>+9.3f}{p:>9.3f}   {judge}")
    rows3.append((name, r, p, reported))
▼ 実行結果
=== [3] 有効求人倍率と各説明変数のピアソン相関(2023年・47都道府県, 実再現) ===
説明変数                           相関係数       p値   原論文SHAPの符号 / 一致
65歳以上人口割合                    +0.287    0.050   報告=+ → 符号一致
合計特殊出生率                      +0.298    0.042   (報告なし)
総人口に占める男性割合                  +0.022    0.885   報告=+ → 符号一致
食料費(二人以上世帯)                  -0.222    0.133   報告=+ → 符号不一致
保健医療費(二人以上世帯)                -0.310    0.034   (報告なし)
15歳未満人口割合                    -0.017    0.908   (報告なし)
15〜64歳人口割合                   -0.313    0.032   報告=- → 符号一致
一般旅券発行件数(率)                  -0.356    0.014   報告=- → 符号一致
  • ④ 実行結果の読み取り:符号は概ね一致する。一般旅券発行件数 r=−0.356(原論文:負→一致)、15〜64歳割合 −0.313(負→一致)、65歳以上割合 +0.287(正→一致)。一方、男性割合は +0.022 とほぼ無相関で、原論文がSHAPで「貢献度が高い」とした点とは単純相関では強さが出ない食料費は −0.222で原論文の「正」と符号が不一致。SHAP(非線形・多変数調整済み)と単純相関(2変数・線形)の違い、期間の違い(2005〜2019 vs 2023)が効いていると考えられる。捏造せず、一致・不一致をそのまま示す。
有効求人倍率と各説明変数の相関係数(2023年・47都道府県・実再現)
図3:有効求人倍率と各説明変数のピアソン相関(2023年・47都道府県)。実再現(SHAPではなく単純相関)。青=正、赤=負、*は p<0.05。一般旅券発行件数(−0.356)・15〜64歳割合(−0.313)・65歳以上割合(+0.287)は原論文の符号と一致。男性割合(+0.022)と食料費(−0.222)は原論文のSHAP主張とは強さ・符号が異なる。
📊 この図の読み方
0の縦線
右(正)なら「増えるほど有効求人倍率も高い」、左(負)なら逆。*は無相関検定で有意(p<0.05)。
一致した符号
一般旅券発行件数・15〜64歳割合・65歳以上割合は、原論文のSHAPの向きと同じ。
ずれた符号
男性割合・食料費はSHAPの主張とずれる。SHAP(非線形・多変数)と単純相関(線形・2変数)、および期間の違いによる。無理に合わせず差をそのまま示す。
4
図4:モデル性能とSHAPの相関の向き(報告値)

ここからが原論文の中心である回帰型NN+SHAPの成果。これらはモデルの完全一致が必要で、景気指標はSSDSE-Bに無いため、原論文の報告値を転記して可視化する(再計算ではない)。

やってみよう原論文の報告値(モデル性能・SHAPの相関の向き)を転記する【報告値の可視化】
  • ① このコードの目的:モデルの損失(train 0.00642/validation 0.0101/test 0.0104)とテストの決定係数 R²=0.939、およびSHAPで報告された相関の向き(符号)を、原論文どおりに転記する。再計算ではなく報告値の転記。
  • ② 前後のつながり:ここが原論文の中心成果である。回帰型NN+SHAPの数値はモデルを完全一致させない限り再現できず、景気指標(NYダウ・米FRB金利)はSSDSE-Bに無い。よって符号と性能を報告値として書き出す。
📝 コード
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
LOSS = [('train(訓練)', 0.00642), ('validation(検証)', 0.0101), ('test(テスト)', 0.0104)]
R2 = 0.939
print("予測モデルの損失(報告値):")
for name, v in LOSS:
    print(f"  {name:<20}{v:.5f}")
print(f"テストデータの決定係数 R² = {R2}(報告値)")

# SHAP で報告された相関の「向き」(符号のみ。大きさは原論文に数値報告なし)
DIRECTION = [
    ('NYダウ平均株価',        +1, '強い正(SSDSE未収録)'),
    ('米FRB金利',            +1, '強い正(SSDSE未収録)'),
    ('総人口に占める男性割合', +1, '正・貢献度高'),
    ('65歳以上人口割合',      +1, '正'),
    ('食料費(消費支出系)',   +1, '正'),
    ('15〜64歳人口割合',     -1, '負'),
    ('一般旅券発行件数',      -1, '負'),
]
print("\nSHAP で報告された相関の向き(符号のみ・大きさは数値報告なし):")
for name, sign, note in DIRECTION:
    print(f"  {name:<20}{'+' if sign > 0 else '−'}  {note}")
print("※NYダウ・米FRB金利・日経平均・ドル円・日銀金利・県内総生産は SSDSE-B に無く再計算不可")
▼ 実行結果
=== [4] 原論文の報告値:モデル性能とSHAPの相関の向き ===
予測モデルの損失(報告値):
  train(訓練)           0.00642
  validation(検証)      0.01010
  test(テスト)           0.01040
テストデータの決定係数 R² = 0.939(報告値)

SHAP で報告された相関の向き(符号のみ・大きさは数値報告なし):
  NYダウ平均株価            +  強い正(SSDSE未収録)
  米FRB金利              +  強い正(SSDSE未収録)
  総人口に占める男性割合         +  正・貢献度高
  65歳以上人口割合           +  正
  食料費(消費支出系)          +  正
  15〜64歳人口割合          −  負
  一般旅券発行件数            −  負
※NYダウ・米FRB金利・日経平均・ドル円・日銀金利・県内総生産は SSDSE-B に無く再計算不可
  • ④ 実行結果の読み取り:性能:訓練・検証・テストの損失がいずれも0.006〜0.011と小さく、テストの決定係数 R²=0.939。過学習は問題にならず、精度の高いモデルが作れたと原論文は述べる。② SHAPの向き:NYダウ・米FRB金利は強い正(日本の景気は米国経済に連動)、男性割合は正・貢献度高(男女格差)、65歳以上割合は正・15〜64歳割合は負、一般旅券発行件数は負、食料費は正。大きさは原論文に数値報告がないため符号のみを示す。すべて原論文の報告値である。
予測モデルの性能とSHAPで報告された相関の向き(報告値の可視化)
図4:予測モデルの性能とSHAPの相関の向き。報告値の可視化(再計算ではない)(原論文 4.1・5.3節)。左=損失(train/validation/test)とR²=0.939。右=SHAPで報告された相関の向き(符号のみ・棒の長さは大きさを表さない)。NYダウ・米FRB金利は SSDSE未収録の景気指標。数値・符号はすべて原論文の報告値。
📊 この図の読み方
左:損失は小さい
train/validation/testの損失がどれも0.01前後で、R²=0.939。予測が実測によく合う高精度モデル。
右:符号のみ
青=正、赤=負。棒の長さは大きさではなく向きを表す(原論文に数値報告がないため)。
米国連動
NYダウ・米FRB金利が強い正。日本の景気が米国経済に強く連動することを示す、原論文のハイライト。

結果の解釈

SHAPの結果から、著者は分野ごとに有効求人倍率に効く要因を読み解いた(原論文 5章)。要点を整理する。

社会・経済:日本の景気は米国経済に強く連動(原論文 5.3)

全説明変数の中でもNYダウ平均株価・米FRB金利が強い正の相関を示した。著者は、米国が日本の2番目の輸出入相手国であり、日本が2019年に世界最大の対米投資国となった(図5・外務省)ことを挙げ、日米の経済的な結びつきの強さが有効求人倍率=景気に表れていると解釈する。

人口構成:年齢構成と男女格差(原論文 5.3)

有効求人倍率は65歳以上割合と正・15〜64歳割合と負の関係にある。求職者数が生産年齢人口と密接なため、定義上こうした逆符号が生じると説明する(本ページ図2で符号一致を確認)。さらに総人口の男性割合の貢献度が高く正で、著者は「男性割合が高い地域ほど景気が良い=明らかな男女格差」と読み、女性の社会進出の促進が景気にも良い影響を与えると提言する。

生活環境・教育:景気に左右されにくい費用(原論文 5.1・5.2)

保健医療費・住居費・被服費などの貢献度は小さい。生活に不可欠な費用は景気の良し悪しに左右されにくいためと考えられる。一方、消費支出の中では食料費の貢献度が高く正で、好景気だと外食などのサービス消費が増えるためと解釈する。教育費も景気にあまり左右されないことが示された。

行動:一般旅券発行件数は負(原論文 5.3)

一般旅券発行件数は有効求人倍率と負の相関。著者は2008年のリーマンショック直後に円高が進み、不景気なのに海外旅行者が増えた例を挙げ、同様の要因(不景気・円高で海外旅行が増える)が働いていると考察する(本ページ図3で符号一致を確認)。

この解釈の限界 SHAPが示すのは各説明変数と予測結果の関連であり、因果の順序は読み取れない。「男性割合が高いと景気が良い」も、両方を動かす別の要因(産業構造・都市度)による見かけの関係の可能性がある。著者自身、貢献度の細かい順位はパラメータで変動しうるため慎重に扱うべきだと述べている。

まとめと今後の課題

本研究は、景気の指標である有効求人倍率を高める要因は何かという問いに、回帰型ニューラルネットワークSHAPで挑んだ。テストの決定係数 R²=0.939(報告値)という高精度モデルを作り、その中身をSHAPで開けて、NYダウ・米FRB金利の強い正の相関(米国連動)、男性割合の正(男女格差)、65歳以上は正・15〜64歳は負、一般旅券発行件数の負などを読み取った(いずれも報告値)。本ページでは、目的変数の有効求人倍率(図1)、年齢構成との関係(図2)、各説明変数との相関(図3)をSSDSE-Bで実再現し、SHAPの符号の主張の多くが実データでも成り立つことを確かめた。モデル性能と景気指標は報告値として切り分けた。高校生が「予測してから中身を説明する」現代的な分析に踏み込んだ点が見どころである。

この研究の限界(原論文 6章) ①SHAPの貢献度はパラメータのわずかな違いで変動するため、細かい順位への言及は慎重を要する。②有効求人倍率は就職状況の指標であり、あらゆる分野の景気指標として常に使えるかは議論が必要。③SHAPは関連性を示すが事象の発生順序(因果)は読めない。④1年ごとのデータのため、長期・季節変動は説明できない(Prophet等の時系列手法が今後の課題)。⑤本ページの図3・図4はSSDSE未収録・モデル依存のため報告値の可視化にとどまる。
この研究から学べること 高精度な予測モデルを作るだけでなく、SHAPで「なぜ効くのか」を開けるという現代的な分析の型、そして実再現できる部分と報告値を切り分ける誠実さ。審査会も、高校生が説明可能AIを使いこなし、身近な景気の問いに定量的に迫った点を評価し、審査員奨励賞に選んだ。

データ・コードのダウンロード

このページの実再現の図(図1〜図3)は、以下から再現できます。

🐍 再現コード(.py) 📊 SSDSE-B-2026.csv

※ 図1(有効求人倍率の推移)・図2(年齢構成との関係)・図3(各説明変数との相関)はSSDSE-B の F3103/F3102 ほかから算出した実再現です。図4(モデル性能とSHAPの相関の向き)は、回帰型NN+SHAPの数値と景気指標(NYダウ・米FRB金利など)がモデル依存・SSDSE-B外のため、原論文の報告値を可視化したものです(新たな数値の捏造はしていません)。県内総生産(GDP)などSSDSE-Bに無い列は使用していません。

⚠️ よくある誤解と注意点

この研究を読むとき・まねするときに陥りやすい誤解を整理する。

誤解1:「SHAPで貢献度が高い=その変数を動かせば景気が上がる」
SHAPは「予測にどれだけ効いたか」を示すが、因果の順序は分からない。著者自身「事象の発生順序は読み取れない」と明記している。NYダウを上げれば日本の景気が上がる、とは言えない。
誤解2:「決定係数R²=0.939だから、この結論は完全に正しい」
が高いのは「有効求人倍率をよく予測できる」という意味で、各要因の解釈が正しいことは保証しない。SHAPの貢献度はパラメータの微妙な違いで変動し、順位は慎重に扱う必要がある。
誤解3:「有効求人倍率はSSDSE-Bの列を1つ読めば手に入る」
SSDSE-B に「有効求人倍率」という完成した列は無い。F3103 月間有効求人数F3102 月間有効求職者数 で割って自分で作る。既製の指標に頼らず、実在する列から指標を組み立てるのがデータ加工の基本。
誤解4:「このページの図3・図4は原論文と同じSHAPの数値を計算し直したもの」
図1〜図3はSSDSE-Bからの実再現だが、図3はSHAPではなく単純相関で符号を照合したもの。図4(モデル性能・SHAPの向き)はモデル依存・SSDSE外のため報告値の可視化(再計算ではない)。図注に区別を明記している。

📖 用語集(この記事に出てくる統計・AI用語)

クリックすると各用語の詳しい解説ページに移動できます。

ニューラルネットワーク
入力に線形変換と活性化関数を繰り返して出力を作る予測モデル。本研究は全結合層のみの回帰型NNで有効求人倍率を予測した。
活性化関数(Mish)
各ニューロンの出力を非線形に変換する関数。本研究はReLUに似て滑らかなMish関数を使い、勾配消失を起こしにくくした。
ReLU
負の入力を0にする代表的な活性化関数。Mishの比較対象として原論文で言及される。
L2正則化
重みの二乗和を損失に足して回帰式を単純に保ち、過学習を防ぐ工夫。本研究はMSEにL2項を加えた損失を使った。
SHAP
各予測に対する説明変数の貢献度を、協力ゲーム理論のシャープレイ値で定量化する説明可能AIの手法。本研究の解釈の中心。
説明可能AI(XAI)
ブラックボックスなAIの予測理由を人が理解できる形で示す技術の総称。SHAPはその代表例。
決定係数(R²)
予測が実測をどれだけ説明できるかを0〜1で表す指標。本研究のテストではR²=0.939(報告値)と高精度だった。
標準化
平均0・分散1に変換する前処理。本研究は訓練データで基準を作り検証・テストにも同じ基準を適用した。
相関(相関係数)
2つの量が一緒に動く強さを−1〜+1で表す。本ページの図2・図3は有効求人倍率と各説明変数の相関を実データで計算した。
因果関係
一方が原因で他方が結果という関係。SHAPの貢献度や相関があっても因果は言えない。
SSDSE
教育用標準データセット。本ページの実再現はSSDSE-B(都道府県別)の求人・求職・人口・消費を用いる。景気指標(NYダウ等)や県内総生産は収録されていない。

📐 使っている手法をわかりやすく解説

この研究で使われている手法を、手を動かす順に説明する。

全体像
まず回帰型ニューラルネットワークで有効求人倍率を高精度に予測できるモデルを作り → その予測の中身をSHAPで開けて各要因の効き方を読み → 主張の符号を単純相関で追試する。「当てる」だけで終わらず「なぜ当たるか」を説明するのが見どころ。
🧠 回帰型ニューラルネットワーク
何をする
入力(説明変数)に線形変換と活性化関数を繰り返し、有効求人倍率を予測する。損失(MSE+L2)が最小になるよう重みを学習する。
読み方
決定係数や損失で精度を見る。本研究はR²=0.939(報告値)で予測が実測によく合う。
注意
精度が高くても中身は見えにくい(ブラックボックス)。過学習を避けるため正則化・データ分割・標準化が要る。
🔍 SHAP(説明可能AI)
何をする
各予測に対し、どの説明変数がどちら向きにどれだけ効いたかを定量化する。全体の貢献度ランキングと、各変数と予測値の相関の向きが分かる。
なぜ有効
ブラックボックスなモデルの「理由」を取り出せる。本研究はNYダウ・米FRB金利・男性割合などの効き方を読み解いた。
注意
貢献度はパラメータで変動し、順位は慎重に。関連性は示すが因果の順序は読めない。
🔗 相関分析(符号の追試)
何をする
有効求人倍率と各説明変数の相関係数を計算し、原論文がSHAPで示した符号と一致するかを確かめる。本ページの図2・図3。
読み方
符号(+/−)が関係の向き、絶対値が強さ。無相関検定のp値で「偶然か」を確認する。
注意
単純相関は2変数・線形の関係しか見ない。SHAP(非線形・多変数調整済み)と符号がずれることがある(本研究の食料費・男性割合)。

🚀 発展の可能性(結果 X → 新仮説 Y → 課題 Z)

この研究の「有効求人倍率は米国経済や人口構成に強く関連する」という結論は、次の研究の出発点になる。

発展1:長期・季節変動を捉える(著者の今後の展望)
結果X
1年ごとのデータでR²=0.939の高精度モデル(報告値)。ただし長期・季節変動は説明できない。
新仮説Y
月次データや時系列手法(Prophet等)を使えば、景気の波の周期や季節性まで捉えられるのではないか。
課題Z
月次の有効求人倍率と景気指標を並べ、トレンド・季節成分を分解して予測精度と解釈を高める。
発展2:年齢構成と有効求人倍率の関係を全国で追う
結果X
65歳以上割合と正・15〜64歳割合と負(実再現で符号一致)。定義上の逆符号が生じる。
新仮説Y
高齢化が進む地域ほど、人手不足による有効求人倍率の上昇が今後さらに強まるのではないか。
課題Z
SSDSE-Bの時系列(2012〜2023)で、年齢構成の変化と有効求人倍率の変化を都道府県別に追跡する。

🎯 自分でやってみよう(5つのチャレンジ)

再現コードを少し変えるだけで試せる課題を、易しい順に用意した。

★☆☆☆☆ 難易度1
別の年で有効求人倍率ランキングを作る
図3は df[df['SSDSE-B-2026']==2023] で2023年を選んでいる。ここを2019年や2020年に変えて、有効求人倍率の高い県・低い県を並べてみよう。
★★☆☆☆ 難易度2
男性割合との相関を年ごとに見る
原論文は男性割合の貢献度が高いと報告したが、2023年断面ではほぼ無相関だった。2012〜2023の各年で相関を計算し、年によって変わるかを確かめてみよう。
★★★☆☆ 難易度3
求人数と求職者数を別々に見る
有効求人倍率(F3103/F3102)ではなく、求人数・求職者数それぞれを人口で割った値を年齢構成と相関させ、どちらが倍率の動きを主に決めているかを調べてみよう。
★★★★☆ 難易度4
重回帰で符号を確かめる
有効求人倍率を目的変数に、年齢構成・旅券発行率・消費支出を説明変数にした重回帰を組み、各係数の符号が図3の単純相関と一致するかを見てみよう。
★★★★★ 難易度5
なぜ景気指標の相関は再現できないのか説明する
原論文の中心(NYダウ・米FRB金利の強い正の相関)が、なぜSSDSE-Bで実再現できないのかを、変数の有無SHAPと単純相関の違いの2点から自分の言葉で説明してみよう。

💼 この手法は実社会でこう使われている

「高精度モデルを作り、SHAPで理由を説明する」発想は、金融・製造・医療で広く使われている。

🏦
金融の与信・不正検知
審査モデルの判断根拠をSHAPで説明し、「なぜ否決か」を顧客・監督当局に示す。説明責任のためXAIが不可欠。
🏭
製造の品質・故障予測
設備の故障を予測するモデルの寄与要因をSHAPで特定し、どのセンサー値に手を打つべきかを判断する。
🏥
医療のリスク予測
発症リスクを予測するモデルで、各患者ごとにどの検査値が効いたかをSHAPで示し、医師の意思決定を支える。

🤔 よくある質問(読者からの想定Q&A)

この研究を読んで浮かびやすい疑問に答える。

Q. なぜ単純な回帰ではなくニューラルネットワークを使ったの?
A. 景気には多くの要因が複雑に絡むため、直線的な関係だけでは捉えにくいからです。表現力の高いニューラルネットワークで高精度に予測し(R²=0.939・報告値)、その中身をSHAPで開けることで、非線形な効き方も含めて要因を読み取ろうとしました。
Q. このページの図は原論文と同じ数値ですか?
A. 図1(有効求人倍率の推移)・図2(年齢構成との関係)・図3(各説明変数との相関)はSSDSE-Bからの実再現です。ただし図3はSHAPではなく単純相関で符号を照合したもの。図4(モデル性能・SHAPの向き)は回帰型NN+SHAPの数値と景気指標がモデル依存・SSDSE外のため、原論文の報告値を転記して可視化しています。新たな数値の捏造はしていません。
Q. 図3で男性割合や食料費が原論文とずれたのはなぜ?
A. 原論文のSHAPは非線形・多変数を調整済みの貢献度、本ページの図3は2変数の単純相関で、見ているものが違います。さらに原論文は2005〜2019年パネル、本ページは2023年断面と期間も異なります。だからこそ「符号が一致した変数(旅券・年齢構成)」と「ずれた変数(男性割合・食料費)」をそのまま示し、無理に合わせていません。
Q. 「NYダウを上げれば日本の景気が良くなる」ということ?
A. いいえ。SHAPや相関は「一緒に動く向き」を示すだけで、因果ではありません。著者自身「事象の発生順序は読み取れない」と明記しています。NYダウと有効求人倍率が連動するのは、両方を動かす世界経済という共通の背景があるためと考えるのが自然です。

✅ 理解度チェック(4問)

この論文を理解できたか、クリックで確認しましょう。間違えても解説が出ます。

🐍 ブラウザで動かす — インストール不要でこの論文の分析を再現する

このページの分析は、この画面の中でそのまま実行できます。 Python をインストールする必要も、CSV をダウンロードする必要もありません。 下のセルの 「▶ ブラウザで実行」 を上から順に押すか、 「▶ 最初から全部実行」 で一気に流してください。 表示されるのは、本文の図表とまったく同じ計算の結果です (動かしているのは再現スクリプト code/2022_H5_6_shorei.py そのもの)。

コードは書き換えられます。「✏️ 書き換える」で数字や変数を変えて ▶ を押すと、 結果がどう変わるかをその場で確かめられます(元に戻すボタンつき)。 ページを開いた時点で裏で実行環境の準備が始まっているので、待ち時間はほとんどありません。 初回だけ実行環境の取得にインターネット接続が必要です。