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

求められている住宅

森 颯太(香川県立高松商業高等学校)
⏱️ 推定読了時間: 約28分
相関分析 | LightGBM(勾配ブースティング) | 特徴量重要度
🔬 SHAP🔬 勾配ブースティング🔬 相関分析🏷 住宅・地価
🔬 手法タグ / 🏷 応用タグ(クリックで同タグの論文をネットワーク検索)
🔬 再現カルテ — データが公開されておらず、原論文の報告値をたどる形で再現

この教材は、元データが公開されていないため再計算ができません。原論文が論文中に報告した数値をたどって図表にし、「その数値からどこまで言えるか」を読み解く形で学びます。数値そのものは原論文からの引用であり、この教材が計算したものではありません。

原論文が使ったデータ国勢調査報告・住宅着工統計・住宅・土地統計調査・不動産取引価格情報
分析単位:都道府県
中核手法:LightGBM・相関分析
この教材が使うデータCSV は読み込まない(原論文が報告した数値をそのまま図表化して読み解く)
原論文(PDF)求められている住宅
統計数理賞/森 颯太(香川県立高松商業高等学校)
⚠️ この教材ではできないこと(原論文との違い)
  • 元データが公開されていないため、数値の再計算はできない(原論文が報告した値をたどる形で学ぶ)
📄 原論文との違いを、もっと詳しく
📄 原論文:住宅関連データに勾配ブースティング等の機械学習を適用して「求められている住宅」を分析。
📘 本教材:原論文の報告値を転記して図表化。モデルの再学習は行っていない。
⚠️ 注意:ページ中の数値は原論文の報告値。

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

🏅 論文審査会コメント(審査員はここを評価した)
「高校生がブラックボックス型の決定樹勾配ブースティング系AIを使うことはトレンディであり、極めてチャレンジングである。前半に記述統計で仮説検定風の分析を試みているのも好ましいが、AIによる傾向を地域ごとに比較したことや、一定水準の考察を行ったこと、欠測値補完も行ったことは、先端的事例であり高く評価できる。」
出典:統計センター「統計データ分析コンペティション」受賞論文PDF掲載の審査講評。プロの審査員が何を評価し、何を注文したかは論文の読み方の最良の手本になる。
📝 3行で分かる要約

目次

  1. 研究の背景:空き家問題と「求められている住宅」
  2. データと手法(相関分析・LightGBM)
  3. 発見1:空き家は過去最高(図1)
  4. 発見2:空き家増加の要因(相関分析・図2)
  5. 発見3:求められる条件は「広さ」(特徴量重要度・図3)
  6. 発見4:価格予測AIの検証(図4)
  7. 結論とリノベーション提案
  8. まとめ
  9. 📥 データの準備・再現手順
  10. 💼 実社会での応用
  11. ⚠️ よくある誤解
  12. 📖 用語集
  13. 📐 手法ガイド
  14. 🚀 発展の可能性
  15. 🎯 自分でやってみよう
  16. 🤔 Q&A
  17. 🐍 ブラウザで動かす
⚠️ このページの図について(再現可能性トリアージ) 本論文が使った不動産取引価格情報(国土交通省)・空き家数(住宅・土地統計調査)・高齢単身世帯数(国勢調査)は、いずれも教育用標準データセット(SSDSE)に収録されていません。そのため本ページの図はすべて、原論文が報告した数値(相関係数・重要度の順位・予測結果)をそのまま可視化した「報告値の可視化」であり、本サイトによる再計算ではありません。図のタイトルにもその旨を明記しています。数値は原論文(PDF)を正とします。

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

研究の背景:空き家問題と「求められている住宅」

近年、空き家の増加が問題視されている。総務省の平成30年 住宅・土地統計調査によると、空き家率は13.6%と過去最高である。空き家が増えると、景観の悪化・悪臭、老朽化による倒壊、犯罪・放火、共同住宅の管理組合への負担増などの問題が起こる。

著者は「空き家をリノベーションして不動産的価値を高め、魅力的な価格で販売すれば、空き家を減らせるのではないか」と考えた。そこで、過去の不動産取引価格から「どのような戸建住宅・中古マンションが求められているのか」を分析することを目的に研究を行った。

空き家がもたらす問題
  • 増加:空き家数は昭和38年の52万戸から平成30年の848万戸へ。空き家率も2.5%→13.6%(過去最高)。
  • 内訳:一戸建てやマンションを含む共同住宅の割合がほとんど。高齢者の転居や所有者の放置が原因。
  • 地域社会への影響:景観悪化・倒壊・犯罪・管理負担増などが発生する。
研究の流れ
記述統計
空き家の推移
(図1)
相関分析
増加要因の検証
(図2・3仮説)
LightGBM
価格予測AI
特徴量重要度
求められる
条件の特定
(図3・図4)

相関分析 LightGBM 特徴量重要度 記述統計

データと手法(相関分析・LightGBM)

使用したデータ

