論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
情報エントロピー
Entropy
ML基礎

🔖 キーワード索引

エントロピー シャノン 不確実性 bit 情報量 決定木 ID3 C4.5 ジニ不純度 log2 確率分布 驚き 純度 ヒストグラム

information entropy」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「information entropy」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。

information entropy統計分析SSDSE-B-2026前提条件適用範囲落とし穴関連手法Python 実装検証方法

これらのキーワードは「information entropy の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。

💡 30秒で分かる結論

🍰 まずはやさしく

情報の不確実さを測る定規のようなものです。

データの分け方を決めるために使います。

都道府県のデータを分ける時に役立ちます。

数式とコードと注意点を学びましょう。

情報エントロピー(Entropy (Information Entropy)):情報の不確実性を測る量。 決定木の分割基準にも使う

📍 あなたが今見ているもの

🍰 まずはやさしく

情報エントロピーの解説ページです。

機械学習の基礎を学ぶために使います。

都道府県のデータを使って練習します。

直感からコードまで順番に読みましょう。

このページは「情報エントロピー(Entropy (Information Entropy))」の用語解説です。 機械学習の基礎カテゴリにおける重要概念で、 機械学習の基礎 グループ教材の中で繰り返し登場します。 数式・実コード・落とし穴を 1 ページに集約し、 SSDSE-B-2026 都道府県データ(47 件 × 112 列)を題材に 手を動かしながら理解できるよう構成しています。

別称:シャノンエントロピー。 まず 💡 30秒結論 で全体像を、 次に 🎨 直感📐 数式🧮 実値🐍 Python の順で読むのがおすすめ。

🎨 直感で掴む

🍰 まずはやさしく

どれだけ予測しづらいかを表す数字です。

驚きの大きさを測るために使います。

コインの表裏どちらが出るか考える時と同じです。

不確実さを減らす仕組みを学びましょう。

情報エントロピーは「どれだけ予測しづらいか」を 1 つの数字に集約したものです。 コインが 確実に表(p=1)なら不確実性は 0 ビット、 表裏が半々(p=0.5)なら 1 ビットでこれが最大。 「驚きの平均量」と思うとイメージしやすいです。

決定木 (ID3 / C4.5) では、 分岐前後のエントロピー差(情報利得)を最大化する変数を選ぶことで、 「不確実性をより多く減らす質問」を優先します。 47 都道府県のうち「人口 100 万人以上か?」のような質問でデータがどれだけ純粋に分かれるかを、 エントロピーで測ります。

🎨 直感の深掘り — 「驚き」と「平均情報量」

情報エントロピー $H(X)$ の本質は 2 段階で理解すると腑に落ちます。 第 1 段階は個別事象の情報量 $I(x_i) = -\log_2 p_i$。 確率の小さい出来事ほど「驚き」が大きく、 大きな情報量を持ちます。 「日本で晴れる」(p=0.7) より「日本で雪が降る」(p=0.05) の方が情報的に重い、 という常識と一致します。 第 2 段階はその期待値として $H(X) = \sum p_i I(x_i)$ を取ること。 これが「平均的にどれだけ予測しづらいか」になります。

下の表で確率分布が偏るほどエントロピーが下がる様子を確認しましょう。 47 都道府県の人口分布で言えば、 「東京と他全部」のように極端に偏った 2 値分布よりも、 「人口でほぼ等分した 3 群」の方がエントロピーは大きくなります。

分布$p_1, p_2$H (bit)直感
完全予測1.0, 0.00.000驚きゼロ
弱い偏り0.9, 0.10.469ほぼ予測可
中庸の偏り0.7, 0.30.881そこそこ予測可
完全に均等0.5, 0.51.000予測不能(最大)

💡 暗号化との接点:暗号文が「ランダムに見える」とはエントロピーが上限近くにあるということ。 偏りがあれば頻度分析で破られる、 という古典暗号の弱点はエントロピーで定量化できます。

🎨 応用例 7 シナリオ

分野利用シナリオ使う指標
圧縮Huffman / 算術符号化Shannon エントロピー
分類決定木分岐基準情報利得 / gini
DL 損失分類問題の損失関数交差エントロピー
特徴選択高 MI の特徴を残す相互情報量
生成モデルVAE の正則化項KL ダイバージェンス
クラスタ評価予測クラスタと真クラスタの一致度NMI / ARI
LLM 評価言語モデルの困惑度Perplexity

🎮 触って理解する

確率分布のスライダーを動かすと、 シャノンエントロピー H = −Σ pi log2 pi がリアルタイムで再計算されます。 均等分布ほどエントロピーは大きく(=最も予測困難)一点に集中するほど 0 に近づく(=ほぼ確実)ことを、 手を動かして体感してください。 各事象の情報量 I(xi) = −log2 pi (希少な事象ほど大きい)も同時に表示します。 外部ライブラリなしの vanilla JS 実装で、 オフラインでも動作します。

事象の数:
エントロピー H(平均情報量 = 不確実性)
1.000 bit
最大 log2 n = 1.000 bit / 正規化 H/Hmax = 1.00
予測のしやすさ
予測不能(最大)
均等分布では、 次に何が出るか最も当てにくい状態です。
2 値エントロピー曲線 H(p) = −p log2 p − (1−p) log2(1−p) (p=0.5 で最大 1 bit の山。現在の点を ● で表示)

💡 読み取りのコツ:スライダーは各事象の「重み」で、 合計が 1 になるよう自動で正規化して確率 pi にしています。 いずれか 1 つだけを大きくすると H は 0 へ、 すべて同じ高さにすると H は最大 log2 n へ向かいます。 pi=0 の事象は情報量が ∞(決して起きない=観測すれば無限の驚き)ですが、 エントロピーへの寄与は規約により 0 log 0 = 0 として扱います。

📎 上のスライダーで確かめられる 3 つの性質

🌳 決定木・ジニ不純度との関係

決定木(ID3 / C4.5)は、 ノードを分割する前後のエントロピー差である 情報利得 IG = H(親) − Σ (|子|/|親|) H(子) が最大になる特徴で分岐します。 上のスライダーで「分割後に一方の子ノードが純粋(一点集中=H が 0)に近づくほど IG が大きい」ことをイメージできます。 CART が使う ジニ不純度 Gini = 1 − Σ pi2 はエントロピーと同じく「均等で最大・一点集中で 0」という形をとる不純度指標で、 log を含まないぶん計算が軽く、 実務では両者の分割結果はほぼ一致します。

🔀 交差エントロピー・KL ダイバージェンスへの一般化

エントロピーは 1 つの分布 p の不確実性でした。 2 つの分布 p(真の分布)と q(予測分布)を比べると、 交差エントロピー H(p,q) = −Σ pi log qiKL ダイバージェンス DKL(p∥q) = Σ pi log(pi/qi) が定義され、 H(p,q) = H(p) + DKL(p∥q) の関係で結ばれます。 p=q のとき KL は 0(最小)で交差エントロピーはエントロピー H(p) に一致し、 q が p から離れるほど両者は増えます。 これが分類モデルの損失に交差エントロピー損失が使われる理由で、 「予測分布を真の分布に近づける = 余分な不確実性 DKL を削る」ことに相当します。 (KL ダイバージェンス・相互情報量は本教材に単独ページがないため用語のみ記載)

📐 数式または定義

🍰 まずはやさしく

不確実さを計算するためのルールです。

情報の量を正確に表すために使います。

スマホのデータ通信のように量で考えます。

計算式と関連する用語を学びましょう。

情報エントロピー H(X) は確率分布 p の不確実性を表す量として、 シャノン 1948 の定義で記述されます (KaTeX で描画)。

$$H(X) = -\sum_{i=1}^{n} p_i \log_2 p_i$$

英語名 Entropy (Information Entropy)。 別称:シャノンエントロピー。

📐 関連する情報量 — 結合・条件付き・相互情報量・KL

エントロピー単体だけでなく、 二変数版や差分版を理解することで応用範囲が一気に広がります。

$$I(X;Y) = H(X) + H(Y) - H(X,Y) = D_{KL}(p(x,y)\,\|\,p(x)p(y))$$

相互情報量はピアソン相関の非線形版と捉えられます。 「線形には独立だが、 二次的依存がある」ようなケースでも 0 にならず、 特徴量選択や因果探索でよく使われます。

📐 情報エントロピーが満たす 5 つの性質

Shannon (1948) は情報エントロピーを天下り的に与えず、 「不確実性を測る関数」が満たすべき自然な公理を 5 つ示し、 そこから一意に H = -Σ p_i log p_i が導かれることを示した。 この公理体系を理解しておくと、 なぜ logarithm を使うのか、 なぜ加法的なのか、 が腑に落ちる。

性質数式表現直感的意味
非負性H(X) ≥ 0情報を測る量がマイナスになる事は無い。 「結果を知る前に知る前より知識が減る」事は起きない
最大化(一様)H(X) ≤ log n、 等号は一様分布完全にランダムな分布が最も読みづらい。 サイコロは表計算より予測しづらい
確定性p_i = 1 → H = 0結果が決まっている時、 「驚き」は 0。 雨が確実に降る事を知らされても新情報ゼロ
独立加法性H(X,Y) = H(X)+H(Y)(独立時)独立な 2 つの問いを束ねれば、 不確実性も足し算で増える。 サイコロ 2 個振りは log2(36)=2×log2(6) bit
連続性p をわずかに動かすと H もわずかに動く確率を 0.01 ずらした瞬間にエントロピーが跳ねる事は無い。 推定の安定性を保証

これらの公理は単独でも自然だが、 5 つ全てを満たす関数は logarithm の係数を除いて H = -k Σ p_i log p_i に限られる。 k を選ぶ事で bit(log の底 2)、 nat(自然対数)、 dit(常用対数)といった単位が決まる。 機械学習の交差エントロピー損失や決定木の情報利得は、 すべてこの定義から派生する。

📊 SSDSE-B-2026 で計算するエントロピー早見表

実データに対するエントロピー値の感覚を養うため、 SSDSE-B-2026(2023 年)の都道府県データから抜粋した変数を 10 階級(等幅ビン)に区切り、 H を一覧化した。 エントロピーが上限値(log2(10)=3.32 bit)からどれだけ離れているかが、 分布の偏りを表す。

変数(列コード)H (bit)最大値との差分布の特徴
総人口 (A1101)1.90-1.42右に長い裾、 巨大県が偏在
着工建築物床面積 (C3302)1.88-1.44人口と類似した偏在(経済活動の規模)
一般診療所数 (I5102)1.43-1.89大都市に強く集中
延べ宿泊者数 (G7101)1.41-1.91観光地・大都市に集中
高齢化率 (A1303/A1101)2.92-0.40県間でほぼ均質、 最も予測しづらい
合計特殊出生率 (A4103)3.07-0.25県間で比較的均質、 高エントロピー

この表から「総人口・着工建築物床面積など絶対量の指標は巨大県に偏在して低エントロピー、 高齢化率・合計特殊出生率など比率の指標は県間で均質で高エントロピー」という構造が読み取れる。 機械学習で県を予測する場面では、 高エントロピー変数(高齢化率など)は単独で県を当てる手がかりとして弱い一方、 低エントロピー変数(総人口・着工建築物床面積)は強い手がかりとなる。

📐 H の数学的性質:詳細

情報エントロピーは多くの数学的性質を持ち、 これらが情報理論の定理の証明や、 機械学習アルゴリズムの解析で使われる。 ここでは 8 つの主要な性質を整理し、 各々の意味と用途を示す。

性質 1:凹性(concavity)

H は確率分布の関数として凹関数。 つまり 2 つの分布 p, q と λ ∈ [0,1] に対して、 H(λp + (1-λ)q) ≥ λH(p) + (1-λ)H(q)。 これは「分布の混合は個々のエントロピーの加重平均より大きい」事を意味する。 凹性は最適化の収束性を保証する重要な性質である。

性質 2:劣加法性(subadditivity)

H(X, Y) ≤ H(X) + H(Y)、 等号は X と Y が独立な時のみ成立。 「2 変数の同時エントロピーは個々の和を超えない」。 これは相互情報量 I(X; Y) = H(X) + H(Y) - H(X, Y) ≥ 0 と等価。

性質 3:Jensen の不等式

凹関数 f に対して E[f(X)] ≤ f(E[X])。 H は -p log p の和なので、 凹性から多くの不等式が導かれる。 例:D_KL(p||q) ≥ 0(Gibbs の不等式)は Jensen の不等式から直接導出可能。

性質 4:データ処理不等式

マルコフ連鎖 X → Y → Z で I(X; Z) ≤ I(X; Y)。 中間処理を通じて情報が増える事はない。 これは深層学習で「層を深くしても、 入力データに含まれる情報を超える表現は学習できない」事を保証する基本原理。

性質 5:Fano の不等式

Y から X を推定する時の誤り確率 P_e は、 条件付エントロピー H(X|Y) に下限を与える:H(P_e) + P_e log(|X|-1) ≥ H(X|Y)。 「条件付エントロピーが小さければ、 必然的に推定精度が高い」事を保証する。 機械学習の理論的下限解析で頻繁に使われる。

性質 6:エントロピーべき乗不等式

独立な確率変数 X, Y の和 X+Y の微分エントロピーに対して、 exp(2h(X+Y)) ≥ exp(2h(X)) + exp(2h(Y))。 中心極限定理の情報論的解釈に関連する。

性質 7:unitary 変換不変性

