3312 字

疫苗,节点免疫与出圈

新冠已经传播大半年了,关于疫苗的消息也越来越多,现在可以讨论下执行细节了。疫苗目前被认为是一种相对安全获得群体免疫的方法。根据传染病的基本传染数我们可以反推群体中多少比例人群获得免疫时传染病就无法有效传播,此时配合强制免疫达到这个比例就算是在传播环节上控制住了流行病。不过,这是一个粒度非常粗的估计,基本传染数平均了所有传播可能而每个具体的人其基本传染数是不同的,跟个人生活方式、卫生习惯、社交习惯等都有关系。举个最直观的例子,当居家令执行时,每家每户只能有一个人出去买菜,一般不会派老人孩子出去,如果此时供应疫苗是短缺的,一家一支,那么最应该打疫苗的不是我们伦理上认为的老人孩子,而是这家天天需要外出的那个人,当然这个人也可能是老人孩子。这非常容易理解,因为跟外界接触的那个人被感染概率最高,那么其实在防疫上,优先控制的不应该是伦理上生理上的易感人群,而是行为上的易感人群。

目前判断易感人群基本会指定老弱病残幼孕,不过这是在无法获知个人行为的前提下所做的判断,但眼下其实我们具备了基于行为来判断易感人群的技术基础了。传染病一定存在零号病人,就是将病原体从自然界带到人类社会的那个人,这个人既是受害者也是一切的起源。在渔猎采集时期,这个人多半是猎人,此时要是打疫苗,应该优先打给这个职业。在现代社会,跟自然界接触的职业太多,所以我们是无法按照职业筛易感人群的。不过,伴随社交网络的研究,特别是信息传播逻辑的研究,我们看到了出圈这个现象。很多新闻开始在小众爱好团体里传播,但因为所有人都是所有人的朋友,所以这条新闻事实上别人不关心也不会有传播动力。此时,如果有一个人同时有两个爱好,然后将新闻演绎为另一个爱好团体能听明白的版本,信息就会迅速从一个小圈子传到另一个小圈子或更大的圈子并产生瀑布效应成为现象级问题。也就是说,传播上存在节点人物,这些节点人物会将两组看似无交集的人联系起来。

疾病传播也类似,一个猎人把疾病带回了家,正常来说最差的情况也就是全家感染。然而如果这个猎人每天晚上都要去村里的A俱乐部,那怕他只接触俱乐部的门卫,这个门卫也可能把A俱乐部团灭。此时A俱乐部如果有个张老三同时去B、C、D俱乐部,那么张老三就可能团灭掉整个村。而穿插于不同村落的邮递员如果感染,一片地方都得团灭。也就是说,疾病的控制重点应该放在那些天然就喜欢跟很多不同地方或圈子交际的人,而这样的人其实不多。各位可以拉个列表出来,把最近半年跟你一同吃饭的人列出来,我这个表就特别简单,因为上面就我一个。也就是说,对靠吃饭传播的传染病控制而言,我属于无效控制,给我打疫苗并不会提升社会整体安全性而仅仅提高我个人安全性,本来疾病传到我这里也是死胡同。然而我邻居即使有居家令也没停止周五办派对的习惯,一到周五就吆五喝六来家里聊天,据我所知那些参加他派对的人平时也不出门,一周只保留了这一次社交,而邻居每次办派对都一定会出去买些聚会用的东西,这是个风险很大的对外出口。当然,办派对参与派对是个人自由,但从社会角度上看风险是不一样的,如果有疫苗,给我邻居先打上对控制整体疾病传播是最有用的。

这里我用网络分析来可视化这个过程:

library(igraph)
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union
g <- make_graph(~A:B:C-A:B:C, D:E:F:G-D:E:F:G, A-H-D, B-I,I-J)
set.seed(1)
plot(g, layout=layout_with_fr)

上图中涉及10个人的一个简单社交网络,我们可以明显看出存在两个两两连接的三人或四人社群,两个社群通过H节点连接。如果我们打算进行优先免疫,如果只有一只疫苗,应该先给H打上,这样ABC跟DEFG社团间存在的传播途径就中断了。如果还有三支,那么ABD应该被优先免疫,而节点J就类似我,免疫掉对整体防疫效果近似为零。需要注意的是,这里不能简单用节点的度来衡量,我们需要算法来检测潜在社群。

cluster <- edge.betweenness.community(g) 
plot(cluster, g, layout=layout_with_fr)

这里我使用的是 2004 年 Newman 跟 Girvan 提供的社群检测算法。其他算法如下:

# Clauset et al. 2004
cluster <- fastgreedy.community(g)
plot(cluster, g, layout=layout_with_fr)

# Pons & Latapy 2005
cluster <- walktrap.community(g)
plot(cluster, g, layout=layout_with_fr)

# Reichardt & Bornholdt 2006
cluster <- spinglass.community(g)
plot(cluster, g, layout=layout_with_fr)

# Newman 2006
cluster <- leading.eigenvector.community(g)
plot(cluster, g, layout=layout_with_fr)

