論文一覧に戻る 🕸 論文ネットワーク 🗺 用語ネットワーク 統計データ分析コンペ 教育用再現集
優秀賞[大学生・一般の部] ★

市区町村別に見た
少子化の要因分析

⏱️ 推定読了時間: 約30分
2021年度(令和3年度)統計データ分析コンペティション | 倉島 茂之(東京理科大学経営学部経営学科) | 市区町村別データ(SSDSE・e-Stat・厚労省ほか) | LightGBM・クラスタリング・特徴量重要度
🔬 SHAP🔬 クラスター分析🔬 交差検証🔬 勾配ブースティング🏷 人口・少子化🏷 移住・人口移動🏷 財政・行政
🔬 手法タグ / 🏷 応用タグ(クリックで同タグの論文をネットワーク検索)
🔬 再現カルテ — 原論文のデータが手に入らないため、代替データで再現

この教材は、原論文が使ったデータそのものを使えていません。そこで代わりのデータで同じ問いを追いかけ、結論の向き(増える/減る、強い/弱い)が原論文と一致するかを確かめます。「同じ数値が出る」ことは目標にしていません。

原論文が使ったデータ厚生労働省人口動態保健所・市区町村別統計・住民基本台帳移動報告・SSDSE-A
分析単位:市区町村
中核手法:LightGBM・回帰分析・クラスタリング
この教材が使うデータ
原論文(PDF)市区町村別に見た少子化の要因分析
優秀賞/倉島 茂之(東京理科大学経営学部経営学科)
✅ この教材でできること
  • 分析に使うデータは同梱済みで、ブラウザ上でそのまま読み込める
  • 数値・図を最後まで再計算できる(Hausman 検定・相関分析)
⚠️ この教材ではできないこと(原論文との違い)
  • 分析の細かさが原論文と違う:論文=市区町村別少子化(LightGBM)。教材=SSDSE-B都道府県
  • 原論文は SSDSE-A を使っているが、この教材は SSDSE-B を使っている(ただし原論文には種別が明記されておらず、本文からの推定。読むときは原論文で確かめてほしい)
📄 原論文との違いを、もっと詳しく
📄 原論文:市区町村別データを LightGBM で学習し、特徴量重要度とクラスタリングで少子化要因を市区町村レベルで分析。
📘 本教材:SSDSE-B-2026(都道府県データ)で LightGBM・クラスタリングの流れを再現。
⚠️ 注意:粒度が市区町村 → 都道府県(n=1741 → 47)に変わるため、機械学習モデルの性能・重要度の値は原論文と大きく異なりうる。
🚀 原論文と同じ粒度で挑戦したい人へ

原論文と同じ粒度のデータは、この教材にも同梱しています。これを読み込めば、原論文と同じ細かさで分析をやり直せます(下の「🐍 ブラウザで動かす」でコードを書き換えて試せます)。ただし原論文が使った項目がすべて収録されているとは限りません。足りない項目は、上の「できないこと」に書いた出典から取ってくる必要があります。

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

📝 3行で分かる要約

目次

  1. 研究のテーマと目的
  2. データと変数・再現の整理
  3. 図1:都道府県別TFRランキング(実再現・粒度差あり)
  4. 図2:TFRと女性転入出比(実再現・近似)
  5. 図3:大学収容力と女性転入出比(実再現・近似)
  6. 主要な発見:2つの予測モデル
  7. 図4:TFR予測モデルの重要特徴量(報告値の可視化)
  8. 図5:若年女性転入出モデルの重要特徴量(報告値の可視化)
  9. 7つのクラスタ(地図をランキング表で再表現)
  10. 結果の解釈とまとめ
  11. データ・コードのDL
  12. ⚠️ よくある誤解
  13. 📖 用語集
  14. 📐 手法ガイド
  15. 🚀 発展の可能性
  16. 🎯 自分でやってみよう
  17. 🤔 Q&A
  18. 🐍 ブラウザで動かす

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

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

このページのTFRランキング・女性転入出比・大学収容力(図1〜図3)は、以下の手順で自分で再現できます。コードの編集は不要です。(LightGBMの特徴量重要度・7クラスタ=図4・図5は市区町村別の分析のため、原論文の報告を可視化します。)

1
データをダウンロードする 独立行政法人統計センターの SSDSE(教育用標準データセット)配布ページから、以下をダウンロードします。
SSDSE-B-2026.csv ← SSDSE-B(都道府県別・社会人口統計体系)📥 直接DL
⬇ SSDSEダウンロードページを開く
2
ファイルを所定のフォルダに配置する ダウンロードしたCSVを、プロジェクトの data/raw/ フォルダに入れます。
2026 統計・データ解析コンペ/ ├── code/ │ └── 2021_U2_yushu.py ← 実行するスクリプト └── data/ └── raw/ SSDSE-B-2026.csv ← ここに置く
3
スクリプトをそのまま実行する ターミナルでプロジェクトルートに移動し、以下を実行します。
python3 code/2021_U2_yushu.py
図は html/figures/ に自動保存されます。
研究のテーマと目的

合計特殊出生率(TFR)は「1人の女性が生涯に産む子どもの数」の指標で、少子化の代表的な物差しである。2005年に過去最低を記録して以降も低水準が続く。ところが市区町村別に見ると、原論文によれば最高は沖縄県金武町の2.47、最低は大阪府豊能町の0.84(2013〜2017年)と、地域差が非常に大きい。この格差の要因を解けば、少子化への打開策のヒントになる。