連続変数の微分エントロピー h(X) は、 一対一の関数変換 Y = g(X) で h(Y) = h(X) + E[log|g'(X)|] となる。 線形変換 Y = AX なら h(Y) = h(X) + log|det A|。 これにより、 座標系を変えるとエントロピーが定数だけずれる事が分かる。

性質 8:最大エントロピー原理の対偶

「制約条件下で H 最大」が最大エントロピー分布。 対偶として「H 最大の分布は、 与えた制約以外の情報を含まない」と解釈できる。 これがベイズ統計の事前分布設計や、 統計力学の平衡状態の物理的意味を与える。

性質用途
凹性最適化の収束性、 混合分布の解析
劣加法性相互情報量の非負性、 独立性判定
Jensen の不等式KL ≥ 0、 各種境界の導出
データ処理不等式深層表現学習の理論
Fano の不等式推定精度の下限
エントロピーべき乗中心極限定理の情報論版
unitary 不変性座標系変換
MaxEnt 対偶事前分布設計

🛠 実装テクニックまとめ

情報エントロピーを Python で扱う時の主要ライブラリと使い分けを整理する。 各ライブラリの違いを把握しておくと、 状況に応じて最適なツールを選べる。

scipy.stats.entropy

最も汎用的。 デフォルトで底は e(nat)、 base 引数で底変更可。 KL ダイバージェンスも qk 引数で計算できる:entropy(pk, qk) = D_KL(pk || qk)。 1 次元配列を受け取り、 自動的に正規化する。

sklearn.metrics.mutual_info_score

クラスタリング評価で使われる相互情報量。 単位は nat。 normalized_mutual_info_score(NMI)は [0, 1] に正規化したバージョン。 同時頻度行列から計算する為、 離散変数同士の MI 計算に適する。

sklearn.feature_selection.mutual_info_regression / classif

特徴量選択用。 KSG(Kraskov-Stögbauer-Grassberger)推定で連続変数の MI を計算する。 mutual_info_regression は連続ターゲット、 mutual_info_classif は離散ターゲット用。 高次元の特徴量から「予測に効くもの」を選ぶ時の標準ツール。

PyTorch / TensorFlow の交差エントロピー

PyTorch では nn.CrossEntropyLoss(log_softmax + NLLLoss を統合)、 nn.BCELoss(2 値)、 nn.BCEWithLogitsLoss(数値安定 2 値)。 TensorFlow では tf.keras.losses.SparseCategoricalCrossentropyBinaryCrossentropy。 from_logits=True にして softmax を内部で実行させると、 log-sum-exp トリックで数値安定化される。

これらのライブラリを場面に応じて使い分け、 「情報エントロピーを計算 → 解釈 → 意思決定」のループを高速に回すのが現代のデータ分析の基本である。

🎯 最終的な持ち帰り 10 個

この用語ページで触れた事を、 実務でそのまま使える形式に整理した 10 個のポイント。 この 10 個を覚えていれば、 情報エントロピーが必要な場面で困らない。

  1. 定義は H = -Σ p_i log2 p_i [bit]。 確率分布の不確実性を平均ビット数で測る。 マイナス記号は対数が負になる事の補正。
  2. 取りうる範囲は [0, log2 n]。 確定分布で 0、 一様分布 1/n で最大値 log2 n。 n=2 なら最大 1 bit、 n=4 で 2 bit、 n=8 で 3 bit。
  3. 底は文脈で選ぶ:通信・機械学習なら 2(bit)、 数学なら e(nat)、 通信古典なら 10(dit)。 換算は単なる定数倍。
  4. SSDSE-B-2026 で人口(10 等幅ビン)の H ≈ 1.90 bit、 一様(log2(10)=3.32 bit)より 1.42 bit 低い。 巨大県の偏在を反映。
  5. 相互情報量 I(X;Y) = H(X) - H(X|Y)。 「Y を知る事で X の不確実性が何 bit 減るか」を測る。 Pearson 相関と違って非線形依存も検出。
  6. 交差エントロピー損失は分類モデルの標準損失。 多クラス分類で L = -log ŷ_c(正解クラスの予測確率の負の対数)。 自信のある誤答を強く罰する。
  7. 決定木の分岐基準として情報利得 IG = H_parent - H_children。 IG 最大の軸で分割し、 不確実性を最も大きく減らす。
  8. Shannon の情報源符号化定理が最適圧縮の下限を保証。 H bit より短く圧縮はできないが、 H に漸近する符号化が存在する。
  9. scipy.stats.entropy(pk) で 1 行計算可能。 sklearn.feature_selection.mutual_info_regression で相互情報量による特徴量選択ができる。
  10. 「何の量に対する不確実性か」を毎回確認する習慣を付ける。 ラベル分布の H と予測分布の H、 単独 H と条件付 H、 これらの使い分けが情報理論の実務で最重要。

これら 10 個を 1 つ 1 つ自分の言葉で説明できるようになれば、 情報エントロピーの基礎は完了している。 次は実データ(SSDSE-B-2026、 自分の研究データ等)で具体的に計算し、 「H の値の感覚」を養う段階へ進みたい。 情報エントロピーは、 統計・機械学習・通信・物理を貫く共通言語であり、 この用語を確実に使いこなせる事は、 21 世紀のデータ分析者の必須スキルである。

📌 結びの一言

情報エントロピーは、 1948 年の Shannon の論文から 80 年近く経った今も、 機械学習・統計・通信・物理のあらゆる場面で現役の道具である。 数式は短く H = -Σ p log p だけだが、 その背後には「予測可能性とは何か」「情報とは何か」という深い問いが横たわる。

この用語ページを通して、 単に式を覚えるのではなく、 SSDSE-B-2026 の都道府県データで H = 1.90 bit(人口 10 等幅ビン)という「具体的な値の感覚」を持ち、 決定木の分岐・交差エントロピー損失・特徴量選択・通信路容量・Maxwell の悪魔まで、 情報エントロピーの多様な顔を一望できる視野を獲得して頂きたい。

最後に、 情報理論を学んだ上で読むと得る所が多い古典的文献を 3 冊紹介する。 (1) Shannon, C. E. (1948). "A Mathematical Theory of Communication." Bell System Technical Journal. (2) Cover, T. M. & Thomas, J. A. (2006). "Elements of Information Theory." Wiley-Interscience. (3) MacKay, D. J. C. (2003). "Information Theory, Inference, and Learning Algorithms." Cambridge University Press. これらの古典は数式の厳密性と直感の橋渡しに優れ、 情報理論を体系的に学ぶための地図を提供してくれる。

情報エントロピーは、 一見抽象的な量だが、 ひとたび実データで計算し意思決定に使うと、 「分布の偏り」「予測の難しさ」「特徴量の重要度」「モデルの自信」「圧縮限界」「通信路容量」など、 統計とエンジニアリングの主要問題を一つの言語で語れるようになる。 この用語ページがその出発点になれば幸いである。

補足として、 この用語ページで取り上げた SSDSE-B-2026 の数値例は、 すべて実データから計算した近似値である。 環境やバージョンによって 1-2% 程度の差異が出る事はあるが、 大局的な傾向(総人口・着工建築物床面積など絶対量は低エントロピー、 比率変数は高エントロピー、 総人口と着工建築物床面積の相互情報量 ≈ 1.50 bit)は安定して再現される。 自分の Python 環境で同じ計算をして、 数値と物語を結び付ける作業を是非試みて欲しい。

最後に、 情報エントロピーは「学んで終わり」の道具ではなく、 「学んだ後で見える世界が変わる」道具である。 ニュースの「予測精度 95%」を聞いた時に「真のラベル分布の H と交差エントロピーの差はどうか」と問えるようになる。 アンケート結果を見た時に「回答分布の H と上限の差は何 bit か」と即座に計算できるようになる。 LLM の出力を見た時に「次の単語の分布のエントロピーが、 自信の高さを反映している」と直感できるようになる。 こうした認識の変化が、 情報エントロピーを学ぶ最大の報酬であり、 データ分析者・研究者・エンジニアとしての地平を広げる原動力となる。

情報エントロピーは「単なる数式」ではなく、 「不確実性を直視する技法」である。 完全に予測できないものを、 完全に分からないと諦めるのでもなく、 完全に分かると誤魔化すのでもなく、 「平均 X bit の不確実性が残る」と定量化する。 この姿勢は、 統計分析の根本にある「真実を数で語る」精神そのものであり、 SSDSE-B-2026 を題材にこの感覚を磨く事は、 統計・データ解析コンペの基礎力を養う最良の練習でもある。 用語ページの目的が達成されている事を願って、 ここで筆を置く。

情報エントロピーは、 確率分布を見るたびに思い出すべき道具である。 都道府県データの人口分布、 顧客の購買履歴、 機械学習モデルの予測確率、 言語モデルの次単語分布、 株価のリターン分布、 製造ラインの欠陥タイプ、 アンケート結果の回答比率、 ニュースのカテゴリ分布、 生態系の種構成、 通信路の雑音特性、 検査結果の陽性陰性比率——確率分布が登場するあらゆる場面で、 「この分布の H は何 bit か」「上限値からどれだけ離れているか」「他の変数との相互情報量はどうか」と問う事ができる。 こうした問いを反射的にできるようになる事が、 情報エントロピーを学んだ証である。 SSDSE-B-2026 の人口 H = 1.90 bit(10 等幅ビン)、 着工建築物床面積との相互情報量 1.50 bit、 高齢化率の相対均質性 2.92 bit、 これらの値が思い出せれば、 用語ページの役目は果たされた事になる。 情報エントロピーは、 数式 H = -Σ p log p の中に、 統計・機械学習・通信・物理・生態学・経済学を貫く統一原理を内包している。 学び続ければ、 不確実性を扱う技法として、 これほど美しく強力な道具は他に類を見ない事に気付くだろう。 そしてこの気付きこそが、 80 年前に Shannon が情報理論を創始した時の発見の追体験となる。 数学的な厳密性、 物理的な直観、 機械学習における実用性、 これら 3 つの面を 1 つの数式が同時に満たす事は稀有である。 情報エントロピーはまさにその稀有な例として、 21 世紀の今もデータ分析者の必須の道具であり続けている。 この用語ページが、 読者各位の今後の分析・研究・開発の確かな基礎となれば幸いである。 H という 1 文字の中に、 これだけの世界が広がっている事を、 是非実感して頂きたい。 SSDSE-B-2026 の実値で計算しながら、 情報エントロピーの感覚を磨き続ける旅は、 今ここから始まる。 一歩ずつ、 着実に、 確かな分析力を獲得していこう。 不確実性を直視し、 数値で語る勇気を持ち続けよう。

🔬 数式を言葉で読み解く

記号と意味を逐一突き合わせて読みます。 慣れないうちは式を「日本語で読む」ことが理解の近道です。

🔬 数式を言葉で読み解く(拡張版・Shannon の鎖の法則)

Shannon エントロピーは 確率分布の「ばらけ具合」を 1 つの実数に押し込めた指標です。 物理学の熱力学エントロピーと数式上の親戚であり、 通信工学では「メッセージを送るのに必要な平均ビット数の下限」として現れ、 機械学習では「決定木の分岐評価」「クロスエントロピー損失」「相互情報量」へと派生します。

📐 中核 5 式(覚えるとこれだけで 80% の応用に対応)

① Shannon エントロピー: $H(X) = -\sum_{i=1}^{n} p_i \log_2 p_i$ [bit]

② 結合エントロピー: $H(X, Y) = -\sum_{x,y} p(x,y) \log_2 p(x,y)$

③ 条件付きエントロピー: $H(Y|X) = H(X,Y) - H(X) = \sum_x p(x) H(Y|X=x)$

④ 相互情報量: $I(X;Y) = H(Y) - H(Y|X) = H(X) + H(Y) - H(X,Y) \geq 0$

⑤ KL ダイバージェンス: $D_{KL}(P \| Q) = \sum_i p_i \log_2 (p_i / q_i)$(非対称、 P → Q の符号化コスト超過)

📊 単位の早見表(log の底による換算)

単位用途換算
$\log_2$bit (shannon)通信・暗号基準
$\ln$ (自然対数)nat統計・ML 損失関数1 nat ≈ 1.4427 bit
$\log_{10}$ban (hartley)古典情報理論1 ban ≈ 3.3219 bit

💡 暗黙の落とし穴:scipy.stats.entropy はデフォルトで自然対数 (nat)。 bit 単位に揃えるには base=2 を明示する。 これを忘れると数値が約 1.44 倍ズレる。

🔬 他の不確実性指標との比較

情報エントロピーと混同されがちな指標を整理する。 用途・性質を理解しておくと、 「なぜここでエントロピー(ジニ係数ではなく)を使うのか」を説明できるようになる。

指標定義取りうる範囲主用途
情報エントロピー H-Σ p_i log2 p_i[0, log2 n]符号化・決定木分岐・情報量定量化
ジニ係数1 - Σ p_i²[0, 1-1/n]決定木・所得分配分析
分散E[(X-μ)²][0, ∞)連続変数の散らばり、 正規分布前提
Simpson 多様性指数Σ p_i²[1/n, 1]生態学の種多様性
Rényi エントロピー αlog(Σ p_i^α)/(1-α)α 依存情報理論一般化、 暗号評価
Tsallis エントロピー(1-Σ p_i^q)/(q-1)q 依存非加法的系の物理

特にジニ係数とエントロピーは決定木(CART/ID3)の分岐基準として並んで使われる。 ジニは計算が軽く(log 不要)、 エントロピーは情報量の解釈が明快である。 実務では両者の分岐結果はほぼ同じだが、 数学的最適性の議論では情報利得(エントロピー差)が主流である。

🔬 公理からエントロピー H への導出

Shannon (1948) は「不確実性関数」H(p_1, ..., p_n) が満たすべき 3 つの公理から、 H が一意(係数を除き)に決まる事を証明した。 ここでは公理 → 数式という流れを略式で追い、 「なぜ log なのか」「なぜ -Σ p log p なのか」の理論的根拠を明らかにする。

Shannon の 3 公理

公理 1(連続性):H は p_i に対して連続。 確率を僅かに動かすと H も僅かに動く。 公理 2(単調増加性):n 個の事象が等確率の場合、 H_n = H(1/n, ..., 1/n) は n について単調増加。 多くの選択肢があるほど不確実性が大きい。 公理 3(分解可能性):H を 2 段階の選択に分解できる:H(p_1, ..., p_n) = H(P_1, ..., P_k) + Σ_j P_j H(p_{j,1}/P_j, ..., p_{j,m_j}/P_j)。

導出のスケッチ

公理 2 と公理 3 を組み合わせると、 等確率の場合の H_n = K log n(K > 0)が導かれる。 これは n 個の等確率事象を k 段階の選択に分解した時の方程式 H_{n^k} = k H_n = K log(n^k) から出る。 さらに有理確率の場合に拡張して、 公理 1(連続性)から実数確率全般へ拡張すると、 H(p_1, ..., p_n) = -K Σ p_i log p_i が一意に得られる。

係数 K は log の底を選ぶ事で吸収できる:K log_e = 1/log(2) × log2、 K = 1/log(2) で底 2、 K = 1 で底 e となる。 つまり Shannon のエントロピーは「自然な公理から導かれる唯一の不確実性関数」である。 これが情報理論の基礎を支える理論的根拠。

分解可能性の直感

3 択クイズ「A, B, C を確率 0.5, 0.3, 0.2 で当てる」を 2 段階に分解:(1) 第 1 段階で「A か (B or C) か」を当てる(確率 0.5, 0.5)、 (2) (B or C) なら「B か C か」を当てる(条件付確率 0.6, 0.4)。 全体の H は、 第 1 段階の H_1 と第 2 段階の重みつき H_2 の和になる:H = H(0.5, 0.5) + 0.5 × H(0.6, 0.4) = 1.0 + 0.5 × 0.971 = 1.485 bit。

直接計算でも:H(0.5, 0.3, 0.2) = -(0.5 log2 0.5 + 0.3 log2 0.3 + 0.2 log2 0.2) = 0.5 + 0.521 + 0.464 = 1.485 bit。 完全に一致する。 この分解可能性は、 階層的な決定木の解析や、 機械学習の連鎖律で本質的な役割を果たす。

🧮 SSDSE-B 実値で計算してみる

SSDSE-B の 都道府県を「人口で 3 区分」 したラベルに対して、 エントロピーを計算します。 等分布なら $\log_2 3 \approx 1.585$ ビットが上限。

データ出典:SSDSE-B-2026(独立行政法人統計センター)。 47 都道府県 × 複数年(最新 2023)の社会統計データ。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 SSDSE-B-2026(年度) A1101(総人口) 北海道 2,023 5,092,000 東京都 2,023 14,086,000 沖縄県 2,023 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df = df[df['年度'] == 2023].reset_index(drop=True)

# 47都道府県を総人口で 3 区分にラベル付け
df['人口クラス'] = pd.qcut(df['総人口'], q=3, labels=['小', '中', '大'])

# 各クラスの出現確率
p = df['人口クラス'].value_counts(normalize=True)
print(p)

# エントロピーを定義通りに計算
H = -np.sum(p * np.log2(p))
print(f'H = {H:.4f} bit')
print(f'最大値 log2(3) = {np.log2(3):.4f} bit')

# scipy で確認
from scipy.stats import entropy
print('scipy(base=2):', entropy(p, base=2))

実行結果の要約(出力は環境依存。 概算値):

項目
p(小)0.3404 (16県)
p(中)0.3404 (16県)
p(大)0.3191 (15県)
H(人口クラス)1.5839 bit
最大値 log2(3)1.5850 bit
正規化エントロピー H/log2(3)0.9994 (ほぼ均等)

🧮 SSDSE-B-2026 実値計算 ①:47 都道府県 人口階層分布のエントロピー

47 都道府県の総人口 (A1101) を「100 万人未満」「100-300 万」「300-1000 万」「1000 万以上」の 4 階層に分け、 その分布のエントロピーを計算します。 エントロピーが大きい = 都道府県の人口規模がバラバラ、 小さい = 似たり寄ったり を意味します。

🐍 Python 実装(コード ①)

🎯 このコードでやること:SSDSE-B-2026 の最新年 (2022 年想定) について、 47 県の総人口を 4 階層に区切り、 階層分布のエントロピーを scipy.stats.entropy と numpy 自作の両方で算出する。

📥 入力データ (SSDSE-B-2026 抜粋):

Code Prefecture A1101 0 R01000 北海道 5092000 1 R01000 北海道 5140000 2 R01000 北海道 5183000 3 R02000 青森県 1226000 4 R02000 青森県 1238000 ... (564 行 × 112 列、 12 年分 × 47 都道府県)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# SSDSE-B-2026 を読み込み、 最新年の 47 県の人口階層分布のエントロピーを算出
import pandas as pd
import numpy as np
from scipy.stats import entropy

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
latest = df.groupby('Prefecture')['A1101'].last()  # 47 県 × 最新値

# 4 階層に分類
bins = [0, 1_000_000, 3_000_000, 10_000_000, 20_000_000]
labels = ['<100 万', '100-300 万', '300-1000 万', '>1000 万']
cat = pd.cut(latest, bins=bins, labels=labels)
counts = cat.value_counts().sort_index()
probs = counts / counts.sum()

# エントロピー: 3 通り(自作 / scipy / 最大値)
H_self = -np.sum(probs * np.log2(probs + 1e-12))
H_scipy = entropy(probs, base=2)
H_max = np.log2(4)  # 一様分布のエントロピー上限
norm_H = H_self / H_max  # 正規化エントロピー (0-1)

print(f'人口階層分布:\n{counts}')
print(f'確率分布: {probs.values.round(3)}')
print(f'H (自作) = {H_self:.4f} bit')
print(f'H (scipy) = {H_scipy:.4f} bit')
print(f'H_max (4 階層一様) = {H_max:.4f} bit')
print(f'正規化エントロピー = {norm_H:.3f}')

📤 実行すると次の出力が得られる:

人口階層分布: <100 万 9 100-300 万 28 300-1000 万 9 >1000 万 1 確率分布: [0.191 0.596 0.191 0.021] H (自作) = 1.4766 bit H (scipy) = 1.4766 bit H_max (4 階層一様) = 2.0000 bit 正規化エントロピー = 0.738

💬 結果の読み方:日本の都道府県の人口階層分布は 1.48 bit(最大 2.00 bit の 73.8%)。 約 6 割が「100-300 万人」に偏っており、 「1000 万以上」は東京都だけという 偏りの存在 が、 一様分布より小さなエントロピーとして数値化されています。 もし 47 県すべてが各階層に均等にいたら 2.00 bit になります。

🧮 SSDSE-B-2026 実値計算 ②:都道府県 × 年齢階層 の相互情報量

「都道府県」と「年齢階層比率(0-14 歳/15-64 歳/65 歳以上)」の 相互情報量 $I(\text{都道府県}; \text{年齢})$ を計算します。 値が大きいほど「県名がわかれば年齢分布もある程度予測できる」(=両者は独立でない)ことを意味します。

🐍 Python 実装(コード ②)

🎯 このコードでやること:SSDSE-B-2026 の各県の年齢階層比率(A1301/A1302/A1303 を A1101 で割った値)を 3 階層にビン化し、 47 都道府県 × 3 階層の同時分布から $I(X;Y)$ を計算する。

📥 入力データ (年齢階層、 抜粋):

Prefecture A1301 A1302 A1303 A1101 北海道 510000 2855000 1727000 5092000 青森県 125000 664000 437000 1226000 ... (47 県 × 最新年)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
latest = df.groupby('Prefecture').last().reset_index()

# 高齢化率 (A1303/A1101) を 3 階層にビン化
latest['aging'] = latest['A1303'] / latest['A1101']
latest['aging_cat'] = pd.qcut(latest['aging'], 3, labels=['低', '中', '高'])

# 同時分布
joint = pd.crosstab(latest['Prefecture'], latest['aging_cat']).values
P = joint / joint.sum()
Px = P.sum(axis=1, keepdims=True)
Py = P.sum(axis=0, keepdims=True)

# 相互情報量 (bit)
mask = P > 0
# I(X;Y) = Σ P(x,y) log2( P(x,y) / (P(x)P(y)) )
# 分母は「周辺分布の積」= Px と Py の外積。 Px @ np.ones_like(Py) では Py が
# 掛かっておらず P(x) だけになり、 その式は -H(Y|X) を計算してしまう。
# 県→階層が一対一に決まる今回は H(Y|X)=0 なので、 MI が常に 0 と出ていた。
PxPy = Px @ Py                       # 外積 (47, 3)
MI = (P[mask] * np.log2(P[mask] / PxPy[mask])).sum()
H_X = -(Px * np.log2(Px + 1e-12)).sum()
H_Y = -(Py * np.log2(Py + 1e-12)).sum()

# 正規化相互情報量 NMI (0-1)
NMI = MI / np.sqrt(H_X * H_Y)
print(f'H(X)={H_X:.3f}, H(Y)={H_Y:.3f}, I(X;Y)={MI:.3f} bit')
print(f'NMI = {NMI:.3f}')

📤 実行例:

H(X)=5.555, H(Y)=1.584, I(X;Y)=1.584 bit NMI = 0.534

💬 結果の読み方:「県名」がわかると「高齢化階層」も完全に決まる関係性が成り立つため、 $I(X;Y) = H(Y) = 1.585$ bit に達しています。 NMI 0.534 は「県と高齢化が中-強い関連」を示します。 なお NMI が 1 にならないのは、 $I(X;Y)$ を $\sqrt{H(X)H(Y)}$ で割っているためで、 $H(X)=5.555$(47 県)と $H(Y)=1.584$(3 階層)の大きさが違いすぎるからです。 関係が完全(県が分かれば階層が確定)でも、 片方の変数の取りうる値の数がもう一方より遥かに多いと NMI は 1 まで届きません。 NMI の値を「関連の強さ」として他の分析と比べるときは、 正規化の分母($\sqrt{H(X)H(Y)}$ か $\min$ か $\max$ か)を揃える必要があります。 ML 文脈では クラスタリング評価指標 として NMI が頻繁に登場します。

🧮 SSDSE-B-2026 実値計算 ③:地域別 KL ダイバージェンス(東京 vs 47 県)

「東京都の年齢構成」を 基準分布 P、「他 46 都道府県の年齢構成」を 比較分布 Q として KL ダイバージェンスを算出します。 これは 「東京モデルで全国を予測したときの符号化コスト超過」 という解釈ができます。

🐍 Python 実装(コード ③)

🎯 このコードでやること:東京都を基準に、 46 県の年齢構成分布との KL ダイバージェンスを 1 県ずつ計算し、 「東京から最も遠い県」「最も近い県」を特定する。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1301(15歳未満人口) A1302(15~64歳人口) A1303(65歳以上人口) 北海道 514,000 2,897,000 1,681,000 東京都 1,513,000 9,368,000 3,205,000 沖縄県 236,000 882,000 350,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import pandas as pd
import numpy as np
from scipy.stats import entropy

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
latest = df.groupby('Prefecture').last().reset_index()

# 年齢 3 階層を確率に正規化
age = latest[['A1301', 'A1302', 'A1303']].values
age_p = age / age.sum(axis=1, keepdims=True)

idx_tokyo = latest.index[latest['Prefecture'] == '東京都'][0]
P_tokyo = age_p[idx_tokyo]

# 各県との KL(東京 || 県)
kl_list = []
for i, pref in enumerate(latest['Prefecture']):
    Q = age_p[i]
    kl = entropy(P_tokyo, Q, base=2)  # scipy は KL を返す
    kl_list.append((pref, kl))

ranked = sorted(kl_list, key=lambda x: x[1])
print('東京に最も近い 5 県:')
for p, k in ranked[:5]:
    print(f'  {p}: KL={k:.4f} bit')
print('東京から最も遠い 5 県:')
for p, k in ranked[-5:]:
    print(f'  {p}: KL={k:.4f} bit')

📤 実行例:

東京に最も近い 5 県: 東京都: KL=0.0000 bit 神奈川県: KL=0.0021 bit 埼玉県: KL=0.0026 bit 宮城県: KL=0.0038 bit 千葉県: KL=0.0038 bit 東京から最も遠い 5 県: 沖縄県: KL=0.0243 bit 山口県: KL=0.0283 bit 高知県: KL=0.0315 bit 秋田県: KL=0.0334 bit 島根県: KL=0.0340 bit

💬 結果の読み方:東京・神奈川・埼玉のような 都市圏 は若年層が厚く似た分布を持ち KL が小さい。 一方、 島根・秋田・高知・山口などは 高齢化が進んだ地方 で東京の年齢構成と最大 0.034 bit 離れています。 KL は対称ではないので $D_{KL}(P\|Q) \neq D_{KL}(Q\|P)$ に注意。

📊 解釈早見表

KL [bit]解釈
0.00 – 0.01実質同一の分布東京 vs 神奈川
0.01 – 0.05わずかな差東京 vs 大阪
0.05 – 0.20明確な構造差東京 vs 秋田
> 0.20完全に別物日本 vs ナイジェリア

🧮 SSDSE-B-2026 実値計算 ④:決定木の情報利得 (Information Gain)

決定木は「分岐前のエントロピー」と「分岐後の条件付きエントロピー」の差 = 情報利得 $IG(X, A) = H(X) - H(X|A)$ が最大となる属性 $A$ を選んで分岐します。 47 都道府県の「高齢化階層(低/中/高)」を予測する際、 「人口規模(A1101)」「出生数(A4101)」「気候(B4101 年平均気温)」のどれで分岐するのが効率的か を IG で比較します。

🐍 Python 実装(コード ④)

🎯 このコードでやること:「高齢化階層」を目的変数として、 総人口(A1101)・出生数(A4101)・合計特殊出生率(A4103)・年平均気温(B4101)・最高気温(B4102)を候補属性に置き、 各属性の情報利得を計算する。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) A4103(合計特殊出生率) B4101(年平均気温) 北海道 5,092,000 1,681,000 24,430 1.06 11.0 東京都 14,086,000 3,205,000 86,348 0.99 17.6 沖縄県 1,468,000 350,000 12,549 1.6 23.8 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
import numpy as np
from sklearn.feature_selection import mutual_info_classif

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
latest = df.groupby('Prefecture').last().reset_index()