使用データ出典年度
空き家数・空き家率総務省 平成30年 住宅・土地統計調査 住宅数概数集計2018
高齢単身世帯数(65歳以上・単身)総務省統計局「国勢調査報告」人口等基本集計2015
15歳未満人口総務省統計局「国勢調査報告」人口等基本集計2015
着工新設住宅戸数国土交通省総合政策局「住宅着工統計」2019
不動産取引価格情報(東京・大阪・神奈川・兵庫・香川)国土交通省 不動産取引価格情報ダウンロード

※ これらのデータは教育用標準データセット(SSDSE)には収録されていない。本ページの図は原論文の報告値の可視化である(再計算ではない)。

AIに学習させた変数(原論文 表3・表4)

戸建住宅と中古マンションを別々に抽出し、欠損値の補完と名称の変換を行って学習に使用した。

戸建住宅の変数処理
地区名 / 最寄駅 / 徒歩分徒歩は分に換算。欠損は前後の値や平均で補完。
土地面積 / 土地形状 / 延床面積面積はそのまま。土地形状の欠損は前後の値で補完。
建築年 / 建物構造和暦を西暦に変換。欠損は平均・前後の値で補完。
成約価格(目的変数)そのまま使用。
中古マンションの変数処理
地区名 / 最寄駅 / 徒歩分徒歩は分に換算。欠損は前後の値や平均で補完。
間取り / 専有面積 / 容積率専有面積はそのまま。間取り・容積率の欠損は補完。
建築年 / 建物構造和暦を西暦に変換。欠損は前後の値で補完。
成約価格(目的変数)そのまま使用。
LightGBM とは(この研究の中心手法) LightGBM は、決定木を少しずつ継ぎ足して予測を改善していく「勾配ブースティング」という仕組みのオープンソースAI。データ分析コンペで最上位の解法として頻繁に使われる強力なモデル。著者は総データ約40,000件を、学習用35,000件・テスト用5,000件・過学習を防ぐ検証用5,000件に分けて成約価格を予測し、各項目が予測にどれだけ使われたか(特徴量重要度)を棒グラフにして分析した。

DS LEARNING POINT 1

「報告値の可視化」とは何か

本ページの図は、原論文が使った不動産取引データ等がSSDSEに無いため、分析をやり直した結果ではなく、原論文が報告した数値をそのまま図にしたもの。研究を紹介する際、手元で再計算できない数値は「どこから来た値か(出典)」を明示し、新しい数値を作らない(捏造しない)ことが重要。

# 原論文 図1 の報告値をそのまま配列にする(再計算はしない) akiya_rate = [2.5, 4.0, 5.5, 7.6, 8.6, 9.4, 9.8, 11.5, 12.2, 13.1, 13.5, 13.6] # 空き家率(%) SRC_NOTE = '※原論文の報告値の可視化(本コードによる再計算ではない)'

再現コードの流れ(コードを読んでみよう)

以下は、原論文の報告値を図にする Python コードを、目的・つながり・実行結果とともに順番に見ていくものです。実行結果はすべて実際の出力です。

やってみよう共通設定と図の保存関数
① このコードの目的:グラフの日本語フォントと保存先を先に決めておき、どの図でも同じ注記(SRC_NOTE)を付けられるようにする。ここで定義する SRC_NOTE が「これは再計算ではなく原論文の報告値の可視化だ」という二重明記の一方を担う。
② 前後のつながり:この後の図1〜図4はすべて同じ save_fig() で保存し、同じ SRC_NOTE をタイトルに埋め込む。まず土台を用意する段階。
📝 コード
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
plt.rcParams['font.family'] = 'Hiragino Sans'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.dpi'] = 150

FIG_DIR = 'html/figures'
PREFIX = '2021_H3'
os.makedirs(FIG_DIR, exist_ok=True)

# すべての図に共通で入れる注記(報告値の可視化であることの明示)
SRC_NOTE = '※原論文の報告値の可視化(本コードによる再計算ではない)'


def save_fig(n):
    path = os.path.join(FIG_DIR, f'{PREFIX}_fig{n}.png')
    plt.savefig(path, bbox_inches='tight', dpi=150)
    plt.close()
    print(f'  → {path} 保存完了')
▼ 実行結果
このステップは print しません(設定と関数定義だけ)。次の図の作成へ進みます。
💡 実行結果の読み取り
  • SRC_NOTE にした注記文字列は、後で各図のタイトルへ結合して表示される。図の中にも「報告値の可視化」と必ず出るようにするための仕掛け。
  • os.makedirs(..., exist_ok=True) — 保存先フォルダが無ければ作る(あってもエラーにならない)。
