論文一覧に戻る 🕸 論文ネットワーク 🗺 用語ネットワーク 統計データ分析コンペ 教育用再現集
2020年度(令和2年度)統計データ分析コンペティション | 統計活用奨励賞 [高校生の部]

自治体ごとの
ふるさと納税の必要性を定義する

⏱️ 推定読了時間: 約30分
著者: 岡本涼夏(慶應義塾湘南藤沢高等部) 手法: 相関分析 / 散布図 / 外れ値処理 / 指標設計
🔬 指標設計🔬 相関分析🏷 財政・行政🏷 移住・人口移動
🔬 手法タグ / 🏷 応用タグ(クリックで同タグの論文をネットワーク検索)
🔬 再現カルテ — 原論文と同じデータ・同じ手法で再現

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

原論文が使ったデータふるさと納税ガイド・国土交通省国土地理院全国都道府県市区町村別面積調・住民基本台帳に基づく人口・総務省平成 29 年度地方財政統計年報の都道府県歳入決算・SSDSE-2020A・SSDSE-2020B
分析単位:市区町村
中核手法:相関分析
この教材が使うデータCSV は読み込まない(原論文が報告した数値をそのまま図表化して読み解く)
原論文(PDF)自治体ごとのふるさと納税の必要性を定義する
統計活用奨励賞/岡本涼夏(慶應義塾湘南藤沢高等部)
突合監査の結果、主要データと中核手法はいずれも原論文と一致しています。

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

🏅 論文審査会コメント(審査員はここを評価した)
「ふるさと納税の制度問題について仮説を立てて多面的に検証し、異質である特定の地域の抽出に取り組んでいるのは興味深い。」
出典:統計センター「統計データ分析コンペティション」受賞論文PDF掲載の審査講評。プロの審査員が何を評価し、何を注文したかは論文の読み方の最良の手本になる。
📝 3行で分かる要約

目次

  1. 研究の背景:ふるさと納税と地方創生
  2. データと変数(再現可能性トリアージ)
  3. 分析①:人口密度は「必要性」の指標になるか
  4. 分析②:過剰に集めている自治体の抽出
  5. 分析③:必要性モデルと4自治体の逸脱
  6. 政策提言(原論文の結論)
  7. まとめ
  8. 📥 データの準備
  9. 💼 実社会での応用
  10. ⚠️ よくある誤解
  11. 📖 用語集
  12. 📐 手法ガイド
  13. 🚀 発展の可能性
  14. 🎯 自分でやってみよう
  15. 🤔 Q&A
  16. 🐍 ブラウザで動かす

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

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

このページの図は、原論文(PDF)に印字された報告値をそのまま可視化したものです。原論文の中核データ(ふるさと納税受け入れ金額・面積・市区町村別歳入)は教育用標準データセット SSDSE には収録されていないため、新たに数値を計算していません。そのため、この再現コードは外部データファイルを必要とせず、そのまま実行できます。

1
スクリプトをそのまま実行する ターミナルでプロジェクトルートに移動し、以下を実行します。
python3 code/2020_H4_katsuyo.py
図は html/figures/ に自動保存されます(外部データ不要)。
2
原論文の実データを追試したい場合 転入者数−転出者数は都道府県レベルなら SSDSE-Bdata/raw/SSDSE-B-2026.csv)で確認できます。ただし人口密度に必要な面積や、ふるさと納税額・市区町村別歳入は SSDSE 未収録のため、原論文の完全再現には国土地理院・ふるさと納税ガイド・地方財政統計年報の各データが別途必要です。 ⬇ SSDSEダウンロードページを開く
研究の背景:ふるさと納税と地方創生

ふるさと納税は、納税者が任意の都道府県・市区町村へ寄付できる制度として2008年に始まった。その目的は地方創生である。地方で生まれ行政サービスを受けて育った人が都会へ出て都会の自治体に納税する——この構造を少しでも是正し、納税者が税制を通じて「ふるさと」へ貢献できるようにするために生まれた制度だ、と原論文は整理している。

総務省はふるさと納税に3つの意義があるとする。(1)納税者が寄付先と使い道を考えるきっかけになること、(2)お世話になった地域・応援したい地域の力になれること、(3)自治体が取り組みをアピールし地域のあり方を考え直すきっかけになること。

一方で、お礼品(返礼品)が制度の目的を逸脱する過度な返礼品競争を招き、問題視されている。実際に泉佐野市はふるさと納税をめぐって国と裁判になった。そこで原論文は、「地域ごとのふるさと納税の必要性」という観点から、返礼品競争の是正を考察する。

研究の問い 地方創生を目的とするふるさと納税において、その自治体にとって「どれだけふるさと納税の収入が必要か」を表す指標は作れるか。原論文は、その指標として人口密度(人口 ÷ 面積)が適しているのではないか、という仮説を立てた。
仮説の考え方 人口密度が高い都市部の自治体は、それだけ納税者が多く、ふるさと納税に頼らずともある程度の歳入を見込める=必要性が低い。人口密度が低い自治体は、相対的に納税者が少ないため歳入をふるさと納税で支えている=必要性が高い。人口密度は「単位面積あたりに存在する人口」なので、総人口のような量的データと違い、どの自治体にも当てはまる絶対的な指標になり得る、と原論文は述べている。

相関分析 散布図 外れ値処理 指標設計

2008
ふるさと納税 開始年
0.8468
都道府県 歳入×人口密度 r
(原論文の報告値)
4
人口密度で説明できなかった自治体数

データと変数

使用した変数(原論文 表1)

使用変数出典
都道府県別・市区町村別のふるさと納税の受け入れ金額 ×1000〔円〕ふるさと納税ガイド「ふるさと納税関連統計データ総まとめ」(2008〜2017年)
都道府県別・市区町村別の面積〔km²〕国土交通省 国土地理院 全国都道府県市区町村別面積調(2020年)
市区町村別 総人口〔人〕住民基本台帳に基づく人口(2017年)
都道府県別の歳入額 ×100,000,000〔円〕総務省 平成29年度 地方財政統計年報の都道府県歳入決算

作成した指標(原論文 表2)

指標計算方法
都道府県別・市区町村別の人口密度〔人/km²〕総人口〔人〕 ÷ 面積〔km²〕
都道府県別の転入者数と転出者数の差〔人〕SSDSE-2020A の 転入者数 − 転出者数
市区町村別の転入者数と転出者数の差〔人〕SSDSE-2020B の 2017年の 転入者数 − 転出者数
歳入割合〔%〕(都道府県別・市区町村別)2017年のふるさと納税受け入れ金額 ÷ 歳入金額
指標のねらい
  • 人口密度:ふるさと納税の「必要性」の代理指標(大きいほど必要性が低いと仮定)
  • 転入者数−転出者数(転入超過数):その自治体への人口の収支。地方から離れた人口を表す
  • 歳入割合:ふるさと納税収入がその自治体の財政に占める意味の大きさ。高いほど制度に頼っている

再現可能性トリアージ(この教材の立場)

原論文は演算ソフト R を用いて分析している。中核となる変数(ふるさと納税額・面積・市区町村別歳入・市区町村別人口密度・歳入割合)は、教育用標準データセット SSDSE には収録されていない。特に市区町村レベルの人口密度・歳入割合は SSDSE 未収録である。したがって本教材は新たな数値を計算せず、原論文の報告値を可視化する。下表はどの変数が再現可能かを整理したものである。

