🎓 レベル:基礎 | 重要度:A(必須)
📎 前提:次数・道・連結成分 | 関連:スケールフリー(Barabási–Albert)・固有ベクトル中心性とPageRank
要点(BLUF)
- 次数中心性 は「つながりの多さ」で重要度を測る。正規化版は 。
- 次数分布 はネットワークの型を映す指紋。一様(ポアソン的)かハブ型(べき則)かで挙動が一変する。
- 計算は最速だが「量」しか見ない。質(相手が誰か)は固有ベクトル中心性が補う。
概念:最も素朴な重要度
「重要な人=友達が多い人」。直観的で、計算も一瞬。これが次数中心性です。ノードに接続するエッジ数(次数)をそのまま重要度とみなします。シンプルですが、現実のネットワークでは次数が極端に偏ること(少数のハブと多数の末端)があり、その分布の形こそが第4章のランダムグラフモデルを分ける鍵になります。
数式による定義
ノード の次数中心性は、比較しやすいよう最大値 で割って正規化します。
は「自分以外の全員と繋がった場合の次数」。よって で、1 なら全員と直接つながったノードです。
次数分布 は「次数がちょうど のノードの割合」。平均次数は握手補題(次数・道・連結成分)から
分布の裾(大きな の出やすさ)が、ネットワークの性格を決めます。ランダムグラフでは鋭く減衰するポアソン型、現実の多くのネットワークでは裾の重いべき則 (スケールフリー(Barabási–Albert))。
コードで確認
import networkx as nx
G = nx.karate_club_graph() # 34人の実ネットワーク
deg = dict(G.degree())
dc = nx.degree_centrality(G)
print("ノード数:", G.number_of_nodes(), " エッジ数:", G.number_of_edges())
print("平均次数 <k> =", round(2*G.number_of_edges()/G.number_of_nodes(), 3))
top = sorted(dc.items(), key=lambda x: -x[1])[:3]
print("次数トップ3 (id, 次数):", [(v, deg[v]) for v,_ in top])
print("次数中心性トップ3:", [(v, round(c,3)) for v,c in top])
実行結果:
ノード数: 34 エッジ数: 78
平均次数 <k> = 4.588
次数トップ3 (id, 次数): [(33, 17), (0, 16), (32, 12)]
次数中心性トップ3: [(33, 0.515), (0, 0.485), (32, 0.364)]
ノード33とノード0が突出(このネットワークは実際に2人の指導者が対立して分裂したクラブで、彼らがその2人)。平均次数は約4.6なのに、ハブは16〜17 — 偏りが見て取れます。
数式の直観的意味
の分母 は「理論上の上限で割った達成率」。テストの点を満点で割って割合にするのと同じ発想で、ネットワークの大きさが違っても比較できるようにしています。一方、次数分布 を見ることは「集団の格差」を見ること。全員が同じくらいの次数(平等)か、一部に集中(ハブ型)か。この差が拡散やロバスト性(第5・6章)の挙動を大きく変えます。
⚠️ よくある誤解・落とし穴
- 次数が高い=最重要、とは限らない:たくさんの末端とだけ繋がるノードより、少数でも重要ノードと繋がる方が影響力が高いことがある。これを捉えるのが 固有ベクトル中心性とPageRank。
- 有向グラフでは入次数と出次数を分ける:フォロワー数(入)と被フォロー数(出)は別の重要度。
- 平均次数だけ見ると分布の偏りを見落とす:べき則ネットワークでは平均はハブに引っ張られ、典型的なノードを代表しません。ヒストグラムを見る習慣を。
対応シミュレーション
本文のコードがそのまま検証用です。次数分布の型は スケールフリー(Barabási–Albert) で詳述します。
関連
- 前提:次数・道・連結成分
- 質を測る重要度:固有ベクトル中心性とPageRank
- 分布の型:スケールフリー(Barabási–Albert)・Erdős–Rényiランダムグラフ
- 上位ハブ:ネットワーク指標 目次