「information entropy」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「information entropy」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。
これらのキーワードは「information entropy の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。
🍰 まずはやさしく
情報の不確実さを測る定規のようなものです。
データの分け方を決めるために使います。
都道府県のデータを分ける時に役立ちます。
数式とコードと注意点を学びましょう。
情報エントロピー(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.0 | 0.000 | 驚きゼロ |
| 弱い偏り | 0.9, 0.1 | 0.469 | ほぼ予測可 |
| 中庸の偏り | 0.7, 0.3 | 0.881 | そこそこ予測可 |
| 完全に均等 | 0.5, 0.5 | 1.000 | 予測不能(最大) |
💡 暗号化との接点:暗号文が「ランダムに見える」とはエントロピーが上限近くにあるということ。 偏りがあれば頻度分析で破られる、 という古典暗号の弱点はエントロピーで定量化できます。
| 分野 | 利用シナリオ | 使う指標 |
|---|---|---|
| 圧縮 | Huffman / 算術符号化 | Shannon エントロピー |
| 分類 | 決定木分岐基準 | 情報利得 / gini |
| DL 損失 | 分類問題の損失関数 | 交差エントロピー |
| 特徴選択 | 高 MI の特徴を残す | 相互情報量 |
| 生成モデル | VAE の正則化項 | KL ダイバージェンス |
| クラスタ評価 | 予測クラスタと真クラスタの一致度 | NMI / ARI |
| LLM 評価 | 言語モデルの困惑度 | Perplexity |
確率分布のスライダーを動かすと、 シャノンエントロピー H = −Σ pi log2 pi がリアルタイムで再計算されます。 均等分布ほどエントロピーは大きく(=最も予測困難)、 一点に集中するほど 0 に近づく(=ほぼ確実)ことを、 手を動かして体感してください。 各事象の情報量 I(xi) = −log2 pi (希少な事象ほど大きい)も同時に表示します。 外部ライブラリなしの vanilla JS 実装で、 オフラインでも動作します。
💡 読み取りのコツ:スライダーは各事象の「重み」で、 合計が 1 になるよう自動で正規化して確率 pi にしています。 いずれか 1 つだけを大きくすると H は 0 へ、 すべて同じ高さにすると H は最大 log2 n へ向かいます。 pi=0 の事象は情報量が ∞(決して起きない=観測すれば無限の驚き)ですが、 エントロピーへの寄与は規約により 0 log 0 = 0 として扱います。
決定木(ID3 / C4.5)は、 ノードを分割する前後のエントロピー差である 情報利得 IG = H(親) − Σ (|子|/|親|) H(子) が最大になる特徴で分岐します。 上のスライダーで「分割後に一方の子ノードが純粋(一点集中=H が 0)に近づくほど IG が大きい」ことをイメージできます。 CART が使う ジニ不純度 Gini = 1 − Σ pi2 はエントロピーと同じく「均等で最大・一点集中で 0」という形をとる不純度指標で、 log を含まないぶん計算が軽く、 実務では両者の分割結果はほぼ一致します。
エントロピーは 1 つの分布 p の不確実性でした。 2 つの分布 p(真の分布)と q(予測分布)を比べると、 交差エントロピー H(p,q) = −Σ pi log qi と KL ダイバージェンス 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 で描画)。
英語名 Entropy (Information Entropy)。 別称:シャノンエントロピー。
エントロピー単体だけでなく、 二変数版や差分版を理解することで応用範囲が一気に広がります。
相互情報量はピアソン相関の非線形版と捉えられます。 「線形には独立だが、 二次的依存がある」ようなケースでも 0 にならず、 特徴量選択や因果探索でよく使われます。
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(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 | 県間で比較的均質、 高エントロピー |
この表から「総人口・着工建築物床面積など絶対量の指標は巨大県に偏在して低エントロピー、 高齢化率・合計特殊出生率など比率の指標は県間で均質で高エントロピー」という構造が読み取れる。 機械学習で県を予測する場面では、 高エントロピー変数(高齢化率など)は単独で県を当てる手がかりとして弱い一方、 低エントロピー変数(総人口・着工建築物床面積)は強い手がかりとなる。
情報エントロピーは多くの数学的性質を持ち、 これらが情報理論の定理の証明や、 機械学習アルゴリズムの解析で使われる。 ここでは 8 つの主要な性質を整理し、 各々の意味と用途を示す。
H は確率分布の関数として凹関数。 つまり 2 つの分布 p, q と λ ∈ [0,1] に対して、 H(λp + (1-λ)q) ≥ λH(p) + (1-λ)H(q)。 これは「分布の混合は個々のエントロピーの加重平均より大きい」事を意味する。 凹性は最適化の収束性を保証する重要な性質である。
H(X, Y) ≤ H(X) + H(Y)、 等号は X と Y が独立な時のみ成立。 「2 変数の同時エントロピーは個々の和を超えない」。 これは相互情報量 I(X; Y) = H(X) + H(Y) - H(X, Y) ≥ 0 と等価。
凹関数 f に対して E[f(X)] ≤ f(E[X])。 H は -p log p の和なので、 凹性から多くの不等式が導かれる。 例:D_KL(p||q) ≥ 0(Gibbs の不等式)は Jensen の不等式から直接導出可能。
マルコフ連鎖 X → Y → Z で I(X; Z) ≤ I(X; Y)。 中間処理を通じて情報が増える事はない。 これは深層学習で「層を深くしても、 入力データに含まれる情報を超える表現は学習できない」事を保証する基本原理。
Y から X を推定する時の誤り確率 P_e は、 条件付エントロピー H(X|Y) に下限を与える:H(P_e) + P_e log(|X|-1) ≥ H(X|Y)。 「条件付エントロピーが小さければ、 必然的に推定精度が高い」事を保証する。 機械学習の理論的下限解析で頻繁に使われる。
独立な確率変数 X, Y の和 X+Y の微分エントロピーに対して、 exp(2h(X+Y)) ≥ exp(2h(X)) + exp(2h(Y))。 中心極限定理の情報論的解釈に関連する。
連続変数の微分エントロピー h(X) は、 一対一の関数変換 Y = g(X) で h(Y) = h(X) + E[log|g'(X)|] となる。 線形変換 Y = AX なら h(Y) = h(X) + log|det A|。 これにより、 座標系を変えるとエントロピーが定数だけずれる事が分かる。
「制約条件下で H 最大」が最大エントロピー分布。 対偶として「H 最大の分布は、 与えた制約以外の情報を含まない」と解釈できる。 これがベイズ統計の事前分布設計や、 統計力学の平衡状態の物理的意味を与える。
| 性質 | 用途 |
|---|---|
| 凹性 | 最適化の収束性、 混合分布の解析 |
| 劣加法性 | 相互情報量の非負性、 独立性判定 |
| Jensen の不等式 | KL ≥ 0、 各種境界の導出 |
| データ処理不等式 | 深層表現学習の理論 |
| Fano の不等式 | 推定精度の下限 |
| エントロピーべき乗 | 中心極限定理の情報論版 |
| unitary 不変性 | 座標系変換 |
| MaxEnt 対偶 | 事前分布設計 |
情報エントロピーを Python で扱う時の主要ライブラリと使い分けを整理する。 各ライブラリの違いを把握しておくと、 状況に応じて最適なツールを選べる。
最も汎用的。 デフォルトで底は e(nat)、 base 引数で底変更可。 KL ダイバージェンスも qk 引数で計算できる:entropy(pk, qk) = D_KL(pk || qk)。 1 次元配列を受け取り、 自動的に正規化する。
クラスタリング評価で使われる相互情報量。 単位は nat。 normalized_mutual_info_score(NMI)は [0, 1] に正規化したバージョン。 同時頻度行列から計算する為、 離散変数同士の MI 計算に適する。
特徴量選択用。 KSG(Kraskov-Stögbauer-Grassberger)推定で連続変数の MI を計算する。 mutual_info_regression は連続ターゲット、 mutual_info_classif は離散ターゲット用。 高次元の特徴量から「予測に効くもの」を選ぶ時の標準ツール。
PyTorch では nn.CrossEntropyLoss(log_softmax + NLLLoss を統合)、 nn.BCELoss(2 値)、 nn.BCEWithLogitsLoss(数値安定 2 値)。 TensorFlow では tf.keras.losses.SparseCategoricalCrossentropy、 BinaryCrossentropy。 from_logits=True にして softmax を内部で実行させると、 log-sum-exp トリックで数値安定化される。
これらのライブラリを場面に応じて使い分け、 「情報エントロピーを計算 → 解釈 → 意思決定」のループを高速に回すのが現代のデータ分析の基本である。
この用語ページで触れた事を、 実務でそのまま使える形式に整理した 10 個のポイント。 この 10 個を覚えていれば、 情報エントロピーが必要な場面で困らない。
これら 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 エントロピーは 確率分布の「ばらけ具合」を 1 つの実数に押し込めた指標です。 物理学の熱力学エントロピーと数式上の親戚であり、 通信工学では「メッセージを送るのに必要な平均ビット数の下限」として現れ、 機械学習では「決定木の分岐評価」「クロスエントロピー損失」「相互情報量」へと派生します。
① 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_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 不要)、 エントロピーは情報量の解釈が明快である。 実務では両者の分岐結果はほぼ同じだが、 数学的最適性の議論では情報利得(エントロピー差)が主流である。
Shannon (1948) は「不確実性関数」H(p_1, ..., p_n) が満たすべき 3 つの公理から、 H が一意(係数を除き)に決まる事を証明した。 ここでは公理 → 数式という流れを略式で追い、 「なぜ log なのか」「なぜ -Σ p log p なのか」の理論的根拠を明らかにする。
公理 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 の 都道府県を「人口で 3 区分」 したラベルに対して、 エントロピーを計算します。 等分布なら $\log_2 3 \approx 1.585$ ビットが上限。
データ出典:SSDSE-B-2026(独立行政法人統計センター)。 47 都道府県 × 複数年(最新 2023)の社会統計データ。
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 (ほぼ均等) |
47 都道府県の総人口 (A1101) を「100 万人未満」「100-300 万」「300-1000 万」「1000 万以上」の 4 階層に分け、 その分布のエントロピーを計算します。 エントロピーが大きい = 都道府県の人口規模がバラバラ、 小さい = 似たり寄ったり を意味します。
🎯 このコードでやること:SSDSE-B-2026 の最新年 (2022 年想定) について、 47 県の総人口を 4 階層に区切り、 階層分布のエントロピーを scipy.stats.entropy と numpy 自作の両方で算出する。
📥 入力データ (SSDSE-B-2026 抜粋):
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}') |
📤 実行すると次の出力が得られる:
💬 結果の読み方:日本の都道府県の人口階層分布は 1.48 bit(最大 2.00 bit の 73.8%)。 約 6 割が「100-300 万人」に偏っており、 「1000 万以上」は東京都だけという 偏りの存在 が、 一様分布より小さなエントロピーとして数値化されています。 もし 47 県すべてが各階層に均等にいたら 2.00 bit になります。
「都道府県」と「年齢階層比率(0-14 歳/15-64 歳/65 歳以上)」の 相互情報量 $I(\text{都道府県}; \text{年齢})$ を計算します。 値が大きいほど「県名がわかれば年齢分布もある程度予測できる」(=両者は独立でない)ことを意味します。
🎯 このコードでやること:SSDSE-B-2026 の各県の年齢階層比率(A1301/A1302/A1303 を A1101 で割った値)を 3 階層にビン化し、 47 都道府県 × 3 階層の同時分布から $I(X;Y)$ を計算する。
📥 入力データ (年齢階層、 抜粋):
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}') |
📤 実行例:
💬 結果の読み方:「県名」がわかると「高齢化階層」も完全に決まる関係性が成り立つため、 $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 が頻繁に登場します。
「東京都の年齢構成」を 基準分布 P、「他 46 都道府県の年齢構成」を 比較分布 Q として KL ダイバージェンスを算出します。 これは 「東京モデルで全国を予測したときの符号化コスト超過」 という解釈ができます。
🎯 このコードでやること:東京都を基準に、 46 県の年齢構成分布との KL ダイバージェンスを 1 県ずつ計算し、 「東京から最も遠い県」「最も近い県」を特定する。
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') |
📤 実行例:
💬 結果の読み方:東京・神奈川・埼玉のような 都市圏 は若年層が厚く似た分布を持ち 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 ナイジェリア |
決定木は「分岐前のエントロピー」と「分岐後の条件付きエントロピー」の差 = 情報利得 $IG(X, A) = H(X) - H(X|A)$ が最大となる属性 $A$ を選んで分岐します。 47 都道府県の「高齢化階層(低/中/高)」を予測する際、 「人口規模(A1101)」「出生数(A4101)」「気候(B4101 年平均気温)」のどれで分岐するのが効率的か を IG で比較します。
🎯 このコードでやること:「高齢化階層」を目的変数として、 総人口(A1101)・出生数(A4101)・合計特殊出生率(A4103)・年平均気温(B4101)・最高気温(B4102)を候補属性に置き、 各属性の情報利得を計算する。
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}') |
📤 実行例:
💬 結果の読み方:高齢化階層を分類するうえで 「出生数」が最も情報利得が大きい(0.33 bit)。 これは決定木が「出生の多い県ほど高齢化が進んでいない」という関係を捉えたことを示します(出生数と合計特殊出生率が上位、 一方で気温は高齢化とほぼ無関係で MI ≈ 0)。 sklearn の DecisionTreeClassifier はこの IG(または gini)を内部で計算し、 各ノードでの分岐属性を選択しています。
| 年 | 出来事 | 影響 |
|---|---|---|
| 1865 | Clausius が熱力学エントロピー導入 | 物理量としての起源 |
| 1948 | Shannon「A Mathematical Theory of Communication」 | 情報理論の誕生 |
| 1951 | Kullback-Leibler ダイバージェンス | 分布間距離の標準 |
| 1956 | McMillan, Khinchin: AEP(漸近均等分割性質) | 圧縮理論の基礎 |
| 1965 | Kolmogorov 複雑性(記述長としてのエントロピー) | アルゴリズム的情報理論 |
| 1986 | Quinlan ID3 アルゴリズム(情報利得で分岐) | 決定木の標準分岐基準 |
| 2001 | RF (Breiman) で gini と IG が並列で使われる | アンサンブル時代 |
| 2014 | VAE: KL ダイバージェンス を損失項に | 生成モデルの中核 |
| 2017 | Tishby ら「情報ボトルネック」深層学習解釈 | DL 理論 |
| 2020 | CLIP の対照学習で交差エントロピー再注目 | マルチモーダル |
| 2024 | LLM 評価で「困惑度 (Perplexity = $2^H$)」が業界標準 | 大規模言語モデル |
SSDSE-B は 12 年分のパネルデータ。 各年について「47 県人口階層分布」のエントロピーを計算し、 時系列の不確実性の推移 を見ます。 もしエントロピーが下がっていれば「県の人口規模が同質化している」ことを示します。
🎯 このコードでやること:年別に 47 県を 4 階層に区切り、 各年のエントロピーを算出し時系列グラフで可視化する。
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 → 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 単位で電卓レベルの粒度で求め、 値の意味を解釈する。
H = -(0.5 log2 0.5 + 0.5 log2 0.5) = -(0.5 × -1 + 0.5 × -1) = 1.0 bit。 つまり「裏か表か」を当てるのに 1 bit の情報が必要。 これは「bit」という単位の原点であり、 すべての離散情報量はこれを基準に解釈できる。 公平なコインは「最大の不確実性」を持つ 2 値分布である。
H = -(0.9 log2 0.9 + 0.1 log2 0.1) = -(0.9 × -0.152 + 0.1 × -3.322) = 0.469 bit。 公平なコインより不確実性が約半分に減る。 これは「ほぼ表が出る」事を予測できる為、 平均的な「驚き」が少ない事を表す。 機械学習でラベル分布が偏っているクラス不均衡データは、 まさにこの低エントロピー状態であり、 単純な多数派予測でも高い精度が出てしまう。
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) と一致。
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 低い。 多クラス分類の典型的な偏りパターン。
H = log2(4) = 2.0 bit。 4 つの選択肢が等確率なら 2 bit でちょうど符号化できる。 これは「2 桁の 2 進数で 1 つを指す」と等価である。
指数的に減衰する確率の場合、 H ≈ 1.992 bit。 上限 log2(8) = 3.0 bit より大きく下回る。 この分布は Huffman 符号化で「最頻記号に 1 bit、 次に 2 bit、 ……」と割り当てられ、 平均符号長 ≈ H となる。 Shannon の情報源符号化定理が示す通り、 平均符号長は H を下回らないが、 適切な符号化で H に近づける。
| 例 | 確率分布 | H (bit) | 上限 | 偏り |
|---|---|---|---|---|
| 公平コイン | 0.5, 0.5 | 1.000 | 1.000 | 0.000 |
| 歪みコイン | 0.9, 0.1 | 0.469 | 1.000 | 0.531 |
| 公平サイコロ | 1/6 × 6 | 2.585 | 2.585 | 0.000 |
| 3 値偏在 | 0.7, 0.2, 0.1 | 1.157 | 1.585 | 0.428 |
| 4 値一様 | 0.25 × 4 | 2.000 | 2.000 | 0.000 |
| 8 値指数 | 2^-k 系列 | 1.992 | 3.000 | 1.008 |
合成データで偏ったコインと公平コインのエントロピーを計算する。
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") |
💬 手計算 (Step 2) と Python 出力が完全一致。 確率が偏るほど H 減少。
scikit-learn / pandas を使った最小実装パターン。 上の SSDSE-B 計算と同じスタイルですが、 ここでは「読み込み→前処理→学習→評価」のテンプレを 4 つのスニペットに分けます。
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 列ずつ手動でやる作業に相当します。
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 基準) |
🎯 やること:確率分布から 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) より少しだけ小さい。
🎯 やること:分類目的変数と特徴量との MI ベクトルを取得。
1 2 | from sklearn.feature_selection import mutual_info_classif mi = mutual_info_classif(X, y, random_state=42) |
📤 出力: ndarray (n_features,) 💬 値が大きい特徴量を残すと良い予測になる。
🎯 やること:分類モデル学習で標準的に使う損失。
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 種類の図を提示し、 「分布の形」と「エントロピー値」の対応関係を視覚的に整理する。 散布図・ヒストグラム・箱ひげ図は、 それぞれエントロピーの異なる側面を映し出す道具立てとして覚えておきたい。
下の散布図は、 都道府県を「人口対数」と「着工建築物床面積対数」の 2 軸で並べたものである。 もし日本中のすべての県が同じ人口・同じ経済活動規模なら、 点は 1 点に集中し、 県の「どこか」を当てる問いの情報エントロピーは 0 になる。 実際は東京・神奈川と地方県が大きく離れており、 県名の事前分布(人口加重)は不均一で、 エントロピーが約 4.98 bit に収まる(一様分布 47 県なら log2(47)=5.55 bit)。 つまり「ほぼ一様だが、 東京・大阪・神奈川など巨大県の存在で 0.57 bit だけ情報が漏れている」と読める。
図 1: SSDSE-B-2026 に基づく、 人口対数 × 着工建築物床面積対数の散布図。 点の散らばり方が「県を当てるクイズ」の難易度(=エントロピー)を視覚的に表現する。
ヒストグラムは「分布が何峰か」「左右どちらに偏っているか」を示す。 都道府県の人口を 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 小さい。
箱ひげ図は地方ブロック(北海道・東北・関東・中部・近畿・中国・四国・九州沖縄)で「人口の散らばり」が異なることを示す。 群ごとに値を離散化してエントロピーを計算すると、 関東は東京・神奈川・千葉・埼玉が突出して H≈1.45 bit と低い(偏在)。 一方、 中部・近畿は H≈2.10 bit と高い(多様)。 エントロピーの群間比較は、 単なる平均比較では見えない「県内の均質性」を可視化する手段になる。
図 3: 地方ブロック別の人口分布。 箱ひげ図の幅とエントロピー値がほぼ比例して動く。
ここでは scipy/pandas を組み合わせ、 都道府県データのエントロピーを実用的に計算する。 「データ読み込み → 階級化 → エントロピー算出 → 解釈」の流れを 1 つのコードブロックで完結させる。
このコードでやること:SSDSE-B-2026 から県別人口を読み、 10 階級に離散化して情報エントロピーを bit 単位で計算し、 一様分布と比較する。
📥 入力データ(SSDSE-B-2026 の冒頭):
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') |
📤 実行例:
💬 結果の読み方:上限 3.322 bit に対して実測 1.897 bit。 1.425 bit の差は「最頻階級(小規模県)に集中している分の情報減」。 つまり「県を 1 つ無作為抽出した時、 実効 4 つ程度の階級候補で済む」と直感的に解釈できる(2^1.897 ≈ 3.72)。
このコードでやること:人口(A1101)と着工建築物床面積(C3302)の同時エントロピー H(X,Y) と相互情報量 I(X;Y) を SSDSE-B-2026 から推定。 「2 変数の関係性が情報量として何 bit か」を測る。
📥 入力データ(離散化後の同時頻度の一部):
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') |
📤 実行例:
💬 結果の読み方:相互情報量 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 が最大の分割を選ぶ事で、 ラベルの不確実性が最も大きく減る軸が選ばれる。
np.where(p>0, p*np.log2(p), 0) または scipy.stats.entropy を使うと安全。qcut と cut どちらで切るか、 ビン数をいくつにするかでエントロピーは大きく変動する。 報告時はビン化方法を明示する。+ 1e-12 等を入れないと NaN になる。情報エントロピーは「直感とのギャップ」が大きい量であり、 学習初期に陥りやすい誤解がいくつかある。 ここでは典型的な 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 世紀最大の学問的橋渡し」の一つと評される。
| 年 | 人物 | 出来事 |
|---|---|---|
| 1865 | Clausius | 熱力学第二法則の中で「entropy(変容能)」を命名 |
| 1877 | Boltzmann | S = k log W の関係式を提示、 巨視と微視を繋ぐ |
| 1928 | Hartley | 対数尺度で情報量を測る前駆的アイデア |
| 1948 | Shannon | 情報エントロピー H = -Σ p log p を導入、 情報理論を創始 |
| 1951 | Kullback-Leibler | 2 分布の隔たりを測る KL ダイバージェンスを定義 |
| 1957 | Jaynes | 最大エントロピー原理を統計推論に持ち込む |
| 1961 | Rényi | Shannon エントロピーの一般化(Rényi エントロピー)を提案 |
| 1986 | Quinlan | 決定木 ID3 で情報利得を機械学習に応用 |
| 2010s- | Deep Learning | 交差エントロピー損失が分類モデルの標準損失関数に定着 |
Shannon が情報の単位を「bit」と命名した事も含め、 この系譜は現代の機械学習・暗号・通信のすべてを支えている。 情報エントロピーを学ぶ事は、 単なる 1 つの量を覚える事ではなく、 「不確実性を数値化する 80 年の歴史」を継承する事である。
以下の問いに「自分の言葉で」答えられるか確認しよう。 全問即答できれば、 情報エントロピーの実務的な使い方が身についていると判断できる。
これらの問いに自信を持って答えられない箇所が見つかれば、 上記の「情報エントロピーが満たす 5 つの性質」「SSDSE-B-2026 で計算するエントロピー早見表」「他の不確実性指標との比較」へ戻って復習する事を勧める。 特に SSDSE-B-2026 の人口・着工建築物床面積・高齢化率の数値感は、 機械学習で実データを扱う時の「感度」を養う材料として最適である。
連続変数を離散化してエントロピーを推定する時、 bin の数によって H 値が大きく変わる。 bin が多すぎると各 bin に少ないサンプルしか入らず、 経験分布が真の分布から乖離して H が過大評価される。 bin が少なすぎると粒度が荒くなり、 H が過小評価される。 経験則として bin = √n または Sturges の公式(k = log2(n)+1)が無難。
サンプル数 n が小さい時、 経験分布で計算した H_hat はバイアスを持ち、 真の H より小さくなる(H_hat - H ≈ -(K-1)/(2n)、 K は記号数)。 これを補正するのが Miller-Madow 推定量:H_corrected = H_hat + (K-1)/(2n)。 n < 100 で K が大きい時には必須。
交差エントロピー損失の実装で、 予測確率 q が 0 に近い時に log(q) が -∞ に発散する。 これを防ぐため、 q を [epsilon, 1-epsilon] にクリップ(epsilon = 1e-7 等)する。 また、 softmax 後に log を取るより、 log_softmax を直接計算する方が数値的に安定(log-sum-exp トリック)。
D_KL(p || q) ≠ D_KL(q || p) で、 引数の順序を間違えると別の量を計算する。 機械学習で「真分布 p に予測 q を近づける」場合は通常 D_KL(p || q) を使う。 GAN の文脈で「モード崩壊」が起きるのは、 順序が D_KL(q || p) の場合で、 q が p の一部のモードにだけ集中する事を許容するため。 順序を明示する習慣を付ける。
2 つの連続変数の相互情報量を直接推定するのは難しい。 ヒストグラム法は bin 数に強く依存、 K 近傍法(Kraskov-Stögbauer-Grassberger 推定)の方が安定だが計算コスト高。 sklearn の mutual_info_regression は KSG 推定を実装している。 高次元では推定誤差が大きく、 サンプル数を増やす必要がある(実用上 n ≥ 1000 程度)。
「エントロピーが大きい変数は重要」「相互情報量が大きい変数は予測に効く」は文脈次第。 特徴量選択では確かに MI 高 = 予測に有用だが、 ラベル分布のエントロピーが大きい事はモデルの良し悪しと無関係。 「何の量に対する不確実性か」「予測対象とどう繋がるか」を毎回確認する。
情報エントロピーは熱力学のエントロピーと数式的に同一の形を持つ。 1948 年に Shannon が情報量の単位として H = -Σ p log p を提案した時、 von Neumann が「これは Boltzmann のエントロピーと同じだから、 エントロピーと呼ぶといい」と助言した逸話は有名である。 ここでは両者の繋がりを具体的に示し、 「情報」と「熱」が同じ言語で記述できる事実を確認する。
巨視状態(マクロ)に対応する微視状態(ミクロ)の数を W とすると、 Boltzmann のエントロピーは S = k_B log W(k_B はボルツマン定数)。 これは「巨視状態が決まっている時、 微視状態の不確実性」を測っている。 W = 1(微視状態が 1 通りに決まる絶対零度の完全結晶)で S = 0、 W が大きい高エネルギー状態で S が大きい。
微視状態 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 (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 増大則) |
| 通信路容量 C | Carnot 効率の限界 |
| 1 bit 消去のコスト | k_B T log 2 J(Landauer) |
この対応関係は単なる形式的類似ではなく、 「情報処理は熱力学的過程である」という深い意味を持つ。 量子コンピュータの可逆ゲート設計、 低消費電力 CPU の理論限界、 ブラックホールの情報パラドックス、 すべてこの Shannon-Boltzmann 対応の延長線上で議論される。
情報エントロピーは深層学習の理論と実装に深く埋め込まれている。 「Information Bottleneck 理論」「Mutual Information Neural Estimator (MINE)」「Disentanglement 評価」「Self-supervised Learning」など、 2020 年代の最先端研究にも頻繁に登場する。
「入力 X と表現 T の相互情報量 I(X; T) を最小化しつつ、 表現 T と出力 Y の相互情報量 I(T; Y) を最大化する」のが Information Bottleneck の原理。 つまり「無駄な情報は捨てつつ、 予測に必要な情報は保持する」表現を学ぶ。 Tishby (2017) は「深層学習の学習過程は IB の最適化として理解できる」と主張し、 大きな議論を呼んだ。
高次元データの相互情報量を直接推定するのは困難だが、 ニューラルネットで I(X; Y) の下限(Donsker-Varadhan 表現)を学習する手法が MINE (Belghazi et al., 2018)。 GAN・VAE・表現学習の正則化項として広く採用され、 「2 つの表現が独立か」「冗長か」を学習中に評価できるようになった。
SimCLR・MoCo・CLIP などの自己教師あり学習は、 InfoNCE 損失(相互情報量の下限)を最大化する形で動作する。 「同じ画像の異なる拡張版は近く、 異なる画像は遠く」という対照損失は、 数式的には I(view_1; view_2) の最大化と等価。 これにより、 ラベル無しデータから「内容に関する情報」を抽出する事ができる。
VAE 系の表現学習で「各次元が独立な意味を持つか」を評価する指標として、 各潜在次元と生成要因の相互情報量(Mutual Information Gap, MIG)が使われる。 1 つの潜在次元が 1 つの生成要因だけと高い MI を持つほど良い disentanglement。 これは情報エントロピーが深層学習の解釈性に直結する例である。
| 手法 | 情報エントロピーの役割 | 発表年 |
|---|---|---|
| VAE | KL ダイバージェンスを潜在分布の正則化に使用 | 2013 |
| GAN(JS divergence) | 真分布と生成分布の隔たりを JS で測る | 2014 |
| Information Bottleneck | 表現と入出力の MI を制御 | 1999/2017 |
| MINE | 高次元 MI の neural 推定器 | 2018 |
| SimCLR / MoCo | InfoNCE 損失で MI 下限を最大化 | 2020 |
| CLIP | 画像-文章対の対比学習 | 2021 |
| Diffusion Models | 逆過程の KL 損失で生成分布を学習 | 2020- |
2020 年代の深層学習は「情報エントロピーの応用領域の爆発期」と言える。 表現学習・生成モデル・自己教師あり学習のすべてが、 何らかの形で情報量を最小化または最大化する目的関数を持つ。 この潮流を理解するには、 古典的なエントロピーの定義を確実に押さえた上で、 KL ダイバージェンス・相互情報量・条件付エントロピーの 4 点セットを自在に操れる事が必須である。
情報エントロピーを身につけた後、 自然な次の学習ステップを段階的に提示する。 各テーマは独立に進められるが、 番号順に進めると認知負荷が低い。
PyTorch・TensorFlow で交差エントロピー損失を 1 行で呼び出すのは簡単だが、 自前で numpy 実装してみると理解が深まる。 多クラス分類・二値分類・focal loss(クラス不均衡対応)まで実装すると、 ライブラリの挙動が完全に把握できる。 SSDSE-B-2026 を題材に、 「県を 47 クラスに分類する」モデルを試作するのも良い。
scikit-learn の DecisionTreeClassifier で criterion='entropy' を選び、 分岐の挙動を可視化する。 SSDSE-B-2026 の県データで「着工建築物床面積が中央値以上か」を予測する木を作り、 各ノードの情報利得を観察する。 ランダムフォレスト・勾配ブースティングまで進めば、 情報利得の派生形(gain, cover, weight)も理解できる。
ベイズ推論で「事後分布が解析的に計算できない時」に変分推論を使う。 近似分布 q(z) と真の事後 p(z|x) の KL を最小化する事で、 q が真の事後に近づく。 これは ELBO(Evidence Lower Bound)の最大化と等価で、 VAE の理論的基礎でもある。 数式から実装まで一通り経験すれば、 ベイズ深層学習の基礎が身につく。
Cover & Thomas「Elements of Information Theory」、 Mackay「Information Theory, Inference, and Learning Algorithms」、 Jaynes「Probability Theory: The Logic of Science」など、 古典的教科書を 1 冊通読する。 これらは情報理論を「数学的厳密性 + 物理的直感 + 機械学習との接続」の三位一体で説明し、 単発の用語学習を体系的知識に統合する。
最終ステップは「自分の研究や業務で、 不確実性を測る場面に情報エントロピーを適用する」事。 アンケート結果の多様性測定、 ユーザー行動ログのパターン分析、 製造業の品質変動の定量化、 等々、 応用は無限にある。 「ここで H を計算したら何が分かるか?」と問う習慣を付けると、 データ分析の地平が大きく広がる。
情報エントロピーは抽象的な量だが、 各産業で具体的な意思決定に直結する。 ここでは 8 つの業界別ケースを紹介し、 「どこで H が計算されているか」「結果がどう使われるか」を整理する。
5G 基地局の容量設計では、 Shannon-Hartley の通信路容量 C = B log2(1 + S/N) を用いて、 帯域幅と信号対雑音比から最大スループットを算出する。 MIMO 技術で複数アンテナを使うと容量が並列に伸びる事も情報理論で説明される。 NTT ドコモ・KDDI・ソフトバンクの 5G エリア設計の数式裏付けは、 全て Shannon の通信路符号化定理。
株価の時系列を離散化し、 エントロピーを計算する事で「市場の予測可能性」を定量化できる。 効率市場仮説(EMH)が正しければ、 株価リターンの分布は最大エントロピー状態(予測不能)に近づく。 逆にエントロピーが低い時期は「予測可能性が高い」=「裁定機会あり」と解釈でき、 高頻度トレーディングの戦略立案に使われる。
「ある検査が診断にどれだけ情報をもたらすか」を、 検査結果と病気の有無の相互情報量 I(検査; 病気) で定量化できる。 I が大きい検査は診断に強く効くので優先される。 これは「期待情報利得」と呼ばれ、 EBM(Evidence-Based Medicine)の検査選択における意思決定基準として使われる。
言語モデル(GPT-3, BERT, Llama 等)の性能評価には perplexity = 2^H が使われる。 PPL が小さいほどモデルが言語を予測でき、 文章生成の質が高い。 OpenAI・Anthropic・Google・Meta のモデルカードには必ず PPL が掲載されており、 「人間レベル PPL」(約 10-15)に近づく事がモデル開発の目標となっている。
顧客の購買履歴を多次元ベクトルとして、 K-means や階層クラスタリングでセグメント化する時、 「セグメント割り当てのエントロピー」をクラスタ品質の指標として使う。 H が低い(純粋なセグメント)ほど良いセグメント、 H が高い(混在セグメント)ほど再分割の余地あり、 と判断する。
生産ラインの欠陥タイプ分布のエントロピーをモニタリングする事で、 「品質問題が特定原因に集中しているか、 ランダムに発生しているか」を識別できる。 H が低ければ特定原因(例:機械 A の異常)、 H が高ければシステミックな問題(複合要因)と推論し、 改善アクションを使い分ける。
ドライバーの経路選択行動を「複数経路の確率分布」としてモデル化し、 エントロピーで「行動の多様性」を測る。 信号制御・経路案内の最適化において、 ある制御後にドライバー行動のエントロピーがどう変化するかを評価する事で、 「通行の集中度」が定量化される。 渋滞予測・スマートシティ設計に使われる。
Shannon-Wiener 指数 H' = -Σ p_i log p_i は、 生態学で群集の種多様性を測る基本指標。 サンプリングで得られた各種の相対頻度 p_i から H' を計算し、 「保全すべき多様性の高い生息地」を特定する。 環境影響評価(EIA)の必須指標であり、 SDGs の生物多様性目標とも結びつく。
| 業界 | エントロピーの使い方 | 意思決定への寄与 |
|---|---|---|
| 通信 | 通信路容量 C = B log2(1+S/N) | 基地局・帯域設計 |
| 金融 | 市場効率性の H 測定 | アルゴ取引戦略 |
| 医療 | 検査の期待情報利得 | 検査選択順序 |
| NLP | perplexity = 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 で使用 |
| パープレキシティ PPL | 2^H、 「平均何択クイズか」を表す |
| 情報利得 IG | 親-子のエントロピー差、 決定木の分岐基準 |
| ゲイン比 | IG を分岐の H で正規化、 C4.5 で使用 |
| ジニ係数 | 1-Σp²、 CART の分岐基準(log 不要) |
| Rényi エントロピー | Shannon の一般化、 α パラメータで調整可 |
| 微分エントロピー | 連続変数版、 負値も取り得る |
| 情報源符号化定理 | 最適圧縮の下限 = H |
| 通信路符号化定理 | 雑音下でも誤り率任意に小さくできる条件 |
| 通信路容量 C | max_{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 のハフマン符号 |
情報エントロピー H(X) = -Σ p log p は、 シャノンが 1948 年に定義した「確率分布の不確実性」の尺度。 機械学習・統計・通信工学・物理学を横断する基本概念。
エントロピーは「平等に近いほど大、 偏りが大きいほど小」。 一様分布 (各 1/k) で最大 log k、 完全分離 (1 つだけ確率 1) で 0。 この性質が決定木の分岐選択や情報理論的損失関数の基礎となる。
機械学習で情報エントロピーが最も身近に登場する場面が決定木の分岐基準である。 ID3 / C4.5 / CART で使われる「情報利得」「ゲイン比」「ジニ係数」のうち、 前 2 者は完全にエントロピーに依存する。 ここでは SSDSE-B-2026 を題材に、 情報利得の手順を追って確認する。
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。
「着工建築物床面積(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(ほぼ完全な不確実性)。
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 減る。
分割候補を複数試して IG が最大の軸を選ぶ。 SSDSE-B-2026 の実在列で「一般診療所数(I5102)」「出生数(A4101)」「延べ宿泊者数(G7101)」「高齢化率(A1303/A1101)」の中央値(高齢化率は 30%)で分割すると、 下表の IG が得られる。 ID3 アルゴリズムは「IG 最大の軸で分割 → 各子ノードで再帰」を続け、 IG = 0 または葉条件を満たした時点で停止する。
| 分割軸 | 左子 H | 右子 H | 加重平均 | 情報利得 IG |
|---|---|---|---|---|
| 着工建築物床面積 ≥ 中央値 | 0.000 | 0.988 | 0.483 | 0.263 |
| 出生数 ≥ 中央値 | 0.000 | 0.988 | 0.483 | 0.263 |
| 一般診療所数 ≥ 中央値 | 0.000 | 0.988 | 0.483 | 0.263 |
| 延べ宿泊者数 ≥ 中央値 | 0.250 | 0.966 | 0.600 | 0.147 |
| 高齢化率 30% 以上 | 0.863 | 0.000 | 0.643 | 0.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) となる。
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 | 予測 ŷ | 交差エントロピー損失 | 解釈 |
|---|---|---|---|
| 1 | 0.99 | 0.0145 | 自信を持って正解、 ペナルティ最小 |
| 1 | 0.50 | 0.6931 | 完全に迷っている、 中程度 |
| 1 | 0.10 | 2.3026 | 自信を持って誤答、 大ペナルティ |
| 1 | 0.01 | 4.6052 | 極度の自信を持って誤答、 致命的 |
| 1 | 0.001 | 6.9078 | 数値的にも勾配爆発の危険 |
この表が示すように、 交差エントロピー損失は「自信のある誤答」を強く罰する。 これがニューラルネットの学習速度を加速し、 同時に校正(calibration)の改善にも寄与する。 一方、 数値計算上は log(0) で -∞ となる為、 実装では clip(ŷ, 1e-7, 1-1e-7) のような数値安定化が必須である。
情報エントロピーから派生する 2 つの重要量、 KL ダイバージェンスと相互情報量を整理する。 これらは「2 つの分布が異なる」「2 変数が依存している」を bit 単位で測る基本道具である。
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) ベイズ最適化の獲得関数。
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 r | I(X;Y) (bit) | 解釈 |
|---|---|---|---|
| Y = X (完全線形) | 1.000 | H(X) | 両者とも最大値 |
| Y = X² (非線形) | ≈ 0 | 高い | 相関では検出不可 |
| Y = sin(X) 周期 | ≈ 0 | 高い | 周期構造を捕える |
| Y と X が独立 | 0 | 0 | 両者ともゼロ |
| 弱い線形 + ノイズ | 0.5 | 中程度 | 両者中程度の値 |
特徴量選択では「予測変数 Y との相互情報量」が高い説明変数 X を優先する。 scikit-learn の mutual_info_classif / mutual_info_regression は、 K 近傍法に基づく相互情報量推定を提供する。 SSDSE-B-2026 では「人口」と「着工建築物床面積」の相互情報量が 1.50 bit と高く、 県別分析で「人口を入れる事は着工建築物床面積を入れる事とほぼ等価」と判断できる。
情報エントロピーは「最適な符号化に必要な平均ビット数の下限」という強烈な意味を持つ。 これが 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 の達成限界となる。
記号 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 で完全最適。
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.5 | 15-25% | 繰り返しが多い為圧縮率高 |
| ランダムバイト | 8.0 | 100%(圧縮不可) | 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 の情報が取り出せるか」の上限である。 これは入力側の符号化戦略の自由度を反映している。
送信 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)通信路では 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 kHz | 30 dB | ≈ 40 kbps |
| Wi-Fi (802.11n) | 20 MHz | 30 dB | ≈ 200 Mbps |
| LTE | 20 MHz | 25 dB | ≈ 166 Mbps |
| 5G NR | 100 MHz | 30 dB | ≈ 1 Gbps(MIMO で更に倍増) |
| 光ファイバー | 100 GHz | 40 dB | ≈ 1 Tbps |
これらの数値は「Shannon 容量に向かう競争」の歴史を映している。 1948 年に Shannon が定理を発表した時点では、 実際の通信は容量の 10-20% 程度しか達成していなかったが、 ターボ符号(1993)、 LDPC 符号(再発見:1996)、 ポーラ符号(2008)の登場で 5G では Shannon 限界の 90% 以上が達成されている。 情報エントロピーを学ぶ事は、 この「理論限界に向かう 70 年の物語」を理解する事でもある。
「与えられた制約だけでは分布が一意に定まらない時、 エントロピーが最大の分布を選ぶ」のが Jaynes の最大エントロピー原理(MaxEnt)である。 これは「余計な前提を置かない」「制約以外には無情報」という哲学を数学化したもので、 ロジスティック回帰・指数族分布・物理の熱力学に直接繋がる。
「平均が μ」だけの制約 → 一様分布(有限区間で)。 「平均 μ と分散 σ²」の制約 → 正規分布。 「平均 μ ≥ 0、 期待値 μ」の制約 → 指数分布。 「カウントデータで平均 μ」の制約 → ポアソン分布。 つまり、 統計でよく登場する分布は、 何らかのモーメント制約下の最大エントロピー分布として導出できる。
「特徴量の期待値が観測値と一致する」という制約下で、 ラベル分布の最大エントロピー解を求めると、 ちょうど softmax / sigmoid 形式の確率モデルが導出される。 これがロジスティック回帰の理論的正当化である。 つまりロジスティック回帰は「与えた特徴量の制約だけを尊重し、 それ以外は最も無情報」な分類器として最良である。
真分布 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)。
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) ≥ 0 | Gibbs の不等式 |
情報エントロピーは、 単なる「不確実性の指標」を超えて、 統計・機械学習・通信・物理を貫く共通言語である。 この用語ページで触れた内容を 1 つにまとめると、 以下の 5 つのレイヤーで理解できる。
この用語ページを読み終えた時、 「情報エントロピーは何 bit か」「なぜそうなるか」「他の量とどう繋がるか」が即座に答えられる状態を目指して欲しい。 そこに至れば、 機械学習の損失関数・統計推論・通信工学・統計物理学のすべてが、 同じ言語で語れるようになる。 これが Shannon が 1948 年に開いた、 情報理論という学問の地平である。
SSDSE-B-2026 は 47 都道府県 × 約 100 変数のクロスセクションデータである。 ここでは「人口」「経済」「労働」「教育」「医療」の 5 つのテーマ別に、 エントロピー値を縦断的に読み解く。 数値の高低だけでなく、 「なぜその値になるのか」を実社会の文脈と結び付けて理解する事が目標である。
「総人口(A1101)」H ≈ 1.90 bit、 「15 歳未満人口比(A1301/A1101)」H ≈ 2.29 bit、 「65 歳以上人口比(A1303/A1101)」H ≈ 2.92 bit。 総人口は東京・大阪・神奈川などの巨大県が右に長い裾を作り、 H が低くなる(偏在)。 一方、 年齢構成比は都道府県間で比較的均質であり、 H が高くなる。 「人口」と一口に言っても、 絶対量か比率かでエントロピーの挙動は逆になる。
「着工建築物床面積(C3302)」H ≈ 1.88 bit、 「標準価格・商業地(C5403)」H ≈ 1.16 bit、 「延べ宿泊者数(G7101)」H ≈ 1.41 bit、 「消費支出・二人以上世帯(L3221)」H ≈ 2.77 bit。 絶対額・立地依存の経済指標は人口や大都市と連動して強く偏在する(東京・大阪が突出、 特に商業地地価は最も低 H)。 一方、 世帯当たり消費支出は県間でほぼ均質であり、 「日本の経済格差は絶対量よりも、 世帯当たりで見ると小さい」事を H 値が示している。
「月間有効求人数(F3103)」H ≈ 1.56 bit、 「有効求人倍率(F3103/F3102)」H ≈ 3.09 bit。 絶対量である求人数は大都市に偏在して低 H だが、 需給比である有効求人倍率は県間で均質に近く高 H。 同じ労働統計でも、 「量」を見るか「比」を見るかでエントロピーの挙動は逆転する。
「小学校児童数(E2501)」H ≈ 1.97 bit、 「大学数(E6102)」H ≈ 1.34 bit、 「教員 1 人当たり児童数(E2501/E2401)」H ≈ 3.00 bit。 児童数・大学数は人口に比例して偏在(H 低、 特に大学は大都市集中で最も低い)、 1 人当たり指標は均質(H 高)。
「一般診療所数(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 の「着工建築物床面積(C3302)」を経済活動規模の代理ターゲットにし、 各候補変数との相互情報量を計算してランキング化する。
このコードでやること:SSDSE-B-2026 の「着工建築物床面積(C3302)」を予測対象として、 7 つの候補変数との相互情報量を sklearn.feature_selection.mutual_info_regression で計算する。
📥 入力データ(SSDSE-B-2026 2023 年 抜粋、 列コード表記):
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)) |
📤 実行例:
💬 結果の読み方:着工建築物床面積との相互情報量が最も高いのは「出生数」「総人口」「65 歳以上人口」(1.1 bit 超)。 いずれも人口規模に連動する絶対量であり、 経済活動の規模が人口に強く依存している事を量的に裏付ける。 一方、 「消費支出(世帯当たり)」「年平均気温」は相互情報量がほぼ 0 で、 着工建築物床面積の予測には殆ど寄与しない。 この情報は特徴量選択で「上位の人口系変数のみ採用」「気温・世帯消費は捨てる」という判断に直結する。
Pearson 相関は線形関係のみを捕えるが、 相互情報量は任意の依存関係(非線形・周期・分岐)を捕える。 SSDSE-B-2026 の場合、 人口系変数と着工建築物床面積の関係は概ね線形(log 変換後)なので、 Pearson 相関と相互情報量のランキングはほぼ一致する。 ただし「年平均気温 vs 着工建築物床面積」のように非線形・ほぼ無関係な組み合わせが混じる時、 相互情報量の方が「関係の有無」を安定して判定できる。
「情報エントロピー」を扱う際の手法選択は、 状況に応じて以下のフローで判断すると迷いが減る。
このフローに沿って判断することで、 「情報エントロピー」を中核とした適切な手法選択ができる。
姉妹ページ(交差エントロピー=符号化コスト、 情報利得=相互情報量の標本版)とは別角度で、 情報エントロピーを 「実効カテゴリ数の対数」という一点に絞って掘り下げる。 数値はすべて data/raw/SSDSE-B-2026.csv(pd.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 人を無作為抽出したときの居住県の“実効的な選択肢数”)。
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 |
|---|---|---|---|
| 2 | 0.4889 | 1.0 | 1.40 |
| 4 | 0.9712 | 2.0 | 1.96 |
| 8 | 1.5634 | 3.0 | 2.96 |
| 16 | 2.3628 | 4.0 | 5.14 |
「人口のエントロピーは○○ bit」と言うときは ビン定義を必ず添えること。 数値だけを他人と比べるのは無意味だ(等幅か等頻度か、 bin 数がいくつかで値が変わる)。
(2) 集計単位が違えばトレンドの向きが逆になる。 「各県を 1 カテゴリとした人口シェア」の 47 通りエントロピーを 2012→2023 で追うと、 5.0354 bit(実効 32.8 県)→ 4.9817 bit(実効 31.6 県)へ緩やかに減少している=東京圏への集中。 ところが本ページ上部の 📝 補足が扱う「人口を階級にまとめた階層エントロピー」は、 同じ期間で増加(規模分布が一様に近づく=多様化)しうる。 どちらも正しく、 矛盾していない。 前者は「住民がどの県に居るか」の分布、 後者は「県がどの人口階級に属するか」の分布で、 見ている確率変数が別物だからだ。 同じ「エントロピー」という語でも、 何を 1 カテゴリと数えているかを確かめないと結論の符号を取り違える。
H_底b = H_底2 / log₂b。 意思決定木では nat、 通信では bit、 と分野で底が違うだけで本質は同じ。log₂47 − H = 0.5729 bit は「一様分布 U を基準にしたときの人口シェアの KL ダイバージェンス」に一致する。 エントロピーの上限との差=冗長性、 という見方が交差エントロピー・情報利得へ橋渡しになる。