再現可能性トリアージ
図4:再現可能性トリアージ。×=SSDSE未収録のため原論文の報告値を可視化/△=一部(都道府県)のみ収録。本図の判定はこの教材による整理であり、原論文の図ではない。
やってみよう図4:再現可能性トリアージ(この教材で扱えるデータの整理)
📝 コード
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# ============================================================
# 図4: 再現可能性トリアージ(この教材で扱えるデータの整理)
#   どの変数が SSDSE で再現でき、どれが原論文の報告値かを一覧表として図示。
# ============================================================
print("\n=== 図4: 再現可能性トリアージ ===")
rows = [
    ('ふるさと納税 受け入れ金額', 'ふるさと納税ガイド', '×', '報告値'),
    ('市区町村・都道府県の面積', '国土地理院 面積調2020', '×', '報告値'),
    ('市区町村別 総人口', '住民基本台帳 2017', '×', '報告値'),
    ('都道府県別 歳入額', '地方財政統計年報 H29', '×', '報告値'),
    ('転入者数 − 転出者数', 'SSDSE-2020A/B(現B)', '△', '都道府県は収録'),
    ('人口密度(=人口/面積)', '面積が SSDSE 未収録', '×', '報告値'),
    ('歳入割合(納税/歳入)', '市区町村レベル未収録', '×', '報告値'),
]
print(f"  {'変数':<22}{'SSDSE収録':<10}{'扱い'}")
for name, src, ok, how in rows:
    print(f"  {name:<22}{ok:<10}{how}{src})")

fig, ax = plt.subplots(figsize=(9.5, 5))
ax.axis('off')
col_x = [0.02, 0.46, 0.70, 0.86]
headers = ['分析に用いた変数', '出典', 'SSDSE収録', 'この教材での扱い']
ax.text(0.5, 0.97, '再現可能性トリアージ:この論文の変数と SSDSE',
        ha='center', fontsize=13, fontweight='bold', transform=ax.transAxes)
for cx, h in zip(col_x, headers):
    ax.text(cx, 0.88, h, fontsize=10.5, fontweight='bold', transform=ax.transAxes, color='#1565C0')
ax.axhline(0.855, color='#1565C0', linewidth=1.2)
for i, (name, src, ok, how) in enumerate(rows):
    yy = 0.80 - i * 0.105
    face = '#E8F5E9' if ok != '×' else '#FFF5F5'
    ax.add_patch(plt.Rectangle((0.0, yy - 0.045), 1.0, 0.092, transform=ax.transAxes,
                               facecolor=face, edgecolor='none', zorder=0))
    ax.text(col_x[0], yy, name, fontsize=9.8, transform=ax.transAxes, va='center')
    ax.text(col_x[1], yy, src, fontsize=8.8, transform=ax.transAxes, va='center', color='#555')
    ok_color = '#2E7D32' if ok != '×' else '#C62828'
    ax.text(col_x[2] + 0.05, yy, ok, fontsize=12, transform=ax.transAxes, va='center',
            ha='center', color=ok_color, fontweight='bold')
    ax.text(col_x[3], yy, how, fontsize=9.2, transform=ax.transAxes, va='center')
ax.text(0.99, -0.02, '×=SSDSE未収録のため原論文の報告値を可視化/△=一部(都道府県)のみ収録',
        transform=ax.transAxes, ha='right', fontsize=8, color='#B71C1C', style='italic')
out4 = os.path.join(FIG_DIR, '2020_H4_fig4.png')
plt.savefig(out4, dpi=150, bbox_inches='tight')
plt.close()
print(f"  保存: {out4}")
▼ 実行結果
=== 図4: 再現可能性トリアージ ===
  変数                    SSDSE収録   扱い
  ふるさと納税 受け入れ金額         ×         報告値(ふるさと納税ガイド)
  市区町村・都道府県の面積          ×         報告値(国土地理院 面積調2020)
  市区町村別 総人口             ×         報告値(住民基本台帳 2017)
  都道府県別 歳入額             ×         報告値(地方財政統計年報 H29)
  転入者数 − 転出者数           △         都道府県は収録(SSDSE-2020A/B(現B))
  人口密度(=人口/面積)          ×         報告値(面積が SSDSE 未収録)
  歳入割合(納税/歳入)           ×         報告値(市区町村レベル未収録)
  保存: html/figures/2020_H4_fig4.png
💡 解説
  • 分析の中核変数(ふるさと納税額・面積・市区町村別歳入)は SSDSE 未収録 のため「×=報告値」。
  • 転入者数−転出者数のみ、都道府県レベルが SSDSE-B に収録(△)。
  • この表により、どの数値が実データ由来でどれが原論文の報告値かを明示しています。
1
分析①:人口密度は「必要性」の指標になるか

ふるさと納税は2008年に始まり、2008〜2014年は緩やかに成長したが、2015年以降に爆発的に増加した。原論文はその要因を、2015年の税制改正(住民税の控除上限が概ね1割から2割へ引き上げ)と各種の宣伝によるものとしている(折れ線グラフによる年次推移は原論文 図2 を参照。本教材では時系列の生データが手元にないため図は再現していない)。

まず原論文は、人口密度が必要性の指標として適切かを相関で検証した。都道府県の歳入額はその都道府県の人口・納税者数を反映するため、人口密度と相関するはずだ、という発想である。

原論文の報告値(都道府県別・n=47)
  • 人口密度 × 歳入額 の相関係数 r = 0.8468049(強い相関)〔原論文 図3〕
  • 人口密度 × (転入者数−転出者数) の相関係数 r = 0.8249227(強い相関)〔原論文 図4〕

次に市区町村別でも同じ相関を見た。散布図で歳入が5億円を超える都市、(転出者数−転入者数)が5000人を超える都市を見ると、いずれも政令指定都市だったため、これらを外れ値として除外して描き直した(原論文 図7・図8)。

原論文の報告値(市区町村別・政令指定都市を除外)
  • 人口密度 × 歳入額 の相関係数 r = 0.6286418〔原論文 図7〕
  • 人口密度 × (転入者数−転出者数) の相関係数 r = 0.5282505〔原論文 図8〕
都道府県別に比べればやや弱いが、市区町村でも相関が見られた。以上より原論文は「人口密度はふるさと納税の必要性を表す指標としてある程度適切」と結論づけた。
人口密度との相関係数(原論文の報告値)
図1:人口密度と各指標の相関(2017年)。4つの数値はすべて原論文の報告値であり、この教材による再計算ではない。*市区町村別は政令指定都市を外れ値として除外。
📖 図の読み方
青いバー
都道府県別(n=47)。いずれも 0.7 を超え「強い相関」。
オレンジのバー
市区町村別(政令市除く)。0.5〜0.63 で相関はやや弱まるが依然として存在。
注意
相関はあくまで「一緒に動く傾向」。因果関係を示すものではない。
やってみよう準備:ライブラリ読み込みと出力設定
📝 コード
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import os
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from matplotlib.patches import Patch