だが著者は、もう一段深い問題を指摘する。前田(2015)が述べるように、TFRは年齢別出生数 ÷ 年齢別女子人口の総和なので、若い女性が転出して分母が減ると、出生数(分子)も減るのに、TFRには表れにくい。つまりTFRだけを見ていては少子化の実態を見落とす。そこで本研究は、TFRに加えて、分母である15〜49歳女子人口の流入出そのものに影響する要因も分析することを目的とする。

2.47
TFR最高=沖縄県金武町(原論文・市区町村別)
0.84
TFR最低=大阪府豊能町(原論文・市区町村別)
0.78
TFR予測モデルの平均R²(原論文の報告値)
0.63
若年女性転入出モデルの平均R²(原論文の報告値)
研究の問い ① 市区町村別のTFRの地域差は、どんな要因(地理・人口構成・教育・社会福祉・産業…)で決まるのか。② TFRの分母を左右する「若年女性の転入出」は何に影響されるのか。この2つを別々にモデル化すると、少子化のどんな構造が見えるか。
分析のキモ:新しい指標「若年女性転入出」 著者は 若年女性転入出 = 15〜49歳女性の転入数 ÷ 転出数 という指標を新たに作った。1より大きければ女性が流入超過、小さければ流出超過を表す。総人口で割る「転入超過率」だと人口の多い地域の増減を過小評価してしまうため、あえて移動そのものの比に着目したのがポイント。

大学生・一般の部 SSDSE-2021A/2020A/2021B e-Stat・厚労省・国交省ほか(市区町村別) LightGBM・特徴量重要度 k-meansクラスタリング

データと変数・再現の整理

おもに使ったデータ(すべて市区町村別)

目的変数定義・出典(原論文)
合計特殊出生率 TFR厚生労働省 人口動態保健所・市区町村別統計(2013〜2017年の5年平均。変動を抑えるため平均を使用)
若年女性転入出15〜49歳女性の転入数÷転出数(住民基本台帳移動報告、2014〜2016年平均)=著者が新たに定義
説明変数のグループおもな項目出典(原論文)
人口構成15歳未満/15〜64歳/65歳以上人口割合、男性比率、世帯構成(単独・核家族)ほかSSDSE-2021A
地理緯度・経度、東京・大阪からの距離、標高、傾斜国土交通省/CSIS
教育・就業最終学歴(短大・大学院卒割合)、就業率、生徒当たり小中学校・教員数SSDSE-2021A/e-Stat
社会福祉・財政0〜3歳人口当たり保育所数、人口当たり診療所・医師数、歳出項目別割合(老人福祉費・児童福祉費ほか)e-Stat
産業・所得産業別事業所・従業者割合、平均年収(課税所得÷納税者数)SSDSE-2020A/総務省
再現可能性の整理(このページの図の作り方)
  • 実再現できる部分(粒度差あり):TFR・女性の転入転出・大学学生数は SSDSE-B(都道府県別)にも収録されている。よって「TFRの地域差」「TFRと女性転入出の関係」「大学と女性転入出の関係」は実データから近似的に再計算できる(図1〜図3)。ただし原論文は市区町村別・15〜49歳女性、本ページは都道府県別・全年齢女性で、粒度と年齢範囲が異なる。図注に必ず明記する。
  • 報告値の可視化(再計算ではない):LightGBMの特徴量重要度(図6・図8)と7クラスタ(図4・図9)は市区町村別データの独自分析で、収録データでは再現できない。よって図4・図5・クラスタ表は原論文が挙げた特徴量・クラスタを転記して可視化する。原論文は重要度の数値を載せていないため、棒の長さは順位を表すだけで、重要度の数値は捏造しない。
分析の流れ(原論文)
TFR と
若年女性転入出
を目的変数に
LightGBM
2つの回帰モデル
特徴量
重要度を読む
クラスタリング
可視化・解釈

決定木ベースのLightGBMは「どの変数が効くか」(重要度)はわかるが「どう効くか」まではわからない。そこで著者はクラスタごとに特徴量を可視化して解釈を補った。

1
図1:都道府県別TFRランキング(実再現・粒度差あり)

まず、原論文の出発点である「TFRの地域差」を、収録済みの SSDSE-B(都道府県別)で確かめる。市区町村ほど極端ではないが、地域差の向きは同じかを見る。

やってみようSSDSE-B を読み込み、TFRなどの指標を用意する【実再現】
  • ① このコードの目的:SSDSE-B を cp932・skiprows=[1] で読み込み、年度列 SSDSE-B-2026==2023 で最新年の47都道府県を抽出。TFR・婚姻率・高齢化率・女性転入出比・大学収容力を作る。
  • ② 前後のつながり:ここで用意した d を土台に、以降の図1〜図3を都道府県粒度で再計算していく。
📝 コード
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
df = pd.read_csv(DATA_B, encoding='cp932', header=0, skiprows=[1])
df.columns = [c.strip() for c in df.columns]
YEAR = 'SSDSE-B-2026'
d = df[df[YEAR] == 2023].copy()          # 最新年(2023年)の47都道府県を抽出
for c in ['A1101', 'A1303', 'A4101', 'A4103', 'A9101',
          'A510102', 'A510202', 'E6302']:
    d[c] = pd.to_numeric(d[c], errors='coerce')

