Mímisbrunnr知恵の泉

← ネットワーク科学 一覧

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

📎 前提:拡散と感染症モデル(SI・SIS・SIR) | 関連:影響最大化(貪欲法・劣モジュラ性)

要点(BLUF)

概念:周りが動いたら自分も動く

新製品の採用、流行、ストライキ — これらは「1人にうつされる」感染とは違い、「周りの十分多くが動いたら自分も動く」集団行動です。リスクや同調圧力があるからです。これを表すのが閾値モデル。感染症(拡散と感染症モデル(SI・SIS・SIR))が独立な伝播だったのに対し、閾値モデルは隣人を「数える」点が決定的に違います。

線形閾値モデルの定義

各ノード vv に閾値 θv[0,1]\theta_v \in [0,1] を割り当てます。ノード vv は、活性化した隣人の割合が閾値を超えたとき活性化します。

{uN(v):u が活性}N(v)θv    v も活性化\frac{|\{u \in N(v) : u \text{ が活性}\}|}{|N(v)|} \geq \theta_v \;\Rightarrow\; v \text{ も活性化}

初期に少数のシードを活性化し、このルールを繰り返し適用。新たに活性化するノードがなくなったら停止します。閾値が低いノードが多いと連鎖が止まらず、大域カスケードになります。

コードで確認

import networkx as nx
import numpy as np

def linear_threshold(G, seeds, thresholds, steps=100):
    active = set(seeds)
    for _ in range(steps):
        new = set()
        for n in G:
            if n in active:
                continue
            nbrs = list(G.neighbors(n))
            if not nbrs:
                continue
            frac = sum(1 for nb in nbrs if nb in active) / len(nbrs)
            if frac >= thresholds[n]:   # 隣人の割合が閾値超え
                new.add(n)
        if not new:
            break
        active |= new
    return active

G = nx.watts_strogatz_graph(200, 6, 0.1, seed=2)
rng = np.random.default_rng(0)
th = {n: rng.uniform(0.1, 0.4) for n in G}   # 低めの閾値(動きやすい集団)
seeds = list(rng.choice(list(G.nodes()), 5, replace=False))
final = linear_threshold(G, seeds, th)
print(f"初期シード5個 → 最終活性化ノード数 = {len(final)} / {G.number_of_nodes()}")

実行結果:

初期シード5個 → 最終活性化ノード数 = 200 / 200

閾値が低め(0.1〜0.4)の集団では、たった5個のシードから連鎖が止まらず全200ノードが活性化しました。これが大域カスケード。逆に閾値が高い集団では、シードを増やしても連鎖がすぐ止まり、局所で消えます。「動きやすさ(閾値の分布)」と「ネットワーク構造」がカスケードの成否を決めます。

カスケードの連鎖

graph LR
    S["シード(活性)"] --> A["隣人A<br/>活性隣人割合≥閾値"]
    A --> B["隣人B<br/>Aが活性化→割合増"]
    B --> C["隣人C<br/>連鎖継続"]
    C --> D["...全体へ"]

数式の直観的意味

閾値 θv\theta_v は「変わるための抵抗の強さ」です。θv\theta_v が低い人は周りが少し動けばすぐ追随する(アーリーアダプター)、高い人は大勢が動くまで頑固に動かない(ラガード)。大域カスケードが起きる条件は、Watts が示したように「閾値が低く次数も低い『脆弱なノード』が連結成分を作っているか」。脆弱なノードが繋がっていれば、小さな火種が燃え広がる導火線になります。閾値が高い・次数が高いノードは「火消し」として働き、カスケードを止めます。

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

対応シミュレーション

本文のコードがそのまま検証用です。最適なシード選択は 影響最大化(貪欲法・劣モジュラ性)

関連