latest['aging'] = latest['A1303'] / latest['A1101']
y = pd.qcut(latest['aging'], 3, labels=[0, 1, 2]).astype(int)

features = ['A1101', 'A4101', 'A4103', 'B4101', 'B4102']
X = latest[features].fillna(0)

# sklearn の mutual_info_classif で各特徴量の MI(≒ IG)を取得
mi = mutual_info_classif(X, y, random_state=42)
for f, m in zip(features, mi):
    print(f'{f}: MI = {m:.4f} bit')

best = features[np.argmax(mi)]
print(f'最良分岐属性: {best}')

📤 実行例:

A1101: MI = 0.2744 bit (総人口) A4101: MI = 0.3250 bit (出生数) A4103: MI = 0.2683 bit (合計特殊出生率) B4101: MI = 0.0712 bit (年平均気温) B4102: MI = 0.0000 bit (最高気温) 最良分岐属性: A4101

💬 結果の読み方:高齢化階層を分類するうえで 「出生数」が最も情報利得が大きい(0.33 bit)。 これは決定木が「出生の多い県ほど高齢化が進んでいない」という関係を捉えたことを示します(出生数と合計特殊出生率が上位、 一方で気温は高齢化とほぼ無関係で MI ≈ 0)。 sklearn の DecisionTreeClassifier はこの IG(または gini)を内部で計算し、 各ノードでの分岐属性を選択しています。

🗓 情報エントロピー 歴史年表(1948-2024)

出来事影響
1865Clausius が熱力学エントロピー導入物理量としての起源
1948Shannon「A Mathematical Theory of Communication」情報理論の誕生
1951Kullback-Leibler ダイバージェンス分布間距離の標準
1956McMillan, Khinchin: AEP(漸近均等分割性質)圧縮理論の基礎
1965Kolmogorov 複雑性(記述長としてのエントロピー)アルゴリズム的情報理論
1986Quinlan ID3 アルゴリズム(情報利得で分岐)決定木の標準分岐基準
2001RF (Breiman) で gini と IG が並列で使われるアンサンブル時代
2014VAE: KL ダイバージェンス を損失項に生成モデルの中核
2017Tishby ら「情報ボトルネック」深層学習解釈DL 理論
2020CLIP の対照学習で交差エントロピー再注目マルチモーダル
2024LLM 評価で「困惑度 (Perplexity = $2^H$)」が業界標準大規模言語モデル

🧮 SSDSE-B-2026 実値計算 ⑤:12 年間の時系列エントロピー変化

SSDSE-B は 12 年分のパネルデータ。 各年について「47 県人口階層分布」のエントロピーを計算し、 時系列の不確実性の推移 を見ます。 もしエントロピーが下がっていれば「県の人口規模が同質化している」ことを示します。

🐍 Python 実装(コード ⑤)

🎯 このコードでやること:年別に 47 県を 4 階層に区切り、 各年のエントロピーを算出し時系列グラフで可視化する。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) 北海道 5,092,000 東京都 14,086,000 沖縄県 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import pandas as pd
import numpy as np
from scipy.stats import entropy
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
# 年は df のレコード順 (各県 12 行) からインデックス化
df['year_idx'] = df.groupby('Prefecture').cumcount()

bins = [0, 1_000_000, 3_000_000, 10_000_000, 20_000_000]
yrs, H_vals = [], []
for y, sub in df.groupby('year_idx'):
    cat = pd.cut(sub['A1101'], bins=bins)
    p = cat.value_counts(normalize=True).sort_index().values
    H_vals.append(entropy(p, base=2))
    yrs.append(2011 + y)  # 仮の起点

for y, h in zip(yrs, H_vals):
    print(f'{y}: H = {h:.4f} bit')

📤 実行例:

2011: H = 1.5093 bit 2012: H = 1.5093 bit 2013: H = 1.5093 bit 2014: H = 1.5093 bit 2015: H = 1.5093 bit 2016: H = 1.5093 bit 2017: H = 1.5093 bit 2018: H = 1.4766 bit 2019: H = 1.4766 bit 2020: H = 1.4766 bit 2021: H = 1.4766 bit 2022: H = 1.4766 bit

💬 結果の読み方:コード出力ではラベル 2011 → 2022 の順に H が 1.51 → 1.48 bit と 一見減少 して見えます。 これを額面どおり読むと「小規模県の人口が他階層へ移動し、 分布の『ばらけ』がわずかに減った(同質化)」という解釈になります。 統計的有意性を語るには各年内のサンプリングを考慮する必要があります。

📝 より正確な分析:このコードは year_idx = groupby('Prefecture').cumcount() で年インデックスを振っていますが、 SSDSE-B-2026 は各県のレコードが 2023 → 2012 の降順で格納されています。 そのためラベル「2011」は実際の 2023 年、 ラベル「2022」は実際の 2012 年に対応します(コード内コメント「仮の起点」が示すとおり、 起点は暫定値)。 実際の暦年順に並べ直すと、 47 県人口階層エントロピーは 2012 年の約 1.477 bit から 2023 年の約 1.509 bit へ緩やかに増加しています。 つまり実データが示す傾向は「同質化」ではなく、 むしろ人口規模分布が多様化(一様分布に近づく方向)しているということです。 出力が減少に見えるのは、 ラベルの向きが暦年と逆になっているためです。

🧮 手計算で身につけるエントロピー

情報エントロピーは数式が短いため、 手計算で 2-5 個の例を回しておくと感覚が一気に固まる。 ここでは確率分布の典型 6 種類について、 H を bit 単位で電卓レベルの粒度で求め、 値の意味を解釈する。

例 1:公平なコイン(p = 0.5, 0.5)

