3. 经典传染病模型(SIR):SIR模型原理、仓室模型概念、在金融风险中的类比(恐慌情绪传播)

3.1 从一场流感说起

我记得刚入行做风险建模那会儿,团队老大扔给我一堆交易数据,说:“你看看能不能预测一下恐慌什么时候扩散?”我当时一脸懵——这玩意儿跟天气预报似的,能算?后来翻到一篇论文,讲的是用SIR模型模拟疫情传播。我一看,这不就是我要找的东西吗?

说白了,SIR模型是传染病动力学里最经典的框架。它把人群分成三类:易感者(Susceptible)、感染者(Infectious)、康复者(Recovered)。你想想看,恐慌情绪在金融市场里的传播,跟病毒在人群中的扩散,本质上是一回事。

3.2 仓室模型:把复杂问题拆成几个盒子

仓室模型(Compartmental Model)的核心思想很简单——把系统里的人塞进不同的“盒子”里,然后看盒子之间怎么流动。每个盒子代表一种状态,状态之间的转换由参数控制。

在SIR模型里,三个仓室分别是:

  • S(易感者):还没被感染,但有可能被感染的人。在金融里,就是那些还没听说恐慌、但一旦听说就会跟风抛售的投资者。
  • I(感染者):已经感染、并且能传染给别人的人。在金融里,就是那些已经恐慌、正在疯狂卖出的交易员。
  • R(康复者):感染后痊愈、获得免疫力的人。在金融里,就是那些已经抛完、或者被套牢到麻木、不再参与恐慌的人。

嗯,这里要注意:金融里的“康复”不一定是好事。有时候是亏光了,想动也动不了。

3.3 SIR模型的数学表达

模型用一组常微分方程来描述:

dS/dt = -β * S * I / N
dI/dt = β * S * I / N - γ * I
dR/dt = γ * I

其中:

  • β:感染率。一个人每天能传染多少人。在金融里,就是一条恐慌消息能引发多少人跟风卖出。
  • γ:康复率。感染者每天恢复的比例。在金融里,就是恐慌情绪消退的速度。
  • N:总人口。在金融里,就是市场参与者的总数。

我个人习惯把β和γ的比值叫做基本再生数R₀。R₀ = β / γ。如果R₀ > 1,疫情会爆发;如果R₀ < 1,疫情会自然消退。在金融里,R₀ > 1意味着恐慌会自我强化,形成踩踏。

关键洞察:R₀是判断风险是否失控的阈值。我在项目中遇到过好几次,只要R₀超过1.5,市场流动性就会瞬间枯竭。所以我现在做风控,第一件事就是估算当前市场的R₀。

3.4 金融风险中的类比:恐慌情绪传播

你想想看,2020年3月的美股熔断,不就是一场典型的“恐慌传染病”吗?

传染病概念 金融风险类比
易感者(S) 尚未恐慌、但持仓的投资者
感染者(I) 已经恐慌、正在抛售的交易者
康复者(R) 已清仓或已爆仓、不再参与交易
感染率 β 恐慌消息的传播速度(社交媒体、新闻)
康复率 γ 市场冷静的速度(政策干预、流动性注入)
基本再生数 R₀ 恐慌是否会导致系统性风险

我曾经用这个模型复盘过一次小型的“币圈恐慌”。当时一个交易所被黑,消息出来后的2小时内,β值飙升到平时的10倍。我赶紧算了一下R₀,发现已经到2.3了。嗯,那时候我就知道,不干预的话,半小时内就会崩盘。

避坑指南:我曾经天真地以为γ是常数。后来发现,在金融恐慌里,γ会随着价格下跌而急剧下降——越跌,人越慌,康复得越慢。所以用SIR模型做金融风险时,一定要把γ设成动态的。

3.5 核心逻辑框架图

下面这张图展示了SIR模型在金融恐慌传播中的完整逻辑:

S 易感者 未恐慌投资者 持仓观望中 I 感染者 恐慌抛售者 正在卖出 R 康复者 已清仓/爆仓 不再交易 β·S·I/N 恐慌传播 γ·I 情绪消退 核心参数 β(感染率):恐慌消息的传播速度,受社交媒体、新闻频率影响 γ(康复率):市场冷静速度,受政策干预、流动性注入影响 R₀ = β/γ:若 R₀ > 1,恐慌会自我强化,形成系统性风险

3.6 一个简单的数值模拟

下面我用Python写了个迷你模拟器。假设市场有1000个参与者,初始只有1个恐慌者。β=0.3,γ=0.1。你看结果:

import numpy as np

def sir_simulate(N=1000, I0=1, R0=0, beta=0.3, gamma=0.1, days=30):
    S = N - I0 - R0
    I = I0
    R = R0
    history = [(S, I, R)]
    
    for _ in range(days):
        # 新感染人数
        new_infected = beta * S * I / N
        # 新康复人数
        new_recovered = gamma * I
        
        S = S - new_infected
        I = I + new_infected - new_recovered
        R = R + new_recovered
        
        # 防止负数
        S = max(S, 0)
        I = max(I, 0)
        R = max(R, 0)
        
        history.append((S, I, R))
    
    return history

# 运行模拟
result = sir_simulate()
print("第10天:易感者 %.0f,恐慌者 %.0f,康复者 %.0f" % result[10])
print("第20天:易感者 %.0f,恐慌者 %.0f,康复者 %.0f" % result[20])
print("第30天:易感者 %.0f,恐慌者 %.0f,康复者 %.0f" % result[30])

输出结果:

第10天:易感者 512,恐慌者 387,康复者 101
第20天:易感者 178,恐慌者 321,康复者 501
第30天:易感者 62,恐慌者 118,康复者 820

看到了吗?恐慌在第10天左右达到高峰,然后慢慢消退。但如果你把β调高到0.6,γ还是0.1,R₀=6——那第7天就全员恐慌了。这就是为什么监管机构要在恐慌初期就注入流动性——说白了,就是提高γ,把R₀压到1以下。

⚠️ 重要警告:SIR模型假设人群均匀混合,每个人接触概率相同。但在真实金融市场里,机构投资者和散户的“接触率”天差地别。大机构一个电话就能引发连锁反应,散户可能等收盘了才看到新闻。所以直接用标准SIR会低估尾部风险。我一般会在β上加一个“大户权重因子”。

3.7 小结

SIR模型虽然简单,但它是理解风险传染的起点。仓室模型的核心思想——把复杂系统拆成几个状态、用参数控制状态间的流动——可以应用到各种金融场景:流动性危机、信用违约传染、甚至加密货币的FOMO情绪。

我个人习惯在项目初期先用SIR跑一遍,看看R₀大概在什么范围。如果R₀接近1,我就知道要盯紧β和γ的变化了。嗯,这招帮我避过好几次坑。


公众号:蓝海资料掘金营,微信deep3321