plt.rcParams['font.family'] = 'Hiragino Sans'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.dpi'] = 150

FIG_DIR = 'html/figures'
os.makedirs(FIG_DIR, exist_ok=True)
💡 解説
  • matplotlib.use('Agg') — 画面表示せず PNG に保存するための設定。
  • Hiragino Sans — 図の日本語フォント(Windows は Yu Gothic 等)。
  • この教材のコードは 外部データを読み込みません。原論文(PDF)に印字された報告値を配列に持ち、それを可視化するだけです(再計算ではありません)。
やってみよう図1:人口密度との相関係数(原論文の報告値)
📝 コード
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# ============================================================
# 図1: 人口密度との相関係数(原論文の報告値)
#   原論文 5.1「仮説の検証」より。すべて原論文に印字された報告値。
# ============================================================
print("=== 図1: 相関係数(原論文の報告値) ===")
corr_labels = [
    '都道府県別\n歳入 × 人口密度',
    '都道府県別\n(転入−転出) × 人口密度',
    '市区町村別*\n歳入 × 人口密度',
    '市区町村別*\n(転入−転出) × 人口密度',
]
corr_values = [0.8468049, 0.8249227, 0.6286418, 0.5282505]  # 原論文 図3/図4/図7/図8
corr_colors = ['#1565C0', '#1565C0', '#E65100', '#E65100']
for lab, v in zip([l.replace('\n', ' ') for l in corr_labels], corr_values):
    print(f"  r = {v:.7f}  |  {lab}")

fig, ax = plt.subplots(figsize=(9, 5))
ypos = np.arange(len(corr_values))[::-1]
bars = ax.barh(ypos, corr_values, color=corr_colors, edgecolor='white', height=0.62)
for y, v in zip(ypos, corr_values):
    ax.text(v + 0.01, y, f'{v:.4f}', va='center', ha='left', fontsize=12, fontweight='bold')
ax.axvline(0.7, color='#888', linestyle='--', linewidth=1)
ax.text(0.705, len(corr_values) - 0.5, '強い相関の目安 (0.7)', fontsize=9, color='#666')
ax.set_yticks(ypos)
ax.set_yticklabels(corr_labels, fontsize=10.5)
ax.set_xlim(0, 1.0)
ax.set_xlabel('Pearson 相関係数 r(原論文の報告値)', fontsize=11)
ax.set_title('人口密度と各指標の相関(2017年・原論文の報告値)\n'
             '*市区町村別は政令指定都市を外れ値として除外', fontsize=12.5, fontweight='bold', pad=10)
legend = [Patch(facecolor='#1565C0', label='都道府県別 (n=47)'),
          Patch(facecolor='#E65100', label='市区町村別(政令市除く)')]
ax.legend(handles=legend, loc='lower right', fontsize=9.5)
ax.grid(axis='x', linestyle='--', alpha=0.4)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.text(0.01, 0.02, '原論文の報告値の可視化(再計算ではない)',
        transform=ax.transAxes, ha='left', fontsize=8.5, color='#B71C1C', style='italic')
plt.tight_layout()
out1 = os.path.join(FIG_DIR, '2020_H4_fig1.png')
plt.savefig(out1, dpi=150, bbox_inches='tight')
plt.close()
print(f"  保存: {out1}")
▼ 実行結果
=== 図1: 相関係数(原論文の報告値) ===
  r = 0.8468049  |  都道府県別 歳入 × 人口密度
  r = 0.8249227  |  都道府県別 (転入−転出) × 人口密度
  r = 0.6286418  |  市区町村別* 歳入 × 人口密度
  r = 0.5282505  |  市区町村別* (転入−転出) × 人口密度
  保存: html/figures/2020_H4_fig1.png
💡 解説
  • corr_values の4つの数値はすべて原論文 5.1「仮説の検証」の報告値(図3・図4・図7・図8)。本コードは計算していません。
  • 都道府県別は強い相関(0.70 超)、市区町村別(政令市除く)はやや弱まるが相関が見られる、という原論文の主張を1枚に可視化。
  • ax.barh(...) で横棒グラフを描画し、各バーに ax.text で数値を添えています。
2
分析②:過剰に集めている自治体の抽出

次に原論文は、ふるさと納税収入がその自治体の財政に持つ意味を測る指標として歳入割合(ふるさと納税受け入れ金額 ÷ 歳入)を作り、ふるさと納税金額と歳入割合の散布図を描いた(原論文 図9)。この散布図は、原点付近に集中する多数の自治体と、そこから分散する一部の自治体に分かれ、分散している12自治体が抽出された。

原論文 図9 の解釈(回帰直線で区切られた2領域)
  • 赤丸:ふるさと納税による収入に頼っている自治体(歳入割合が高い)
  • 黄丸:納税者が多く、受け入れ金額が歳入をそれほど占めていない=必要以上に集めている疑い
  • 緑字:各自治体の人口密度(=必要度の目安)を書き込んだもの

ここで問題が生じた。湯浅町・上峰町・みやき町の3自治体は、黄丸領域に属しているのに人口密度が高く、人口密度という指標で説明がつかなかった。また泉佐野市は、図9上の他のどの自治体よりも人口密度が極端に高く、黄丸に属しているとはいえ人口密度では説明しきれなかった。

人口密度で説明できない4自治体(原論文の報告値)
図2:人口密度では説明できなかった4自治体の人口密度〔人/km²〕。値は原論文 図9 の緑字(報告値)の可視化であり、再計算ではない。
📖 図の読み方
泉佐野市 1802.5
他の抽出自治体に比べ突出して高密度。ふるさと納税による収入が必要とは考えにくい。
湯浅町・上峰町・みやき町
小さな町だが密度が高く、黄丸領域にあること(過剰収集)が指標と矛盾。
参考
北山村9.4・小谷村11.0 など密度が低い自治体は「必要性が高い」とされ、指標と整合的。
やってみよう図2:人口密度で説明できない4自治体(原論文 図9の報告値)
📝 コード
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# ============================================================
# 図2: 人口密度で説明のつかない4自治体(原論文 図9の報告値)
#   原論文 図9 の緑字(各自治体の人口密度[人/km^2])より。
# ============================================================
print("\n=== 図2: 過剰にふるさと納税を集めている4自治体(原論文の報告値) ===")
outlier_names = ['上峰町', 'みやき町', '湯浅町', '泉佐野市']
outlier_density = [303.0, 490.3, 750.4, 1802.5]  # 原論文 図9 緑字
# 参考:人口密度から必要性が高い(適正)とされた低密度自治体の例(原論文 図9 緑字)
ref_names = ['北山村', '小谷村', '奈半利町', '都農町', '根室市']
ref_density = [9.4, 11.0, 16.1, 39.1, 51.0]
for n, d in zip(outlier_names, outlier_density):
    print(f"  外れ値: {n:<6} 人口密度 = {d:>7.1f} 人/km^2")
for n, d in zip(ref_names, ref_density):
    print(f"  適正例: {n:<6} 人口密度 = {d:>7.1f} 人/km^2")

fig, ax = plt.subplots(figsize=(9, 5))
ypos = np.arange(len(outlier_names))
bars = ax.barh(ypos, outlier_density, color='#C62828', edgecolor='white', height=0.6)
for y, (n, d) in enumerate(zip(outlier_names, outlier_density)):
    ax.text(d + 20, y, f'{d:,.1f}', va='center', ha='left', fontsize=12, fontweight='bold')