💡 Python TIPS plt.rcParams はグラフ全体の既定設定。最初に一度だけ設定すれば以降の全図に効く。
やってみよう図1:空き家数・空き家率の推移(報告値を配列に)
① このコードの目的:原論文 図1 が示した「空き家数(万戸)」と「空き家率(%)」の値をそのまま配列に写し取り、二軸グラフを描く材料にする。値は総務省 住宅・土地統計調査の報告値で、あらたな計算はしない。
② 前後のつながり:この配列を使って空き家問題の深刻さ(研究の出発点)を可視化する。次のセルで save_fig(1) により図1として保存する。
📝 コード
63
64
65
66
67
68
69
70
71
72
73
# 調査年(昭和38年〜平成30年, 5年ごと)
akiya_years = ['S38', 'S43', 'S48', 'S53', 'S58', 'S63',
               'H5', 'H10', 'H15', 'H20', 'H25', 'H30']
# 空き家数(万戸)— 原論文 図1 の報告値
akiya_count = [52, 103, 172, 268, 330, 394, 448, 576, 659, 757, 820, 848]
# 空き家率(%)— 原論文 図1 の報告値
akiya_rate = [2.5, 4.0, 5.5, 7.6, 8.6, 9.4, 9.8, 11.5, 12.2, 13.1, 13.5, 13.6]

print(f'  調査年数: {len(akiya_years)} 時点(昭和38年〜平成30年)')
print(f'  空き家数: 最古 {akiya_count[0]}万戸 → 最新 {akiya_count[-1]}万戸')
print(f'  空き家率: 最古 {akiya_rate[0]}% → 最新 {akiya_rate[-1]}%(過去最高)')
▼ 実行結果
=== 図1: 空き家数及び空き家率の推移(報告値の可視化)===
  調査年数: 12 時点(昭和38年〜平成30年)
  空き家数: 最古 52万戸 → 最新 848万戸
  空き家率: 最古 2.5% → 最新 13.6%(過去最高)
💡 実行結果の読み取り
  • 空き家数は52万戸→848万戸と約16倍、空き家率は2.5%→13.6%(過去最高)まで上昇したことが数字で確認できる。
  • この「右肩上がり」が、著者が空き家対策を研究テーマに選んだ動機を裏づける。
  • akiya_count[0] は先頭(最古)、akiya_count[-1] は末尾(最新)を取り出す書き方。
💡 Python TIPS リストの [-1]末尾要素len(...) は要素数。「最初と最後」を比べたいときの定番。
やってみよう図2:3つの相関係数(3仮説の検証結果)
① このコードの目的:原論文が立てた3つの仮説について報告された、都道府県別の空き家数と各指標のピアソン相関係数を並べて確認する。3つとも0.94を超える非常に強い正の相関。
② 前後のつながり:相関係数だけでは向きが分かりにくいので、次に横棒グラフ(図2)にして大小を一目で比べられるようにする。
📝 コード
113
114
115
116
117
corr_labels = ['高齢単身世帯数\n(65歳以上・単身)', '15歳未満人口', '着工新設住宅戸数']
corr_values = [0.9832327, 0.9636455, 0.9441982]      # 原論文の報告値

for lab, v in zip(['高齢単身世帯数', '15歳未満人口', '着工新設住宅戸数'], corr_values):
    print(f'  空き家数 × {lab}: r = {v}')
▼ 実行結果
=== 図2: 空き家数と各指標の相関係数(報告値の可視化)===
  空き家数 × 高齢単身世帯数: r = 0.9832327
  空き家数 × 15歳未満人口: r = 0.9636455
  空き家数 × 着工新設住宅戸数: r = 0.9441982
💡 実行結果の読み取り
  • 3指標すべてで r>0.94 と非常に強い正の相関。ただし「15歳未満人口」も正の相関のため、著者の「少子化が進む地域ほど空き家が多い」という仮説は否定された(少子でなく人口規模が効いている)。
  • 相関の強さは因果を意味しない点に注意。人口の多い都府県ほど空き家も各指標も大きくなる「規模の共通要因」の可能性がある。
  • zip(labels, values) で2つのリストをペアにして同時に回している。
💡 Python TIPS \n は文字列中の改行。グラフの軸ラベルを2行に折り返したいときに使う。
やってみよう図3:AIが重要視した項目 上位5位(表5・表6)
① このコードの目的:LightGBM の特徴量重要度は不動産取引データが無いと再計算できないため、原論文 表5・表6 が報告した「上位5位の順位」だけを写し取り、面積項目がどれだけ上位に来るかを集計する。
② 前後のつながり:この順位表を色分けした行列(図3)にして、「地域や住宅種別によらず面積が上位」という論文の主張を視覚的に示す。
📝 コード
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# 原論文 表5・表6 の「上位5位」(降順)
rankings = {
    ('東京都', '戸建'):   ['土地面積', '延床面積', '建築年', '徒歩分', '地区名'],
    ('東京都', 'マンション'): ['専有面積', '最寄駅', '建築年', '地区名', '徒歩分'],
    # …(大阪・神奈川・兵庫・香川も同様に定義)…
    ('香川県', 'マンション'): ['建築年', '専有面積', '徒歩分', '最寄駅', '地区名'],
}

