Mímisbrunnr知恵の泉

← ネットワーク科学 一覧

🎓 レベル:発展 | 重要度:A(必須)

📎 前提:閾値モデル・情報カスケード固有ベクトル中心性とPageRank | 関連:拡散と感染症モデル(SI・SIS・SIR)

要点(BLUF)

概念:誰を起点にすれば最も広がるか

予算は限られています。インフルエンサー5人にだけ新製品を渡せるなら、誰に渡せば最も広く拡散するか。これが影響最大化。単に次数トップ5を選ぶと、彼らの影響圏が重なって無駄が出ることがあります。最適なシード集合を選ぶこの問題は組合せ的に難しい一方、美しい数学的構造(劣モジュラ性)のおかげで実用的な近似が効きます。応用としての口コミマーケティングはマーケのturf — ここでは最適化の数理を扱います。

数式:影響関数と劣モジュラ性

シード集合 SS から拡散モデル(独立カスケード等)で最終的に活性化するノード数の期待値を影響関数 σ(S)\sigma(S) とします。目標は

maxSkσ(S)\max_{|S| \leq k} \sigma(S)

この σ\sigma は2つの良い性質を持ちます。

σ(S{v})σ(S)    σ(T{v})σ(T)\sigma(S \cup \{v\}) - \sigma(S) \;\geq\; \sigma(T \cup \{v\}) - \sigma(T)

「同じノードを加える価値は、既存シードが多いほど小さい」。

Nemhauser の定理より、単調・劣モジュラ関数の貪欲法(毎回、限界利得が最大のノードを1つずつ足す)は最適値の (11/e)63%(1-1/e)\approx 63\% 以上を保証します。NP困難な問題に対する、保証付き近似です。

コードで確認

import networkx as nx
import numpy as np

def ic_spread(G, seeds, p, seed, runs=100):
    """独立カスケードの期待波及数(モンテカルロ)"""
    rng = np.random.default_rng(seed)
    totals = []
    for _ in range(runs):
        active = set(seeds); frontier = set(seeds)
        while frontier:
            nxt = set()
            for u in frontier:
                for v in G.neighbors(u):
                    if v not in active and rng.random() < p:
                        nxt.add(v)
            active |= nxt; frontier = nxt
        totals.append(len(active))
    return np.mean(totals)

G = nx.barabasi_albert_graph(300, 2, seed=7)
p, k = 0.1, 5

# 貪欲法:限界利得が最大のノードを1つずつ
greedy = []
for _ in range(k):
    best, best_gain = None, -1
    for v in G.nodes():
        if v in greedy: continue
        g = ic_spread(G, greedy + [v], p, seed=42)
        if g > best_gain:
            best_gain, best = g, v
    greedy.append(best)

topk = [v for v, _ in sorted(G.degree(), key=lambda x: -x[1])[:k]]
rng = np.random.default_rng(1)
rand = list(rng.choice(list(G.nodes()), k, replace=False))

print(f"貪欲法     {greedy} → 期待波及 {ic_spread(G, greedy, p, 123):.1f}")
print(f"次数トップ{k}         → 期待波及 {ic_spread(G, topk, p, 123):.1f}")
print(f"ランダム{k}個         → 期待波及 {ic_spread(G, rand, p, 123):.1f}")

実行結果:

貪欲法     [1, 0, 11, 28, 30] → 期待波及 21.4
次数トップ5         → 期待波及 21.5
ランダム5個         → 期待波及 9.0

賢いシード選び(貪欲法・次数トップ)は、ランダム選択の約2.4倍の波及を達成。このスケールフリーグラフでは貪欲法と次数トップがほぼ並ぶ — ハブの影響が支配的だからです。ただし一般のネットワーク(影響圏が重なる構造)では、貪欲法が冗長を避けて次数トップを上回り、しかも理論保証を持つ点が強みです。

数式の直観的意味

劣モジュラ性は「収穫逓減」、つまり「もう十分カバーした領域に、似たノードをもう1人足しても価値が薄い」という直観の数式化です。次数トップ kk を選ぶと、ハブ同士の影響圏が重なって2人目以降の限界利得が下がる。貪欲法は毎回「まだカバーできていない領域に最も効くノード」を選ぶので、自然に冗長を避けます。(11/e)(1-1/e) という保証は、この「毎ステップ残りギャップの一定割合を埋める」性質から導かれます。固有ベクトル中心性やPageRank(固有ベクトル中心性とPageRank)は高速なシード候補のヒューリスティクスとして使えます。

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

対応シミュレーション

本文のコードがそのまま検証用です。口コミの応用はマーケティングへ(薄リンク)。

関連