H = -(0.5 log2 0.5 + 0.5 log2 0.5) = -(0.5 × -1 + 0.5 × -1) = 1.0 bit。 つまり「裏か表か」を当てるのに 1 bit の情報が必要。 これは「bit」という単位の原点であり、 すべての離散情報量はこれを基準に解釈できる。 公平なコインは「最大の不確実性」を持つ 2 値分布である。

例 2:歪んだコイン(p = 0.9, 0.1)

H = -(0.9 log2 0.9 + 0.1 log2 0.1) = -(0.9 × -0.152 + 0.1 × -3.322) = 0.469 bit。 公平なコインより不確実性が約半分に減る。 これは「ほぼ表が出る」事を予測できる為、 平均的な「驚き」が少ない事を表す。 機械学習でラベル分布が偏っているクラス不均衡データは、 まさにこの低エントロピー状態であり、 単純な多数派予測でも高い精度が出てしまう。

例 3:公平なサイコロ(p_i = 1/6 × 6)

H = -6 × (1/6) × log2(1/6) = log2(6) ≈ 2.585 bit。 6 つの面が完全に等確率な場合、 不確実性は log2(6) で約 2.585 bit。 これは「サイコロを 1 回振った結果を符号化するのに平均 2.585 bit 必要」と読める。 2 個振りなら独立加法性より 2 × 2.585 = 5.170 bit、 これは log2(36) と一致。

例 4:3 値分布(p = 0.7, 0.2, 0.1)

H = -(0.7 log2 0.7 + 0.2 log2 0.2 + 0.1 log2 0.1) = -(0.7 × -0.515 + 0.2 × -2.322 + 0.1 × -3.322) = 0.361 + 0.464 + 0.332 = 1.157 bit。 上限 log2(3) ≈ 1.585 bit に対して 0.43 bit 低い。 多クラス分類の典型的な偏りパターン。

例 5:4 値一様(p_i = 0.25 × 4)

H = log2(4) = 2.0 bit。 4 つの選択肢が等確率なら 2 bit でちょうど符号化できる。 これは「2 桁の 2 進数で 1 つを指す」と等価である。

例 6:8 値高度偏在(p = 0.5, 0.25, 0.125, 0.0625, 0.03125, 0.015625, 0.0078125, 0.0078125)

指数的に減衰する確率の場合、 H ≈ 1.992 bit。 上限 log2(8) = 3.0 bit より大きく下回る。 この分布は Huffman 符号化で「最頻記号に 1 bit、 次に 2 bit、 ……」と割り当てられ、 平均符号長 ≈ H となる。 Shannon の情報源符号化定理が示す通り、 平均符号長は H を下回らないが、 適切な符号化で H に近づける。

確率分布H (bit)上限偏り
公平コイン0.5, 0.51.0001.0000.000
歪みコイン0.9, 0.10.4691.0000.531
公平サイコロ1/6 × 62.5852.5850.000
3 値偏在0.7, 0.2, 0.11.1571.5850.428
4 値一様0.25 × 42.0002.0000.000
8 値指数2^-k 系列1.9923.0001.008

🧮 数式に値を入れて手で計算する: シャノンエントロピー H(p)

合成データで偏ったコインと公平コインのエントロピーを計算する。

Step 1: 確率分布

公平: p=[0.5, 0.5] 偏り: p=[0.9, 0.1] ほぼ確実: p=[0.99, 0.01]

Step 2: H = -Σ p log₂ p

公平: -2·0.5·log 0.5 = log 2 = 1.000 bit (最大) 偏り: -(0.9·log 0.9 + 0.1·log 0.1) = -(-0.137 + -0.332) = 0.469 bit 確実: H ≈ 0.081 bit

🐍 Python で再現

1
2
3
4
5
6
import numpy as np
def H(p):
    return -(np.array(p) * np.log2(p)).sum()
print(f"公平: {H([0.5, 0.5]):.3f} bit")
print(f"偏り: {H([0.9, 0.1]):.3f} bit")
print(f"確実: {H([0.99, 0.01]):.3f} bit")

📤 実行結果

公平: 1.000 bit 偏り: 0.469 bit 確実: 0.081 bit

💬 手計算 (Step 2) と Python 出力が完全一致。 確率が偏るほど H 減少。

🐍 Python 実装

scikit-learn / pandas を使った最小実装パターン。 上の SSDSE-B 計算と同じスタイルですが、 ここでは「読み込み→前処理→学習→評価」のテンプレを 4 つのスニペットに分けます。

① データ読み込み & 概観

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 SSDSE-B-2026(年度) 北海道 2,023 東京都 2,023 沖縄県 2,023 …(全 47 行)
1
2
3
4
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df = df[df['年度'] == 2023].reset_index(drop=True)
print(df.shape, df.columns.tolist()[:8])

② 特徴量と目的変数

1
2
3
X = df[['総人口','65歳以上人口']].values
y = df['15歳未満人口'].values
print('X shape =', X.shape, ',  y shape =', y.shape)

③ 訓練/テスト分割 + モデル学習

1
2
3
4
5
6
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor

X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0)
model = RandomForestRegressor(n_estimators=300, random_state=0).fit(X_tr, y_tr)
print('R^2 (test) =', model.score(X_te, y_te))

④ 評価と可視化

1
2
3
4
5
6
import matplotlib.pyplot as plt
pred = model.predict(X_te)
plt.scatter(y_te, pred)
plt.plot([y_te.min(), y_te.max()], [y_te.min(), y_te.max()], 'r--')
plt.xlabel('実測'); plt.ylabel('予測'); plt.title('「情報エントロピー」関連モデルの予測精度')
plt.tight_layout(); plt.savefig('out.png', dpi=150)

※ 「情報エントロピー」固有の本格コードは上の 🧮 SSDSE-B 実値計算 節を参照。

🐍 応用コード — エントロピーで特徴量をランキング

SSDSE-B の各列について、 「3 区分にしたとき、 ターゲット(少子化指標など)に対する情報量がどれだけあるか」を相互情報量で測ります。 これは決定木が無意識にやっていることを、 1 列ずつ手動でやる作業に相当します。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 SSDSE-B-2026(年度) A4103(合計特殊出生率) 北海道 2,023 1.06 東京都 2,023 0.99 沖縄県 2,023 1.6 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
import numpy as np
from sklearn.feature_selection import mutual_info_classif

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df = df[df['年度'] == 2023].reset_index(drop=True)

# ターゲット:合計特殊出生率の高低 2 値
df['出生率高低'] = (df['合計特殊出生率'] > df['合計特殊出生率'].median()).astype(int)
y = df['出生率高低'].values

# 数値列だけ抽出
num_cols = df.select_dtypes(include=[np.number]).columns
num_cols = [c for c in num_cols if c not in ['年度', '出生率高低']]
X = df[num_cols].fillna(0).values

# 相互情報量で各列のスコア算出
mi = mutual_info_classif(X, y, discrete_features=False, random_state=0)

rank = pd.DataFrame({'列': num_cols, '相互情報量': mi}).sort_values('相互情報量', ascending=False)
print(rank.head(10))

出力例(2023 年・random_state=0):合計特殊出生率の高低と情報を共有する列の上位は下表の通り。 死亡数(女)や標準価格(商業地)など「都市化・人口動態」を映す列が並び、 これはピアソン相関では捉えにくい非線形関係も拾います。 ただし 47 県という小標本では MI 推定にノイズが乗り、 中学校数のように人口規模の代理でしかない列も上位に紛れ込むため、 ランキングは目安として扱うのが安全です。

列(コード)相互情報量 (推定)解釈
死亡数(女)(A420002)0.29人口動態・高齢化と連動
中学校数 (E3101)0.29人口規模の代理(要注意)
標準価格・商業地 (C5403)0.27都市化・地価の影響
一般旅券発行件数 (G5105)0.25都市・所得水準の代理

🐍 実装ライブラリの比較

エントロピー計算は「自前 numpy」「scipy.stats.entropy」「sklearn の関数」など複数の選択肢があります。 用途で使い分けを。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import numpy as np
from scipy.stats import entropy as scipy_entropy
from sklearn.metrics import mutual_info_score

p = np.array([0.5, 0.3, 0.2])

# 1) 自前
H1 = -np.sum(p * np.log2(p))

# 2) scipy(底を指定可能)
H2 = scipy_entropy(p, base=2)

# 3) sklearn(経験分布から自動)
labels = ['a']*50 + ['b']*30 + ['c']*20
labels2 = labels[:]  # 完全に同じ → 相互情報量は H(X)
H3 = mutual_info_score(labels, labels2) / np.log(2)  # nats → bits

print(H1, H2, H3)
ライブラリ利点注意
自前 numpy透明・教育向き$p=0$ で nan、 自前で処理が必要
scipy.stats.entropy底を base=2 で切替、 KL ダイバージェンスも同関数入力は確率(正規化)
sklearn.metricsラベル直接 OK、 大規模に最適化単位が nats(ln 基準)

🐍 ミニコードスニペット集(再利用しやすい形)

スニペット ①:1 行でエントロピーを bit 単位で取る

🎯 やること:確率分布から bit 単位のエントロピーを 1 行で。

1
2
from scipy.stats import entropy
H = entropy([0.5, 0.3, 0.2], base=2)  # 1.485 bit

📤 出力: 1.4854752972273344   💬 3 階層分布で約 1.49 bit。 一様 3 階層 (log2 3 = 1.585) より少しだけ小さい。

スニペット ②:sklearn で MI(離散)

🎯 やること:分類目的変数と特徴量との MI ベクトルを取得。

1
2
from sklearn.feature_selection import mutual_info_classif
mi = mutual_info_classif(X, y, random_state=42)

📤 出力: ndarray (n_features,)   💬 値が大きい特徴量を残すと良い予測になる。

スニペット ③:交差エントロピー損失(pytorch)

🎯 やること:分類モデル学習で標準的に使う損失。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import torch

# 3 クラス分類で 4 件ぶんのスコアと正解ラベルを用意する
logits = torch.tensor([[2.0, 0.5, 0.1], [0.2, 1.8, 0.3],
                       [0.1, 0.2, 2.5], [1.2, 1.0, 0.9]])
labels = torch.tensor([0, 1, 2, 0])

import torch.nn as nn
loss_fn = nn.CrossEntropyLoss()
loss = loss_fn(logits, labels)  # logits: (N,C), labels: (N,)

📤 出力: tensor(0.83)   💬 0 に近づくほど分類が正確。 教師ラベルが one-hot でなく整数で渡せる。

スニペット ④:パープレキシティの計算

🎯 やること:言語モデルの perplexity を交差エントロピーから算出。

1
2
3
4
5
6
7
import math

# 交差エントロピー損失(自然対数)の値。ここでは学習後の一例として 0.45 を使う
cross_entropy_loss = 0.45
ppl = math.exp(cross_entropy_loss)  # 自然対数で学習した場合
print(f'交差エントロピー = {cross_entropy_loss}')
print(f'Perplexity = {ppl:.3f}')

📤 出力: 2.29 (cross entropy=0.83 の場合)   💬 「平均 2.29 択クイズに直面している」のに等しい。 小さい程モデルが言語を理解。

🖼 図で掴む情報エントロピー

情報エントロピーは抽象的な量だが、 実データに当てると一気に体感できる。 ここでは SSDSE-B-2026 を題材に 3 種類の図を提示し、 「分布の形」と「エントロピー値」の対応関係を視覚的に整理する。 散布図・ヒストグラム・箱ひげ図は、 それぞれエントロピーの異なる側面を映し出す道具立てとして覚えておきたい。

図 1:分布の偏りと不確実性(散布図でみる)

下の散布図は、 都道府県を「人口対数」と「着工建築物床面積対数」の 2 軸で並べたものである。 もし日本中のすべての県が同じ人口・同じ経済活動規模なら、 点は 1 点に集中し、 県の「どこか」を当てる問いの情報エントロピーは 0 になる。 実際は東京・神奈川と地方県が大きく離れており、 県名の事前分布(人口加重)は不均一で、 エントロピーが約 4.98 bit に収まる(一様分布 47 県なら log2(47)=5.55 bit)。 つまり「ほぼ一様だが、 東京・大阪・神奈川など巨大県の存在で 0.57 bit だけ情報が漏れている」と読める。

人口と着工建築物床面積の散布図

図 1: SSDSE-B-2026 に基づく、 人口対数 × 着工建築物床面積対数の散布図。 点の散らばり方が「県を当てるクイズ」の難易度(=エントロピー)を視覚的に表現する。

図 2:階級別の頻度とエントロピー(ヒストグラム)

ヒストグラムは「分布が何峰か」「左右どちらに偏っているか」を示す。 都道府県の人口を 10 階級に区切ると、 第 1 階級(小規模県)に多くの県が密集し、 巨大県は右端に細い尾を引く。 階級ごとの相対頻度 p_i から H = -Σ p_i log2(p_i) を計算すると、 およそ 1.90 bit となる(理論上限 log2(10)=3.32 bit)。 ヒストグラムの形が右に裾を引くほど、 エントロピーは上限より低くなる(情報が偏っている)。

人口階級のヒストグラム

図 2: 47 都道府県の人口を 10 階級(等幅)に区切ったヒストグラム。 第 1 階級に集中するためエントロピーは上限値より約 1.42 bit 小さい。

図 3:群間比較とエントロピー(箱ひげ図)

箱ひげ図は地方ブロック(北海道・東北・関東・中部・近畿・中国・四国・九州沖縄)で「人口の散らばり」が異なることを示す。 群ごとに値を離散化してエントロピーを計算すると、 関東は東京・神奈川・千葉・埼玉が突出して H≈1.45 bit と低い(偏在)。 一方、 中部・近畿は H≈2.10 bit と高い(多様)。 エントロピーの群間比較は、 単なる平均比較では見えない「県内の均質性」を可視化する手段になる。

地方ブロック別の人口箱ひげ図

図 3: 地方ブロック別の人口分布。 箱ひげ図の幅とエントロピー値がほぼ比例して動く。

🐍 SSDSE-B-2026 を用いた Python 実装(実務寄り)

ここでは scipy/pandas を組み合わせ、 都道府県データのエントロピーを実用的に計算する。 「データ読み込み → 階級化 → エントロピー算出 → 解釈」の流れを 1 つのコードブロックで完結させる。

このコードでやること:SSDSE-B-2026 から県別人口を読み、 10 階級に離散化して情報エントロピーを bit 単位で計算し、 一様分布と比較する。

📥 入力データ(SSDSE-B-2026 の冒頭):

Code Prefecture A1101(総人口) C3302(着工建築物床面積) R01000 北海道 5092000 3811486 R02000 青森県 1184000 809602 R03000 岩手県 1163000 1185835 R04000 宮城県 2264000 2072530 ...(47 行続く、 単位: 床面積は m²)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import pandas as pd
import numpy as np
from scipy.stats import entropy

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
pop = df[df['SSDSE-B-2026'] == 2023]['A1101'].dropna()

# 10 階級に等幅区切り
counts, bins = np.histogram(pop, bins=10)
probs = counts / counts.sum()

# scipy.stats.entropy は底=e なので log(2) で割って bit に
H_bit = entropy(probs) / np.log(2)
H_max = np.log2(10)
print(f'H = {H_bit:.3f} bit, 上限 = {H_max:.3f} bit, 偏り {H_max - H_bit:.3f} bit')

📤 実行例:

H = 1.897 bit, 上限 = 3.322 bit, 偏り 1.425 bit

💬 結果の読み方:上限 3.322 bit に対して実測 1.897 bit。 1.425 bit の差は「最頻階級(小規模県)に集中している分の情報減」。 つまり「県を 1 つ無作為抽出した時、 実効 4 つ程度の階級候補で済む」と直感的に解釈できる(2^1.897 ≈ 3.72)。

2 変数の同時エントロピーと相互情報量

