摘要:传播动力学研究病原/信息/行为沿网络边的扩散。SIR(易感—感染—免疫)与 SIS(易感—感染—易感)两套规则从均匀混合人口搬到网络上后,结论剧变:异质网络的传播阈值系统性降低,无标度网络中阈值趋零——流行没有「安全强度」。本节给出网络版模型、阈值塌缩的推导直觉、免疫策略的三代演进,以及信息扩散与传染病模型的同构。本节在体系中的位置:放归野外的第一间实验室,直接兑付第 4、5 章的肥尾与渗流结论。
经典流行病学把人口想象成一口搅拌均匀的大缸:任何人等概率接触任何人。传播强度超过阈值,疫情燎原;低于阈值,自然熄灭——阈值由平均接触数决定,这套「均匀混合」框架统治了流行病学大半个世纪。网络科学的加入方式简单粗暴:把大缸换成渔网——接触不是随机的,是沿着边走的。谁的边多,谁的风险敞口就大;边怎么分布,疫情的命运就怎么改写。
两套基础规则先登记。SIR:节点分三仓——易感、感染、免疫(康复后不再感染)。感染节点每时间步以概率把病原传给每个易感邻居,自身以概率康复并获得永久免疫。适合流感类「病愈即免疫」的急性感染,也适合信息扩散里「看过就不再转发」的一次性传播。SIS:去掉免疫仓,康复直接回到易感——适合此类感染与「 rumor 反复感染」的注意力场景。两套规则的分歧在长期行为:SIS 有稳态的地方病平衡,SIR 有最终感染规模的饱和。
均匀混合框架里,基本再生数的直觉是「平均一个感染者再传染的人数」,它大于一疫情自持、小于一疫情熄火——阈值是个干净的正数。把这套推导搬到网络上,分母里悄悄换成了「接触数的方差与均值平方之比」:方差越大,有效阈值越低。无标度网络的方差随规模发散(第 3 章登记过「方差/均值比」警报器),于是阈值的数学极限是零——不存在安全强度,任何微弱的病原都能在枢纽人口里自持。
直觉账本两页。第一页:枢纽是超级传播者——度高出平均多少倍,风险敞口就大多少倍,疫情早期的「找不到零号病人却看指数增长」多半是撞上了枢纽链。第二页:阈值趋零不等于「人人必感染」——最终规模仍受恢复速度与结构约束,但「把传播压到阈值以下」的防控策略在无标度网络上数学失效,防控必须改打结构牌(免疫枢纽、切断关键边),这正是下一节的主题。
import networkx as nx import random def sis_simulation(G, lam, mu=1.0, steps=300, seed=3): """SIS 网络simulation:lam=每边传播率 mu=恢复率,返回稳态感染占比""" rng = random.Random(seed) infected = {rng.choice(list(G.nodes()))} for _ in range(steps): new_inf = set(infected) for v in list(infected): for u in G[v]: if u not in infected and rng.random() < lam: new_inf.add(u) if rng.random() < mu: new_inf.discard(v) infected = new_inf return len(infected) / G.number_of_nodes() ER = nx.gnp_random_graph(800, 6 / 799, seed=1) BA = nx.barabasi_albert_graph(800, 3, seed=1) print("传播率 | ER感染率 | BA感染率") for lam in [0.05, 0.1, 0.15, 0.2]: print(f"{lam:6.2f} | {sis_simulation(ER, lam):8.2f} | {sis_simulation(BA, lam):8.2f}")
读数把「阈值塌缩」演给你看:同参数下,无标度网在极低传播率处已有可观的地方病稳态,随机网要等传播率爬过明显的门槛才起火。同一套规则、同一批参数,命运的分岔完全写在度分布里。
阈值塌缩的工程对偶是免疫策略:给节点接种即移除其传播风险,等效于占据渗流里抽走节点(第 5 章接口在此接通)。第一代,随机接种:均匀抽人接种——在异质网络上效率不彰,子弹大多落在低度节点上,枢纽依旧裸奔。第二代,靶向接种:按度排序优先接种头部节点——效率最高,但要求完整名单与度信息,且名单会过期(网络在长)。第三代,熟人接种:随机抽人,不接种本人、接种其一位随机熟人——妙在「我随机认识的人比我更可能是枢纽」(朋友平均比本人更受欢迎,这是一条著名的统计奇观),无需任何全局信息就自动偏向枢纽。熟人策略是网络科学回馈公共卫生的招牌礼物:用本地信息实现准靶向效果。
import networkx as nx import random def final_size_sir(G, vaccinated, lam=0.3, mu=1.0, seed=5): """接种后跑SIR,返回感染规模占比(多seed平均)""" rng = random.Random(seed) total = 0 for _ in range(8): infected = {rng.choice(list(G.nodes()))} - vaccinated infected = {v for v in infected if v not in vaccinated} ever = set(infected) while infected: new_inf = set() for v in infected: for u in G[v]: if u not in ever and u not in vaccinated and rng.random() < lam: new_inf.add(u) if rng.random() < mu: infected = set() # 简化:单步恢复 infected = new_inf if new_inf else set() ever |= new_inf if not new_inf: break total += len(ever) / G.number_of_nodes() return total / 8 BA = nx.barabasi_albert_graph(600, 3, seed=2) k = 60 # 接种预算:一成节点 random_vac = set(random.sample(list(BA.nodes()), k)) target_vac = {n for n, _ in sorted(BA.degree(), key=lambda x: -x[1])[:k]} acquaintance_vac = set() rng = random.Random(0) while len(acquaintance_vac) < k: person = rng.choice(list(BA.nodes())) acquaintance_vac.add(rng.choice(list(BA[person]))) print("随机接种 最终规模:", round(final_size_sir(BA, random_vac), 3)) print("靶向接种 最终规模:", round(final_size_sir(BA, target_vac), 3)) print("熟人接种 最终规模:", round(final_size_sir(BA, acquaintance_vac), 3))
典型读数排序:靶向最优、熟人紧随、随机垫底——且熟人策略没有用过任何度信息。把预算拨到一成上下,三种策略的差距已经拉开数倍;这正是「结构干预优于强度干预」的实证版本。
病原引擎换排挡就是信息引擎。独立级联模型:激活节点以独立概率尝试激活每个未激活邻居,成功即转化、失败不再重试——纯 SIR 血统。线性阈值模型:节点被「够多邻居已激活」的门槛推倒——加权版的从众心理学,谣言与爆款常按此传播。信息侧的三条结构读数与病原侧严格同构:枢纽等于大号传播者(营销里的关键意见领袖)、社团内饱和与跨社团衰减对应「圈层传播」、弱边承担跨圈引爆(第 7 章格兰诺维特理论的传播版)。差异也要登记:信息有「看过就腻」的注意力衰减(对应恢复率变大)、有平台算法这个「看不见的加权器」——把算法当权重,引擎照用。
⚠️ 常见坑:把「结构阈值趋零」读成「线上谣言必爆」。注意力是稀缺资源,信息侧的有效恢复率远高于病原侧——阈值趋零说的是数学倾向,实际规模还要过注意力与算法两道闸。

下一间实验室换个雪崩机制:不是病原沿边传染,而是负载沿边转嫁——级联失效。