ax.set_yticks(ypos)
ax.set_yticklabels(outlier_names, fontsize=13)
ax.set_xlim(0, 2100)
ax.set_xlabel('人口密度(人/km²・原論文の報告値)', fontsize=11)
ax.set_title('人口密度では説明できなかった4自治体\n(歳入割合が高いのに人口密度も高い=過剰収集の疑い)',
             fontsize=12.5, fontweight='bold', pad=10)
ax.grid(axis='x', linestyle='--', alpha=0.4)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ref_txt = '参考(人口密度が低く必要性が高いとされた自治体):\n' + \
          ' '.join(f'{n} {d}' for n, d in zip(ref_names, ref_density)) + ' 人/km²'
ax.text(0.98, 0.06, ref_txt, transform=ax.transAxes, ha='right', va='bottom',
        fontsize=8.5, color='#333',
        bbox=dict(boxstyle='round,pad=0.4', facecolor='#FFF9C4', edgecolor='#F9A825'))
ax.text(0.99, 0.02, '原論文 図9 の報告値(緑字)の可視化(再計算ではない)',
        transform=ax.transAxes, ha='right', fontsize=8, color='#B71C1C', style='italic')
plt.tight_layout()
out2 = os.path.join(FIG_DIR, '2020_H4_fig2.png')
plt.savefig(out2, dpi=150, bbox_inches='tight')
plt.close()
print(f"  保存: {out2}")
▼ 実行結果
=== 図2: 過剰にふるさと納税を集めている4自治体(原論文の報告値) ===
  外れ値: 上峰町    人口密度 =   303.0 人/km^2
  外れ値: みやき町   人口密度 =   490.3 人/km^2
  外れ値: 湯浅町    人口密度 =   750.4 人/km^2
  外れ値: 泉佐野市   人口密度 =  1802.5 人/km^2
  適正例: 北山村    人口密度 =     9.4 人/km^2
  適正例: 小谷村    人口密度 =    11.0 人/km^2
  適正例: 奈半利町   人口密度 =    16.1 人/km^2
  適正例: 都農町    人口密度 =    39.1 人/km^2
  適正例: 根室市    人口密度 =    51.0 人/km^2
  保存: html/figures/2020_H4_fig2.png
💡 解説
  • outlier_density は原論文 図9 の緑字(各自治体の人口密度)。上峰町303.0・みやき町490.3・湯浅町750.4・泉佐野市1802.5〔人/km²〕。
  • 参考の低密度自治体(北山村9.4 など)は「人口密度が低く必要性が高い」とされた例。いずれも報告値の転記です。
3
分析③:必要性モデルと4自治体の逸脱

さらに原論文は、市区町村別の人口密度と歳入割合の散布図を描いた(原論文 図10)。ふるさと納税の目的からすれば、人口密度と歳入割合は反比例の形をとるのが望ましい(密度が低い=必要性が高い=歳入割合が高い)。図10の青枠内(密度が低く歳入割合が高い自治体)を拡大したのが図11で、そこには反比例に近い「成功例の曲線」(赤線)が描ける。赤線上の自治体は、ふるさと納税を必要な財源としてうまく活用している成功例である。

そして、この曲線から外れているのが、分析②で抽出された湯浅町・上峰町・みやき町・泉佐野市の4自治体だった。特に泉佐野市は、都道府県の人口密度ランキング(原論文 図12)と比べると、東京都・大阪府・神奈川県に次ぐ人口密度に相当し、ふるさと納税による収入が必要だとは考えにくい。

必要性モデルの概念図
図3:人口密度と歳入割合の「必要性」モデル(概念図)。これは原論文の考え方を図解した概念図であり、実データではない。実際の散布図は原論文 図9〜11 を参照。
必要性モデルの要点 赤い曲線(反比例)に乗っている自治体=制度をうまく活用している成功例。曲線から上に外れる自治体=密度が高い(必要性が低い)のに歳入割合も高い=過剰にふるさと納税を集めている疑い。原論文はこの逸脱によって4自治体を特定した。
やってみよう図3:必要性モデルの概念図(考え方の図解・実データではない)
📝 コード
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# ============================================================
# 図3: 必要性モデルの概念図(原論文 図10・図11 の考え方の図解)
#   ※実データではない。原論文の主張(人口密度と歳入割合は反比例が望ましい)を図解。
# ============================================================
print("\n=== 図3: 必要性モデルの概念図(実データではない・考え方の図解) ===")
fig, ax = plt.subplots(figsize=(9, 5.5))
x = np.linspace(20, 2000, 300)
y_curve = 40.0 / x  # 反比例の「成功曲線」を模した概念曲線(任意スケール)
ax.plot(x, y_curve, color='#C62828', linewidth=2.4, label='必要性の目安(反比例=成功例の曲線)')
# 曲線上(うまく活用=成功例)の概念点
ax.scatter([60, 120, 300], 40.0 / np.array([60, 120, 300]), s=70, color='#2E7D32',
           zorder=5, edgecolors='white', label='曲線上:制度をうまく活用(成功例)')
# 曲線から外れた4自治体(概念的に上方=密度が高いのに歳入割合も高い)
off_x = [303, 490, 750, 1802]
off_y = [0.26, 0.30, 0.34, 0.40]
off_lab = ['上峰町', 'みやき町', '湯浅町', '泉佐野市']
ax.scatter(off_x, off_y, s=90, color='#E65100', zorder=6, marker='D',
           edgecolors='white', label='曲線から外れる:過剰収集の疑い')
for xx, yy, ll in zip(off_x, off_y, off_lab):
    ax.annotate(ll, (xx, yy), fontsize=10, xytext=(6, 4), textcoords='offset points')
ax.set_xlabel('人口密度(人/km²)→ 大きいほど「必要性が低い」', fontsize=11)
ax.set_ylabel('歳入割合(ふるさと納税 ÷ 歳入)', fontsize=11)
ax.set_title('人口密度と歳入割合:ふるさと納税の「必要性」モデル(概念図)',
             fontsize=12.5, fontweight='bold', pad=10)
ax.set_xlim(0, 2000)
ax.set_ylim(0, 0.45)
ax.legend(fontsize=9, loc='upper center')
ax.grid(linestyle='--', alpha=0.35)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.text(0.99, 0.02, '概念図(実データではない)/グラフの実データは原論文 図9〜11参照',
        transform=ax.transAxes, ha='right', fontsize=8, color='#B71C1C', style='italic')
plt.tight_layout()
out3 = os.path.join(FIG_DIR, '2020_H4_fig3.png')
plt.savefig(out3, dpi=150, bbox_inches='tight')
plt.close()
print(f"  保存: {out3}")
▼ 実行結果
=== 図3: 必要性モデルの概念図(実データではない・考え方の図解) ===
  保存: html/figures/2020_H4_fig3.png
💡 解説
  • 赤い曲線 y = 40 / x は原論文が理想とする反比例(成功例の曲線)を模した概念曲線で、実データではありません。
  • ダイヤ印の4自治体は、密度が高い(必要性が低い)のに歳入割合が高い=曲線から外れる、という原論文の主張を図解したもの。
  • 実際の散布図(図9〜11)は原論文を参照してください。