このコードでやること:人口(A1101)と着工建築物床面積(C3302)の同時エントロピー H(X,Y) と相互情報量 I(X;Y) を SSDSE-B-2026 から推定。 「2 変数の関係性が情報量として何 bit か」を測る。

📥 入力データ(離散化後の同時頻度の一部):

床面積_1 床面積_2 床面積_3 ... 床面積_10 人口_1 28 4 0 ... 0 人口_2 3 5 1 ... 0 人口_3 0 2 1 ... 0 ... 人口_10 0 0 0 ... 1
1
2
3
4
5
6
7
8
9
10
from sklearn.metrics import mutual_info_score

d = df[df['SSDSE-B-2026'] == 2023]
pop_bin = pd.cut(d['A1101'], bins=10, labels=False)
flr_bin = pd.cut(d['C3302'], bins=10, labels=False)

# mutual_info_score の単位は nat。 bit にするため log(2) で割る
mi_nat = mutual_info_score(pop_bin, flr_bin)
mi_bit = mi_nat / np.log(2)
print(f'I(人口;着工建築物床面積) = {mi_bit:.3f} bit')

📤 実行例:

I(人口;着工建築物床面積) = 1.496 bit

💬 結果の読み方:相互情報量 1.496 bit は「着工建築物床面積を知ると、 県の人口階級についての不確実性が平均 1.496 bit 減る」事を示す。 単独の H(人口) ≈ 1.897 bit に対して約 79% を占めるので、 「着工建築物床面積は人口階級のほぼ全てを語ってくれる」と読める。 これは対数変換後の Pearson 相関 0.984 と整合する強い関連。

🛠 情報エントロピーの応用領域

情報エントロピーは「不確実性」を扱う場面で広範に登場する。 ここでは統計・機械学習・物理・通信の 4 分野から代表的応用を整理する。 用語が共通でも応用文脈ごとに意図が異なるため、 状況に応じて「何の不確実性を測っているか」を確認する事が重要である。

分野応用例エントロピーが測っているもの
機械学習決定木の情報利得分岐前後でラベルの不確実性が何 bit 減るか
機械学習交差エントロピー損失予測分布と真の分布の差を bit で表した「驚き」
機械学習変分推論(KL 最小化)近似分布と真の事後分布の隔たり
統計最大エントロピー推定制約条件下で「最も無情報」な分布を選ぶ
通信Huffman 符号化記号の出現頻度から最適な符号長を割り当て
通信通信路容量(Shannon の定理)雑音下で送信できる情報量の上限
物理熱力学的エントロピー巨視状態に対応する微視状態の数の log
生態学Shannon-Wiener 指数群集中の種の多様性
セキュリティパスワードのエントロピー総当たり攻撃で必要な試行回数の log2

特に決定木における情報利得は、 機械学習で最も身近な情報エントロピーの応用である。 親ノードのエントロピー H_parent から、 分割後の子ノードの加重平均エントロピー H_children を引いた差 IG = H_parent - H_children が情報利得である。 IG が最大の分割を選ぶ事で、 ラベルの不確実性が最も大きく減る軸が選ばれる。

⚠️ よくある落とし穴(5 つ)

❌ 対数の底を混同
log2 だと bit、 ln だと nats、 log10 だと dits。 公式や別ライブラリと比較するとき必ず底を確認する。
❌ 0確率を $0\log 0=0$ と書き忘れる
実装上は np.where(p>0, p*np.log2(p), 0) または scipy.stats.entropy を使うと安全。
❌ 連続値に直接適用
連続変数は微分エントロピーになり、 単位(スケール変化で値が変わる)に注意。 通常はビン分割してから計算する。
❌ サンプル数が少ないと過小評価
観測されない事象は p=0 として扱われ、 エントロピーが本来より小さく出る。 Miller-Madow補正・Bayes 推定など。
❌ ラベル数が違う指標の単純比較
$H$ はラベル数 $n$ が増えれば伸びる。 公平に比べたいときは $H/\log_2 n$ で正規化する。

⚠️ さらなる落とし穴 — 実務でよく遭遇するパターン

❌ カテゴリ数が多い列が常に勝ってしまう
エントロピーを情報利得に使うと、 値の種類が多い列(例:個人ID)が常に最高利得になるバイアスがある。 C4.5 では「Gain Ratio」(利得を分岐の情報量で割る)で補正する。
❌ ビンの取り方で値が大きく変わる
連続値を qcutcut どちらで切るか、 ビン数をいくつにするかでエントロピーは大きく変動する。 報告時はビン化方法を明示する。
❌ 「情報量が大きい=重要な特徴」と短絡
相互情報量が高くても、 因果ではなく交絡が原因のこともある。 散布図や領域知識と組み合わせて解釈する。
❌ 訓練データで計算したエントロピーをテストに流用
エントロピー=確率の関数。 訓練分布とテスト分布が異なる(共変量シフト)と、 利得計算も歪む。 cross-validation 内で都度計算する。
❌ 「エントロピーが 0 =モデルが完璧」の誤解
$H=0$ は「分割後のラベルが純粋」を意味するだけで、 過学習の典型サイン。 訓練エントロピー 0、 テスト精度大幅低下というのが定石パターン。

⚠️ 拡張:実務で本当によくある落とし穴 10 選

  1. log の底を混在:scipy はデフォルト ln、 教科書は $\log_2$。 比較する数値は必ず単位を揃える。
  2. 0 確率にゼロ除算:$0 \log 0 = 0$ とする規約だが、 コードでは + 1e-12 等を入れないと NaN になる。
  3. 連続変数を離散ビン化せず使用:scipy.stats.entropy は確率質量関数を期待。 連続変数は KDE か k-NN 推定が必要。
  4. サンプル不足での過大評価:n が小さいとエントロピーが過小に偏る。 Miller-Madow バイアス補正を検討。
  5. KL の非対称性を忘れる:$D_{KL}(P\|Q) \neq D_{KL}(Q\|P)$。 「P を真、 Q を仮説」と方向性を意識。
  6. クロスエントロピーとエントロピーの混同:$H(P,Q) = H(P) + D_{KL}(P\|Q)$。 ML 損失は通常クロスエントロピー。
  7. min-max 正規化忘れ:複数指標を比較する際は NMI / 正規化エントロピー を使う。
  8. カテゴリ過多で MI が膨らむ:47 カテゴリを目的変数にすると H(Y) が大きく、 MI も上がりやすい。
  9. 欠損値を 0 扱い:欠損は分布を歪める。 dropna してから確率化する。
  10. サンプリングバイアス:母集団でなく偏った標本で計算すると、 結論が逆転する。

📝 試験・面接で出やすい質問 10 選

  1. Q: $H(X)$ の単位は? A: log の底による。 $\log_2$ で bit、 $\ln$ で nat、 $\log_{10}$ で ban。
  2. Q: H の最大値は? A: 一様分布のとき $\log n$。 n=2 なら 1 bit、 n=4 なら 2 bit。
  3. Q: 相互情報量と相関係数の違いは? A: MI は非線形依存も捉える。 相関は線形のみ。
  4. Q: KL ダイバージェンスは距離ですか? A: いいえ、 非対称・三角不等式不成立。 擬似距離と呼ぶ。
  5. Q: クロスエントロピー損失と最尤推定の関係は? A: 同等。 -log p の和を最小化=尤度最大化。
  6. Q: 決定木の分岐基準 gini と IG の違いは? A: gini は計算が軽い。 IG は理論的に意味が明確。 結果はほぼ同じ。
  7. Q: パープレキシティとは? A: $2^H$。 言語モデルが平均何択クイズを解くかの目安。
  8. Q: VAE の損失の中の KL 項は何を意味する? A: 推論分布を事前分布に近づける正則化。
  9. Q: 情報ボトルネックの主張は? A: DL は「情報を圧縮しつつタスクに必要な情報は保持する」と解釈。
  10. Q: 観測なしと観測ありで H(X|Y) はどちらが大きい? A: 観測なし (H(X))の方が大きい。 観測で不確実性が減る。

⚠️ よくある誤解と対処

情報エントロピーは「直感とのギャップ」が大きい量であり、 学習初期に陥りやすい誤解がいくつかある。 ここでは典型的な 6 つを整理し、 それぞれに対する正しい理解と対処法を示す。

誤解正しい理解対処法
エントロピー = 無秩序の度合い数式上は「予測のしづらさ」「平均情報量」。 物理の文脈以外で無秩序と言うとミスリード「平均ビット数で言うと?」と聞き返す習慣を付ける
H が大きいほど良い用途次第。 ラベル分布の H は機械学習では「分類が難しい」を示し、 むしろ低い方が嬉しい場面が多い「何の不確実性か」を明示してから議論する
連続変数にもそのまま使える連続変数は微分エントロピーとなり、 負の値も取り得る。 離散とは性質が異なる離散化(ビン分け)してから使う、 または KDE 経由で推定
小標本でも正確に推定できるサンプル数 n が小さいと、 経験分布が真の分布から大きく外れるため H 推定値も歪むMiller-Madow 補正・jackknife 推定を併用
底(log2 / ln / log10)を変えても本質は変わる数値が定数倍されるだけで、 構造は不変。 ただし単位(bit/nat/dit)は変わる論文・コードで底を確認、 単位を明記する
p_i = 0 の項は無視できないと数式が破綻する慣習として 0 log 0 = 0 と定める。 lim_{p→0} p log p = 0 が極限で成立するscipy.stats.entropy は自動処理。 自前実装ならゼロ判定を入れる

🕰 情報理論の系譜

情報エントロピーは Shannon の 1948 年の論文「A Mathematical Theory of Communication」に始まる。 ただしその祖型は熱力学のエントロピー(Clausius 1865、 Boltzmann 1877)にまで遡り、 統計力学と通信理論が同じ数式で記述される事を示した Shannon の業績は「20 世紀最大の学問的橋渡し」の一つと評される。

人物出来事
1865Clausius熱力学第二法則の中で「entropy(変容能)」を命名
1877BoltzmannS = k log W の関係式を提示、 巨視と微視を繋ぐ
1928Hartley対数尺度で情報量を測る前駆的アイデア
1948Shannon情報エントロピー H = -Σ p log p を導入、 情報理論を創始
1951Kullback-Leibler2 分布の隔たりを測る KL ダイバージェンスを定義
1957Jaynes最大エントロピー原理を統計推論に持ち込む
1961RényiShannon エントロピーの一般化(Rényi エントロピー)を提案
1986Quinlan決定木 ID3 で情報利得を機械学習に応用
2010s-Deep Learning交差エントロピー損失が分類モデルの標準損失関数に定着

Shannon が情報の単位を「bit」と命名した事も含め、 この系譜は現代の機械学習・暗号・通信のすべてを支えている。 情報エントロピーを学ぶ事は、 単なる 1 つの量を覚える事ではなく、 「不確実性を数値化する 80 年の歴史」を継承する事である。

🧠 理解度チェック

以下の問いに「自分の言葉で」答えられるか確認しよう。 全問即答できれば、 情報エントロピーの実務的な使い方が身についていると判断できる。

基本理解

  1. 情報エントロピーの数式 H = -Σ p_i log2 p_i において、 マイナス記号が必要な理由を 1 文で説明できる。
  2. 確率 p_i が 0 または 1 の時、 H = 0 になる理由を直感的に説明できる。
  3. n 個の事象で H が最大化される条件は何か、 その時の H の値はいくつか。
  4. 底を 2 / e / 10 と変えた時、 単位はそれぞれ何と呼ばれるか。

SSDSE-B-2026 を用いた応用

  1. 47 都道府県を一様に選ぶ時のエントロピーは何 bit か。 計算で確認せよ。
  2. 都道府県の人口階級(10 段階)のエントロピーが上限値より低くなる理由を、 散布図の「点の集中」と関連付けて述べよ。
  3. 「人口」と「着工建築物床面積」の相互情報量が大きい場合、 一方を知る事で他方の不確実性はどう変化するか。
  4. 高齢化率のエントロピーが人口より高い事実は、 「県を当てる予測」にとってどう解釈できるか。

機械学習との接続

  1. 決定木 ID3 における情報利得 IG = H_parent - H_children の意味を、 「分割の質」と結び付けて説明できる。
  2. 交差エントロピー損失が分類モデルでよく使われる理由を、 「予測分布の自信」と「真のラベル」の観点で述べよ。
  3. KL ダイバージェンスとエントロピーの関係を式 D_KL(p||q) = -Σ p log(q/p) から導出できる。
  4. パープレキシティが exp(H) として定義される理由を、 「平均何択クイズに直面しているか」の観点で説明できる。

よくある誤解の検証

  1. 「エントロピーが高い分布ほど良い」という言説が誤りである場面を 1 つ挙げよ。
  2. 連続変数に対する微分エントロピーが負値を取り得る事実を、 一様分布 U(0, 0.5) で確認せよ。
  3. 小標本(n=10)でエントロピー推定が偏る理由と、 補正手法(Miller-Madow など)の必要性を述べよ。

実装課題

  1. SSDSE-B-2026 の「高齢化率(A1303/A1101)」を 5 階級に分けた時のエントロピーを scipy.stats.entropy で求めよ。
  2. 同じ変数を 10 階級に分けた時、 エントロピーは増加するか減少するか。 理由を述べよ。
  3. 2 変数(人口・着工建築物床面積)の同時エントロピーから相互情報量を求める手順を、 コードで記述せよ。
  4. 決定木の情報利得を、 簡単な 2x2 テーブルから手計算で導く例を 1 つ構成せよ。
  5. 交差エントロピー損失を、 多クラス分類モデルの softmax 出力に対して numpy で実装せよ。

これらの問いに自信を持って答えられない箇所が見つかれば、 上記の「情報エントロピーが満たす 5 つの性質」「SSDSE-B-2026 で計算するエントロピー早見表」「他の不確実性指標との比較」へ戻って復習する事を勧める。 特に SSDSE-B-2026 の人口・着工建築物床面積・高齢化率の数値感は、 機械学習で実データを扱う時の「感度」を養う材料として最適である。

⚠️ 実装時の追加注意点

1. ヒストグラム化の bin 数依存性

連続変数を離散化してエントロピーを推定する時、 bin の数によって H 値が大きく変わる。 bin が多すぎると各 bin に少ないサンプルしか入らず、 経験分布が真の分布から乖離して H が過大評価される。 bin が少なすぎると粒度が荒くなり、 H が過小評価される。 経験則として bin = √n または Sturges の公式(k = log2(n)+1)が無難。

2. 小標本バイアス(Miller-Madow 補正)

サンプル数 n が小さい時、 経験分布で計算した H_hat はバイアスを持ち、 真の H より小さくなる(H_hat - H ≈ -(K-1)/(2n)、 K は記号数)。 これを補正するのが Miller-Madow 推定量:H_corrected = H_hat + (K-1)/(2n)。 n < 100 で K が大きい時には必須。

3. log の数値安定化

交差エントロピー損失の実装で、 予測確率 q が 0 に近い時に log(q) が -∞ に発散する。 これを防ぐため、 q を [epsilon, 1-epsilon] にクリップ(epsilon = 1e-7 等)する。 また、 softmax 後に log を取るより、 log_softmax を直接計算する方が数値的に安定(log-sum-exp トリック)。

4. KL ダイバージェンスの非対称性

D_KL(p || q) ≠ D_KL(q || p) で、 引数の順序を間違えると別の量を計算する。 機械学習で「真分布 p に予測 q を近づける」場合は通常 D_KL(p || q) を使う。 GAN の文脈で「モード崩壊」が起きるのは、 順序が D_KL(q || p) の場合で、 q が p の一部のモードにだけ集中する事を許容するため。 順序を明示する習慣を付ける。

5. 連続変数の MI 推定の難しさ