# 項目のカテゴリ分け(面積かどうかが最大の関心)
CATEGORY = {'土地面積': '面積', '延床面積': '面積', '専有面積': '面積',
            '建築年': '新しさ', '徒歩分': '交通', '最寄駅': '交通',
            '地区名': '立地', '建物構造': 'その他', '容積率': 'その他'}

# 1位が「面積」項目である地域の数を数える
area_top1 = sum(1 for feats in rankings.values() if CATEGORY[feats[0]] == '面積')
print(f'  1位が「面積」項目のパターン数: {area_top1} / {len(rankings)}')
▼ 実行結果
=== 図3: 特徴量重要度 上位ランキング(報告値の可視化)===
  対象: 5都府県 × 2住宅種別 = 10 パターン
  1位が「面積」項目のパターン数: 8 / 10
  → 地域・住宅種別によらず「面積(広さ)」が最重要という報告を確認
💡 実行結果の読み取り
  • 10パターン中8パターンで1位が面積項目(土地面積・延床面積・専有面積)。残り2つ(神奈川・香川の中古マンション)は建築年が1位だが、2位に専有面積が入る。
  • このことから「どの地域でも、まず広さが求められる」という原論文の結論が数字で裏づけられる。
  • CATEGORY[feats[0]] — 各パターンの1位(feats[0])がどのカテゴリかを辞書で引いている。
💡 Python TIPS sum(1 for x in ... if 条件)条件を満たす個数を数える定番イディオム。
やってみよう図4:価格予測AIの検証(物件A)
① このコードの目的:原論文 4.6・図16 が報告した、中古マンション「物件A」の実際の販売価格とAI予測価格を並べ、誤差(円・%)を計算して予測精度を確認する。
② 前後のつながり:ここまでの「広さが重要」という発見を踏まえ、実際にその特徴量を学習したAIがどれだけ当てられたかを最後に示す締めのステップ。
📝 コード
207
208
209
210
211
212
213
214
actual_price = 22_500_000      # 実際の販売価格(原論文 図16)
pred_price = 22_414_581        # AI予測価格(原論文 4.6)
err_yen = pred_price - actual_price
err_pct = err_yen / actual_price * 100

print(f'  実際の販売価格 : {actual_price:,} 円')
print(f'  AI予測価格   : {pred_price:,} 円')
print(f'  誤差      : {err_yen:,} 円({err_pct:+.2f}%)')
▼ 実行結果
=== 図4: 価格予測AIの検証(報告値の可視化)===
  物件A(千代田区東神田・1K・22㎡・2005年・RC)
  実際の販売価格 : 22,500,000 円
  AI予測価格   : 22,414,581 円
  誤差      : -85,419 円(-0.38%)
💡 実行結果の読み取り
  • 実際の2,250万円に対しAI予測は2,241.5万円、誤差わずか-85,419円(-0.38%)。1件の検証例では非常に高精度。
  • ただしこれは1物件の当てはめであり、汎化性能(未知データでの精度)を示すものではない点に注意(原論文も欠損値補完の限界を課題に挙げている)。
  • {値:,}3桁区切り{値:+.2f}符号つき小数2桁の表示指定。
💡 Python TIPS アンダースコア区切りの数値リテラル 22_500_000 は Python では 22500000 と同じ。桁を読みやすくする書き方。
1
発見1:空き家は過去最高(記述統計)

まず空き家問題の深刻さを、原論文 図1 の報告値で確認する。

空き家数及び空き家率の推移(報告値の可視化)
図1:空き家数及び空き家率の推移。空き家数は52万戸→848万戸、空き家率は2.5%→13.6%(過去最高)。※これは原論文の報告値の可視化であり、本サイトによる再計算ではない(出典:総務省 平成30年 住宅・土地統計調査)。
📌 この二軸グラフの読み方
このグラフは
棒=空き家数(左目盛)、折れ線=空き家率(右目盛)を1枚に重ねた二軸グラフ。
読み方
棒も線も一貫して右上がり。空き家は「数」も「割合」も増え続けている。
なぜ重要か
この右肩上がりが、著者が空き家対策を研究テーマに選んだ出発点になっている。
2
発見2:空き家増加の要因(相関分析)

著者は空き家が多くなる原因について3つの仮説を立て、都道府県別データで相関を調べた。

空き家数と各指標の相関(報告値の可視化)
図2:都道府県別の空き家数と3指標のピアソン相関係数。3つとも r>0.94 の非常に強い正の相関。※原論文の報告値の可視化(本サイトによる再計算ではない)
📌 相関係数の読み方
このグラフは
横軸=相関係数 r(−1〜+1)。1に近いほど「一緒に増える」関係が強い。
読み方
r=0.7 が「強い相関」の目安。3指標とも 0.94 超で、いずれも空き家数と強く一緒に増える。
注意
強い相関は因果ではない。人口規模が大きい都府県ほど空き家も各指標も大きくなる「規模の共通要因」の可能性がある。
仮説相関係数 r(報告値)判定
高齢単身世帯が多い地域ほど空き家が多い0.9832327仮説どおり(正の相関)
少子化が進む地域ほど空き家が多い0.9636455否定(15歳未満人口とも正の相関)
新設住宅が多い地域ほど空き家が多い0.9441982仮説どおり(正の相関)
「少子化仮説」が否定された理由 著者は「少子化が進む=広い住居が不要になり空き家が増える」と予想したが、実際は15歳未満人口が多い地域ほど空き家も多かった(r=0.96)。これは人口規模の大きい地域では子どもも空き家も多いという関係を反映しており、「少子化ほど空き家が多い」という当初の仮説は成り立たなかった。