政策提言(原論文の結論)

原論文は、人口密度という必要性の指標に当てはまらなかった4自治体(湯浅町・上峰町・みやき町・泉佐野市)は、ふるさと納税の目的や意義から逸脱し、必要以上にふるさと納税を集めていると考えた。ふるさと納税で地域活性を目指す自治体の努力は奨励されるべきだが、過剰な収集はやめるべきである、というのが原論文の立場である。

泉佐野市の例(原論文より) 泉佐野市は、他地域の特産品や金券などをお礼品に据え、また過剰な返礼割合にすることで、他自治体より「お得」な返礼品を出して過剰な納税を集めていた。制度上の罰則がないからといって他自治体と異なる基準の返礼品を出し、ふるさと納税の意義や目的を見失って返礼品競争と化したことは問題である。
原論文の提案 ふるさと納税制度は、地方創生を行いたい自治体と納税者の双方にメリットがある。制度の良さを維持しつつ、今回検証した人口密度のような「必要性」を表す指標を導入し、必要性が低い自治体が過剰なふるさと納税を集めないよう、指標の度数(水準)に応じて条件や制限を設けることで、制度本来の目的により沿った形へ補正できるのではないか。

下は、本教材で扱った数値がどこ由来かを最後に確認する出力である(すべて原論文の報告値)。

やってみよう要約:主要な報告値の出力
📝 コード
183
184
185
186
187
188
189
190
191
192
193
# ── 要約 ─────────────────────────────────────────────────
print("\n=== 要約(すべて原論文の報告値) ===")
print("都道府県別  歳入×人口密度       r = 0.8468049(強い相関)")
print("都道府県別  (転入−転出)×人口密度 r = 0.8249227(強い相関)")
print("市区町村別  歳入×人口密度       r = 0.6286418(政令市除く)")
print("市区町村別  (転入−転出)×人口密度 r = 0.5282505(政令市除く)")
print("人口密度で説明できない4自治体:湯浅町(750.4) 上峰町(303.0) みやき町(490.3) 泉佐野市(1802.5) 人/km²")

print("\n=== 全図生成完了 ===")
for f in [out1, out2, out3, out4]:
    print(f"  {'OK' if os.path.exists(f) else 'NG'}: {os.path.basename(f)}")
▼ 実行結果
=== 要約(すべて原論文の報告値) ===
都道府県別  歳入×人口密度       r = 0.8468049(強い相関)
都道府県別  (転入−転出)×人口密度 r = 0.8249227(強い相関)
市区町村別  歳入×人口密度       r = 0.6286418(政令市除く)
市区町村別  (転入−転出)×人口密度 r = 0.5282505(政令市除く)
人口密度で説明できない4自治体:湯浅町(750.4) 上峰町(303.0) みやき町(490.3) 泉佐野市(1802.5) 人/km²

=== 全図生成完了 ===
  OK: 2020_H4_fig1.png
  OK: 2020_H4_fig2.png
  OK: 2020_H4_fig3.png
  OK: 2020_H4_fig4.png
💡 解説
  • 画面に出力される数値はすべて原論文の報告値です。
  • 4つの相関係数と、人口密度で説明できなかった4自治体の密度をまとめて確認できます。

まとめ

本研究(原論文)は、ふるさと納税の制度上の意義と目的から「必要性」の指標を予想して仮説を立て、演算ソフト R でデータ分析し検証した。主な知見は以下の通りである(数値はすべて原論文の報告値)。

知見1:人口密度は必要性の指標として「ある程度適切」 都道府県別で 人口密度×歳入額 r=0.8468049、人口密度×転入超過 r=0.8249227 と強い相関。市区町村別(政令市除く)でも r=0.6286418/0.5282505 と相関が見られた。
知見2:指標から逸脱する4自治体を抽出 人口密度と歳入割合の反比例モデルから外れた 湯浅町・上峰町・みやき町・泉佐野市 は、密度が高い(必要性が低い)のに歳入割合が高く、過剰収集の疑いがある。
知見3:指標に基づく制度補正の提案 必要性指標の度数に応じて条件・制限を設けることで、返礼品競争を是正し、地方創生という制度本来の目的に沿った補正が可能になると提案した。

分析の限界と今後の課題

この分析で学べる統計的ポイント
  • 相関係数と散布図で仮説(人口密度=必要性)を段階的に検証する流れ
  • 外れ値(政令指定都市)を意図的に除外して傾向を見る判断とその明示
  • 既存データにない「新しい指標」(人口密度・歳入割合)を自分で設計する発想
  • 反比例モデルからの逸脱として「異質な対象」を抽出する考え方

原論文: 岡本涼夏「自治体ごとのふるさと納税の必要性を定義する」2020年度 統計データ分析コンペティション 統計活用奨励賞[高校生の部](慶應義塾湘南藤沢高等部)
数値の扱い: 本ページの相関係数・人口密度はすべて原論文の報告値。図は報告値の可視化または概念図であり、この教材による再計算ではない。
使用ツール(本教材の作図): Python 3(numpy, matplotlib)

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

統計分析の解釈で初心者がやりがちな勘違いをまとめます。特に「相関因果の混同」「p値の過信」は研究現場でもよく起きる落とし穴です。本文を読む前にも、読んだ後にも、目を通してみてください。

❌ 「相関がある=因果関係がある」ではない
疑似相関spurious correlationとは、見かけ上は関係があるように見えるが、実際は無関係、または第三の変数(交絡変数)が両方に影響しているだけの現象です。

古典例: アイスクリームの売上 と 水難事故件数 は強く相関するが、片方が他方を引き起こしているわけではない。両者とも「夏の暑さ」という第三の変数に引きずられているだけ。

論文を読むときの心構え: 「○○と△△に強い相関が見られた」だけで終わっている主張は、本当に因果関係があるのか、それとも第三の変数(人口・所得・地理など)が共通要因として効いているだけではないかを必ず疑ってください。
❌ 「p値が小さい=重要な発見」ではない
p値が小さい(例えば p < 0.001)ことは「統計的に偶然とは考えにくい」という意味であって、「実用的に大きな効果がある」という意味ではありません。

例: 巨大なサンプルサイズ(n=100,000)では、相関係数 r=0.02 でも p < 0.001 になります。しかし r=0.02 は実用上ほぼ無視できる関係です。

正しい読み方: p値効果量係数の大きさ、相関係数の値)の両方をセットで判断してください。p値だけで「重要な発見」と結論づけるのは誤りです。
❌ 「回帰係数が大きい=重要な変数」ではない
回帰係数の絶対値は、説明変数単位に強く依存します。「年収(万円)」と「失業率(%)」の係数を直接比較しても意味がありません。

正しい比較方法: (1) 標準化係数(各変数を平均0・分散1に変換した上での係数)を使う、(2) 限界効果(変数を1標準偏差動かしたときのyの変化)で比較する。

また、係数の大きさが「因果関係の強さ」を意味するわけでもありません。あくまで「相関的な関連の強さ」です。
❌ 「外れ値を除外すれば正しい結果」ではない
外れ値(極端な値)を「目障りだから」「結果が綺麗にならないから」という理由で除外するのは分析の改ざんに近い行為です。

