Mímisbrunnr知恵の泉

← ネットワーク科学 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:グラフの走査次数中心性と次数分布 | 関連:距離・直径・平均路長

要点(BLUF)

概念:近さと橋渡しは別物

次数中心性と次数分布 の次数は「直接の知り合いの数」でした。でも重要性には別の顔があります。近接中心性は「誰にでも素早く届けるか」、媒介中心性は「人と人の間に立つか」。この2つは最短路(グラフの走査)に基づき、次数が見落とす重要ノード — 特に橋渡し役 — を浮かび上がらせます。

数式による定義

近接中心性(closeness)d(v,u)d(v,u)vv から uu への最短距離として、

CC(v)=n1uvd(v,u)C_C(v) = \frac{n-1}{\sum_{u \neq v} d(v,u)}

分母は「全員までの距離の合計」。これが小さい(みんなに近い)ほど近接中心性は大きい。情報を最速で全体に広めたいときの起点に向くノードです。

媒介中心性(betweenness)σst\sigma_{st}s,ts,t 間の最短路の総数、σst(v)\sigma_{st}(v) をそのうち vv を通る本数として、

CB(v)=svtσst(v)σstC_B(v) = \sum_{s \neq v \neq t} \frac{\sigma_{st}(v)}{\sigma_{st}}

「全ペアの最短路のうち、vv が経由地になっている割合の合計」。vv を取り除くと多くの最短路が伸びる/断たれる、そんな関所を捉えます。

コードで確認

import networkx as nx

G = nx.karate_club_graph()
clo = nx.closeness_centrality(G)
bet = nx.betweenness_centrality(G)

tc = max(clo, key=clo.get)
tb = max(bet, key=bet.get)
print("近接中心性 最大ノード:", tc, "=", round(clo[tc],3))
print("媒介中心性 最大ノード:", tb, "=", round(bet[tb],3))

# 直観:一直線のパス 0-1-2-3-4 では真ん中が橋渡し役
P = nx.path_graph(5)
bp = nx.betweenness_centrality(P)
print("パスP5の媒介中心性:", {k: round(v,3) for k,v in bp.items()})

実行結果:

近接中心性 最大ノード: 0 = 0.569
媒介中心性 最大ノード: 0 = 0.438
パスP5の媒介中心性: {0: 0.0, 1: 0.5, 2: 0.667, 3: 0.5, 4: 0.0}

パス 0-1-2-3-4 では、端のノード(0,4)は誰の経路にも挟まれず媒介0。真ん中の2が最大(0.667)で、文字どおり全員の通り道です。空手クラブではノード0が近接・媒介とも最大 — 全体への近さと橋渡しを兼ねた中心人物だと分かります。

媒介中心性の直観

graph LR
    A((A)) --- B((B))
    B((B)) --- C(("C 橋渡し"))
    C --- D((D))
    D --- E((E))

C を取り除くと左右の集団が分断されます。C は次数が高くなくても、左右をつなぐ唯一の経路を握る「関所」。これが媒介中心性の高いノードの典型像です。

数式の直観的意味

近接中心性の分子 n1n-1 は「全員に距離1で届く理想」。ud(v,u)\sum_u d(v,u) がそれにどれだけ近いかの逆数で、いわば「平均到達ホップ数の逆数」。媒介の σst(v)/σst\sigma_{st}(v)/\sigma_{st} は「s,ts,t を結ぶ最短路という資源を、vv がどれだけ独占しているか」。すべてのペアについて足し上げることで、ネットワーク全体での仲介者としての価値が出ます。

⚠️ よくある誤解・落とし穴

対応シミュレーション

本文のコードがそのまま検証用です。距離・直径の全体量は 距離・直径・平均路長

関連