# 目的変数・指標を作成(原論文の指標を都道府県粒度で近似)
d['TFR']       = d['A4103']                          # 合計特殊出生率
d['婚姻率']    = d['A9101'] / d['A1101'] * 1000       # 人口千人当たり婚姻件数
d['高齢化率']  = d['A1303'] / d['A1101'] * 100        # 65歳以上人口割合
d['女性転入出比'] = d['A510102'] / d['A510202']       # 女性転入/女性転出(全年齢の近似)
d['大学収容力'] = d['E6302'] / d['A1101'] * 1000      # 人口千人当たり大学学生数

print('SSDSE-B 読み込み: N =', len(d), '都道府県  (抽出年: 2023年)')
print(f'TFR: 平均 {d["TFR"].mean():.2f}  範囲 {d["TFR"].min():.2f}{d["TFR"].max():.2f}')
rm, pm = stats.pearsonr(d['婚姻率'], d['TFR'])
print(f'参考)婚姻率×TFR の相関 r={rm:+.3f}(p={pm:.3f})'
▼ 実行結果
SSDSE-B 読み込み: N = 47 都道府県  (抽出年: 2023年)
TFR: 平均 1.29  範囲 0.99〜1.60
参考)婚姻率×TFR の相関 r=-0.102(p=0.493)…原論文でも人口当たり婚姻率の重要度は低かった
  • ④ 実行結果の読み取り:47都道府県、TFRは平均1.29・範囲0.99〜1.60。参考に計算した婚姻率×TFRの相関は r=-0.10(p=0.49)でほぼ無相関——原論文でも「人口当たり婚姻率の重要度は低かった」と述べており、方向性が一致する。
やってみよう都道府県別TFRをランキングして地域差を見る【実再現・粒度差あり】
  • ① このコードの目的:TFR(A4103)で47都道府県を並べ替え、最低5県・最高5県を書き出す。原論文の「市区町村別の大きな地域差」を、収録済みの都道府県粒度で近似的に確かめる。
  • ② 前後のつながり:ここで確認した地域差を、次の図2で「女性の転入出」と結び付けて掘り下げる。
📝 コード
83
84
85
86
87
88
89
r1 = d.sort_values('TFR', ascending=True)
print('最低5県:')
for _, r in r1.head(5).iterrows():
    print(f'  {r["Prefecture"]:6s} {r["TFR"]:.2f}')
print('最高5県:')
for _, r in r1.tail(5).iloc[::-1].iterrows():
    print(f'  {r["Prefecture"]:6s} {r["TFR"]:.2f}')
▼ 実行結果
=== 図1: 都道府県別TFRランキング(実再現・都道府県粒度)===
最低5県:
  東京都    0.99
  北海道    1.06
  宮城県    1.07
  秋田県    1.10
  京都府    1.11
最高5県:
  沖縄県    1.60
  長崎県    1.49
  宮崎県    1.49
  鹿児島県   1.48
  熊本県    1.47
  • ④ 実行結果の読み取り:最高は沖縄県(1.60)、最低は東京都(0.99)。西日本・九州が高く、大都市が低いという原論文と同じ傾向。ただし市区町村値(金武町2.47〜豊能町0.84)ほど極端な差は都道府県平均では平準化される(=粒度の違い)。
都道府県別TFRランキング(実再現)
図1:都道府県別TFR(SSDSE-B 2023年、N=47)。実再現(都道府県粒度)。原論文は市区町村別で、最高=金武町2.47・最低=豊能町0.84。粒度が違うため差の大きさは一致しない。
📊 この図の読み方
上(高TFR)
沖縄・九州(長崎・宮崎・鹿児島・熊本)が上位。原論文の「南西で高い」傾向と一致。
下(低TFR)
東京・北海道・宮城・京都など大都市圏が下位。原論文の「中枢都市で低い」傾向と一致。
位置づけ
実再現だが粒度が違う。都道府県平均は市区町村内のばらつきを均すため、金武町2.47のような極端値は現れない。
2
図2:TFRと女性転入出比(実再現・近似)

この研究のいちばんの主張は「TFRは分母(若年女性人口)の流入出に振り回される」こと。原論文の図2に対応させて、女性の転入出とTFRの関係を都道府県粒度で近似再現する。原論文は15〜49歳・市区町村別だが、収録データは全年齢女性・都道府県別なので、そこは割り引いて読む。

やってみようTFRと女性転入出比の相関を再計算する【実再現・近似】
  • ① このコードの目的:女性転入出比(女性転入者数÷転出者数)とTFRの相関を実際に計算し、原論文の核心「若年女性が流入する都市部ほどTFRは低く出る」が都道府県粒度でも見えるかを確かめる。
  • ② 前後のつながり:ここで負の関係を確認してから、図2の散布図で東京など具体的な県を見る。
📝 コード
112
113
114
115
116
117
118
print('=== 図2: TFRと女性転入出比の散布図(実再現・近似)===')
m2 = d[['女性転入出比', 'TFR', 'Prefecture']].dropna()
r2, p2 = stats.pearsonr(m2['女性転入出比'], m2['TFR'])
print(f'女性転入出比 × TFR の相関 r={r2:+.3f}(p={p2:.3f}, N={len(m2)})')
print('女性転入出比が高い(流入超過)5県:')
for _, r in m2.nlargest(5, '女性転入出比').iterrows():
    print(f'  {r["Prefecture"]:6s} 転入出比 {r["女性転入出比"]:.3f}  TFR {r["TFR"]:.2f}')