DS LEARNING POINT 2

相関の強さと「規模の交絡」

都道府県のように「規模の大きい単位」を比べると、あらゆる量(人口・世帯・住宅・空き家)が一緒に大きくなり、見かけ上どれも強い正の相関になりやすい。相関係数だけで「原因」を判断せず、人口などの規模で割った比率で見直すと解釈が変わることがある。

# 相関係数は向き(正負)と強さを示すが、因果は示さない # r = 0.98 でも「高齢単身が空き家を生む」と断定はできない r = 0.9832327 # 原論文の報告値(空き家数 × 高齢単身世帯数)
3
発見3:求められる条件は「広さ」(特徴量重要度)

LightGBM に各地域・住宅種別の過去取引を学習させ、成約価格の予測に各項目がどれだけ効いたか(特徴量重要度)を調べた。原論文 表5・表6 の上位5位を色分けで示す。

AIが重要視した項目 上位5位(報告値の可視化)
図3:5都府県×住宅種別ごとの重要度 上位5位。青=面積、緑=新しさ(築年)、橙=交通、紫=立地、灰=その他。※原論文 表5・表6 の報告値の可視化(本サイトによる再計算ではない)
📌 この順位表の読み方
このグラフは
行=地域×住宅種別、列=重要度の順位(左が1位)。セルの色が項目のカテゴリ。
読み方
左端(1位)に青(面積)が並ぶ。10パターン中8つで面積が1位、残り2つも2位に面積が入る。
わかること
地域や住宅種別によらず、まず「広さ」が求められている。次いで築年(新しさ)や最寄駅・徒歩分(交通)。
都府県戸建住宅 上位3(報告値)中古マンション 上位3(報告値)
東京都土地面積・延床面積・建築年専有面積・最寄駅・建築年
大阪府延床面積・土地面積・徒歩分専有面積・建築年・地区名
神奈川県延床面積・土地面積・建築年建築年・専有面積・地区名
兵庫県延床面積・土地面積・建築年専有面積・建築年・地区名
香川県(地元)延床面積・土地面積・建築年建築年・専有面積・徒歩分
都市部と地方で大きな差はなかった 著者は地元・香川県(データ数 約10,000件)と都市部(東京・大阪・神奈川・兵庫)を比較したが、どちらも面積の重要度が高く、都市部・地方という区別で住宅の重要度が大きく変わるわけではないとわかった。一方で、東京都の戸建だけ土地面積が特に重視される、神奈川県の中古マンションだけ築年が1位になるなど、県ごとの小さな差はみられた。土地形状・建物構造・容積率は重視されにくい。
4
発見4:価格予測AIの検証

作成した価格予測AIの精度を、中古マンション「物件A(千代田区東神田・1K・22㎡・2005年5月・RC・容積率100%)」で検証した。

価格予測AIの検証(報告値の可視化)
図4:物件Aの実際の販売価格(22,500,000円)とAI予測価格(22,414,581円)の比較。誤差は−85,419円(−0.38%)。※原論文 4.6・図16 の報告値の可視化(本サイトによる再計算ではない)
1件の検証では非常に高精度 実際の販売価格 22,500,000円 に対し、AIの予測は 22,414,581円。誤差はわずか −0.38%。ただしこれは1物件の当てはめであり、未知データでの精度(汎化性能)を保証するものではない。原論文も、欠損値を平均や前後の値で補完したことによる学習の不正確さを課題に挙げている。

結論とリノベーション提案

分析から、住宅の需要は地域によらず「広さ」を強く求める傾向があり、次いで交通アクセスや新しさが重視されるとわかった。ここから著者は次の提案を行っている。

発見(統計的根拠)リノベーション・政策の方向
面積(延床・土地・専有)が最重要区画整理などで延床面積をできる限り広げるリノベーション。行政は区画整理を推進。
交通(最寄駅・徒歩分)も重視される交通アクセスの良い空き家を優先的に活用する。
築年(新しさ)が重視される中古は新しくできないが、綺麗さ・安全性を高めるリノベで代替。特に中古マンションで有効。
建物構造・土地形状は重視されにくいこれらの改修より、面積・綺麗さ・安全性への投資を優先。
空き家を活用する人を増やすために 面積を確保でき、綺麗さ・安全性を高めた空き家は魅力が増す。それを支えるため、空き家販売のためのリノベーションに補助金を出す、空き家を賃貸活用すると税金が控除される、といった政策があれば、空き家を活用する人が増え、空き家問題の多くが減少するだろう、と著者は提案している。