外れ値が示すもの: 本当に重要な情報(東京の超高密度、北海道の超低密度など)であることが多い。外れ値を取り除くと「日本全体の傾向」を見誤る原因になります。

正しい対処: (1) 外れ値の出現要因を調査する(なぜ東京だけ突出するのか)、(2) ノンパラメトリック手法(Spearman相関Kruskal-Wallis)を使う、(3) 外れ値を含む結果と除外した結果の両方を提示し、解釈を読者に委ねる。
❌ 「サンプルサイズが大きい=信頼できる」ではない
サンプルサイズ(n)が大きいと統計的検定の検出力は上がりますが、それは「偶然による誤差を減らす効果」にすぎません。

nが大きくても解消されない問題:
選択バイアス標本が偏っている)
測定誤差(変数の定義が曖昧)
欠損値のパターン(欠損がランダムでない)
交絡変数の見落とし

例: 1万人にWeb調査して「ネット利用と幸福度は強く相関」と言っても、そもそも回答者がネットユーザー寄りに偏っているため、母集団全体の結論にはなりません。
❌ 「複雑なモデル=より良い分析」ではない
ランダムフォレストニューラルネット・複雑な階層モデルなど、高度な手法を使えば「良い分析」と感じがちですが、必ずしもそうではありません。

過学習(overfitting)の罠: モデルが複雑すぎると、訓練データ偶然のパターンまで学習してしまい、新しいデータでは予測精度が落ちます。

シンプルさの価値: 重回帰分析相関分析は「結果が解釈しやすい」「再現性が高い」という大きな利点があります。複雑な手法はシンプルな手法で答えが出ない時の最後の手段です。
❌ 「多重共線性は気にしなくていい」ではない
多重共線性とは、説明変数同士の相関が極めて強い状態のこと。これを放置すると、回帰係数符号や大きさが入れ替わる異常事態が起こります。

典型例: 「総人口」と「労働力人口」を同時に投入すると、両者の相関が r=0.99 になり、係数推定が極端に不安定になります。「総人口は正だが、労働力人口は負」のような解釈不能な結果になりがちです。

診断と対処:
VIF(分散拡大係数)を計算し、VIF > 10 の変数を確認
相関行列で |r| > 0.8 のペアをチェック
・対処法:一方を除外、合成変数(PCA)に変換、Ridge回帰で安定化
❌ 「R²が高い=良いモデル」ではない
決定係数 R² はモデルの「当てはまりの良さ」を示しますが、 が高くてもモデルが正しいとは限りません

が高くなる罠:
説明変数を増やせば は自動的に上がる(無関係な変数を追加してもは下がらない)
時系列データでは、共通のトレンド(時間とともに増加)があるだけで が 0.9 を超える
サンプルサイズが小さいとが過大評価される

代替指標: 調整済み (変数の数でペナルティ)AICBICモデル選択基準)を併用してください。予測力の真の評価には交差検証(cross-validation)テストデータ を見ること。
❌ 「ステップワイズで選んだ変数は重要」ではない
ステップワイズ法(バックワード・フォワード選択)は便利ですが、p値ベースの変数選択は再現性に問題があると批判されています。

問題点:
同じデータでも実行順序によって最終モデルが変わる
p値を繰り返し見ることで「偶然に有意な変数」を拾ってしまう(p-hacking
係数標準誤差が過小評価され、信頼区間が嘘っぽくなる

より良い方法:
事前に変数を理論で絞る(先行研究から候補を選ぶ)
LASSO回帰(自動かつ統計的に正当化された変数選択)を使う
交差検証AIC/BIC 最小モデルを選ぶ
❌ 「線形回帰なら線形関係を前提にすべき」
重回帰分析線形関係を前提とします。実際の関係が非線形なのに線形モデルで分析すると、本当の関係を見逃します

非線形の例:
U字型関係: 失業率と物価上昇率(フィリップス曲線)
逓減効果: 所得と幸福度(年収 800万円までは強い正の効果、それ以上は飽和)
閾値効果: 高齢化率と医療費(ある水準を超えると急激に上がる)

診断と対処:
残差プロット残差が0周辺に均等に分布しているか確認
変数の対数変換・二乗項追加で非線形性を取り込む
・どうしても線形では捉えられないなら、機械学習RF・GBM)を併用する
❌ 「データに当てはまった=予測に使える」ではない
「過去のデータでフィットしたから将来も予測できる」と思うのは危険です。

過学習(overfitting)の例: 47都道府県のデータに10個の説明変数を投入すれば、ほぼ完璧にフィットします(自由度がほぼゼロ)。でもそのモデルを新しい年度に適用すると、予測精度はほぼランダム並みに落ちることがあります。

正しい予測力の評価:
・データを訓練用 70%テスト用 30%に分割し、テスト用での予測精度を見る
k分割交差検証(k-fold CV)で予測の安定性を確認
・「説明変数の数 ≪ サンプルサイズ」のバランスを意識(目安:n > 10 × 変数数)

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

統計の基本用語を初心者向けに解説します。本文中で見慣れない言葉が出てきたら、ここに戻って確認してください。

p値
「効果がない」と仮定したときに、観察されたデータ(またはより極端なデータ)が得られる確率。0〜1の値で、慣例的に 0.05(5%)未満を「有意」と判断する。
有意水準
「偶然」と「意味のある違い」を分ける基準。通常 α=0.05(5%)を使う。p値 < α なら「有意」と判定。
信頼区間
「真の値はこの範囲にあるだろう」という幅。95%信頼区間 = 同じ実験を100回繰り返したら95回はこの範囲に真の値が入る。
サンプルサイズ
分析に使ったデータ点の数(n)。一般にnが大きいほど推定が安定し、わずかな差も検出できるようになる。
標準誤差
推定値(係数など)のばらつきの目安。標準誤差が小さいほど推定値が安定している。
正規分布
釣鐘型の左右対称な分布。多くのパラメトリック検定(t検定F検定など)は「データが正規分布に従う」ことを仮定する。
因果相関
相関がある」と「原因と結果の関係(因果)」は別物。アイスクリームの売上と水難事故は相関するが、原因は両者とも「夏の暑さ」。
外れ値
他のデータから極端に離れた値。分析結果を歪める原因になるため、検出して除外するか別途扱う必要がある。
欠損値
データが取得できなかった部分(NaN・空白)。除外するか補完(平均代入・回帰代入など)するかが分析上の重要な判断点。
人口密度
単位面積あたりの人口。総人口〔人〕÷面積〔km²〕で計算する。本論文はこれを「ふるさと納税の必要性」の代理指標(大きいほど必要性が低い)として用いた。
交絡変数
「真の原因」と「結果」の両方に影響する第三の変数。これを統制しないと、見かけ上の関係を真の因果と誤認する。
係数回帰係数
説明変数 x が1単位増えたとき、目的変数 y が平均でどれだけ変化するか」を示す数値。正の値は正の影響、負の値は負の影響。
歳入割合
ふるさと納税の受け入れ金額が、その自治体の歳入に占める割合。本論文の指標で、値が大きいほど財政をふるさと納税に頼っていることを表す。
散布図
2変数を縦軸・横軸にとって点を打ったグラフ。点の並び方から2変数の関係(右上がり=正の相関など)を目で確認できる。本論文の分析の中心的な道具。
反比例
一方が増えると他方が同じ割合で減る関係(y = a/x)。本論文は「人口密度が高い(必要性が低い)ほど歳入割合は低い」という反比例が理想と考え、そこから外れる自治体を抽出した。
政令指定都市
人口50万人以上で政令により指定された大都市(横浜市・大阪市など)。歳入も転入超過も突出するため、本論文は市区町村分析で外れ値として除外した。

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