▼ 実行結果
=== 図2: TFRと女性転入出比の散布図(実再現・近似)===
女性転入出比 × TFR の相関 r=-0.339(p=0.020, N=47)
女性転入出比が高い(流入超過)5県:
  東京都    転入出比 1.203  TFR 0.99
  千葉県    転入出比 1.153  TFR 1.14
  埼玉県    転入出比 1.151  TFR 1.14
  神奈川県   転入出比 1.148  TFR 1.13
  大阪府    転入出比 1.120  TFR 1.19
  • ④ 実行結果の読み取り:相関 r=-0.339(p=0.020)。女性転入出比が高い(流入超過)のは東京・千葉・埼玉・神奈川・大阪など大都市圏で、いずれもTFRは低い。「女性が流入する地域ほど分母が膨らみTFRが下がる」という原論文の指摘と整合する(年齢範囲・粒度は近似)。
TFRと女性転入出比の散布図(実再現・近似)
図2:TFRと女性転入出比(SSDSE-B 2023年、N=47)。実再現・都道府県粒度の近似:再計算 r=-0.34。原論文の若年女性転入出は15〜49歳・市区町村別で、本図は全年齢女性・都道府県別。粒度・年齢範囲が異なる。
📊 この図の読み方
右下の東京
女性転入出比が最も高い(1.20=流入超過)のに、TFRは最低(0.99)。まさに「若年女性を吸い上げる都市ほどTFRが低く出る」という原論文の構図。
右肩下がり
全体として、女性が流入超過の県ほどTFRが低い(負の相関)。TFRの高低を、出生行動だけでなく人口移動が左右していることを示す。
位置づけ
近似再現。全年齢の女性移動で近似しているため相関はマイルド。原論文は15〜49歳に絞ることで、より鋭くこの関係を捉えている。
3
図3:大学収容力と女性転入出比(実再現・近似)

原論文は、若年女性転入出モデルで大学(院)卒割合や平均年収が重要だったと報告する(「大学の存在が若年女性の流入を高める」)。大学学生数は SSDSE-B にも収録されているので、大学収容力と女性転入出比の関係を都道府県粒度で確かめられる。

やってみよう大学収容力と女性転入出比の相関を再計算する【実再現・近似】
  • ① このコードの目的:人口千人当たり大学学生数(大学収容力)と女性転入出比の相関を実際に計算し、原論文の「大学の存在は若年女性転入出を高める」という主張を都道府県粒度で確かめる。
  • ② 前後のつながり:ここで正の関係を確認し、図3の散布図で京都・東京など大学の多い県を見る。
📝 コード
149
150
151
152
153
154
155
print('=== 図3: 大学収容力と女性転入出比の散布図(実再現・近似)===')
m3 = d[['大学収容力', '女性転入出比', 'Prefecture']].dropna()
r3, p3 = stats.pearsonr(m3['大学収容力'], m3['女性転入出比'])
print(f'大学収容力 × 女性転入出比 の相関 r={r3:+.3f}(p={p3:.4f}, N={len(m3)})')
print('大学収容力が高い5県:')
for _, r in m3.nlargest(5, '大学収容力').iterrows():
    print(f'  {r["Prefecture"]:6s} 大学生/千人 {r["大学収容力"]:.1f}  転入出比 {r["女性転入出比"]:.3f}')
▼ 実行結果
=== 図3: 大学収容力と女性転入出比の散布図(実再現・近似)===
大学収容力 × 女性転入出比 の相関 r=+0.488(p=0.0005, N=47)
大学収容力が高い5県:
  京都府    大学生/千人 57.9  転入出比 0.935
  東京都    大学生/千人 48.4  転入出比 1.203
  大阪府    大学生/千人 26.6  転入出比 1.120
  石川県    大学生/千人 25.0  転入出比 0.852
  愛知県    大学生/千人 23.8  転入出比 0.970
  • ④ 実行結果の読み取り:相関 r=+0.49(p=0.0005)と有意な正の相関。大学収容力の高い京都・東京・大阪などで女性の流入が多い傾向。原論文の「大学の存在・大卒割合が若年女性転入出を高める要因」という主張を、粒度を変えても支持する結果。
大学収容力と女性転入出比の散布図(実再現・近似)
図3:大学収容力(人口千人当たり大学学生数)と女性転入出比(SSDSE-B 2023年、N=47)。実再現・都道府県粒度の近似:再計算 r=+0.49。原論文は市区町村別・大卒割合を使用。粒度・指標の定義が異なる。
📊 この図の読み方
右肩上がり
大学が多い(=大学収容力が高い)県ほど、女性の流入が多い。原論文の「大学は若年女性転入出を高める要因」という主張と同じ向き。
注意点
大学に流入する女性の多くは学生で、すぐには子を産まない層でもある。原論文は「学生の流入はTFRを下げる要因にもなる」と両面から論じている。
位置づけ
近似再現。原論文の大卒割合・市区町村別とは指標も粒度も違うが、正の関係という結論は再現できた。
4
主要な発見:2つの予測モデル

ここからは市区町村別データによる原論文の中核分析である。以下のR²・重要な特徴量はすべて原論文の報告値(市区町村別・LightGBM)で、本ページで再計算したものではない。

① TFR予測モデル(平均R²=0.78)

取得できた全特徴量でモデルを作り、重要度上位20個で組み直して20回の交差検証をした結果、平均決定係数0.78とある程度高い精度になった。重要度の上位には経度・緯度・東京/大阪からの距離という地理的要因が並び、次いで15歳未満・15〜64歳人口割合・男性比率など人口構成が効く。単独・核家族といった家族構成、男性就業率や最終学歴もある程度の重要度を持つ。