まとめ

主要な発見(すべて原論文の報告値)

  1. 空き家は過去最高:空き家率13.6%、空き家数848万戸(平成30年)。
  2. 増加要因の相関:空き家数は高齢単身世帯数(r=0.9832)・15歳未満人口(r=0.9636)・着工新設住宅戸数(r=0.9442)と強い正の相関。「少子化ほど空き家が多い」仮説は否定。
  3. 求められる条件は広さ:AIの特徴量重要度で、地域・住宅種別によらず面積(延床・土地・専有)が最重要。次いで築年・交通。
  4. 価格予測AIの検証:物件Aで実価格2,250万円に対し予測2,241.5万円、誤差−0.38%。
結論 面積を確保できる空き家を優先し、綺麗さ・安全性を高めるリノベーションを行うこと、そしてそれを支援する補助金・税制控除などの政策を導入することが、空き家問題の解決につながる。
分析の限界と今後の課題(原論文より) 不動産取引データの欠損値を平均値や前後の値で補完して学習させたため、学習の正確性が損なわれている可能性がある。実事業への活用には、欠損値の排除と特徴量の拡充による精度向上が課題である。

📥 データの準備・再現手順

このページの図は追加データのダウンロード不要で再現できます。原論文の報告値がスクリプト内に直接書かれているためです(不動産取引データ等は公開データセットに無いため、再計算はできません)。

1
スクリプトを実行する プロジェクトルートで以下を実行します。
python3 code/2021_H3_suri.py
図は html/figures/ に自動保存されます(fig1〜fig4)。
分析スクリプト(2021_H3_suri.py)

本コードは原論文(PDF)の報告値のみを可視化する。合成データ・乱数生成(np.random 等)は一切使用しない。原論文が使った不動産取引データ・空き家数等は教育用標準データセット(SSDSE, 独立行政法人統計センター)には収録されていない。

教育用再現コード | 2021年度(令和3年度)統計データ分析コンペティション 統計数理賞 [高校生の部]

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

この研究(相関分析+AI)を読むときに、初心者がやりがちな勘違いをまとめます。特に「相関因果の混同」「重要度=原因の誤解」は要注意です。

❌ 「相関が強い=原因である」ではない
空き家数と高齢単身世帯数の相関は r=0.98 と非常に強いですが、これは「高齢単身世帯が空き家を生み出す」という因果の証明ではありません。

規模の交絡: 都道府県は規模がバラバラなので、人口の多い所は世帯も住宅も空き家も一緒に大きくなります。だから「どれも強い正の相関」になりやすい。人口で割った比率で見直すと関係が消えることもあります。
❌ 「特徴量重要度が高い=その項目が価格の原因」ではない
特徴量重要度は「モデルが予測にその項目を何回・どれだけ使ったか」を表す指標で、因果や『値上げすればいい』を意味しません

また、重要度は計算方法(gain/split/permutation)で順位が変わったり、似た特徴(土地面積と延床面積など)があると重要度が分散したりします。「面積が1位」も、あくまでこのモデル・このデータでの傾向として読むべきです。
❌ 「1件で当たった=実用的に使える予測AI」ではない
物件Aの誤差が−0.38%だったのは1物件の当てはめにすぎません。予測AIの実力は、学習に使っていないテストデータ全体での誤差で評価します。

本研究のように学習用・テスト用・検証用に分ける(train/test/valid)のは正しい作法ですが、1件の好成績だけで「実用可能」と結論づけるのは早計です。
❌ 「欠損値は平均で埋めれば問題ない」ではない
本研究は欠損値を平均や前後の値で補完しました。手軽ですが、本来ばらつくはずの値を平均に寄せてしまうため、学習の正確さが損なわれることがあります(著者自身も課題として明記)。

より良い対処: 欠損の理由を調べる/欠損フラグ列を足す/欠損の多い行・列は思い切って除外する、などを検討します。
❌ 「複雑なAIを使えば良い分析」ではない
LightGBM は強力ですが、複雑なモデルは過学習(訓練データの偶然のパターンまで覚えて新データで外す)に陥りがちです。

だからこそ本研究は検証用データ+early stoppingで過学習を抑えています。前半の相関分析のようなシンプルな手法と組み合わせ、結果が解釈できることを大切にするのが良い分析です。

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

この研究で出てくる統計・AI用語をやさしく解説します。見慣れない言葉が出たらここに戻ってください。