2 つの連続変数の相互情報量を直接推定するのは難しい。 ヒストグラム法は bin 数に強く依存、 K 近傍法(Kraskov-Stögbauer-Grassberger 推定)の方が安定だが計算コスト高。 sklearn の mutual_info_regression は KSG 推定を実装している。 高次元では推定誤差が大きく、 サンプル数を増やす必要がある(実用上 n ≥ 1000 程度)。

6. エントロピーと「重要度」の混同

「エントロピーが大きい変数は重要」「相互情報量が大きい変数は予測に効く」は文脈次第。 特徴量選択では確かに MI 高 = 予測に有用だが、 ラベル分布のエントロピーが大きい事はモデルの良し悪しと無関係。 「何の量に対する不確実性か」「予測対象とどう繋がるか」を毎回確認する。

🌡 統計力学とのつながり

情報エントロピーは熱力学のエントロピーと数式的に同一の形を持つ。 1948 年に Shannon が情報量の単位として H = -Σ p log p を提案した時、 von Neumann が「これは Boltzmann のエントロピーと同じだから、 エントロピーと呼ぶといい」と助言した逸話は有名である。 ここでは両者の繋がりを具体的に示し、 「情報」と「熱」が同じ言語で記述できる事実を確認する。

Boltzmann のエントロピー

巨視状態(マクロ)に対応する微視状態(ミクロ)の数を W とすると、 Boltzmann のエントロピーは S = k_B log W(k_B はボルツマン定数)。 これは「巨視状態が決まっている時、 微視状態の不確実性」を測っている。 W = 1(微視状態が 1 通りに決まる絶対零度の完全結晶)で S = 0、 W が大きい高エネルギー状態で S が大きい。

Gibbs のエントロピー

微視状態 i の確率を p_i とする時、 Gibbs のエントロピーは S = -k_B Σ p_i log p_i。 これは Shannon のエントロピーと係数 k_B / log(2) の違いだけで、 数式的に同一である。 つまり「情報の不確実性 1 bit」と「熱の不確実性 k_B log 2 J/K」は同じ概念を異なる単位で表したものに過ぎない。

Maxwell の悪魔と Landauer の原理

「分子を選別して熱力学第二法則を破る」Maxwell の悪魔の思考実験は、 情報処理と熱力学の関係を浮き彫りにした。 Landauer (1961) は「1 bit の情報を消去するには、 最低 k_B T log 2 J の熱エネルギーが放出される」事を示した(Landauer 原理)。 これにより、 「情報の消去 = 熱の発生」という対応が確立し、 情報処理がエネルギーを消費する物理的根拠が与えられた。

Shannon 情報理論統計力学
記号の確率 p_i微視状態 i の確率 p_i
H = -Σ p log2 p (bit)S = -k_B Σ p log p (J/K)
最大エントロピー(一様分布)平衡状態(最大エントロピー)
情報源符号化定理熱力学第二法則(S 増大則)
通信路容量 CCarnot 効率の限界
1 bit 消去のコストk_B T log 2 J(Landauer)

この対応関係は単なる形式的類似ではなく、 「情報処理は熱力学的過程である」という深い意味を持つ。 量子コンピュータの可逆ゲート設計、 低消費電力 CPU の理論限界、 ブラックホールの情報パラドックス、 すべてこの Shannon-Boltzmann 対応の延長線上で議論される。

🤖 現代の深層学習における情報エントロピー

情報エントロピーは深層学習の理論と実装に深く埋め込まれている。 「Information Bottleneck 理論」「Mutual Information Neural Estimator (MINE)」「Disentanglement 評価」「Self-supervised Learning」など、 2020 年代の最先端研究にも頻繁に登場する。

Information Bottleneck(Tishby et al., 1999, 2017)

「入力 X と表現 T の相互情報量 I(X; T) を最小化しつつ、 表現 T と出力 Y の相互情報量 I(T; Y) を最大化する」のが Information Bottleneck の原理。 つまり「無駄な情報は捨てつつ、 予測に必要な情報は保持する」表現を学ぶ。 Tishby (2017) は「深層学習の学習過程は IB の最適化として理解できる」と主張し、 大きな議論を呼んだ。

MINE:Mutual Information Neural Estimator

高次元データの相互情報量を直接推定するのは困難だが、 ニューラルネットで I(X; Y) の下限(Donsker-Varadhan 表現)を学習する手法が MINE (Belghazi et al., 2018)。 GAN・VAE・表現学習の正則化項として広く採用され、 「2 つの表現が独立か」「冗長か」を学習中に評価できるようになった。

対照学習(Contrastive Learning)

SimCLR・MoCo・CLIP などの自己教師あり学習は、 InfoNCE 損失(相互情報量の下限)を最大化する形で動作する。 「同じ画像の異なる拡張版は近く、 異なる画像は遠く」という対照損失は、 数式的には I(view_1; view_2) の最大化と等価。 これにより、 ラベル無しデータから「内容に関する情報」を抽出する事ができる。

Disentanglement 評価

VAE 系の表現学習で「各次元が独立な意味を持つか」を評価する指標として、 各潜在次元と生成要因の相互情報量(Mutual Information Gap, MIG)が使われる。 1 つの潜在次元が 1 つの生成要因だけと高い MI を持つほど良い disentanglement。 これは情報エントロピーが深層学習の解釈性に直結する例である。

手法情報エントロピーの役割発表年
VAEKL ダイバージェンスを潜在分布の正則化に使用2013
GAN(JS divergence)真分布と生成分布の隔たりを JS で測る2014
Information Bottleneck表現と入出力の MI を制御1999/2017
MINE高次元 MI の neural 推定器2018
SimCLR / MoCoInfoNCE 損失で MI 下限を最大化2020
CLIP画像-文章対の対比学習2021
Diffusion Models逆過程の KL 損失で生成分布を学習2020-

2020 年代の深層学習は「情報エントロピーの応用領域の爆発期」と言える。 表現学習・生成モデル・自己教師あり学習のすべてが、 何らかの形で情報量を最小化または最大化する目的関数を持つ。 この潮流を理解するには、 古典的なエントロピーの定義を確実に押さえた上で、 KL ダイバージェンス・相互情報量・条件付エントロピーの 4 点セットを自在に操れる事が必須である。

🌉 次の学習ステップ

情報エントロピーを身につけた後、 自然な次の学習ステップを段階的に提示する。 各テーマは独立に進められるが、 番号順に進めると認知負荷が低い。

ステップ 1:交差エントロピー損失の実装

PyTorch・TensorFlow で交差エントロピー損失を 1 行で呼び出すのは簡単だが、 自前で numpy 実装してみると理解が深まる。 多クラス分類・二値分類・focal loss(クラス不均衡対応)まで実装すると、 ライブラリの挙動が完全に把握できる。 SSDSE-B-2026 を題材に、 「県を 47 クラスに分類する」モデルを試作するのも良い。

ステップ 2:決定木・ランダムフォレストの分岐基準

scikit-learn の DecisionTreeClassifier で criterion='entropy' を選び、 分岐の挙動を可視化する。 SSDSE-B-2026 の県データで「着工建築物床面積が中央値以上か」を予測する木を作り、 各ノードの情報利得を観察する。 ランダムフォレスト・勾配ブースティングまで進めば、 情報利得の派生形(gain, cover, weight)も理解できる。

ステップ 3:変分推論と KL ダイバージェンス

ベイズ推論で「事後分布が解析的に計算できない時」に変分推論を使う。 近似分布 q(z) と真の事後 p(z|x) の KL を最小化する事で、 q が真の事後に近づく。 これは ELBO(Evidence Lower Bound)の最大化と等価で、 VAE の理論的基礎でもある。 数式から実装まで一通り経験すれば、 ベイズ深層学習の基礎が身につく。

ステップ 4:情報理論と統計力学の橋渡し

Cover & Thomas「Elements of Information Theory」、 Mackay「Information Theory, Inference, and Learning Algorithms」、 Jaynes「Probability Theory: The Logic of Science」など、 古典的教科書を 1 冊通読する。 これらは情報理論を「数学的厳密性 + 物理的直感 + 機械学習との接続」の三位一体で説明し、 単発の用語学習を体系的知識に統合する。

ステップ 5:自分の研究テーマへの応用

最終ステップは「自分の研究や業務で、 不確実性を測る場面に情報エントロピーを適用する」事。 アンケート結果の多様性測定、 ユーザー行動ログのパターン分析、 製造業の品質変動の定量化、 等々、 応用は無限にある。 「ここで H を計算したら何が分かるか?」と問う習慣を付けると、 データ分析の地平が大きく広がる。

📂 業界別ケーススタディ

情報エントロピーは抽象的な量だが、 各産業で具体的な意思決定に直結する。 ここでは 8 つの業界別ケースを紹介し、 「どこで H が計算されているか」「結果がどう使われるか」を整理する。

ケース 1:通信キャリアのネットワーク容量設計

5G 基地局の容量設計では、 Shannon-Hartley の通信路容量 C = B log2(1 + S/N) を用いて、 帯域幅と信号対雑音比から最大スループットを算出する。 MIMO 技術で複数アンテナを使うと容量が並列に伸びる事も情報理論で説明される。 NTT ドコモ・KDDI・ソフトバンクの 5G エリア設計の数式裏付けは、 全て Shannon の通信路符号化定理。

ケース 2:金融の市場効率性測定

株価の時系列を離散化し、 エントロピーを計算する事で「市場の予測可能性」を定量化できる。 効率市場仮説(EMH)が正しければ、 株価リターンの分布は最大エントロピー状態(予測不能)に近づく。 逆にエントロピーが低い時期は「予測可能性が高い」=「裁定機会あり」と解釈でき、 高頻度トレーディングの戦略立案に使われる。

ケース 3:医療診断の検査価値評価

「ある検査が診断にどれだけ情報をもたらすか」を、 検査結果と病気の有無の相互情報量 I(検査; 病気) で定量化できる。 I が大きい検査は診断に強く効くので優先される。 これは「期待情報利得」と呼ばれ、 EBM(Evidence-Based Medicine)の検査選択における意思決定基準として使われる。

ケース 4:自然言語処理の言語モデル評価

言語モデル(GPT-3, BERT, Llama 等)の性能評価には perplexity = 2^H が使われる。 PPL が小さいほどモデルが言語を予測でき、 文章生成の質が高い。 OpenAI・Anthropic・Google・Meta のモデルカードには必ず PPL が掲載されており、 「人間レベル PPL」(約 10-15)に近づく事がモデル開発の目標となっている。

ケース 5:マーケティングの顧客セグメンテーション

顧客の購買履歴を多次元ベクトルとして、 K-means や階層クラスタリングでセグメント化する時、 「セグメント割り当てのエントロピー」をクラスタ品質の指標として使う。 H が低い(純粋なセグメント)ほど良いセグメント、 H が高い(混在セグメント)ほど再分割の余地あり、 と判断する。

ケース 6:製造業の品質管理

生産ラインの欠陥タイプ分布のエントロピーをモニタリングする事で、 「品質問題が特定原因に集中しているか、 ランダムに発生しているか」を識別できる。 H が低ければ特定原因(例:機械 A の異常)、 H が高ければシステミックな問題(複合要因)と推論し、 改善アクションを使い分ける。

ケース 7:交通工学の経路選択

ドライバーの経路選択行動を「複数経路の確率分布」としてモデル化し、 エントロピーで「行動の多様性」を測る。 信号制御・経路案内の最適化において、 ある制御後にドライバー行動のエントロピーがどう変化するかを評価する事で、 「通行の集中度」が定量化される。 渋滞予測・スマートシティ設計に使われる。

ケース 8:生態学の生物多様性測定

Shannon-Wiener 指数 H' = -Σ p_i log p_i は、 生態学で群集の種多様性を測る基本指標。 サンプリングで得られた各種の相対頻度 p_i から H' を計算し、 「保全すべき多様性の高い生息地」を特定する。 環境影響評価(EIA)の必須指標であり、 SDGs の生物多様性目標とも結びつく。

業界エントロピーの使い方意思決定への寄与
通信通信路容量 C = B log2(1+S/N)基地局・帯域設計
金融市場効率性の H 測定アルゴ取引戦略
医療検査の期待情報利得検査選択順序
NLPperplexity = 2^Hモデル性能評価
マーケティングセグメント純度顧客分類精度
製造欠陥分布の H原因分析の方針
交通経路選択の多様性信号制御最適化
生態学Shannon-Wiener 指数保全地選定

これら 8 つのケースは、 情報エントロピーが「分野横断的な共通言語」として機能している好例である。 数式は同じ H = -Σ p log p だが、 解釈と用途は分野ごとに大きく異なる。 自分の業界・研究テーマで「分布の偏りや不確実性を測りたい場面」が出てきたら、 まず情報エントロピーで計算してみる価値がある。

📖 情報理論の用語ミニ辞書

情報エントロピーの周辺で頻出する用語を 1 行で整理した。 各用語をクリックして詳細ページへ進める。

用語1 行説明
情報量 (self-information)単一事象の「驚き」を測る量 I(x) = -log p(x)
エントロピー H(X)確率変数 X の平均情報量、 -Σ p log p
同時エントロピー H(X,Y)2 変数のペアに対する平均情報量
条件付エントロピー H(X|Y)Y を知った後の X の不確実性
相互情報量 I(X;Y)2 変数の依存の強さ、 H(X)-H(X|Y)
交差エントロピー H(p,q)真分布 p と予測 q の隔たり、 -Σ p log q
KL ダイバージェンス D_KL(p||q)分布間の非対称な隔たり
JS ダイバージェンスKL の対称化、 GAN で使用
パープレキシティ PPL2^H、 「平均何択クイズか」を表す
情報利得 IG親-子のエントロピー差、 決定木の分岐基準
ゲイン比IG を分岐の H で正規化、 C4.5 で使用
ジニ係数1-Σp²、 CART の分岐基準(log 不要)
Rényi エントロピーShannon の一般化、 α パラメータで調整可
微分エントロピー連続変数版、 負値も取り得る
情報源符号化定理最適圧縮の下限 = H
通信路符号化定理雑音下でも誤り率任意に小さくできる条件
通信路容量 Cmax_{p(x)} I(X;Y)、 通信の理論上限
Huffman 符号最頻記号に短い符号を割り当てる可逆圧縮
算術符号化記号列を 1 つの実数で表現、 H 限界に漸近
Landauer 原理1 bit 消去に kT log 2 J の熱、 情報と熱の橋

この 20 用語を「数式・意味・代表的応用」の 3 点セットで言えるようになれば、 情報理論の入門は完了している。 さらに先へ進む場合は、 量子情報理論(von Neumann エントロピー、 量子相互情報量)、 アルゴリズム的情報理論(Kolmogorov 複雑性)、 圏論的情報理論など、 数多くの発展領域が広がっている。

🗺 概念マップ上の位置

体系階層のパス:
🌐 機械学習分類決定木分割基準情報エントロピー

情報エントロピーは「情報理論」と「機械学習」を橋渡しする概念。 元々は通信工学(シャノン 1948)の文脈で、 「メッセージを送るのに最低何ビット必要か」という工学的問題から生まれました。 これが 1980 年代に Quinlan によって決定木学習に持ち込まれ(ID3 アルゴリズム)、 以後機械学習の中核ツールになりました。

分野エントロピーの役割
情報理論符号化の理論下限
統計力学系の乱雑さ(ボルツマンエントロピー)
機械学習分割基準・損失関数(クロスエントロピー)
自然言語処理言語モデルの perplexity = $2^H$
画像圧縮JPEG/PNG のハフマン符号
information entropy 情報理論 (Shannon) 交差エントロピー KL ダイバージェンス 情報利得 (決定木) 確率分布 p(x) H = -Σ p log p

🔗 隣接手法への橋渡し

情報エントロピー H(X) = -Σ p log p は、 シャノンが 1948 年に定義した「確率分布の不確実性」の尺度。 機械学習・統計・通信工学・物理学を横断する基本概念。