② 若年女性転入出予測モデル(平均R²=0.63)

同様に重要度上位25個で組み直し、20回の交差検証で平均決定係数0.63。こちらは65歳以上・15歳以上人口割合など人口構成が非常に重要で、生徒当たり小学校教員数・大学(院)卒割合など教育0〜3歳人口当たり保育所数・人口当たり診療所数・地方財政など社会福祉が効く。TFRモデルで非常に強かった地理的要因は、こちらでは東京からの距離・傾斜が多少効く程度に後退する点が対照的。

2モデルを並べてわかること TFRは「どこにあるか(地理)」で大きく決まるが、若年女性の流入出は「どんな人口構成・教育・福祉・雇用環境か」で決まる。だからTFRを上げたいなら、まず若年女性が住み続けられる環境(教育・保育・雇用・年収)を整える——という政策的含意につながる。
5
図4:TFR予測モデルの重要特徴量(報告値の可視化)

原論文の図6に対応する。市区町村別LightGBMの重要度上位を、要因の分類で色分けして並べる。これは再計算ではなく、原論文が挙げた特徴量の可視化である。

やってみようTFR予測モデルの重要特徴量を原論文どおりに並べる【報告値の可視化】
  • ① このコードの目的:原論文がTFRモデルの重要度上位として挙げた特徴量を、記述順に辞書化して表示する。原論文に重要度の数値の記載がないため、順位のみを扱い、数値は捏造しない
  • ② 前後のつながり:この報告値が図4(重要度ランキング)の材料になる。分類色で「地理が上位」という原論文の特徴を一目でわかるようにする。
📝 コード
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
print('=== 報告値: TFRモデル重要特徴量(原論文 図6・報告値の可視化)===')
CAT_COLOR = {'地理': '#1565C0', '人口構成': '#EF6C00',
             '家族': '#6A1B9A', '就業・教育': '#2E7D32'}
TFR_FEATS = [
    ('経度', '地理'), ('緯度', '地理'),
    ('東京からの距離', '地理'), ('大阪からの距離', '地理'),
    ('15歳未満人口割合', '人口構成'), ('15〜64歳人口割合', '人口構成'),
    ('男性比率', '人口構成'), ('20〜24歳人口割合', '人口構成'),
    ('単独世帯割合', '家族'), ('核家族世帯割合', '家族'),
    ('男性就業率', '就業・教育'), ('最終学歴人口(大学・大学院)', '就業・教育'),
    ('教育業界の従業者数', '就業・教育'),
]
for name, cat in TFR_FEATS:
    print(f'  [{cat:5s}] {name}')
print('平均決定係数 R^2 = 0.78(上位20特徴量・20回交差検証, 原論文の報告値)')
▼ 実行結果
=== 報告値: TFRモデル重要特徴量(原論文 図6・報告値の可視化)===
  [地理   ] 経度
  [地理   ] 緯度
  [地理   ] 東京からの距離
  [地理   ] 大阪からの距離
  [人口構成 ] 15歳未満人口割合
  [人口構成 ] 15〜64歳人口割合
  [人口構成 ] 男性比率
  [人口構成 ] 20〜24歳人口割合
  [家族   ] 単独世帯割合
  [家族   ] 核家族世帯割合
  [就業・教育] 男性就業率
  [就業・教育] 最終学歴人口(大学・大学院)
  [就業・教育] 教育業界の従業者数
平均決定係数 R^2 = 0.78(上位20特徴量・20回交差検証, 原論文の報告値)
  • ④ 実行結果の読み取り:上位4つがすべて地理(経度・緯度・東京/大阪からの距離)で、原論文の「TFR予測では地理的要因の重要度が非常に高い」という記述をそのまま反映。続いて人口構成、家族、就業・教育の順に並ぶ。R²=0.78も原論文の報告値。
TFR予測モデルの重要特徴量(報告値の可視化)
図4:TFR予測モデル(LightGBM)の重要特徴量。報告値の可視化(再計算ではない)・原論文 図6棒の長さは順位を表すだけで、重要度の数値ではない(原論文に数値の記載がないため)。R²=0.78は原論文の報告値。
📊 この図の読み方
上位=地理(青)
経度・緯度・東京/大阪からの距離が最上位。TFRは「どこにあるか」で大きく決まる、というのが原論文の読み筋。
次いで人口構成(橙)
15歳未満・15〜64歳人口割合、男性比率。20〜24歳人口割合も後の分析で重要な鍵になる。
位置づけ
報告値の可視化。棒の長短は原論文が挙げた順位であって、重要度の実数値ではない点に注意。
6
図5:若年女性転入出モデルの重要特徴量(報告値の可視化)

原論文の図8に対応する。図4(TFRモデル)と見比べると、同じ地域データでも目的変数が変わると効く要因がまるで違うことがわかる。

やってみよう若年女性転入出モデルの重要特徴量を原論文どおりに並べる【報告値の可視化】
  • ① このコードの目的:原論文が若年女性転入出モデルの重要度上位として挙げた特徴量を、記述順に辞書化して表示する。社会福祉・産業の分類色を足し、ここも順位のみ(数値は捏造しない)
  • ② 前後のつながり:この報告値が図5の材料。TFRモデル(図4)と見比べて「地理の後退・人口構成/教育/福祉の台頭」を対比する。