相関係数
2つの変数が「一緒に増減する傾向」の強さと向きを −1〜+1 で表した数値。+1に近いほど強い正の相関。0.7以上で「強い相関」とみなすことが多い。
相関と因果
「一緒に動く(相関)」と「原因と結果(因果)」は別物。相関が強くても、第三の要因(人口規模など)が両方を動かしているだけのことがある。
LightGBM
Microsoft 発のオープンソースAI。決定木を少しずつ足して予測を改善する「勾配ブースティング」の高速な実装。表形式データのコンペで最上位常連。
勾配ブースティング
弱い予測器(浅い決定木)を、前の木の誤差を埋めるように次々と継ぎ足して、全体で強い予測器を作る手法。
決定木
「もし面積>30㎡なら…」のように条件分岐で予測する木構造のモデル。人間にも読みやすいのが利点。
特徴量重要度
モデルが予測を作る際に、各項目(特徴量)をどれだけ使ったかを表す指標。大きいほど「よく使われた」。ただし因果や相関の強さそのものではない。
目的変数 / 説明変数
予測したい値(ここでは成約価格)が目的変数、その手がかりになる項目(面積・築年など)が説明変数。
訓練/検証/テストデータ
データを学習用・過学習チェック用・最終評価用に分けること。本研究は35,000/5,000/5,000件に分割。
過学習
モデルが訓練データの偶然の模様まで覚え、新しいデータで精度が落ちること。検証データや early stopping で防ぐ。
欠損値と補完
データが取れていない部分(空欄)。平均や前後の値で埋める「補完」をするが、埋め方で結果が変わりうる。
報告値の可視化
手元で再計算できない数値を、出典を明示したうえで原論文が報告した値のまま図にすること。新しい数値は作らない。

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

この論文で使われている手法を、「何のためか」「結果をどう読むか」「注意点」に分けて解説します。注意点は手法ごとに異なります。

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

🔗 相関分析
何?
2つの変数が一緒に増減する傾向の強さと向きを、相関係数 r(−1〜+1)で数値化する手法。
どう使う?
この研究では、都道府県別の空き家数と、高齢単身世帯数・15歳未満人口・着工新設住宅戸数それぞれとの相関係数を計算し、仮説を検証した。
結果の読み方
|r|>0.7で強い相関。3指標とも0.94超で強い正の相関だった。ただし向きが正でも「原因」とは限らない。
⚠️ この手法の注意点
(1) 相関≠因果—強くても因果の証明にはならない。(2) 規模の交絡—都道府県のように大小差が大きい単位は何でも一緒に増え、見かけ上どれも強い相関になりやすい(人口で割った比率で再確認)。(3) 外れ値—極端な1点(大都市など)でrが大きく動く。(4) 線形性—rは直線的な関係しか測れない。曲線的な関係は見逃す。
🌳 LightGBM(決定木勾配ブースティング)
何?
浅い決定木を、前の木の誤差を埋めるように次々足していく勾配ブースティングのAI。表形式データの予測に非常に強い。
どう使う?
不動産の過去取引(約40,000件)を学習用・検証用・テスト用に分け、面積・築年・最寄駅などから成約価格を予測するモデルを作った。
結果の読み方
テストデータでの予測誤差で精度を見る。物件Aでは誤差−0.38%だった(ただし1件の例)。
⚠️ この手法の注意点
(1) 過学習—木を増やしすぎると訓練データに過剰適合する。検証データ+early stoppingで停止時点を決める。(2) 欠損値補完の影響—平均・前後の値で埋めると学習がぶれる。(3) ブラックボックス性—なぜその価格かを直接説明しづらい。(4) データ依存—学習した地域・時期の外では精度が落ちうる。
📊 特徴量重要度(feature importance)
何?
学習済みモデルが予測を作るとき、各項目(特徴量)をどれだけ使ったかを数値化したもの。棒グラフで大小を比べる。
どう使う?
この研究の核心。地域・住宅種別ごとに重要度を出し、「面積が最上位」という共通点を見つけた。
結果の読み方
上位に来る項目が「予測に効いた=重視されている」項目。ここでは面積→築年→交通の順が多い。
⚠️ この手法の注意点
(1) 因果ではない—重要度が高くても「その項目を上げれば価格が上がる」わけではない。(2) 計算方法で変わる—gain/split/permutationで順位が入れ替わる。(3) 相関する特徴で分散—土地面積と延床面積のように似た項目があると重要度が分け合われ、過小評価されることがある。

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

この研究をさらに発展させる3つの方向です。「わかったこと(X)」から「次の仮説(Y)」を立て、「何をするか(Z)」まで考えてみましょう。

① データ・地域の拡張
結果 X
都市部4都府県+地元・香川で分析し、面積が最重要という共通点を見つけた。
新仮説 Y
全国47都道府県や、より新しい取引データに広げても同じ結論になるか。地方の小都市では別の項目(駐車場など)が効くのでは。
課題 Z
(1) 対象地域を増やして重要度を比べる。(2) 郊外・地方特有の変数(駐車台数・土地の広さ)を追加する。(3) 結果が変わったら理由を考察する。
② 手法の発展:予測精度と説明性
結果 X
LightGBM で成約価格を予測し、特徴量重要度で傾向を読んだ。
新仮説 Y
欠損値の扱いを変えたり、SHAP値のような手法を使えば、より正確で「なぜその価格か」を説明できる予測になるのでは。
課題 Z
(1) 欠損値補完の方法を変えて精度を比較。(2) テストデータ全体の誤差(RMSE等)を出す。(3) SHAPで物件ごとの価格根拠を可視化する。
③ 政策・実践への応用
結果 X
面積・綺麗さ・安全性を高めるリノベが有効という提案を得た。
新仮説 Y
リノベ補助金や税制優遇があれば、空き家の活用が実際に増えるのでは。
課題 Z
(1) 補助金制度のある自治体と無い自治体で空き家活用率を比べる。(2) 費用対効果を試算する。(3) 実現可能なリノベ・政策案を1枚にまとめる。

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

