🎓 レベル:標準 | 重要度:A(必須)
📎 前提:グラフの走査・次数中心性と次数分布 | 関連:距離・直径・平均路長
要点(BLUF)
- 近接中心性:他の全ノードまでの平均距離の逆数。小さい距離で全体に届くノードが高い。
- 媒介中心性:全ペアの最短路のうち、自分を通る割合。情報やモノの「関所」を捉える。
- 次数は低くても媒介が高い「ブローカー(橋渡し役)」が存在する — 中心性は1種類では足りない。
概念:近さと橋渡しは別物
次数中心性と次数分布 の次数は「直接の知り合いの数」でした。でも重要性には別の顔があります。近接中心性は「誰にでも素早く届けるか」、媒介中心性は「人と人の間に立つか」。この2つは最短路(グラフの走査)に基づき、次数が見落とす重要ノード — 特に橋渡し役 — を浮かび上がらせます。
数式による定義
近接中心性(closeness): を から への最短距離として、
分母は「全員までの距離の合計」。これが小さい(みんなに近い)ほど近接中心性は大きい。情報を最速で全体に広めたいときの起点に向くノードです。
媒介中心性(betweenness): を 間の最短路の総数、 をそのうち を通る本数として、
「全ペアの最短路のうち、 が経由地になっている割合の合計」。 を取り除くと多くの最短路が伸びる/断たれる、そんな関所を捉えます。
コードで確認
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 は次数が高くなくても、左右をつなぐ唯一の経路を握る「関所」。これが媒介中心性の高いノードの典型像です。
数式の直観的意味
近接中心性の分子 は「全員に距離1で届く理想」。 がそれにどれだけ近いかの逆数で、いわば「平均到達ホップ数の逆数」。媒介の は「 を結ぶ最短路という資源を、 がどれだけ独占しているか」。すべてのペアについて足し上げることで、ネットワーク全体での仲介者としての価値が出ます。
⚠️ よくある誤解・落とし穴
- 非連結グラフで近接中心性が壊れる:別成分への距離が になり和が発散。最大連結成分に限るか、調和近接中心性を使います。
- 媒介中心性は計算が重い:全ペア最短路が必要で、素朴には 。大規模では Brandes のアルゴリズム()やサンプリング近似を使います。
- 「中心性が高い=あらゆる意味で重要」ではない:近接・媒介・次数・固有ベクトルはそれぞれ別の問いに答える。目的に合った指標を選ぶこと。
対応シミュレーション
本文のコードがそのまま検証用です。距離・直径の全体量は 距離・直径・平均路長。
関連
- 前提:グラフの走査・次数中心性と次数分布
- 再帰的な重要度:固有ベクトル中心性とPageRank
- 距離の全体量:距離・直径・平均路長
- コミュニティ検出での媒介:コミュニティ検出とは
- 上位ハブ:ネットワーク指標 目次