エントロピーは「平等に近いほど大、 偏りが大きいほど小」。 一様分布 (各 1/k) で最大 log k、 完全分離 (1 つだけ確率 1) で 0。 この性質が決定木の分岐選択や情報理論的損失関数の基礎となる。

🌳 決定木における情報利得の詳細

🌳 決定木における情報利得の詳細

機械学習で情報エントロピーが最も身近に登場する場面が決定木の分岐基準である。 ID3 / C4.5 / CART で使われる「情報利得」「ゲイン比」「ジニ係数」のうち、 前 2 者は完全にエントロピーに依存する。 ここでは SSDSE-B-2026 を題材に、 情報利得の手順を追って確認する。

手順 1:親ノードのエントロピー

47 都道府県を「人口 100 万人以上 / 未満」の 2 値で分類するタスクを考える。 SSDSE-B-2026(2023 年)では 100 万人以上が 37 県、 未満が 10 県。 親ノードのエントロピーは H_parent = -(37/47) log2(37/47) - (10/47) log2(10/47) = 0.272 + 0.475 = 0.747 bit。

手順 2:分割候補の選定

「着工建築物床面積(C3302)が中央値以上 / 未満」で分割すると、 左子ノード(中央値以上、 N=24)は全て 100 万人以上で H_left = 0、 右子ノード(中央値未満、 N=23)は 100 万人以上が 13 県・未満が 10 県で H_right = -(13/23) log2(13/23) - (10/23) log2(10/23) ≈ 0.988 bit(ほぼ完全な不確実性)。

手順 3:加重平均と情報利得

H_children = (24/47) × 0 + (23/47) × 0.988 = 0.483 bit。 情報利得は IG = H_parent - H_children = 0.747 - 0.483 = 0.263 bit。 つまり「着工建築物床面積が中央値以上 / 未満」で分割する事で、 「人口 100 万人以上 / 未満」の不確実性が平均 0.263 bit 減る。

手順 4:分岐候補の比較

分割候補を複数試して IG が最大の軸を選ぶ。 SSDSE-B-2026 の実在列で「一般診療所数(I5102)」「出生数(A4101)」「延べ宿泊者数(G7101)」「高齢化率(A1303/A1101)」の中央値(高齢化率は 30%)で分割すると、 下表の IG が得られる。 ID3 アルゴリズムは「IG 最大の軸で分割 → 各子ノードで再帰」を続け、 IG = 0 または葉条件を満たした時点で停止する。

分割軸左子 H右子 H加重平均情報利得 IG
着工建築物床面積 ≥ 中央値0.0000.9880.4830.263
出生数 ≥ 中央値0.0000.9880.4830.263
一般診療所数 ≥ 中央値0.0000.9880.4830.263
延べ宿泊者数 ≥ 中央値0.2500.9660.6000.147
高齢化率 30% 以上0.8630.0000.6430.104

この表から「着工建築物床面積・出生数・一般診療所数」の中央値分割が IG 最大(0.263 bit)で並ぶ事が分かる。 これらの絶対量指標は巨大県に偏在し、 人口規模とほぼ完全に連動するため、 1 段目の分割に適する。 一方、 延べ宿泊者数や高齢化率は IG が小さく、 単独の予測能力が低い。

🎯 交差エントロピー損失の正体

分類モデルの学習で最頻出の損失関数「交差エントロピー損失」は、 情報エントロピーの自然な拡張である。 真の分布 p と予測分布 q がある時、 H(p, q) = -Σ p(x) log q(x) を交差エントロピーと呼ぶ。 q が p に近いほど H(p, q) は H(p) に近づき、 q が p から離れるほど H(p, q) > H(p) となる。

KL ダイバージェンスとの関係

H(p, q) = H(p) + D_KL(p || q) という分解が成り立つ。 ここで D_KL(p || q) = Σ p(x) log(p(x)/q(x)) は KL ダイバージェンス。 つまり「交差エントロピー = 真分布のエントロピー + 予測の悪さ」と読める。 H(p) はモデル学習中固定なので、 交差エントロピー損失の最小化は実質的に KL ダイバージェンス最小化と等価である。

二値分類における具体形

真ラベル y ∈ {0, 1}、 予測確率 ŷ ∈ (0, 1) の場合、 交差エントロピー損失は L = -[y log ŷ + (1-y) log(1-ŷ)]。 y=1 の時 L = -log ŷ となり、 ŷ が 1 に近いほど L → 0、 ŷ が 0 に近いほど L → ∞。 この「外した時のペナルティが対数で発散する」性質が、 モデルに「自信のある誤答」をさせない動機を与える。

多クラス分類への拡張

K クラス分類で真ラベルが one-hot ベクトル y、 予測が softmax 出力 ŷ の場合、 L = -Σ_k y_k log ŷ_k = -log ŷ_{c}(c は正解クラス)。 つまり「正解クラスの予測確率の負の対数」が損失となる。 これは Shannon の情報量 -log p(c) と完全に一致しており、 損失関数の名前「交差エントロピー」が決して比喩ではない事が分かる。

真の y予測 ŷ交差エントロピー損失解釈
10.990.0145自信を持って正解、 ペナルティ最小
10.500.6931完全に迷っている、 中程度
10.102.3026自信を持って誤答、 大ペナルティ
10.014.6052極度の自信を持って誤答、 致命的
10.0016.9078数値的にも勾配爆発の危険

この表が示すように、 交差エントロピー損失は「自信のある誤答」を強く罰する。 これがニューラルネットの学習速度を加速し、 同時に校正(calibration)の改善にも寄与する。 一方、 数値計算上は log(0) で -∞ となる為、 実装では clip(ŷ, 1e-7, 1-1e-7) のような数値安定化が必須である。

📏 KL ダイバージェンスと相互情報量

情報エントロピーから派生する 2 つの重要量、 KL ダイバージェンスと相互情報量を整理する。 これらは「2 つの分布が異なる」「2 変数が依存している」を bit 単位で測る基本道具である。

KL ダイバージェンス(Kullback-Leibler divergence)

D_KL(p || q) = Σ p(x) log(p(x)/q(x)) で定義される。 「真分布 p の代わりに q を使った時の追加コスト」と解釈できる。 性質:(1) 非負、 (2) p = q の時のみ 0、 (3) 非対称(D_KL(p||q) ≠ D_KL(q||p))、 (4) 三角不等式を満たさない。 これらの性質から「ダイバージェンス」と呼ばれ、 厳密には距離ではない。

機械学習における KL の応用例:(a) 変分推論で q(z) を真の事後分布 p(z|x) に近づける目的関数、 (b) 強化学習の TRPO/PPO で方策更新のステップサイズ制約、 (c) GAN の理論的解析(JS ダイバージェンスは KL の対称化)、 (d) ベイズ最適化の獲得関数。

相互情報量(Mutual Information)

I(X; Y) = ΣΣ p(x, y) log(p(x, y) / (p(x) p(y))) = H(X) + H(Y) - H(X, Y) = H(X) - H(X | Y)。 「Y を知る事で X の不確実性が平均何 bit 減るか」を表す。 性質:(1) 非負、 (2) X と Y が独立の時のみ 0、 (3) 対称(I(X;Y) = I(Y;X))、 (4) 任意の単調変換に対して不変。

相関係数との違い:Pearson 相関は線形関係のみを捕捉するが、 相互情報量は任意の依存(非線形・周期・分岐構造)を捕える。 例えば Y = X² の関係では Pearson 相関 ≈ 0 だが、 相互情報量は I(X;Y) ≫ 0。 この為、 非線形な特徴量選択や独立成分分析(ICA)で相互情報量が用いられる。

関係Pearson rI(X;Y) (bit)解釈
Y = X (完全線形)1.000H(X)両者とも最大値
Y = X² (非線形)≈ 0高い相関では検出不可
Y = sin(X) 周期≈ 0高い周期構造を捕える
Y と X が独立00両者ともゼロ
弱い線形 + ノイズ0.5中程度両者中程度の値

特徴量選択では「予測変数 Y との相互情報量」が高い説明変数 X を優先する。 scikit-learn の mutual_info_classif / mutual_info_regression は、 K 近傍法に基づく相互情報量推定を提供する。 SSDSE-B-2026 では「人口」と「着工建築物床面積」の相互情報量が 1.50 bit と高く、 県別分析で「人口を入れる事は着工建築物床面積を入れる事とほぼ等価」と判断できる。

📡 Shannon の情報源符号化定理

情報エントロピーは「最適な符号化に必要な平均ビット数の下限」という強烈な意味を持つ。 これが Shannon の情報源符号化定理である。 ここでは ASCII テキスト・Huffman 符号・算術符号の具体例で、 H が現実の圧縮率に直結する事を示す。

情報源符号化定理(直感的記述)

「i.i.d. 情報源 X からの記号列を平均符号長 L で可逆符号化したい時、 L ≥ H(X) が成立する。 さらに H(X) ≤ L < H(X) + 1 を満たす符号化(例:Huffman)が常に存在する」。 つまり「H bit より短く圧縮はできないが、 ほぼ H bit まで詰められる」事を保証する定理である。

英語テキストの場合

英語アルファベット 26 文字の出現頻度は均等ではない('e' が約 12.7%、 't' が約 9.1%、 'q' が約 0.10%)。 H ≈ 4.18 bit/文字。 ASCII の 8 bit/文字に比べて、 理論上は約 47% に圧縮可能。 実際には文字間相関('q' の後はほぼ確実に 'u')を考慮した条件付エントロピーが約 1.0-1.5 bit/文字となり、 これが gzip・bzip2 の達成限界となる。

Huffman 符号化の例

記号 A, B, C, D が確率 0.5, 0.25, 0.125, 0.125 で出現する場合、 Huffman 符号は A=0, B=10, C=110, D=111 となり、 平均符号長 L = 0.5×1 + 0.25×2 + 0.125×3 + 0.125×3 = 1.75 bit。 一方 H = -(0.5 log2 0.5 + 0.25 log2 0.25 + 0.125 log2 0.125 + 0.125 log2 0.125) = 0.5 + 0.5 + 0.375 + 0.375 = 1.75 bit。 ここでは L = H で完全最適。

算術符号化と H への漸近

Huffman は 1 記号あたり 1 bit 単位でしか割り当てられない為、 H から最大 1 bit 離れる。 算術符号化は「全記号列に 1 つの実数」を割り当てる事で、 L → H に任意の精度で近づける。 gzip は LZ77 + Huffman、 bzip2 は BWT + Huffman、 LZMA は LZ77 + 算術符号化、 と用途に応じて Huffman / 算術符号化が使い分けられる。

情報源H (bit/記号)代表的圧縮率(gzip)備考
英語平文≈ 4.18 (1-gram)25-35%条件付エントロピーは 1.0-1.5 bit
日本語平文(UTF-8)≈ 7.5 (1-gram 漢字)30-40%3 byte/文字の冗長性が大
ソースコード≈ 3.515-25%繰り返しが多い為圧縮率高
ランダムバイト8.0100%(圧縮不可)H が上限値に到達、 削減の余地なし
JPEG/PNG 画像既に圧縮済95-105%再圧縮で容量増加もあり得る

「ランダムなデータは圧縮できない」「すでに圧縮されたデータは再圧縮で小さくならない」という直感は、 すべて H が上限に達している事として情報エントロピーで説明される。 Shannon の情報源符号化定理は、 単なる数学的定理ではなく、 現代のあらゆる圧縮アルゴリズムの理論的天井を定めている。

📶 通信路容量と雑音耐性

情報エントロピーのもう 1 つの重要な応用が通信路容量(Channel Capacity)である。 雑音のある通信路を通して、 1 秒あたり何 bit まで誤りなく伝送できるかを定める Shannon の通信路符号化定理は、 現代の Wi-Fi・モバイル通信・光通信のすべての設計指針となっている。

通信路容量の定義

通信路容量 C は、 入力 X と出力 Y の相互情報量の最大値として定義される:C = max_{p(x)} I(X; Y)。 つまり「入力分布をうまく選んだ時、 出力から入力について何 bit の情報が取り出せるか」の上限である。 これは入力側の符号化戦略の自由度を反映している。

2 値対称通信路(BSC)

送信 0/1 が確率 p で反転して受信される 2 値対称通信路では、 C = 1 - H(p)(H(p) は 2 値エントロピー)。 p = 0 なら C = 1 bit(完全通信)、 p = 0.5 なら C = 0 bit(情報なし)、 p = 0.1 なら H(0.1) ≈ 0.469 で C ≈ 0.531 bit。 つまり 10% の誤り率でも約半分の情報伝送が可能と分かる。

AWGN 通信路と Shannon-Hartley

加法的白色ガウス雑音(AWGN)通信路では C = B log2(1 + S/N) [bit/秒](B は帯域幅、 S/N は信号対雑音比)。 これは Shannon-Hartley の定理として知られ、 4G/5G の MIMO 設計、 衛星通信の符号化、 光ファイバーの伝送容量設計、 すべての基礎になっている。 S/N を 2 倍にしても C は 1 bit/秒/Hz しか増えない「対数的伸び」が現実の通信工学の制約を作る。

技術帯域幅S/N (dB)Shannon 容量(理論)
電話回線4 kHz30 dB≈ 40 kbps
Wi-Fi (802.11n)20 MHz30 dB≈ 200 Mbps
LTE20 MHz25 dB≈ 166 Mbps
5G NR100 MHz30 dB≈ 1 Gbps(MIMO で更に倍増)
光ファイバー100 GHz40 dB≈ 1 Tbps

これらの数値は「Shannon 容量に向かう競争」の歴史を映している。 1948 年に Shannon が定理を発表した時点では、 実際の通信は容量の 10-20% 程度しか達成していなかったが、 ターボ符号(1993)、 LDPC 符号(再発見:1996)、 ポーラ符号(2008)の登場で 5G では Shannon 限界の 90% 以上が達成されている。 情報エントロピーを学ぶ事は、 この「理論限界に向かう 70 年の物語」を理解する事でもある。

🎲 最大エントロピー原理と最尤推定

「与えられた制約だけでは分布が一意に定まらない時、 エントロピーが最大の分布を選ぶ」のが Jaynes の最大エントロピー原理(MaxEnt)である。 これは「余計な前提を置かない」「制約以外には無情報」という哲学を数学化したもので、 ロジスティック回帰・指数族分布・物理の熱力学に直接繋がる。

制約による最大エントロピー分布

「平均が μ」だけの制約 → 一様分布(有限区間で)。 「平均 μ と分散 σ²」の制約 → 正規分布。 「平均 μ ≥ 0、 期待値 μ」の制約 → 指数分布。 「カウントデータで平均 μ」の制約 → ポアソン分布。 つまり、 統計でよく登場する分布は、 何らかのモーメント制約下の最大エントロピー分布として導出できる。

MaxEnt とロジスティック回帰

「特徴量の期待値が観測値と一致する」という制約下で、 ラベル分布の最大エントロピー解を求めると、 ちょうど softmax / sigmoid 形式の確率モデルが導出される。 これがロジスティック回帰の理論的正当化である。 つまりロジスティック回帰は「与えた特徴量の制約だけを尊重し、 それ以外は最も無情報」な分類器として最良である。

最尤推定と KL 最小化の同値性

真分布 p_data からの i.i.d. サンプルに対する対数尤度の最大化は、 経験分布 p̂ とモデル q_θ の KL ダイバージェンス D_KL(p̂ || q_θ) の最小化と等価である。 つまり最尤推定は「経験分布をモデル分布に最も近づける」操作であり、 情報理論的にも自然な選択である事が分かる。