📝 コード
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
print('=== 報告値: 若年女性転入出モデル重要特徴量(原論文 図8・報告値の可視化)===')
CAT_COLOR2 = dict(CAT_COLOR)
CAT_COLOR2['社会福祉'] = '#00838F'
CAT_COLOR2['産業'] = '#8D6E63'
YW_FEATS = [
    ('65歳以上人口割合', '人口構成'), ('15歳以上人口割合', '人口構成'),
    ('単独世帯数割合', '家族'),
    ('生徒当たり小学校教員数', '就業・教育'), ('大学(院)卒人口割合', '就業・教育'),
    ('生徒当たり小学校数', '就業・教育'),
    ('0〜3歳人口当たり保育所数', '社会福祉'), ('人口当たり一般診療所数', '社会福祉'),
    ('老人福祉費割合', '社会福祉'),
    ('第3次産業従業者割合', '産業'), ('第2次産業事業所数割合', '産業'),
    ('東京からの距離', '地理'), ('傾斜', '地理'),
]
for name, cat in YW_FEATS:
    print(f'  [{cat:5s}] {name}')
print('平均決定係数 R^2 = 0.63(上位25特徴量・20回交差検証, 原論文の報告値)')
print('※ TFRモデルで非常に高かった地理的要因(経度・緯度・距離)が、'
      'こちらでは東京からの距離・傾斜が「多少」効く程度に後退している点が対照的。')
▼ 実行結果
=== 報告値: 若年女性転入出モデル重要特徴量(原論文 図8・報告値の可視化)===
  [人口構成 ] 65歳以上人口割合
  [人口構成 ] 15歳以上人口割合
  [家族   ] 単独世帯数割合
  [就業・教育] 生徒当たり小学校教員数
  [就業・教育] 大学(院)卒人口割合
  [就業・教育] 生徒当たり小学校数
  [社会福祉 ] 0〜3歳人口当たり保育所数
  [社会福祉 ] 人口当たり一般診療所数
  [社会福祉 ] 老人福祉費割合
  [産業   ] 第3次産業従業者割合
  [産業   ] 第2次産業事業所数割合
  [地理   ] 東京からの距離
  [地理   ] 傾斜
平均決定係数 R^2 = 0.63(上位25特徴量・20回交差検証, 原論文の報告値)
※ TFRモデルで非常に高かった地理的要因(経度・緯度・距離)が、こちらでは東京からの距離・傾斜が「多少」効く程度に後退している点が対照的。
  • ④ 実行結果の読み取り:上位は65歳以上・15歳以上人口割合(人口構成)、次いで教育(小学校教員数・大学院卒割合)、社会福祉(保育所・診療所)。地理(東京からの距離・傾斜)は最下位付近まで後退。図4との対比が原論文の主眼で、これも報告値の可視化。
若年女性転入出予測モデルの重要特徴量(報告値の可視化)
図5:若年女性転入出予測モデル(LightGBM)の重要特徴量。報告値の可視化(再計算ではない)・原論文 図8棒の長さは順位のみ。R²=0.63は原論文の報告値。
📊 この図の読み方
上位=人口構成(橙)
65歳以上・15歳以上人口割合。高齢化が進んだ地域ほど若年女性が流出している、という関係。
教育・福祉(緑・青緑)
小学校教員数・大学院卒割合、保育所・診療所数。子育て・教育環境が女性の定着に効く。
地理(青)は最下位付近
TFRモデルで最上位だった地理が、こちらでは東京からの距離・傾斜が少し効く程度。これが原論文の最大の対比点。
7
7つのクラスタ(地図をランキング表で再表現)

著者はTFRと若年女性転入出を標準化してクラスタリングし、エルボー法で最適クラスタ数を6〜9と見積もったうえで7クラスタを採用、それぞれに名前を付けた(原論文 図4・図9)。原論文は色分け日本地図で示すが、ここでは地図の代わりに特徴一覧表で再表現する(以下はすべて原論文の記述に基づく)。なお、若年女性転入出が突出して高い外れ値は島根県知夫村(移住促進政策に成功した離島)で、著者は人口維持理想型に含めている。

クラスタ名(色)TFR若年女性転入出おもな特徴(原論文)
人口維持理想型(ピンク)高い中部以西・大都市周辺に立地。平均年収・大卒割合が高い。15歳未満も多く高齢化も進まず、釣り鐘型に近い。沖縄など。目指すべき理想型
西日本型(茶)高い低い南西に多い。20〜24歳人口割合が低く分母が小さいため相対的にTFRが高く出る。高TFRでも15歳未満が多いわけではない
地方都市型(赤)首都圏からある程度離れ、中部地方に多い。人口維持理想型に類似(改善の余地が大きい)
中枢都市・近郊型(青)低い高い政令指定都市クラス。20〜24歳人口が多いことが低TFRの一因。周辺に少子化地方都市型が広がる
少子化地方都市型(オレンジ)低い中枢都市の周辺に分布。北東へ行くほど増える
衰退地域型(紫)低め低い東京から遠い。若年女性の流出が多い
消滅地域型(緑)低め低い東京から遠く北東に多い。高齢化が進み若年女性流出が大きい。高齢化が進み切ると分母の若年女性が減り少子化が止まらなくなる
地図・人口ピラミッド・年収グラフについて 原論文には、クラスタ色分け日本地図(図9)、クラスタ別人口ピラミッド(図10)、クラスタ別平均年収(図11)・大(院)卒割合(図12)が含まれる。これらは市区町村別の独自集計のため本ページでは再現せず、グラフは原論文(PDF)を参照のこと。上表はその内容を文章・表として再表現したものである。

結果の解釈とまとめ(原論文「第5章 考察とまとめ」)