# Raghavan et al. 2007
cluster <- label.propagation.community(g)
plot(cluster, g, layout=layout_with_fr)

# Blondel et al. 2008
cluster <- cluster_louvain(g)
plot(cluster, g, layout=layout_with_fr)

# Rosvall et al. 2009
cluster <- cluster_infomap(g)
plot(cluster, g, layout=layout_with_fr)

如果我们知道真实社交网络,就可以利用这些算法找到那些联系不同节点的关键人物。这对于整个社会是不现实的,但对于一个公司、俱乐部或班级却并不难构建,基层的单位如果自己构建一个内部公开的网络其实并不困难,控制住交际节点也相对容易些。

从经济上来说,政府应该找出这些交际节点并对其强制免费免疫掉所有市面上可见的传染病,其他人想获得安全感可以付费额外打疫苗,因为非节点人物的传播结构是锁死的,其最高风险是有上限的,潜在医疗资源占用少。不同于算平均数的群体免疫,这种节点免疫的方法特别适用于疫苗还是稀缺资源的时候,社交网络里高连接度的人相比人口总数而言其实非常非常少,因此其免疫效果上也能实现以小博大的效果。这种免疫策略其实已经在用了,例如我所在的医院每年都是强制所有员工免费打流感疫苗的,其本质原因就是医院本身就是地理上的一个局部传播节点,这个节点如果免疫了其辐射的社区传播概率就会下降。

你可能也想到了,节点免疫存在个人隐私泄露问题,不过仔细想想并不矛盾:要么疾病传播会泄露隐私,要么预防式提供隐私,从结果上看泄露隐私的是传染病的传播而不是防疫手段。前面说的基于单位的社交网络排查可能涉及隐私,不过,想找出人群中的交际花/交际草其实也有完全不泄露隐私的方式,那就是主动申报自己的交际圈比较广,这需要经济刺激,也就是我前面说的优先免费打疫苗,而事实上主动申报强制免疫反而更好的保护了隐私,否则一旦追查传染链很多看似高明的密会根本经不起技术分析。

不过,由于优先免费很多普通人也可能谎称自己交际面广,此时需要主动提供技术数据来佐证自己是社交中心。这里完全不用考虑互联网公司收集的那些,甚至我们都没必要搭建出真实的社交网络。政府找个高校开发一个不具备联网功能开源的的手机应用,只有一个功能,那就是识别手机主人声音并记录其每天的说话时长并自动扣减掉语音视频通话就可以了,为了防作弊加密把时长留在区块链上。原因很简单,正常人很少自言自语,当其说话时一定是面对另一个人,而且想延长自己说话时长你当然可以一直跟一帮人轮流说话,但我们可以设定规则:想优先免费打疫苗,就下载安装这个应用运行一个月提供一个总说话时长的区块链证明就可以了。很少有人能连续改变自己的行为习惯超过一个周,更不用说一个月了。此时政府根据疫苗采购情况与个人申报情况按月总通话时长从长到短进行节点免疫,这样其实免疫掉1%的人差不多整体上疾病就传不动了。因为技术开源且用区块链存信息,政府也没办法借机过度收集民众信息,可以大幅节省社会公共医疗资源,也就是依赖技术与游戏规则来制衡公权力滥用并实现防疫目的。

人的习惯是很难改变的,所以这样的信息收集一次用个十年二十年都不需要更新,不过这对有些人的打击看起来可能很大。例如渣男,他们学的那些PUA脚踏多条船啥的总不能一直云通信,只要一见面就会延长通话时间,当然他们可以不申报,但我们可以加一条规则:如果被发现是传播节点,那么就一定要追踪公开传播链来让公众知道危险所在,这事其实新加坡台湾都实践过。这种情况下,渣男可以当赌徒,不过其实他要真申报了反而维护住了自己的渣男身份。老实说,防疫层面根本不关心你渣不渣,只关心你会不会提高系统风险,疾病不传播是最终目的。

节点免疫与群体免疫的关系有点像精准医疗与现代医疗的关系。现代医疗注重群体平均指标并将超标作为异常,流行病学上对疾病的描述也是基于人群数据的总结。然而精准医疗侧重于个体的异常值判断,并不依赖人群数据,大体思路类似先用人群数据做一个贝叶斯先验概率,然后根据个人实际情况来更新。从群体免疫上看,基本传染数就是群体核心指标,伴随防疫措施,这个基本传染数会不断下降。但事实上,群体基本传染数的下降大都是节点免疫贡献的,好比一栋公寓里所有人都不出门,其对外都是一个门卫来接收外卖,那么门卫免疫了,这一栋楼都免疫了。现实中你不可能让所有人都不出门,所以通话指标与配套激励政策才是防疫重点,而且对绝大多数人大概率一劳永逸。现实中其实一个城市携带抗体占比多少无所谓,只要足够覆盖交际节点,那么事实上疾病就是被控制住了。

最后,你出圈吗?