統計手法について「何のためか」「結果をどう読むか」を初心者向けに解説します。

◆ 統計の基本概念(どの論文にも共通)

🔍 p値有意確率)とは
何?
「もし本当に効果がなかったとしたら、今回の結果(またはもっと極端な結果)が偶然起きる確率」のこと。
なぜ必要?
帰無仮説(「効果なし」の仮定)のもとで検定統計量の分布から計算する。
何がわかる?
「この関係は偶然ではなく、統計的に意味がある」と主張するための客観的な根拠になる。
読み方
p < 0.05(5%未満)を「統計的に有意」と判断するのが慣例。ただし「p値が小さい=効果が大きい」ではない。効果量係数の大きさ)とセットで判断する。
🗂️ ノンパラメトリック検定とは(なぜ使うのか)
何?
「データが正規分布に従う」という仮定を置かない検定手法の総称。Kruskal-Wallis検定・Mann-Whitney U検定などが代表例。
なぜ必要?
データの値ではなく「順位」に変換して検定統計量を計算する。外れ値や偏った分布に対しても安定して機能する。
何がわかる?
サンプルサイズが小さい・データが歪んでいる・外れ値がある場合でも、グループ差の有無を検定できる。
読み方
「なぜノンパラメトリックを選ぶのか」の理由を示すには、正規性検定(Shapiro-Wilk)の結果を添えるのが望ましい。結果の解釈は対応するパラメトリック検定と同様(p < 0.05 で有意差あり)。

◆ この論文で使われている手法