学んだだけでは身につきません。手を動かすのが最強の学習です。本ページのスクリプトをベースに挑戦してみましょう。

★☆☆☆☆ 入門
CH1. 図を再現する
付属スクリプトをそのまま実行し、図1〜図4を再現してください。
ポイント: 各図がどのコード行から生成されるか辿る。図に「報告値の可視化」と入る理由を説明できるように。
★★☆☆☆ 初級
CH2. 相関係数を棒グラフの色分けに反映
図2で、r≧0.95 の棒だけ濃い色にするなど、閾値で色を変えてみましょう。
ポイント: 数値の大小を色で伝える工夫。凡例の付け方。
★★★☆☆ 中級
CH3. 実際に LightGBM を動かす(別データで)
SSDSE-B など公開データで、目的変数を1つ決めて LightGBM の特徴量重要度を出してみましょう(不動産データは非公開なので別テーマで)。
ポイント: train/test 分割、early stopping、重要度の読み方。
★★★★☆ 上級
CH4. 相関分析とAIの結論を比べる
同じデータで、単純な相関ランキングと LightGBM の重要度ランキングを比べ、順位の違いを考察してください。
ポイント: なぜ違いが出るのか(非線形・交互作用)を説明する。
★★★★★ 発展
CH5. 自分の「求められている◯◯」を分析
中古車・古着・観光地など、身近な題材で「何が価格・人気を決めるか」を相関+AIで分析し、1ページにまとめましょう。
ポイント: 問い・データ・手法・結論の型を守る。これが実践。
💡 ヒント: 詰まったら本サイトの他の論文(相関分析・機械学習を使うもの)のスクリプトを参考に。手法ガイド・用語集も活用を。

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

相関分析や勾配ブースティングAI(LightGBM)、特徴量重要度は、現場でも広く使われています。

🏠
不動産テック・価格査定
中古住宅・マンションの自動査定サービスは、まさに本研究と同じく過去取引を機械学習させ、面積・築年・駅距離などから価格を予測します。
🏛️
自治体の空き家対策
空き家バンクやリノベ補助金の設計で、どんな空き家が需要につながるかを分析。本研究の「面積・交通・築年」の知見が参考になります。
🛒
EC・小売の需要予測
価格・売上を LightGBM で予測し、特徴量重要度で「何が売上を左右するか」を把握。商品開発や値付けに使われます。
💰
金融・保険の与信/料率
融資審査や保険料率の算定で、勾配ブースティング系AIが広く採用。重要度分析で判断根拠の説明にも使われます。
🏆
データ分析コンペ
Kaggle等の表形式コンペで LightGBM は定番の強力手法。本研究のように高校生でも実務水準のAIを使える時代です。
📊
マーケティング分析
顧客データから購買要因を相関・重要度で分析し、施策の優先順位づけに活用します。

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

この論文を読んで初心者が抱きやすい疑問に答えます。

Q1. この分析、自分でも同じデータで再現できますか?
相関分析やAIの「手法」は再現できますが、本研究とまったく同じデータでの再現はできません。使われた不動産取引価格情報・空き家数・国勢調査データは教育用標準データセット(SSDSE)に収録されておらず、本ページの図は原論文の報告値の可視化です。手法自体は公開データで練習できます。
Q2. なぜ「報告値の可視化」とわざわざ書くのですか?
手元で数値を計算し直していないのに、あたかも自分で再計算したように見せると誤解を招くからです。出典を明示し、新しい数値を作らないことが誠実な研究紹介の基本です。
Q3. 相関 r=0.98 なら「高齢単身世帯が空き家の原因」と言えますか?
言えません。相関は因果ではなく、人口規模という共通要因が両方を大きくしている可能性があります。原論文も相関で「傾向」を示すにとどめ、AIで需要条件を別途分析しています。
Q4. 高校生が LightGBM を使うのはすごいことですか?
はい。論文審査会も「ブラックボックス型の決定木勾配ブースティング系AIを使うことはトレンディで極めてチャレンジング」「AIによる傾向を地域ごとに比較し、欠測値補完も行ったことは先端的事例で高く評価できる」とコメントしています。
Q5. もっと学ぶには何を読めばいいですか?
参考文献に挙がっている『土日で学べる「AI自動化」プログラミング』(李天琦・秋山卓也)が入門に向いています。表形式データのAIについては LightGBM 公式ドキュメントや Kaggle の入門教材も有用です。

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

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

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

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

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