TFRだけを見る危うさ

人口ピラミッドからは、西日本型のように「高TFRだが実は少子化」の地域が確認できた。20〜24歳人口が凹んで分母が小さいため、TFRが相対的に高く出ているだけだ。逆に中枢都市・近郊型は20〜24歳が多く低TFRになる。TFRのみに注目するのは少子化を考えるうえで不十分だという、本研究の核心が裏付けられた。

効く要因・効かない要因

両モデルとも地理的要因・人口構造が重要で、加えて最終学歴が効いた。若年女性転入出では平均年収も重要だった。一方、TFRに効きそうな人口当たり婚姻率の重要度が低かったこと、両モデルに効きそうな女性議員割合・公務員女性管理職割合の重要度が低かったことは注目すべき点だと著者は述べる。

人口維持理想型の条件と提言

人口維持理想型の特徴は、地理的に中部以西・一定規模の都市の周辺にあり、平均年収が高く大卒割合も高いこと。少子化対策の目標は、すべての地域をこの理想型に近づけることだ。著者は特に地方都市型に注目し、20〜24歳(進学・就職期)の流出を防ぐことが鍵だとする。大学進学で出た学生が戻らないのが一因であり、I・Uターン支援の前に、高校在学中に「地元で働く」選択肢を示すことを提言している。

この研究の限界(原論文) 大学に関するデータを十分に取得できなかった点、関連性は見いだせたが因果関係の証明には至らなかった点、若年女性転入出モデルの決定係数が0.63とあまり高くなかった点が、次回への改善点として挙げられている。
この研究から学べること 「指標そのものを疑う」姿勢——TFRという定番指標の分母に着目して新しい指標(若年女性転入出)を作り、2つの目的変数を機械学習で並行分析することで、単一指標では見えない少子化の構造を可視化した点が、この研究の独自性である。

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

このページのTFRランキング・女性転入出比・大学収容力(図1〜図3)は、以下から再現できます。

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

※ 図1〜図3は都道府県別データによる近似再現で、原論文(市区町村別・15〜49歳女性)とは粒度・年齢範囲が異なります。図4・図5・クラスタ表は原論文の報告値の可視化であり、重要度の数値は原論文に記載がないため順位のみを示しています。

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

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

誤解1:「TFRが高い地域=少子化が進んでいない」
これがまさに本研究が崩した思い込み。西日本型のように、20〜24歳女性が流出して分母が小さいためにTFRだけが高く見える地域がある。分母(若年女性人口)の動きとセットで見ないと実態を誤る。
誤解2:「大学が多いほど女性が集まる=出生率も上がる」
図3のとおり大学収容力と女性流入には正の相関があるが、流入する女性の多くはすぐには子を産まない学生。原論文は「学生の流入はTFRを下げる要因にもなる」と両面から論じている。流入=出生増、と単純化しない。
誤解3:「特徴量重要度が高い=原因である」
LightGBMの重要度は「予測に効く」ことは示すが、因果を示すものではない。原論文自身も「因果関係の証明には至らなかった」と明記している。重要度=原因、と読み替えない。
誤解4:「このページの図は原論文と同じ数値」
図1〜図3は都道府県別・全年齢での近似再現で、原論文の市区町村別・15〜49歳とは粒度も年齢も違う。図4・図5は原論文が挙げた特徴量の順位の可視化で、重要度の数値ではない。図注に二重に明記している。

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

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

合計特殊出生率(TFR)
15〜49歳の年齢別出生率を合計した指標で、1人の女性が生涯に産む子どもの数の目安。分母は年齢別女子人口で、女性の転出入に影響される。
LightGBM
決定木を多数組み合わせる勾配ブースティングの手法。多数の説明変数から高精度な予測モデルを作れ、どの変数が効いたか(特徴量重要度)も出せる。
特徴量重要度
予測モデルで各説明変数がどれだけ効いたかを表す値。原論文は100回学習して重要度を平均し、上位から特徴量を足していって決定係数の伸びを見た。
クラスタリング(k-means)/エルボー法
似たものどうしをグループに分ける手法。エルボー法は、クラスタ数を増やしたときの「まとまりの良さ」の改善が鈍る点(ひじ)で最適数を選ぶ方法。本研究は7クラスタを採用。
相関係数
2つの数量が一緒に増減する強さと向きを −1〜+1 で表す指標。本ページの図2・図3の近似再現で使う。
散布図
2変数を点で描き、関係の形(右肩上がり/下がり)を目で確かめる図。
SSDSE
独立行政法人統計センターが公開する教育用標準データセット。本ページの近似再現では都道府県別の SSDSE-B を使う。

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

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