🔗 相関分析(散布図相関係数
何?
2つの変数が「一緒に増減する傾向の強さと向き」を −1〜+1 の相関係数 r で数値化する手法。本論文では「人口密度」と「歳入」「転入超過」の関係を確かめるのに使われた。
どう使う?
散布図を描いて関係の形を目で確認し、Pearson相関係数を計算する。本論文は演算ソフト R で算出している。
何がわかる?
「人口密度が高い都道府県ほど歳入も多い」といった傾向の強さがわかる。仮説(人口密度=必要性の指標)を検証する第一歩になる。
結果の読み方
|r| > 0.7 は強い相関、0.4〜0.7 は中程度、|r| < 0.3 はほぼ無相関。本論文の報告値は都道府県で 0.85 前後、市区町村で 0.53〜0.63。
⚠️ 注意点
(1) 相関は因果ではない—「人口密度が歳入を決める」と断定はできない。(2) 外れ値に弱いPearson r は極端な値(政令指定都市)に大きく引っ張られるため、本論文は該当都市を除外している。(3) 直線関係を前提—反比例など曲線的な関係は r では捉えにくい(本論文は歳入割合との関係を反比例モデルで別途検討)。(4) 集計単位で値が変わる—都道府県と市区町村で r が変わることに注意。
🎯 外れ値の扱い(政令指定都市の除外)
何?
他から極端に離れた値(外れ値)をどう扱うかの判断。本論文では、歳入が5億円超・転入超過が5000人超の都市がいずれも政令指定都市だったため、これらを除外して市区町村の傾向を見直した。
どう使う?
散布図で極端な点を特定し、その正体(政令指定都市)を確認したうえで、理由を明示して除外・再作図する。
何がわかる?
ごく少数の巨大都市に隠れていた、一般の市区町村の傾向が見えるようになる。
結果の読み方
除外の前後で相関がどう変わるかを比較する。本論文では除外後も r=0.53〜0.63 の相関が残った。
⚠️ 注意点
(1) 除外は「結果を綺麗にするため」に行ってはいけない—必ず客観的な理由(政令指定都市という制度上の区分)を示す。(2) 外れ値こそ重要な情報のことがある—本論文でも泉佐野市という外れ値が結論の核心になった。(3) 除外基準を明記—「歳入5億円超」など再現可能な基準を残す。(4) 除外版と非除外版の両方を提示できると誠実。
🧮 指標の設計(人口密度・歳入割合)
何?
既存データにない「新しいものさし」を自分で作る作業。本論文は 人口密度=総人口÷面積、歳入割合=ふるさと納税受け入れ金額÷歳入 という2つの指標を設計した。
どう使う?
測りたい概念(=ふるさと納税の「必要性」)を、入手できるデータの四則演算で近似する。人口密度は「単位面積あたりの人口」で必要性の低さを、歳入割合は「制度への依存度」を表す。
何がわかる?
直接は測れない抽象的な概念(必要性)を、数値として比較・可視化できるようになる。
結果の読み方
指標が現象をどれだけ説明できるかを、他指標との相関や散布図で確かめる。説明できない対象(4自治体)は「指標の限界」または「異質な対象」として解釈する。
⚠️ 注意点
(1) 分母の性質に注意—人口密度は面積が極端に小さい町で大きく出る。(2) 単一指標で断定しない—本論文も4自治体は人口密度だけでは説明しきれなかった。(3) 定義を明記—分子・分母・年次(本論文は2017年)・出典をそろえる。(4) 割合は元の大きさを失う—歳入割合が同じでも金額規模は大きく違うので併せて見る。
📉 反比例モデルによる逸脱の検出
何?
「理想的にはこういう関係になるはず」というモデル(本論文では人口密度と歳入割合の反比例)を置き、そこから外れる対象を見つける考え方。
どう使う?
散布図上に「成功例の曲線」(反比例に近い曲線)を描き、その曲線に乗る自治体と、外れる自治体を区別する。
何がわかる?
制度をうまく活用している自治体(曲線上)と、指標では説明できない異質な自治体(曲線から逸脱)を選び分けられる。本論文はこれで4自治体を特定した。
結果の読み方
曲線から大きく外れるほど「異質」。ただし外れた理由(面積が小さい・返礼品戦略など)は別途考察が必要。
⚠️ 注意点
(1) 曲線は仮定—反比例が本当に妥当かは検討が要る(本教材の図3はあくまで概念図)。(2) 逸脱=悪ではない—逸脱は「要調査」のサインで、断罪の証拠ではない。(3) 少数の逸脱例に依存—結論が数自治体で決まるため、頑健性に注意。(4) 統計的検定ではない—目視の区分なので、判断基準を明示することが望ましい。

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

この研究をさらに発展させるための3つの方向性を示します。「今回わかったこと(X)」から「次に検証すべき仮説(Y)」を立て、「具体的に何をするか(Z)」まで考えてみましょう。

① データ・時間的拡張
結果 X
本論文は特定の年度・地域の断面データ(または限られた時系列)で分析を行った。
新仮説 Y
より新しい年度のデータや市区町村レベルの細粒度データを使えば、知見の時間的頑健性や地域内格差を検証できる。
課題 Z
(1)統計センターから最新の SSDSE をダウンロードし、同じ分析を再実行する。(2)結果が変わった場合、その要因(コロナ・政策変化など)を考察する。(3)市区町村データ(SSDSE-A/C/F)で分析単位を細かくした場合の結果と比較する。
② 手法の発展:指標の精緻化と多変量化
結果 X
本論文は人口密度という単一指標で「必要性」を近似し、相関分析で検証した。しかし4自治体は単一指標では説明しきれなかった。
新仮説 Y
面積・高齢化率・財政力指数など複数の変数を組み合わせた合成指標重回帰を使えば、人口密度だけでは説明できなかった自治体も説明できるかもしれない。
課題 Z
(1)人口密度に加え財政力指数・面積などを説明変数にした重回帰で歳入割合を予測し、残差が大きい自治体(=過剰収集の疑い)を抽出する。(2)年度を変えて(例:最新のふるさと納税現況調査)4自治体の逸脱が続くかを確認する。(3)どの変数が「必要性」の説明に効くかを比較・考察する。
③ 政策提言・実践への応用
結果 X
本論文は分析結果から特定の変数が目的変数に影響することを示した。
新仮説 Y
分析対象を日本全国から特定地域に絞ること、または逆に国際比較に拡張することで、政策の移転可能性と文脈依存性を検証できる。
課題 Z
(1)有意な変数を「政策で変えられるもの」と「変えにくいもの」に分類する。(2)政策で変えられる変数について、係数の大きさから「どれだけ変えればどれだけ効果があるか」を試算する。(3)自治体・政策立案者への提言として、実現可能なアクションプランを1枚にまとめる。

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

学んだだけでは身につきません。実際に手を動かすのが最強の学習方法です。本論文のスクリプトをベースに、以下のチャレンジに挑戦してみてください。難易度別に5つ用意しました。

★☆☆☆☆ 入門
CH1. 同じデータで分析を再現する
まずは付属の Python スクリプトをそのまま実行し、論文と同じ図を再現してみてください。
ポイント: 各図がどのコード行から生成されているか辿る。エラーが出たら原因を考える。
★★☆☆☆ 初級
CH2. 説明変数を1つ追加・除外して結果を比較
本論文の分析モデルから説明変数を1つ抜いて再実行、あるいは1つ追加して再実行してください。
ポイント: 係数p値 がどう変わったか観察する。多重共線性が原因で結果が変わる例を見つけられたら理想的。
★★★☆☆ 中級
CH3. 別の年度・別の都道府県で同じ分析を試す
SSDSE の別の年度(例:2015年度・2020年度)または特定都道府県のみのデータで同じ分析を実行してください。
ポイント: 時代や地域によって結論が変わるか? 変わるならその理由を考察する。
★★★★☆ 上級
CH4. 別の手法を組み合わせる
本論文の手法(相関分析+指標設計)に1つ手法を足して比較してください(例:相関分析 + 重回帰で必要性を多変量に、あるいは 主成分分析で複数指標を合成)。
ポイント: 手法の違いで結論が変わるか? どちらが妥当かを「なぜ」とともに説明できるように。
★★★★★ 発展
CH5. オリジナルの問いを立てて分析する
本論文の手法を借りて、あなた自身の問いを立てて分析してください。 例:「カフェの数と幸福度に関連はあるか」「教育費の高い県は出生率も高いか」など。
ポイント: 問い・データ・手法・結論を1ページのレポートにまとめる。これがデータサイエンスの「実践」。
💡 ヒント: 詰まったら本サイトの他の論文(同じ手法を使っている)のスクリプトをコピーして組み合わせるのが効率的です。手法ガイド・用語集も参考に。

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

本論文で学んだ手法は、研究の世界だけでなく、行政・企業・NPO の現場でも様々に活用されています。具体的なシーンを紹介します。

🏛️
行政の政策立案
都道府県・市区町村の政策担当者は、本論文と同様のデータ分析を用いて「どこに予算を投じれば効果が出るか」を検討します。 例えば医療費削減策、移住促進策、子育て支援策などの効果予測・効果検証に直結します。
🏢
企業のマーケティング・出店戦略
小売チェーン・サービス業の出店戦略では、地域特性(人口構成、所得、ライフスタイル)と売上の関係を本論文と同じ手法で分析します。 ECサイトでも顧客セグメント分析・購買要因分析に類似手法が使われます。
🏥
医療・公衆衛生
感染症の流行予測、医療資源配分の最適化、健康格差の地域要因分析などで、本論文の統計手法は標準的に使われています。 WHO・厚労省レベルの政策評価でも同じ手法が活躍しています。
📊
メディア・ジャーナリズム
新聞・テレビの社会調査記事、選挙予測、世論調査の分析でも、本論文と同じ手法(回帰分析・クラスタリングなど)が使われています。 データジャーナリズムの記事はこの種の分析が中核です。
🎓
学術研究(隣接分野)
経済学・社会学・公衆衛生学・教育学・地理学などの実証研究では、本論文と同じ手法が日常的に使われます。 専門誌に掲載される論文の8割以上が、こうした統計手法に基づいて結論を出しています。
💰
金融・保険業界
与信判断(融資審査)、保険料の地域別設定、不動産価格予測などで、本論文と同様のモデリング手法が広く活用されています。 統計分析の能力は金融業界の必須スキルになっています。

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

この論文を読んで初心者が抱きやすい疑問に、教育的観点から答えます。

Q1. この分析、自分でもできますか?
本ページの図は、原論文(PDF)に印字された報告値を可視化したものです(外部データ不要でそのまま実行できます)。ただし原論文の完全再現には、ふるさと納税額(ふるさと納税ガイド)・面積(国土地理院)・市区町村別歳入(地方財政統計年報)が必要で、これらは SSDSE に収録されていません。転入者数−転出者数の都道府県分だけは SSDSE-B で確認できます。原論文は演算ソフト R を使用しています。
Q2. 使われている手法は他の分野にも応用できますか?
十分応用可能です。本論文で用いた手法は、医療・教育・経済・環境など他のドメインでも標準的に使われる手法です。データの中身(変数)を入れ替えるだけで、別の問いにも適用できます。
Q3. 結論は本当に「因果関係」を示していますか?
本論文は「観察データ」を使った分析であり、厳密な意味での「因果関係」を完全に証明したわけではありません。あくまで「強い関連が見られた」という事実を提示しているにとどまります。真の因果を示すには、無作為化比較試験(RCT)か、自然実験を活用したIVDiD 等の手法が必要です。
Q4. データの最新版を使うとどうなりますか?
SSDSE は毎年更新されているため、最新版を使えば近年のトレンド(特にコロナ禍以降の変化)も含めて分析できます。ただし、結論が変わる可能性もあります。それ自体が新しい発見につながります。
Q5. もっと深く学ぶには何を読めばいいですか?
「計量経済学」「データサイエンス入門」「統計的因果推論」などのテキストが入門に向いています。Python の場合は『Python ではじめる機械学習』(オライリー)、R の場合は『R で学ぶ統計学』が定番です。本サイトの他の論文も読み比べてみてください。

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

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

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

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

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