Mímisbrunnr知恵の泉

← ネットワーク科学 一覧

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

📎 前提:次数中心性と次数分布スケールフリー(Barabási–Albert) | 関連:閾値モデル・情報カスケード攻撃耐性とロバスト性

要点(BLUF)

概念:広がりを状態遷移で捉える

病気・噂・流行語 — 「何かが人から人へ広がる」現象は、ネットワーク上のダイナミクスの代表例です。各ノード(人)を状態(未感染・感染・回復)で表し、感染ノードが隣の未感染ノードを確率的に感染させる。この単純なルールが、流行するかしないかの閾値現象を生みます。応用としての口コミ拡散はマーケティングのturf — ここでは拡散のモデルそのものを扱います。

3つの基本モデル

モデル状態遷移振る舞い
SIS→I全員が最終的に感染不可逆な情報の伝播
SISS→I→S感染と回復を繰り返す風土病・再感染する噂
SIRS→I→R回復後は免疫、1波で収束インフルエンザ・麻疹
graph LR
    S1["S 未感染"] -->|"感染率 β"| I1["I 感染"]
    I1 -->|"回復率 γ"| R1["R 回復/免疫"]
    I1 -.->|"SISでは S に戻る"| S1

数式:基本再生産数と閾値

連続時間の平均場近似では、感染ノードの割合 i(t)i(t) の初期成長は

didt(βkγ)i\frac{di}{dt} \approx (\beta \langle k \rangle - \gamma)\, i

ここで β\beta は1接触あたり感染率、γ\gamma は回復率、k\langle k \rangle は平均次数。基本再生産数

R0=βkγR_0 = \frac{\beta \langle k \rangle}{\gamma}

R0>1R_0 > 1 なら感染は指数的に拡大(流行)、R0<1R_0 < 1 なら自然消滅。R0=1R_0=1疫学的閾値です。重要なのは k\langle k \rangle が入ること — つながりが多いネットワークほど流行しやすい。

コードで確認

import networkx as nx
import numpy as np
from collections import Counter

def sir_sim(G, beta, gamma, seed, steps=200):
    rng = np.random.default_rng(seed)
    state = {n: 'S' for n in G}
    state[rng.choice(list(G.nodes()))] = 'I'   # 初期感染者1人
    for _ in range(steps):
        new = {}
        for n in G:
            if state[n] == 'I':
                for nb in G.neighbors(n):       # 隣へ感染
                    if state[nb] == 'S' and rng.random() < beta:
                        new[nb] = 'I'
                if rng.random() < gamma:         # 回復
                    new[n] = 'R'
        if not new:
            break
        state.update(new)
    return Counter(state.values())

G = nx.barabasi_albert_graph(1000, 3, seed=5)
for beta in [0.05, 0.15]:
    finals = [sir_sim(G, beta, gamma=0.1, seed=s).get('R', 0) / G.number_of_nodes()
              for s in range(30)]
    print(f"beta={beta}, gamma=0.1: 最終感染割合(R/N)平均 = {np.mean(finals):.3f}")

実行結果:

beta=0.05, gamma=0.1: 最終感染割合(R/N)平均 = 0.047
beta=0.15, gamma=0.1: 最終感染割合(R/N)平均 = 0.414

β=0.05\beta=0.05R0R_0 が小さい)では感染は5%未満で立ち消え。β\beta を3倍の0.15にすると R0R_0 が閾値を超え、全体の約41%に広がる大流行に。感染率のわずかな違いが、流行の有無という質的な差を生むのが閾値現象です。

数式の直観的意味

R0=βk/γR_0 = \beta \langle k \rangle / \gamma は「1人の感染者が回復するまでに平均何人にうつすか」です。1人がうつす相手の期待数が1を超えれば感染は世代ごとに増殖し、下回れば縮小する — ER の連結成分の相転移(Erdős–Rényiランダムグラフ)と同じ「枝が自己再生産できるか」の論理です。スケールフリーネットワーク(スケールフリー(Barabási–Albert))では k2\langle k^2 \rangle が発散するため閾値が消失し、どんなに小さい β\beta でも流行が起きうる — これがハブを持つネットワークの恐ろしさです。

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

対応シミュレーション

本文のコードがそのまま検証用です。免疫戦略(誰をワクチン接種するか)は 攻撃耐性とロバスト性 と表裏一体。

関連