制約条件MaxEnt 分布主応用
なし(離散有限)一様分布事前分布、 デフォルト
平均 μ(正実数上)指数分布寿命・待ち時間モデル
平均 μ、 分散 σ²正規分布統計の主役、 中心極限定理
範囲 [a, b]一様分布 U(a, b)無情報事前分布
平均 μ(非負整数)ポアソン分布カウントデータ
球面上、 平均方向von Mises 分布方位データ、 風向
特徴量の経験平均指数族(softmax)ロジスティック回帰、 CRF

この表は「統計の主要分布は、 すべて MaxEnt の特殊例として説明できる」事を示している。 別々に名前が付いて見える分布たちが、 「与えた制約 + 最大エントロピー」という単一の原理から導かれる事実は、 統計学の体系性を理解する上で深い洞察を与える。

🔀 条件付エントロピーと連鎖律

単独のエントロピーだけでなく、 「他の変数を知った後の不確実性」を測る条件付エントロピー H(X | Y) は、 機械学習のあらゆる場面で登場する。 ここでは定義・連鎖律・チェインルール・データ処理不等式までを整理する。

条件付エントロピーの定義

H(X | Y) = ΣΣ p(x, y) log(1/p(x | y)) = H(X, Y) - H(Y)。 「Y を知った後で X に残る不確実性の平均」を bit で表す。 性質:(1) H(X | Y) ≤ H(X)(情報追加は不確実性を増やさない)、 (2) X が Y から決定的に分かる時 H(X | Y) = 0、 (3) X と Y が独立の時 H(X | Y) = H(X)。

連鎖律(Chain rule)

H(X, Y) = H(X) + H(Y | X) = H(Y) + H(X | Y)。 「同時エントロピー = 一方のエントロピー + 条件付エントロピー」。 これを多変数に拡張すると H(X_1, ..., X_n) = Σ H(X_i | X_1, ..., X_{i-1})。 この連鎖律は、 系列モデル(言語モデル、 時系列予測)の理論的基礎である。

相互情報量との関係

I(X; Y) = H(X) - H(X | Y) = H(Y) - H(Y | X) = H(X) + H(Y) - H(X, Y)。 「相互情報量 = エントロピーの減少」「相互情報量 = 同時エントロピーから余分を引いた量」と複数の解釈ができる。 Y を観測する事で X の不確実性が H(X | Y) まで減る、 その減少分が I(X; Y) である。

データ処理不等式

マルコフ連鎖 X → Y → Z において、 I(X; Z) ≤ I(X; Y) が成立する。 「中間処理によって情報は増えない」という基本原理。 これはニューラルネットの深い層が浅い層より多くの「真の情報」を持つ事は無い(過学習なしの場合)事や、 物理計測でセンサーが捕えた以上の情報を後段処理で増やせない事を保証する。

関係式読み
H(X, Y) = H(X) + H(Y | X)連鎖律
H(X | Y) ≤ H(X)条件付は単独より大きくない
I(X; Y) = H(X) - H(X | Y)相互情報量はエントロピー減少
I(X; Z) ≤ I(X; Y) (X→Y→Z)データ処理不等式
H(X, Y) ≤ H(X) + H(Y)劣加法性(独立で等号)
D_KL(p || q) ≥ 0Gibbs の不等式

🎓 統合まとめ

情報エントロピーは、 単なる「不確実性の指標」を超えて、 統計・機械学習・通信・物理を貫く共通言語である。 この用語ページで触れた内容を 1 つにまとめると、 以下の 5 つのレイヤーで理解できる。

  1. 基礎の数式:H = -Σ p_i log2 p_i。 「予測のしづらさ」を bit で測る。 一様分布で最大、 確定分布で 0。
  2. 5 つの公理:非負性・最大化・確定性・独立加法性・連続性。 これらを満たす関数は、 係数を除いて一意に決まる。
  3. 派生量:交差エントロピー(分類損失)、 KL ダイバージェンス(分布の隔たり)、 相互情報量(依存の強さ)、 条件付エントロピー(観測後の残存不確実性)。
  4. 応用分野:機械学習(決定木・ニューラルネット・変分推論)、 通信(符号化・通信路容量)、 統計(最大エントロピー推定・最尤推定)、 物理(熱力学第二法則)。
  5. SSDSE-B-2026 での体感:人口エントロピー 1.90 bit(10 等幅ビン)、 着工建築物床面積との相互情報量 1.50 bit、 高齢化率の相対均質性 H ≈ 2.92 bit。 実データで「分布の偏り → エントロピー値」の対応を体感する。

この用語ページを読み終えた時、 「情報エントロピーは何 bit か」「なぜそうなるか」「他の量とどう繋がるか」が即座に答えられる状態を目指して欲しい。 そこに至れば、 機械学習の損失関数・統計推論・通信工学・統計物理学のすべてが、 同じ言語で語れるようになる。 これが Shannon が 1948 年に開いた、 情報理論という学問の地平である。

📊 SSDSE-B-2026 の縦断的読解:エントロピー視点

SSDSE-B-2026 は 47 都道府県 × 約 100 変数のクロスセクションデータである。 ここでは「人口」「経済」「労働」「教育」「医療」の 5 つのテーマ別に、 エントロピー値を縦断的に読み解く。 数値の高低だけでなく、 「なぜその値になるのか」を実社会の文脈と結び付けて理解する事が目標である。

テーマ 1:人口関連変数

「総人口(A1101)」H ≈ 1.90 bit、 「15 歳未満人口比(A1301/A1101)」H ≈ 2.29 bit、 「65 歳以上人口比(A1303/A1101)」H ≈ 2.92 bit。 総人口は東京・大阪・神奈川などの巨大県が右に長い裾を作り、 H が低くなる(偏在)。 一方、 年齢構成比は都道府県間で比較的均質であり、 H が高くなる。 「人口」と一口に言っても、 絶対量か比率かでエントロピーの挙動は逆になる。

テーマ 2:経済関連変数

「着工建築物床面積(C3302)」H ≈ 1.88 bit、 「標準価格・商業地(C5403)」H ≈ 1.16 bit、 「延べ宿泊者数(G7101)」H ≈ 1.41 bit、 「消費支出・二人以上世帯(L3221)」H ≈ 2.77 bit。 絶対額・立地依存の経済指標は人口や大都市と連動して強く偏在する(東京・大阪が突出、 特に商業地地価は最も低 H)。 一方、 世帯当たり消費支出は県間でほぼ均質であり、 「日本の経済格差は絶対量よりも、 世帯当たりで見ると小さい」事を H 値が示している。

テーマ 3:労働関連変数

「月間有効求人数(F3103)」H ≈ 1.56 bit、 「有効求人倍率(F3103/F3102)」H ≈ 3.09 bit。 絶対量である求人数は大都市に偏在して低 H だが、 需給比である有効求人倍率は県間で均質に近く高 H。 同じ労働統計でも、 「量」を見るか「比」を見るかでエントロピーの挙動は逆転する。

テーマ 4:教育関連変数

「小学校児童数(E2501)」H ≈ 1.97 bit、 「大学数(E6102)」H ≈ 1.34 bit、 「教員 1 人当たり児童数(E2501/E2401)」H ≈ 3.00 bit。 児童数・大学数は人口に比例して偏在(H 低、 特に大学は大都市集中で最も低い)、 1 人当たり指標は均質(H 高)。

テーマ 5:医療関連変数

「一般診療所数(I5102)」H ≈ 1.43 bit、 「一般病院数(I510120)」H ≈ 2.23 bit、 「人口 10 万人当たり一般診療所数」H ≈ 3.05 bit。 絶対数は人口に比例し H が低い、 人口当たり指標は H が高い。 医療資源の分布もまた「絶対量は偏在、 人口比は均質」という共通構造に従う。

テーマ変数H (bit)偏り解釈
人口総人口 (A1101)1.90巨大県が偏在、 低 H
人口65 歳以上人口比 (A1303/A1101)2.92均質、 高 H
経済着工建築物床面積 (C3302)1.88人口に比例して偏在
経済消費支出・二人以上世帯 (L3221)2.77世帯当たりで均質、 高 H
労働有効求人倍率 (F3103/F3102)3.09均質、 高 H
労働月間有効求人数 (F3103)1.56大都市に偏在、 低 H
教育大学数 (E6102)1.34大都市集中、 低 H
教育教員 1 人当たり児童数 (E2501/E2401)3.00均質、 高 H
医療一般診療所数(絶対)(I5102)1.43大都市集中
医療人口 10 万人当たり一般診療所数3.05県間均質、 高 H

この一覧から「絶対数指標 → 低 H(人口に比例して偏在)」「比率指標 → 高 H(県間均質)」という構造が明確に見える。 これは SSDSE-B-2026 を分析する時の重要な発見であり、 「単純比較は比率で、 シェア計算は絶対量で」という方針の根拠にもなる。

🔍 相互情報量による特徴量選択(SSDSE-B-2026 実例)

機械学習で「どの特徴量がターゲット予測に効くか」を判定する古典的手法が、 相互情報量に基づく特徴量選択である。 ここでは SSDSE-B-2026 の「着工建築物床面積(C3302)」を経済活動規模の代理ターゲットにし、 各候補変数との相互情報量を計算してランキング化する。

このコードでやること:SSDSE-B-2026 の「着工建築物床面積(C3302)」を予測対象として、 7 つの候補変数との相互情報量を sklearn.feature_selection.mutual_info_regression で計算する。

📥 入力データ(SSDSE-B-2026 2023 年 抜粋、 列コード表記):

C3302 A1101 A1303 A4101 L3221 G7101 B4101 高齢化率 3811486 5092000 1681000 24430 296888 32783470 11.0 33.0 809602 1184000 417000 5696 263371 3880720 12.6 35.2 1185835 1163000 407000 5432 298536 4980740 12.5 35.0 2072530 2264000 662000 12328 305541 9178210 15.0 29.2 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from sklearn.feature_selection import mutual_info_regression
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d = df[df['SSDSE-B-2026'] == 2023].copy()
d['高齢化率'] = d['A1303'] / d['A1101'] * 100
target = d['C3302']
features = d[['A1101', 'A1303', 'A4101', 'L3221', 'G7101', 'B4101', '高齢化率']]

mi = mutual_info_regression(features, target, random_state=0)
result = pd.DataFrame({'変数': features.columns, '相互情報量': mi}).sort_values('相互情報量', ascending=False)
print(result.to_string(index=False))

📤 実行例:

変数 相互情報量 A4101(出生数) 1.421 A1101(総人口) 1.395 A1303(65歳以上) 1.177 G7101(延べ宿泊者数) 0.413 高齢化率 0.381 L3221(消費支出) 0.022 B4101(年平均気温) 0.012

💬 結果の読み方:着工建築物床面積との相互情報量が最も高いのは「出生数」「総人口」「65 歳以上人口」(1.1 bit 超)。 いずれも人口規模に連動する絶対量であり、 経済活動の規模が人口に強く依存している事を量的に裏付ける。 一方、 「消費支出(世帯当たり)」「年平均気温」は相互情報量がほぼ 0 で、 着工建築物床面積の予測には殆ど寄与しない。 この情報は特徴量選択で「上位の人口系変数のみ採用」「気温・世帯消費は捨てる」という判断に直結する。

相互情報量と相関係数の使い分け

Pearson 相関は線形関係のみを捕えるが、 相互情報量は任意の依存関係(非線形・周期・分岐)を捕える。 SSDSE-B-2026 の場合、 人口系変数と着工建築物床面積の関係は概ね線形(log 変換後)なので、 Pearson 相関と相互情報量のランキングはほぼ一致する。 ただし「年平均気温 vs 着工建築物床面積」のように非線形・ほぼ無関係な組み合わせが混じる時、 相互情報量の方が「関係の有無」を安定して判定できる。

「情報エントロピー」を扱う際の手法選択は、 状況に応じて以下のフローで判断すると迷いが減る。

  1. Step 1: 目的は記述か予測か?
    • 記述 (現状把握・要約) → 集計・可視化・要約統計量で全体像を掴む
    • 予測 (未知データへの推定) → モデル構築・検証フェーズへ移行
  2. Step 2: データの種類・規模は?
    • 数値データ・小〜中規模 → 「情報エントロピー」やその拡張手法を直接適用
    • カテゴリデータ → カテゴリ専用の不純度指標 (ジニ不純度) と組み合わせ
    • 大規模・高次元 → 計算効率を考慮した派生手法 (次元削減) を選択
  3. Step 3: 結果の解釈・共有は?
    • 専門家向け → 数値指標・統計検定で精緻に評価
    • 非専門家向け → 可視化・自然言語での要約を重視

このフローに沿って判断することで、 「情報エントロピー」を中核とした適切な手法選択ができる。

🔬 解説深化 — 「単位」と「集計の仕方」で読み違えないために

姉妹ページ(交差エントロピー=符号化コスト、 情報利得=相互情報量の標本版)とは別角度で、 情報エントロピーを 「実効カテゴリ数の対数」という一点に絞って掘り下げる。 数値はすべて data/raw/SSDSE-B-2026.csvpd.read_csv(encoding='cp932', skiprows=[1]))の 2023 年 47 都道府県、 総人口 A1101 から筆者が実際に計算した実測値である。

💡 直感 — エントロピーは「何県ぶんに散らばっているか」の対数

2023 年の 47 県人口シェア p_i = 人口_i / 総人口(総人口 124,353,000 人、最大は東京の 11.33 %)のエントロピーは H = 4.9817 bit だった。 完全一様なら log₂47 = 5.5546 bit なので、 東京圏への偏りぶんだけ 0.57 bit 目減りしている。 ここで重要なのは 実効カテゴリ数 = 2H = 24.9817 ≈ 31.6 県という読み替えだ。 「47 県あるが、 人口の散らばり具合は実質 31.6 個の均等な県に住民が分かれている程度」と直感化できる(住民 1 人を無作為抽出したときの居住県の“実効的な選択肢数”)。

📝 単位(bit / nat)が変わっても実効数は不変:同じ分布を自然対数で測ると H = 3.4531 nat。 bit と nat は H_nat = H_bit × ln2 で換算できるだけの見かけの違いで、 実効カテゴリ数は底に依らず 24.9817 = e3.4531 ≈ 31.6 と一致する。 「エントロピーが 4.98 か 3.45 か」で悩むより、 底を揃えた実効数 bH を見るほうが解釈がぶれない。

⚠️ 落とし穴(重要) — 「人口のエントロピー」は集計の仕方で符号が逆転する

(1) ビニング数でエントロピーは単調に増える。 人口は連続量なので、 そのままではエントロピーが定義できない(微分エントロピーは別物で負にもなる)。 実務では階級(bin)に離散化するが、 bin 数を増やすほど H は機械的に増える。 2023 年の 47 県人口を等幅ビンに切って階級の分布エントロピーを計算すると次の通り(すべて実測)。

等幅ビン数 kエントロピー (bit)理論上限 log₂k実効階級数 2H
20.48891.01.40
40.97122.01.96
81.56343.02.96
162.36284.05.14

「人口のエントロピーは○○ bit」と言うときは ビン定義を必ず添えること。 数値だけを他人と比べるのは無意味だ(等幅か等頻度か、 bin 数がいくつかで値が変わる)。

(2) 集計単位が違えばトレンドの向きが逆になる。 「各県を 1 カテゴリとした人口シェア」の 47 通りエントロピーを 2012→2023 で追うと、 5.0354 bit(実効 32.8 県)→ 4.9817 bit(実効 31.6 県)へ緩やかに減少している=東京圏への集中。 ところが本ページ上部の 📝 補足が扱う「人口を階級にまとめた階層エントロピー」は、 同じ期間で増加(規模分布が一様に近づく=多様化)しうる。 どちらも正しく、 矛盾していない。 前者は「住民がどの県に居るか」の分布、 後者は「県がどの人口階級に属するか」の分布で、 見ている確率変数が別物だからだ。 同じ「エントロピー」という語でも、 何を 1 カテゴリと数えているかを確かめないと結論の符号を取り違える。

🚀 発展