全体像
2つの目的変数(TFR・若年女性転入出)をLightGBMで別々にモデル化 → 特徴量重要度で「効く要因」を読む → クラスタリングで地域を型に分け、型ごとに特徴量を可視化して「どう効くか」を解釈する。予測モデルと可視化を組み合わせて構造に迫るのが見どころ。
🌳 LightGBM(勾配ブースティング木)
何をする
浅い決定木を次々に足し、前の木の誤差を補正しながら高精度な予測モデルを作る。多数の説明変数・非線形な関係に強い。
読み方
予測精度は決定係数R²(1に近いほど良い)で測る。本研究はTFRで0.78、若年女性転入出で0.63(報告値)。
注意
重要度は「予測への寄与」であり因果ではない。目的変数と定義が近い変数(ここでは15歳以上人口割合など)はリーク気味に重要度が高く出ることがあり、原論文も注意を促している。
📊 特徴量重要度+逐次追加
何をする
各変数の重要度を求め、学習・検証データの違いで揺れないよう100回平均する。重要度の高い順に変数を足し、R²が頭打ちになる本数(TFRは約20、若年女性転入出は約25)を採用する。
なぜ必要
変数を入れすぎず、効く変数だけで簡潔で頑健なモデルにするため。
🧩 クラスタリング+エルボー法
何をする
TFRと若年女性転入出を標準化し、似た地域をグループ化する。エルボー法でクラスタ数の目安(6〜9)を得て7を採用し、各クラスタに名前を付けて特徴を可視化する。
なぜ必要
決定木の重要度は「どの変数が効くか」しか示さない。「どう効くか」を、型ごとの人口ピラミッド・年収などの可視化で補うため。
注意
外れ値(島根県知夫村)はクラスタリング時に一旦除外し、解釈段階で理想型に含めるなど、外れ値の扱いを明示している。

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

この研究の「相関は見つけたが因果は未証明」という結論は、次の研究の出発点になる。

発展1:大学・進学データを厚くする
結果X
大学(大卒割合・大学収容力)が若年女性転入出に効くが、大学関連データの取得が不十分だった。
新仮説Y
「地元大学の有無・学部構成・卒業後の地元定着率」が、若年女性の流出入をより強く説明するのではないか。
課題Z
学校基本調査などから進学・就職の地域フローを整備し、大学要因を精緻化して重回帰・因果推論で検証する。
発展2:因果に踏み込む
結果X
クロスセクション(1時点)の予測モデルで、因果関係の証明には至らなかった。
新仮説Y
「保育所・年収・雇用の改善が、若年女性転入出を実際に押し上げる」という因果があるのでは。
課題Z
市区町村パネルデータで固定効果や差分の差分(DID)を使い、施策前後の変化を追って因果に迫る。

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

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

★☆☆☆☆ 難易度1
抽出する年を変える
d = df[df[YEAR]==2023] の年を 2015 など別の年に変えて、TFRランキングや相関がどう変わるか確かめよう。
★★☆☆☆ 難易度2
高齢化率とTFRの関係を見る
スクリプトで作った 高齢化率(A1303/A1101×100)とTFRの散布図を描き、相関を計算してみよう。原論文の「高齢化が進むと若年女性が流出」という見立てと合うか。
★★★☆☆ 難易度3
女性転入出比の上位・下位を書き出す
d.nlargest(10,'女性転入出比')d.nsmallest(10,'女性転入出比') で流入超過・流出超過の県を並べ、TFRと見比べよう。
★★★★☆ 難易度4
複数指標をまとめて相関にかける
TFR・婚姻率・高齢化率・女性転入出比・大学収容力を d[[...]].corr() で一括計算し、相関行列をヒートマップにしてみよう。
★★★★★ 難易度5
都道府県別の簡易LightGBMを作る
SSDSE-Bの複数列を説明変数に、TFRを目的変数にした lightgbm 回帰を組み、特徴量重要度を出してみよう(都道府県N=47なので過学習に注意)。原論文の市区町村別の結果と傾向が似るか比べる。
ヒント:データが47件と少ないので、交差検証で精度を確認し、重要度は「順位の目安」として読むこと。

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

「多数の地域指標から機械学習で要因を絞り、型に分けて解釈する」発想は、政策・ビジネスの現場で広く使われている。

🏛️
自治体の人口政策・EBPM
出生・移動・雇用の地域データから、若年層の定着に効く要因を機械学習で洗い出し、保育・雇用・移住支援の優先順位を決める。
🏘️
地域マーケティング
市区町村を人口構造・所得・産業でクラスタに分け、型ごとに出店戦略やサービス設計を変える(エリアセグメンテーション)。
📈
需要予測・リスク分析
LightGBMなどの勾配ブースティングで多変量から予測モデルを作り、特徴量重要度で「効く要因」を説明する(与信・離職・需要予測など)。

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

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

Q. なぜTFRだけでなく「若年女性転入出」も見るのですか?
A. TFRは分母が年齢別女子人口なので、若い女性が転出して分母が減ると、出生数が減ってもTFRには表れにくいからです。分母の動き(=若年女性の流入出)を別の指標として並行分析することで、少子化の実態を捉え直しています。
Q. このページの図は原論文と同じ数値ですか?
A. いいえ。図1〜図3は収録済みの SSDSE-B(都道府県別・全年齢)による近似再現で、原論文(市区町村別・15〜49歳女性)とは粒度・年齢が違います。図4・図5・クラスタ表は原論文が挙げた特徴量・クラスタの報告値の可視化で、重要度の数値は原論文に記載がないため順位のみを示しています。新しい数値の捏造はしていません。
Q. TFR予測モデルで「地理」がいちばん効くのはなぜ?
A. 緯度・経度・大都市からの距離は、気候・産業・生活様式・人口構成といった多くの要因をまとめて代理しているためだと考えられます。ただし地理は「原因」ではなく背後の要因の代理なので、地理が効く=立地で運命が決まる、という意味ではありません。
Q. 婚姻率の重要度が低いのは意外です。少子化と関係ないの?
A. 関係がないわけではありませんが、原論文の市区町村別モデルでは人口当たり婚姻率の重要度は低く、本ページの都道府県別でも婚姻率×TFRはほぼ無相関(r=-0.10)でした。地域差を説明する力としては、地理や人口構成の方が強かったということです。

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

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

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

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

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