このページ内のセクションへ素早く飛べます(クリックで該当箇所へジャンプ):
「society 5 0」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「society 5 0」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。
これらのキーワードは「society 5 0 の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。
🍰 まずはやさしく
ネットと現実が混ざり合う未来の社会です。
みんなが便利に暮らすために使います。
スマホで街の混雑が分かる仕組みなどです。
この章では結論を短くまとめます。
🍰 まずはやさしく
日本の未来を描いた大きな計画です。
社会の困りごとを解決するために使います。
学校や地域の課題をデータで直すことです。
この章では全体の構成について読みます。
内閣府の科学技術基本計画(第5期)で提唱。 IoT/AI/ビッグデータが社会課題を解決する未来社会の構想。 SDGs と並んで日本の政策キーワード。
この用語に出会うのは、 まず政府の文書である。 第 5 期科学技術基本計画(2016 年)で初めて示され、 第 6 期科学技術・イノベーション基本計画(2021 年)でも目指す社会像として引き継がれた。 高校の「情報 I」や「公共」の教科書、 自治体の DX 計画や総合計画、 企業の中期経営計画にも登場する。 どの文書でも「少子高齢化・地域格差をデータと技術で解く」という筋書きが共通しているので、 読むときは「どの課題を、 どの数字で測っているか」に注目すると内容を比べやすい。
🍰 まずはやさしく
データの力で生活を良くするイメージです。
何が嬉しいのかを実感するために使います。
部活の練習メニューをデータで決めることです。
この章では具体的な活用例を読みます。
Society 5.0 は、 人類の社会を「狩猟(1.0)→ 農耕(2.0)→ 工業(3.0)→ 情報(4.0)」と数えたときの 5 番目にあたる。 4.0 と 5.0 の違いは、 データを誰が見て、 誰が動かすかにある。
| 場面 | 情報社会(4.0) | Society 5.0 が目指す姿 |
|---|---|---|
| 地方のバス | 利用者がネットで時刻表を調べ、 決まった便に合わせる | 乗りたい人の位置と人数から、 AI が便と経路をその場で組み替える(オンデマンド交通) |
| 高齢者の見守り | 家族が電話や訪問で様子を確かめる | 家電やセンサーの使用状況から異変を検知し、 必要なときだけ人に知らせる |
| 農業 | 気象サイトを見て、 経験で水やりを決める | 畑のセンサーと気象データから、 水やりや収穫の時期を自動で提案する |
どの例も「人がデータを探しに行く」から「データが集まって、 判断や機械に自動で返ってくる」への変化になっている。 なぜそれが必要かは数字で見える。 SSDSE-B-2026 で高齢者 1 人を支える 15〜64 歳の人数は、 全国で 2012 年度の 2.60 人から 2023 年度の 2.04 人に減り、 秋田県では 1.33 人しかいない。 人手で回していた見守りや移動の仕組みを、 同じ人数で維持できなくなる地域が増えている、 というのが Society 5.0 の出発点である。
🍰 まずはやさしく
人間を中心に考えた社会の定義です。
今の進み具合を正しく測るために使います。
買い物のデータで店を便利にすることです。
この章では詳しい意味や指標を読みます。
Society 5.0 は数式で定義される統計量ではなく、 内閣府『第 5 期科学技術基本計画』(2016) による 概念的定義が本体です。 すなわち「サイバー空間 (仮想空間) とフィジカル空間 (現実空間) を高度に融合させたシステムにより、 経済発展と社会的課題の解決を両立する、 人間中心の社会」を指します。
したがって「Society 5.0 の数式」というものは存在しません。 代わりに、 政策評価 (EBPM) の場面では 進捗を測る合成指標 (KPI) を式で表すことがあります。 本ページでも下記のように、 デジタル基盤・データ流通・社会課題解決・Well-being の 4 軸を束ねた簡易 KPI を扱います。
Society 5.0 の進捗を 1 つの数で測る公式の式は無い。 ここでは説明のために、 (1) デジタル基盤、 (2) データ流通、 (3) 社会課題への対応、 (4) Well-being の 4 軸を重み付きで足す簡易モデルを置く(このページ独自の整理で、 政府が定めた指標そのものではない)。
💡 単一指標で「Society 5.0 達成度」を測ることは原理的に不可能。 上式は 「4 軸を可視化するための簡易合成指標」であり、 各軸をレーダーチャートで個別把握する方が実務的。
Society 5.0 は概念用語なので「読み解くべき数式」は多くありません。 ここでは前セクションの合成 KPI の 4 軸と、 Society 5.0 の中核であるサイバーフィジカルシステム (CPS) の動作モデルを、 記号の意味に立ち返って言葉で確認します。
Society 5.0 の中核技術 CPS は、 物理空間 (Physical) でセンサーがデータを取得し、 サイバー空間 (Cyber) で AI が解析・最適化、 結果をアクチュエータ (制御機器) 経由で物理空間へ還す閉ループ構造を持つ。 簡略化すると下式となる。
この閉ループが ミリ秒~分単位で回ることで「人が介在しないリアルタイム最適化」が成立する。 Society 4.0 では人間が $y_t$ を見て $u_t$ を判断していたが、 5.0 では $\pi$ が自動化される。
上の式の 3 つの部品 $y_t$(観測)・$\hat{x}_t = g(y_t)$(推定)・$u_t = \pi(\hat{x}_t)$(制御)を、 バス停の待ち人数という小さな例で動かす。 数値は説明用の合成データで、 実測ではない。 推定 g には直前の推定と新しい観測を半分ずつ混ぜる指数平滑 $\hat{x}_t = 0.5\,y_t + 0.5\,\hat{x}_{t-1}$、 制御 π には「推定が 20 人以上なら増便」を使う。
🎯 このコードでやること:観測 → 推定 → 制御の 1 周を 6 時点ぶん計算し、 観測値そのもので判断した場合と比べる。
1 2 3 4 5 6 7 8 9 10 11 12 | import numpy as np # 説明用の合成データ: バス停の待ち人数を 5 分ごとに数えるセンサー(実測ではない) y = np.array([12, 24, 14, 16, 27, 31]) # 観測 y_t(人) alpha = 0.5 # 推定 g: 指数平滑 x̂_t = α y_t + (1−α) x̂_{t−1} x_hat = [y[0]] for v in y[1:]: x_hat.append(alpha * v + (1 - alpha) * x_hat[-1]) x_hat = np.array(x_hat) u = np.where(x_hat >= 20, '増便', '通常') # 制御 π: 推定が 20 人以上なら増便 for t, (v, e, a) in enumerate(zip(y, x_hat, u)): print(f"t={t} 観測 y={v:>2} 推定 x̂={e:5.2f} → {a}") print('観測値そのものが 20 以上になった時刻:', np.where(y >= 20)[0].tolist()) |
💬 観測値そのもので判断すると t = 1 の 24 人(一時的な混雑)で増便してしまうが、 推定値は 18.0 にとどまり、 増便は待ち人数が続けて増えた t = 4(21.50)から始まる。 手計算の 18.0・16.0・16.0・21.5 と一致する。 センサーの値をそのまま機械に返さず、 推定の段で揺れをならすのが CPS の要で、 平滑の強さ(ここでは 0.5)を変えると反応の速さと誤作動の少なさの釣り合いが変わる。 同じ観測で係数を 0.9 にすると t = 1 の推定が 22.8 になって一時的な混雑で増便してしまい、 0.2 にすると t = 5 でも推定が 19.9 にとどまって増便が間に合わない。
SSDSE-B-2026(47都道府県・2023 年・112 項目)を題材に、 Society 5.0 に関係する変数を実値で確認します。 とくに東京・大阪・沖縄・秋田 など特徴ある県を比較すると、 用語の重みが体感できます。
| 都道府県 | 総人口(千人) | 高齢化率(%) | TFR | 一般診療所数(人口10万対) |
|---|---|---|---|---|
| 東京 | 14,086 | 22.8 | 0.99 | 105.7 |
| 大阪 | 8,763 | 27.7 | 1.19 | 101.3 |
| 沖縄 | 1,468 | 23.8 | 1.60 | 63.2 |
| 秋田 | 914 | 39.1 | 1.10 | 88.2 |
| 全国 | 124,353 | 29.1 | 1.29(47 県の単純平均。 人口動態統計の全国値は 1.20) | 84.4 |
これらの値を Society 5.0 の観点で読み解くと、 都道府県間の格差・特徴・関係性が浮かび上がります。 具体的な計算手順は次の「🐍 Python 実装」セクションで実演します。
経団連 2018「Society 5.0 ともに創造する未来」では、 実現に必要な 5 つの社会基盤を提示している。 単なる技術導入ではなく 制度・人材・倫理を含めた包括的変革であることに注意。
| 基盤 | 具体例 | 関連用語 | 主な障害 |
|---|---|---|---|
| ① データ流通基盤 | DATA-EX、 DFFT、 GAIA-X | データ基盤 | 標準化遅れ・所有権 |
| ② デジタル人材 | デジタル推進人材 230 万人(2026 年度末まで) | AI 人材 | 教育不足、 流出 |
| ③ 規制改革 | サンドボックス・特区 | AI 規制 | 官庁縦割り |
| ④ 倫理・ガバナンス | AI 原則、 説明責任 | AI 倫理 | 透明性・偏見 |
| ⑤ サイバーセキュリティ | ゼロトラスト、 NICTER | AI 安全 | 国家攻撃・人材難 |
| 年 | 出来事 | 主要文書・主体 |
|---|---|---|
| 2016/1 | 「第 5 期科学技術基本計画」で Society 5.0 を初提唱 | 内閣府 |
| 2017/6 | 「未来投資戦略 2017」で重点 5 分野 | 経団連・首相官邸 |
| 2018/11 | 経団連「Society 5.0 - ともに創造する未来 -」 | 経団連 |
| 2019/3 | 「人間中心の AI 社会原則」を内閣府 IT 戦略本部決定 | 内閣府 |
| 2019/6 | G20 大阪首脳宣言で DFFT (Data Free Flow with Trust) 提唱 | 日本政府 |
| 2020/4 | スーパーシティ法成立 (国家戦略特区法改正) | 内閣府 |
| 2021/3 | 「第 6 期科学技術・イノベーション基本計画」 (Society 5.0 を「持続可能性と強靱性」で拡張) | 内閣府 |
| 2021/9 | デジタル庁発足、 マイナンバー基盤拡充 | デジタル庁 |
| 2022/12 | 「デジタル田園都市国家構想総合戦略」閣議決定 | 内閣官房 |
| 2023/4 | G7 群馬高崎デジタル相会合で「DFFT 推進国際枠組」合意 | G7 |
Society 5.0 は、 少子高齢化による働き手の減少や、 地域による医療・交通などの格差を、 IoT・AI・ロボットで補うという問題意識から出発している。 「働き手が減る」「高齢者の多い地域ほど医療資源が足りない」は、 どれくらい本当なのか。 SSDSE-B-2026 の実データで 2 つ確かめる。
🎯 このコードでやること:15〜64 歳人口(A1302)÷ 65 歳以上人口(A1303)を「高齢者 1 人あたりの支え手の数」として、 全国(47 県の合計)の推移と、 2023 年度の県ごとの多い・少ない県、 2012 → 2023 年度の変化率を計算する。
📥 入力データ:SSDSE-B-2026 の全 564 行のうち、 年度・都道府県・15〜64 歳人口 A1302・65 歳以上人口 A1303(2023 年度の秋田県 474,000 人・357,000 人 など)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df['支え手'] = df['A1302'] / df['A1303'] # 65 歳以上 1 人あたりの 15〜64 歳人口 t = df.pivot(index='Prefecture', columns='SSDSE-B-2026', values='支え手') nat = df.groupby('SSDSE-B-2026')[['A1302', 'A1303']].sum() nat_ratio = nat['A1302'] / nat['A1303'] print('全国(47 県合計):', ' '.join(f'{y}年 {nat_ratio[y]:.2f}' for y in [2012, 2015, 2018, 2021, 2023])) print('2023 年度 少ない 3 県:', t[2023].nsmallest(3).round(2).to_dict()) print('2023 年度 多い 3 県 :', t[2023].nlargest(3).round(2).to_dict()) chg = (t[2023] / t[2012] - 1) * 100 print(f'2012→2023 の変化率: 全 47 県で減少 = {(chg < 0).all()}, 最小 {chg.min():.1f}%({chg.idxmin()}), 最大 {chg.max():.1f}%({chg.idxmax()})') print(f'2023 年度に 2 人を下回る県: {(t[2023] < 2).sum()} 県(2012 年度は {(t[2012] < 2).sum()} 県)') |
📤 実行結果:
💬 結果の読み方:全国では、 高齢者 1 人を支える 15〜64 歳の人数が 2012 年度の 2.60 人から 2023 年度の 2.04 人へ減った。 2023 年度に 2 人を下回る県は 36 県で、 2012 年度の 4 県から大きく増えている。 最も少ない秋田県は 1.33 人で、 東京都(2.92 人)の半分以下。 2012 → 2023 年度の変化はすべての県でマイナスで、 最も小さい東京都でも −7.9%、 最も大きい青森県は −31.1%。 人の手を前提にした介護・医療・交通のサービスを同じ形で続けるのが難しくなる、 という Society 5.0 の出発点は、 県による濃淡はあっても全国で数字に表れている。
🎯 このコードでやること:2023 年度の高齢化率と、 一般診療所数(I5102)を人口 10 万人あたりと 65 歳以上 1 万人あたりの 2 通りで割った密度との相関を計算し、 それぞれ上位・下位 3 県を並べる。
📥 入力データ:SSDSE-B-2026 の 2023 年度 47 行のうち、 都道府県・総人口 A1101・65 歳以上人口 A1303・一般診療所数 I5102。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pandas as pd from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) d = df[df['SSDSE-B-2026'] == 2023].set_index('Prefecture') aging = d['A1303'] / d['A1101'] * 100 # 高齢化率(%) clinic_pop = d['I5102'] / d['A1101'] * 1e5 # 人口 10 万人あたり一般診療所数 clinic_old = d['I5102'] / d['A1303'] * 1e4 # 65 歳以上 1 万人あたり一般診療所数 for label, s in [('人口 10 万人あたり', clinic_pop), ('65 歳以上 1 万人あたり', clinic_old)]: r, p = stats.pearsonr(aging, s) print(f'高齢化率 と 診療所数({label}): r = {r:.3f}, p = {p:.2g}') print(f' 上位 3: {s.nlargest(3).round(1).to_dict()} 下位 3: {s.nsmallest(3).round(1).to_dict()}') |
📤 実行結果:
💬 結果の読み方:人口 10 万人あたりで見ると、 高齢化率との相関は r = 0.191(p = 0.2)でほぼ無関係で、 和歌山県(113.0)・島根県(106.0)のように高齢化率の高い県も上位に入る。 ところが、 医療を多く必要とする 65 歳以上 1 万人あたりに直すと r = −0.510(p = 0.00025)と、 高齢化率の高い県ほど診療所が少ない関係がはっきり出る。 上位は東京都(46.5)・大阪府(36.6)・福岡県(33.1)、 下位は北海道(20.2)・茨城県(20.3)・青森県(20.4)。 どの人口で割るかで結論が変わる点に注意したうえで、 「高齢者 1 人あたりの医療資源が薄い地域をオンライン診療や移動支援で補う」という Society 5.0 の構想は、 この数字と対応している。 ただし診療所の数は医師の数や診療時間を表さないので、 医療へのアクセスそのものを測るには別の統計も要る。
ここから言えること: Society 5.0 のような政策ビジョンは、 そのまま数値で評価できるわけではないが、 ビジョンが前提にしている課題(支え手の減少、 地域の医療資源の偏り)は公的統計で確かめられる。 政策の説明を読むときは、 前提となる課題の大きさを自分で計算し、 どの分母で見たときの話かを確かめる習慣をつける。
合成データで IoT 機器普及率と社会指標を計算する。
| 国 | 機器/人 | 達成度 |
|---|---|---|
| A | 20 | 1.00 |
| B | 15 | 0.75 |
| C | 8 | 0.40 |
| D | 5 | 0.25 |
達成度 = 機器数 / 20 (目標)
1 2 3 4 5 6 | import numpy as np dev = np.array([20, 15, 8, 5]) target = 20 ach = dev / target print(f"達成度: {ach}") print(f"平均: {ach.mean()}") |
💬 手計算 (Step 2) 60% と Python 出力が完全一致。
「高齢者 1 人を何人の 15〜64 歳で支えているか」は、 15〜64 歳人口(A1302)÷ 65 歳以上人口(A1303)で求まる。 2023 年度の秋田県で計算する。
| Step | 操作 | 数値 |
|---|---|---|
| 1 | 2023 年度の値を読む | 15〜64 歳 = 474,000 人、 65 歳以上 = 357,000 人 |
| 2 | 割る | 474,000 ÷ 357,000 = 1.328 ≈ 1.33 人 |
| 3 | 2012 年度と比べる | 2012 年度は 1.90 人。 1.33 ÷ 1.90 = 0.70 で、 11 年で 3 割減った |
| 4 | 全国(47 県の合計どうし) | 2023 年度 2.04 人。 秋田県はその 0.65 倍 |
① のコードの出力(秋田県 1.33 人、 全国 2.04 人)と一致する。 1.33 人は「高齢者 3 人を 15〜64 歳 4 人で支える」計算で、 見守りや通院の付き添いを人手だけで続ける余力が小さいことを表している。
全国の支え手は 2023 年度で 2.04 人とまだ 2 人を上回るが、 県ごとに見ると多くの県はもっと早く 2 人を割っている。 12 年分から、 各県が初めて 2 人を下回った年度を数える。
🎯 このコードでやること:2012〜2023 年度を年度順に並べ直し、 支え手の人数(15〜64 歳 ÷ 65 歳以上)が初めて 2 人を下回った年度を県ごとに求めて、 年度ごとの県の数を数える。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df['支え手'] = df['A1302'] / df['A1303'] df = df.sort_values('SSDSE-B-2026') # 年度順に並べ直す(元は新しい年度が先) below = df[df['支え手'] < 2] first = below.groupby('Prefecture')['SSDSE-B-2026'].min() # 初めて 2 人を下回った年度 print('初めて 2 人を下回った年度ごとの県の数:') print(first.value_counts().sort_index().to_string()) print('2023 年度でも 2 人以上の県:', sorted(set(df.Prefecture) - set(first.index))) print('2012 年度にすでに下回っていた県:', sorted(first[first == 2012].index)) last = df[df['SSDSE-B-2026'] == 2023].set_index('Prefecture')['支え手'] back = [p for p in first.index if last[p] >= 2] print('一度下回ったが 2023 年度は 2 人以上:', {p: round(float(last[p]), 3) for p in back}) |
💬 2012 年度の時点ですでに秋田県・高知県・島根県・山口県の 4 県が 2 人を下回っており、 2014 年度(9 県)から 2016 年度(6 県)にかけて一気に増えた。 12 年の間に一度でも 2 人を下回った県は 37 県で、 京都府は下回った後に 2023 年度で 2.001 人とわずかに戻った。 2023 年度でも 2 人以上なのは東京都・神奈川県・愛知県・大阪府・福岡県などの大都市圏と宮城県・滋賀県・沖縄県の 10 都府県だけで、 全国値の 2.04 人はこの 10 都府県の人口の大きさに支えられている。 「全国ではまだ 2 人」という数字の裏で、 大半の県はすでに次の段階に入っている。
以下は Society 5.0 を SSDSE-B-2026 で扱うときの典型コード。 encoding='cp932' は政府統計の Shift-JIS 対応。 skiprows=1 は 1 行目の英語コード行(A1101 など)を飛ばし、2 行目の日本語見出しを列名にする定石。
このコードでやること: SSDSE-B-2026 から医療アクセス (診療所密度)・高齢化率・出生 (TFR) の 3 指標を取り出し、 Min-Max 正規化と単純平均で各県の「Society 5.0 進捗スコア (0〜1)」を計算する。 pandas のみで完結。
📥 入力データ (SSDSE-B-2026 抜粋。 1 行目が英字ヘッダ、 2 行目が日本語名で skiprows=[1] で除外。 先頭列は年度なので 2023 で絞り込む):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import pandas as pd # SSDSE-B-2026 を読み込み (cp932 / 2 行目の日本語名をスキップ) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) # 英字コードの列名を使う df = df[df.iloc[:, 0].astype(str) == '2023'].reset_index(drop=True) # 4 指標を取り出し (先頭は年度列。 列番号は SSDSE-B-2026 の並びに準拠) df['総人口'] = df.iloc[:, 3] # A1101 総人口 df['一般診療所数'] = df.iloc[:, 94] # I5102 一般診療所数 df['65歳以上'] = df.iloc[:, 15] # A1303 65歳以上人口 df['TFR'] = df.iloc[:, 21] # A4103 合計特殊出生率 df['診療所密度'] = df['一般診療所数'] / df['総人口'] * 100000 # 人口10万対 df['高齢化率'] = df['65歳以上'] / df['総人口'] * 100 # Min-Max 正規化 (高齢化率は「低いほど良い」ので 1 - x) def minmax(s, reverse=False): x = (s - s.min()) / (s.max() - s.min()) return 1 - x if reverse else x df['score'] = (minmax(df['診療所密度']) + minmax(df['高齢化率'], reverse=True) + minmax(df['TFR'])) / 3 print(df[['Prefecture', 'score']].sort_values('score', ascending=False).head(10)) |
📤 実行例:
💬 結果の読み方: 沖縄県が 1 位に立つ点が興味深い。 高齢化率の低さ (23.8%, 東京都の 22.8% に次ぐ全国 2 番目の低さ) と TFR の高さ (1.60, 全国最高) が、 医療アクセスの複合で首位を押し上げている。 人口最大の東京は 4 位にとどまる。 「単一指標 (人口や経済規模) だけで Society 5.0 進捗を測ると過疎県を切り捨てる」リスクがあるため、 複合スコア化 は EBPM の基本である。
このコードでやること: SSDSE-B-2026 にある「延べ宿泊者数 (G7101)」を「総人口 (A1101)」で割り、 住民 1 人当たり宿泊者数を県別の 交流人口の代理指数 (proxy index) として算出する。 直接の「デジタル基盤普及率」変数が SSDSE にないため、 交流・観光の実測列で地域の外部接続度を近似する典型手順。
📥 入力データ (SSDSE-B-2026 の関連列, 2023 年):
1 2 3 4 5 6 7 8 9 10 11 12 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) # 英字コードの列名を使う df = df[df.iloc[:, 0].astype(str) == '2023'].reset_index(drop=True) # 関連列を取り出し (直接の「デジタル基盤」変数は SSDSE になし) df['総人口'] = df.iloc[:, 3] # A1101 総人口 df['延べ宿泊者数'] = df.iloc[:, 80] # G7101 延べ宿泊者数 # 住民 1 人当たり宿泊者数を「交流人口指数」の代理として使う df['交流指数'] = df['延べ宿泊者数'] / df['総人口'] print(df[['Prefecture', '交流指数']].sort_values('交流指数', ascending=False).head(5)) |
📤 実行例:
💬 結果の読み方: 沖縄・京都・山梨・石川・長野が上位で、 人口規模ではなく 観光・保養地としての性格 が交流人口の多さに直結している。 これは「デジタル基盤普及率」そのものではなく交流量の代理にすぎないため、 「proxy index は仮説」 として扱い、 観光庁『宿泊旅行統計調査』や『情報通信白書』の県別データで検証する 2 段階設計が EBPM の基本。
このコードでやること: 生活水準の代理として消費支出 (L3221) を目的変数に、 人口規模 (対数) と高齢化率を説明変数として OLS 線形回帰を行う。 「県の生活水準を人口構造がどこまで説明するか」を統計的に確かめる。
📥 入力データ: SSDSE-B-2026 (2023 年) の A1101 総人口・A1303 65 歳以上人口・L3221 消費支出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import pandas as pd import numpy as np import statsmodels.api as sm df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df[df.iloc[:, 0].astype(str) == '2023'].reset_index(drop=True) pop = df.iloc[:, 3].astype(float) # A1101 総人口 old = df.iloc[:, 15].astype(float) # A1303 65歳以上人口 y = df.iloc[:, 101].astype(float) # L3221 消費支出 (二人以上の世帯, 円/月) # 説明変数: 人口規模(対数) と 高齢化率 X = pd.DataFrame({'log_pop': np.log(pop), '高齢化率': old / pop * 100}) X = sm.add_constant(X) model = sm.OLS(y, X).fit() print(model.summary().tables[1]) print(f'R^2 = {model.rsquared:.3f}') |
📤 実行例:
💬 結果の読み方: log_pop も高齢化率も p > 0.05 で有意でなく、 R² ≈ 0.13 と説明力は小さい。 消費支出 (生活水準) は人口規模や高齢化率ではほとんど説明できず、 世帯構成・所得・物価などの他要因が支配的であることを示す。 「人口動態だけで生活水準を語れない」ことがデータから読み取れ、 EBPM では単純な人口ベース回帰の説明力の低さに注意すべきという教訓が得られる。
OECD『Handbook on Constructing Composite Indicators』(2008) に基づき、 複数 KPI を合成して 1 つの「Society 5.0 進捗度」を出す標準手順は次の 7 ステップである。 各ステップで起こりうる落とし穴を併記する。
| # | ステップ | 具体作業 | 落とし穴 |
|---|---|---|---|
| 1 | 理論フレーム | 指標群を選ぶ理論的根拠 | 「手元データから選ぶ」と理論不在に |
| 2 | データ選定 | 入手可能性・信頼性 | 取得頻度の不揃いで時系列ずれ |
| 3 | 欠損処理 | 平均代入・KNN・モデルベース | 代入バイアス、 過小評価 |
| 4 | 多変量分析 | 相関・PCA で次元削減検討 | PCA 軸の解釈が難しい場合あり |
| 5 | 正規化 | Min-Max, Z-score, ランク | 外れ値で Min-Max が歪む |
| 6 | 重み付け・集約 | 等重み・専門家 AHP・PCA 重み | 重みの恣意性が結論を左右 |
| 7 | 感度分析 | 重み・正規化方式を変えて頑健性確認 | 省略しがちだが最重要 |
💬 読み方: 最大の落とし穴は ステップ 7 (感度分析) の省略。 「重み 0.5/0.3/0.2」を「0.4/0.4/0.2」に変えただけで上位 5 県の順位が入れ替わるなら、 その合成指数は 意思決定の根拠として脆弱。 OECD は重み・正規化・代入方式を最低 3 通り組み合わせて結果が頑健か確認することを推奨している。
このコードでやること: 3 指標 (医療アクセス・反転高齢化・TFR) の重みを 3 パターン振り、 上位 5 県のリストがどれだけ安定しているかを確認する。 OECD ステップ 7 の感度分析の最小実装。
📥 入力データ: コード 1 と同じ正規化済 3 指標 (診療所密度・反転高齢化率・TFR)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df[df.iloc[:, 0].astype(str) == '2023'].reset_index(drop=True) df['c'] = df.iloc[:, 94] / df.iloc[:, 3] * 100000 # 一般診療所数(人口10万対) df['a'] = df.iloc[:, 15] / df.iloc[:, 3] # 高齢化率 df['f'] = df.iloc[:, 21] # TFR def norm(s, rev=False): x = (s - s.min()) / (s.max() - s.min()) return 1 - x if rev else x df['C'], df['A'], df['F'] = norm(df['c']), norm(df['a'], rev=True), norm(df['f']) for wc, wa, wf in [(0.33, 0.33, 0.34), (0.5, 0.3, 0.2), (0.2, 0.5, 0.3)]: df['score'] = wc*df['C'] + wa*df['A'] + wf*df['F'] top5 = df.sort_values('score', ascending=False).head(5)['Prefecture'].tolist() print(f'w=({wc},{wa},{wf}): top5 = {top5}') |
📤 実行例:
💬 結果の読み方: 重みを変えると 1 位が沖縄 ↔ 東京で入れ替わる。 医療アクセスを重く見る (0.5/0.3/0.2) と東京が 1 位、 高齢化を重く見る (0.2/0.5/0.3) と沖縄が 1 位になる。 東京都は 3 通りとも 5 位以内(5 位・1 位・2 位)に入り 比較的頑健だが、 沖縄県は診療所密度が人口 10 万人あたり 63.2 と低いため、 診療所を重く見る重みでは 1 位から 22 位まで落ちる。 3〜5 位も重みで長崎 / 島根 / 和歌山 / 滋賀 / 愛知 / 大阪と入れ替わり 脆弱。 このように順位の頑健な県と脆弱な県を区別し、 政策レポートには 重み感度を明示した上で結論する のが OECD 推奨の作法。
支え手の人数は 15〜64 歳 ÷ 65 歳以上なので、 減った理由は「働く世代が減った」か「高齢者が増えた」かのどちらか(または両方)である。 どちらが効いたかで、 地域に必要な手立ては変わる。 2012 年度と 2023 年度を 4 都県で比べる。
🎯 このコードでやること:東京都・沖縄県・秋田県・青森県について、 2012 年度と 2023 年度の支え手の人数と、 15〜64 歳・65 歳以上それぞれの増減率を並べる。
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) a = df[df['SSDSE-B-2026'] == 2012].set_index('Prefecture') b = df[df['SSDSE-B-2026'] == 2023].set_index('Prefecture') rows = [] for p in ['東京都', '沖縄県', '秋田県', '青森県']: w0, w1 = a.loc[p, 'A1302'], b.loc[p, 'A1302'] # 15〜64 歳 o0, o1 = a.loc[p, 'A1303'], b.loc[p, 'A1303'] # 65 歳以上 rows.append([p, w0 / o0, w1 / o1, (w1 / w0 - 1) * 100, (o1 / o0 - 1) * 100]) t = pd.DataFrame(rows, columns=['県', '2012 支え手', '2023 支え手', '15〜64 歳の増減%', '65 歳以上の増減%']) print(t.round(2).to_string(index=False)) |
💬 4 都県とも支え手は減ったが、 理由が違う。 東京都は 15〜64 歳が 4.98% 増えたのに 65 歳以上が 13.98% 増えて 3.17 → 2.92 人。 沖縄県は 15〜64 歳の減少は 3.18% と小さく、 65 歳以上が 40.00% も増えたのが主因で 3.64 → 2.52 人。 秋田県と青森県は 65 歳以上の増加(9.51%・14.56%)より、 15〜64 歳が 2 割以上減った(−23.42%・−21.05%)ことが効いて、 秋田県は 1.90 → 1.33 人になった。 働き手そのものが減っている秋田・青森では省人化(自動化・遠隔化)が、 高齢者が急に増える沖縄では医療・介護の受け皿の拡大が先に問われる、 という読み分けができる。
働き手の減少には、 出生だけでなく県をまたぐ移動も効く。 Society 5.0 を地方で進める政策(デジタル田園都市国家構想など)は、 この流れを変えることも狙っている。 2023 年度の転入者数(A5101)と転出者数(A5102)の差を見る。
🎯 このコードでやること:2023 年度の 47 都道府県について、 日本人の転入者数 − 転出者数(純移動)と、 人口 1,000 人あたりの純移動率を求め、 転入超過の県の数と上位・下位の県を出す。
1 2 3 4 5 6 7 8 9 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) d = df[df['SSDSE-B-2026'] == 2023].copy() d['純移動'] = d['A5101'] - d['A5102'] # 転入 − 転出(日本人移動者) d['純移動率‰'] = d['純移動'] / d['A1101'] * 1000 print('転入超過の都府県:', (d['純移動'] > 0).sum(), '/ 47') print(d.nlargest(5, '純移動')[['Prefecture', '純移動', '純移動率‰']].round(2).to_string(index=False)) print(d.nsmallest(3, '純移動率‰')[['Prefecture', '純移動', '純移動率‰']].round(2).to_string(index=False)) print(f"合計(県をまたぐ移動は相殺される): {d['純移動'].sum():,}") |
💬 転入が転出を上回ったのは 47 都道府県のうち 6 都府県だけで、 東京都が +58,489 人(人口 1,000 人あたり +4.15 人)と突出し、 神奈川県・埼玉県・千葉県・大阪府が続く。 転出超過の率が大きいのは長崎県(−5.02)・青森県(−4.70)・岩手県(−4.12)。 47 県の合計はちょうど 0 になり、 県をまたぐ移動は「どこかの増加はどこかの減少」であることが確かめられる。 支え手の減った青森県が転出超過でも上位にいることは、 働き手の減少が出生の少なさだけでなく流出によっても進んでいることを示している。
2023 年度の 1 年だけでは、 たまたまの動きかもしれない。 2012〜2023 年度の 12 年分で、 各県が転出超過だった年を数え、 あわせて 2023 年度の純移動率と支え手の人数の関係を見る。
🎯 このコードでやること:12 年分の純移動(転入 − 転出)の符号を県ごとに数え、 2023 年度の純移動率(人口 1,000 人あたり)と支え手の人数(15〜64 歳 ÷ 65 歳以上)の相関係数を、 東京都を含む場合と除く場合で求める。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import pandas as pd from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df['純移動'] = df['A5101'] - df['A5102'] out_years = (df['純移動'] < 0).groupby(df['Prefecture']).sum() # 転出超過だった年数(12 年中) print('12 年すべて転出超過:', (out_years == 12).sum(), '県') print('12 年すべて転入超過:', list(out_years[out_years == 0].index)) d = df[df['SSDSE-B-2026'] == 2023].copy() d['純移動率‰'] = d['純移動'] / d['A1101'] * 1000 d['支え手'] = d['A1302'] / d['A1303'] r, p = stats.pearsonr(d['純移動率‰'], d['支え手']) print(f"2023 年度 純移動率 と 支え手の人数: r = {r:.3f}, p = {p:.2g}") r2, p2 = stats.pearsonr(d.loc[d.Prefecture != '東京都', '純移動率‰'], d.loc[d.Prefecture != '東京都', '支え手']) print(f"東京都を除く 46 道府県 : r = {r2:.3f}, p = {p2:.2g}") |
💬 12 年すべて転出超過だった県は 33 県あり、 12 年すべて転入超過だったのは埼玉県・東京都・神奈川県・福岡県の 4 都県だけだった。 人の流出は一時的なものではなく、 同じ県で毎年続いている。 2023 年度の純移動率と支え手の人数の相関は r = 0.818 と強く、 東京都を除いても r = 0.770 で変わらない。 ただしこれは相関で、 「若い世代が出ていくから支え手が減る」向きと、 「働き口の少ない地域ほど若い世代が出ていく」向きが重なっている。 どちらがどれだけ効いているかは、 このデータだけでは決められない。
Society 5.0 (内閣府が 2016 年の第 5 期科学技術基本計画で提唱) は「サイバー空間とフィジカル空間の高度融合で経済発展と社会的課題解決を両立する社会」と謳いますが、 実装段階では 「バズワード化して具体施策が漠然」「IoT/AI 導入が目的化し問題解決と乖離」「データ利活用と個人情報保護のトレードオフ無視」「地方/高齢者のデジタル格差を軽視」といった失敗が頻発します。 以下、 KPI 設計や効果検証で踏みやすい 7 つのワナを整理しました。
📌 試験では「Society 5.0 の定義」「CPS の意味」「6 応用分野」が頻出。 数字 (5、 4、 6、 2016) を関連付けて覚える。
Society 5.0 を「掛け声で終わらせない」ために、 実装段階で確認すべき 20 項目を整理する。 各項目はガイドラインや実証実験の知見を凝縮したもの。
📌 20 項目すべてを最初から満たす必要はないが、 「現状どこまで対応済か」を可視化することが本質。 半数以上が空欄なら「実装フェーズ」前。
Society 5.0 の資料では「高齢者 1 人を何人で支えるか」が全国の数字で語られる。 県別の値を平均して全国の目安にすると、 どれだけずれるかを確かめる。
🎯 このコードでやること:2023 年度の 47 県について、 支え手の人数(15〜64 歳 ÷ 65 歳以上)の単純平均・中央値と、 47 県の合計どうしで割った全国値を比べる。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) d = df[df['SSDSE-B-2026'] == 2023].copy() d['支え手'] = d['A1302'] / d['A1303'] # 高齢者 1 人あたりの 15〜64 歳人口 simple = d['支え手'].mean() national = d['A1302'].sum() / d['A1303'].sum() print(f"47 県の単純平均 : {simple:.3f} 人") print(f"全国(47 県の合計で割る): {national:.3f} 人") print(f"中央値 : {d['支え手'].median():.3f} 人") share = d.nlargest(5, 'A1303')[['Prefecture', 'A1303', '支え手']] print('65 歳以上人口の多い 5 都府県:') print(share.round({'支え手': 2}).to_string(index=False)) print(f"この 5 都府県の 65 歳以上は全国の {share['A1303'].sum() / d['A1303'].sum():.1%}") |
💬 47 県の単純平均は 1.835 人、 中央値は 1.746 人だが、 全国の値は 2.041 人で、 平均は全国より 0.2 人(約 10%)少なく出る。 支え手の多い東京都(2.92 人)・神奈川県(2.43 人)・愛知県(2.41 人)などの大都市圏に、 全国の 65 歳以上の 33.0% が住んでいるのに、 単純平均では 1 県 1 票に薄められるからである。 「全国の高齢者がどれだけ支えられているか」を言うなら全国値、 「支え手の少ない県がどれだけあるか」を言うなら県別の分布(2 人を下回る県は 36 県)を示し、 平均の種類を書き分ける。
Society 5.0 は 2016 年 1 月に提唱された。 その前後で指標の動きが変われば政策の効果に見えるが、 同じ時期に別の理由で動きが変わることもある。 全国の支え手の人数(47 県の合計どうしで計算)の 12 年分で確かめる。
🎯 このコードでやること:2012〜2023 年度の全国の支え手の人数を年度順に並べ、 2016 年度より前と後で 1 年あたりの変化(直線の傾き)を比べる。
1 2 3 4 5 6 7 8 9 | import numpy as np, pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) g = df.groupby('SSDSE-B-2026')[['A1302', 'A1303']].sum() ratio = (g['A1302'] / g['A1303']).sort_index() # 全国の支え手の人数(年度順) print(ratio.round(3).to_string()) pre = np.polyfit(ratio.loc[2012:2016].index, ratio.loc[2012:2016].values, 1)[0] post = np.polyfit(ratio.loc[2016:2023].index, ratio.loc[2016:2023].values, 1)[0] print(f"2012〜2016 年度の傾き: {pre:+.4f} 人/年") print(f"2016〜2023 年度の傾き: {post:+.4f} 人/年") |
💬 支え手の人数は 2012〜2016 年度に 1 年あたり −0.098 人のペースで減ったのに、 2016〜2023 年度は −0.024 人と減り方が約 4 分の 1 になった。 「提唱後に減少が緩やかになった」と読みたくなるが、 主な理由は人口の年齢構成にある。 1947〜1949 年生まれの人数の多い世代が 2012〜2014 年に次々と 65 歳を迎えたため、 この時期は 65 歳以上が急に増え、 その後は増え方が落ち着いた。 政策の効果を言うには、 政策が無かった場合にどう動いたか(反事実)を別に立てる必要があり、 前後比較だけでは効果と年齢構成の変化を区別できない。
Q1. Society 5.0 KPI を SSDSE-B-2026 だけで全て測定できるか?
A: 不可。 行政デジタル化、 公共交通、 再エネ比率などは別途、 e-Stat や資源エネルギー庁データの結合が必要。
Q2. 「高齢化率」は Min-Max 正規化時にどう扱うべきか?
A: 「低いほど良い」指標なので reverse=True で 1 − x として扱う。 そのまま使うと方向が逆になる。
Q3. 東京都が散布図の右上に外れる原因は?
A: 人口が突出して多く、 それに比例して一般診療所数も全国最多になるため。 加えて集積効果 (agglomeration effect) で人口比以上に医療機関が集まる傾向もある。
Q4. Society 5.0 と Industrie 4.0 の最大の違いは?
A: 射程の広さ。 Industrie 4.0 は製造業特化、 Society 5.0 は社会全体 (医療・行政・教育・地方創生) を含む。
Q5. ELSI を後付けにすると何が起きるか?
A: アーキテクチャ再設計コストが膨らみ、 場合によってはサービス停止。 Privacy by Design として初期段階で組込むのが定石。
Q6. 県別複合スコアで沖縄県が 1 位に入った理由は?
A: 高齢化率の低さ (23.8%, 東京都に次ぐ全国 2 番目) と TFR の高さ (1.60, 全国最高) が効き、 医療アクセスと合わせた複合スコアで首位になった。
追加問題(このページの実データから)
内閣府が 2016 年「第 5 期科学技術基本計画」で提示した枠組み。 人類が経験した社会形態を 5 段階に整理し、 現在進行中の Society 5.0 を「サイバーフィジカルシステム (CPS) が社会の中核」と定義する。 個々の段階の境界は明確ではないが、 主要な情報基盤・生産様式の遷移として理解できる。
| 段階 | 名称 | 時期目安 | 中核基盤 | 主要情報媒体 | 代表課題 |
|---|---|---|---|---|---|
| 1.0 | 狩猟社会 | ~BC 1 万年 | 自然・共同体 | 口承・身振り | 食料安定供給 |
| 2.0 | 農耕社会 | BC 1 万 ~ 18 世紀 | 土地・水利 | 粘土板・写本 | 土地分配・暦 |
| 3.0 | 工業社会 | 18-20 世紀 | 蒸気・電力 | 活版印刷・電信 | 大量生産・効率 |
| 4.0 | 情報社会 | 1960-2020 | PC・インターネット | Web・SNS | 情報格差・人手作業 |
| 5.0 | 超スマート社会 | 2016 ~ | CPS / IoT / AI | センサー・LLM | 少子高齢・SDGs |
📌 4.0 と 5.0 の最大の違いは「サイバー空間とフィジカル空間の融合度」。 4.0 では人間が PC の前で情報を扱うが、 5.0 ではセンサー・ロボット・AI が物理世界に介入し、 人間は意思決定のみに集中する。
「Society 5.0」は サイバー空間とフィジカル空間の融合社会ビジョン として、 上流の IoT・ビッグデータ・AI 技術と、 下流の医療・交通・教育・防災・農業の社会実装を繋ぐ概念枠組み。 個別技術の評価軸ではなく、 社会全体の価値創出を測る上位視点。
Society 5.0 は「サイバー空間と物理空間の高度融合」を目指す日本提唱の概念で、 IoT・AI・ビッグデータを基盤とし、 上流の歴史的背景から下流の倫理・SDGs との接続まで一貫した社会設計が求められる。
橋渡しの具体例として、 このページの分析の流れを並べると、 上流の公的統計で課題の大きさ(支え手 2.04 人、 転出超過が 12 年続いた県 33 県)を確かめ、 中流で施策の候補(オンデマンド交通・遠隔の見守り)を選び、 下流で施策の効果を測るときに差の差や合成指数の感度分析を使う、 という順になる。 上流の数字を確かめずに下流の技術から入ると、 解くべき課題の大きさが分からないまま手段だけが決まってしまう。
Society 5.0 に関わる問いをデータで扱うとき、 何を測り、 どの手法を使うかは次の順に決める。