跳到正文

Hawkes 过程:金融的自激励点过程

分支比 n 是这个模型的中心:它同时是平稳性条件、内生事件的占比、方差的放大倍数、功率谱低频端的抬升幅度,也是校准里最容易被低估的那个数。

第 4 篇 · 共 12 篇 约 15 分钟

金融里的随机性大多来自外部。布朗运动是外生的,即使 Lévy 过程,跳跃也在外生的时刻到达。Hawkes 过程不一样:它自激励,过去的事件会抬高未来事件发生的概率。交易带来交易,违约成串,新闻一层层级联——这些不是模型的附加项,而是它的定义本身。

这个模型的技术内容基本围绕一个数展开:分支比 nn。它是平稳性的判据,是内生事件占全部事件的比例,是方差相对泊松被放大的倍数,是功率谱在低频端抬起来的幅度,也是校准时最容易被低估的那个量。下面每一节其实都在从一个新角度算同一个 nn。

从点过程到 Hawkes 强度

实数线上的点过程是一组随机的、可数的事件时刻 {T1,T2,…}\{T_1, T_2, \ldots\}:一只股票的成交时刻,一个信用组合的违约时刻,地震发生的时刻,限价订单簿里订单到达的时刻。

最简单的是泊松过程,事件以常数速率 λ\lambda 到达,[0,t][0, t] 内的事件数服从均值 λt\lambda t 的泊松分布,到达间隔是均值 1/λ1/\lambda 的 i.i.d. 指数变量。放松一步是非齐次泊松过程,速率 λ(t)\lambda(t) 随时间变化,条件于速率,事件仍然彼此独立。

Hawkes 过程让这个速率依赖于已经发生的事件。时刻 tt 的强度是

λ(t)=μ+∑Ti<tϕ(t−Ti)\lambda(t) = \mu + \sum_{T_i < t} \phi(t - T_i)

其中 μ>0\mu > 0 是背景速率,ϕ:[0,∞)→[0,∞)\phi: [0, \infty) \to [0, \infty) 是核函数,描述一个过去事件如何抬高之后的强度。μ\mu 保证即使一个事件都没发生过,过程也有正的强度;ϕ\phi 通常递减,久远的事件影响小于新近的事件。

注意这里的关键差别:非齐次泊松的 λ(t)\lambda(t) 是外生给定的一条曲线,Hawkes 的 λ(t)\lambda(t) 是过程自己写出来的。

核函数与分支比

ϕ\phi 决定激励怎么衰减。指数核 ϕ(s)=αe−βs\phi(s) = \alpha e^{-\beta s} 给出速率为 β\beta 的 AR(1) 式衰减,是最常用的一个——用它的时候强度 λt\lambda_t 本身就是马尔可夫的,整个模型因此解析上可处理。幂律核 ϕ(s)=α(1+s)−(β+1)\phi(s) = \alpha (1 + s)^{-(\beta+1)} 衰减更慢,用来捕捉长记忆。指数和 ϕ(s)=∑iαie−βis\phi(s) = \sum_i \alpha_i e^{-\beta_i s} 是一个能逼近任意核的灵活参数化。

不管选哪个核,有一个泛函把它压缩成一个数:

n=∫0∞ϕ(s) dsn = \int_0^\infty \phi(s) \, ds

对指数核就是 n=α/βn = \alpha / \beta。这就是分支比,本文剩下的部分基本都在解释它。

第一重身份:平稳性

过程平稳当且仅当 n<1n < 1。n≥1n \geq 1 时强度无界增长,过程爆炸。

直觉来自 Hawkes 过程的分支结构:把每个事件看成一个”父”,它按强度 ϕ(t−Ti)\phi(t - T_i) 的泊松过程生出”后代”,后代又成为自己后代的父,递归下去。一个父平均生 nn 个直接后代,所以整个家族是一个分支过程——n<1n < 1 时级联终会死掉,一个祖先的后代总数几乎必然有限;n≥1n \geq 1 时它会一直长。

这个结构是 Hawkes 过程真正特别的地方。它不只是一个强度公式,它是一个有清晰概率解释的生成模型:每个事件要么是外部到来的”移民”(速率 μ\mu),要么是某个已有事件的后代。级联的形状可以用生成函数分析。

顺带得到 nn 的第二个读法:稳态下,后代事件占全部事件的比例正好是 nn。n=0.5n = 0.5 意味着一半的事件是被别的事件引发的。

第二重身份:方差放大多少

平稳 Hawkes 过程的平均强度是

Λ=μ1−n\Lambda = \frac{\mu}{1 - n}

即每一个移民平均带来 1/(1−n)1/(1-n) 个事件(自己加上整条后代链)。n→1n \to 1 时它发散,这是平稳性条件的另一种说法。

计数的方差比这更有意思。它随 tt 线性增长,但系数比泊松大:

lim⁡t→∞Var(Nt)t=Λ(1−n)2=μ(1−n)3\lim_{t \to \infty} \frac{\text{Var}(N_t)}{t} = \frac{\Lambda}{(1-n)^2} = \frac{\mu}{(1-n)^3}

于是 Fano 因子(方差比均值)是

Var(Nt)E[Nt]⟶1(1−n)2\frac{\text{Var}(N_t)}{\mathbb{E}[N_t]} \longrightarrow \frac{1}{(1-n)^2}

泊松过程的 Fano 因子恒等于 1。n=0.5n = 0.5 时 Hawkes 是 4,n=0.7n = 0.7 时是约 11。同样的平均事件数,方差可以大一个数量级,而这个倍数完全由 nn 决定。

这正是交易数据里看到的那个经验规律:成交在时间上成簇,一笔大单之后跟着一串。用泊松过程去描述,你会系统性地低估波动——不是低估一点,是低估 (1−n)−2(1-n)^{-2} 倍。Hawkes 把这个簇装了进来。

第三重身份:功率谱

同一件事在频域里看更清楚。平稳 Hawkes 过程(指数核)的功率谱密度是

S(ω)=Λ2π∣1−ϕ^(ω)∣−2,ϕ^(ω)=∫0∞ϕ(s)e−iωsds=αβ+iωS(\omega) = \frac{\Lambda}{2\pi} \left|1 - \hat{\phi}(\omega)\right|^{-2}, \qquad \hat{\phi}(\omega) = \int_0^\infty \phi(s) e^{-i\omega s} ds = \frac{\alpha}{\beta + i\omega}

代入指数核并整理:

S(ω)=Λ2π⋅β2+ω2(β−α)2+ω2S(\omega) = \frac{\Lambda}{2\pi} \cdot \frac{\beta^2 + \omega^2}{(\beta - \alpha)^2 + \omega^2}

两端各读一次。ω→∞\omega \to \infty(很短的时间尺度)时 S→Λ/2πS \to \Lambda / 2\pi,这是泊松基线——在足够细的时间分辨率上,你看不出自激励,因为聚集是慢变量。ω→0\omega \to 0(长时间窗)时

S(0)=Λ2π⋅β2(β−α)2=Λ2π(1−n)2S(0) = \frac{\Lambda}{2\pi} \cdot \frac{\beta^2}{(\beta-\alpha)^2} = \frac{\Lambda}{2\pi (1-n)^2}

低频端相对泊松抬高了 1/(1−n)21/(1-n)^2 倍——和上一节的 Fano 因子是同一个数,这不是巧合,长窗计数的方差本来就是谱在零频附近的取值。

转折发生在 ω≈β−α=β(1−n)\omega \approx \beta - \alpha = \beta(1 - n),对应的时间尺度是 1/[β(1−n)]1/[\beta(1-n)]。注意它比单个核的衰减时间 1/β1/\beta 长,长了 1/(1−n)1/(1-n) 倍:一次激励在 1/β1/\beta 的尺度上消退,但一整条级联要用更久才平息,nn 越接近 1 拖得越久。

经验上,成交时刻数据的谱确实是这个形状。拟合它可以反推 μ\mu、β\beta 和 nn,作为极大似然之外的一条独立验证路径。

强度 SDE 与模拟

指数核还有一个好处:强度满足一个能直接积分的 SDE。

dλt=β(μ−λt) dt+α dNtd\lambda_t = \beta(\mu - \lambda_t) \, dt + \alpha \, dN_t

其中 NtN_t 是计数过程。事件之间 λt\lambda_t 以速率 β\beta 向 μ\mu 均值回归,每个事件让它跳 α\alpha。这是一个连续均值回归加离散跳跃的结构,而它的长期平均水平就是前面那个 μ/(1−n)\mu/(1-n)。

模拟直接照着这个结构走:事件之间按 λt=μ+(λTi−μ)e−β(t−Ti)\lambda_t = \mu + (\lambda_{T_i} - \mu) e^{-\beta(t - T_i)} 衰减,每个事件处 λTi+=λTi−+α\lambda_{T_i^+} = \lambda_{T_i^-} + \alpha。因为强度在事件之间只降不升,当前强度就是接下来一整段的上界,这让 Ogata 的稀疏(thinning)算法特别高效:先按上界 λˉ\bar\lambda 的泊松过程抽一个候选时刻,再按真实强度与上界之比接受或拒绝。

import numpy as np

def simulate_hawkes(mu, alpha, beta, T, seed=42):
    """Simulate a Hawkes process with exponential kernel via Ogata's thinning."""
    rng = np.random.default_rng(seed)
    if alpha / beta >= 1:
        raise ValueError("Process is explosive (branching ratio >= 1).")

    t = 0.0
    lam = mu            # intensity at t = 0, with an empty history
    events = []

    while True:
        # The intensity only decays between events, so its current value is a
        # valid upper bound for the whole interval ahead. Refreshing the bound
        # at every step is what keeps the acceptance rate high.
        lam_bar = lam
        dt = rng.exponential(1.0 / lam_bar)
        t += dt
        if t >= T:
            break
        lam = mu + (lam_bar - mu) * np.exp(-beta * dt)   # decayed intensity
        if rng.uniform() < lam / lam_bar:                # accept the candidate
            events.append(t)
            lam += alpha                                 # the jump
    return np.array(events)

有两个细节值得指出。一是上界必须每步刷新:如果只在开头取一次上界并且只增不减,算法依然正确,但拒绝率会随着时间越来越高,模拟变得很慢。二是这里从 λ0=μ\lambda_0 = \mu 起步,对应”t=0t = 0 之前没有历史”;想要平稳样本,扔掉开头一段预热。算法在时间上没有离散化误差,NN 个事件的代价是 O(N)\mathcal{O}(N),常数很小。

校准:把 nn 估出来

给定观测到的事件时刻 {T1,…,TN}\{T_1, \ldots, T_N\},对数似然是

log⁡L=−∫0Tλ(t) dt+∑i=1Nlog⁡λ(Ti)\log L = -\int_0^T \lambda(t) \, dt + \sum_{i=1}^N \log \lambda(T_i)

第一项是补偿子,对指数核可以解析算出:∫0Tλ(t)dt=Tμ+∑iαβ(1−e−β(T−Ti))\int_0^T \lambda(t)dt = T\mu + \sum_i \frac{\alpha}{\beta}\left(1 - e^{-\beta(T - T_i)}\right)。第二项配上指数核的递推,也是 O(N)\mathcal{O}(N)。于是每次求值都很便宜,梯度上升几次迭代就收敛。更复杂的核就只能靠数值梯度;指数核下 EM 也可用,固定 β\beta 时 M 步有闭式,β\beta 本身仍需数值搜索。在标准正则条件下,MLE 是相合的、渐近正态的,标准误可以从 Fisher 信息算。

落到成交数据上,流程大致是:取一段样本期内该资产每笔成交的时戳;只保留正常交易时段;按上面两项拼出对数似然;用 scipy.optimize.minimize 配合几个不同初值去优化,避开局部最优;最后做健全性检查——分支比必须落在 0 和 1 之间,衰减速率应当和这个资产的成交频率对得上(高频品种快,低频品种慢)。

参数各有直白的解释:μ\mu 是外生订单的速率(不是由之前订单引起的那些),α\alpha 是单次事件带来的激励幅度,β\beta 是激励的衰减速率,1/β1/\beta 就是影响消退的时间尺度,而 n=α/βn = \alpha/\beta 是后代订单的占比。

第四重身份:最容易被低估的那个数

MLE 相合且渐近正态,但有限样本下的偏差可能不小,而且方向是有规律的:分支比通常被向下低估。

原因在于你只看到级联的一次实现。如果这段样本里级联恰好比平均更短,你估出的 α\alpha 就偏小。nn 越接近 1,观测窗口越短,偏差越严重——而这恰恰是你最想把 nn 估准的那个区间。对策是常规的:用足够长的观测窗(一个交易日起步),可能的话跨资产合并数据,以及用自助法或刀切法做偏差修正。

还有一个更大的陷阱:nn 的估计值强烈依赖于你选的核族和时间尺度。同一批数据,用指数核在秒级尺度上估,流动股票的分支比常落在 0.3-0.7;换成幂律核、把记忆拉长,估计会显著上移。Hardiman、Bercot 和 Bouchaud (2013) 用幂律核得到接近 1 的分支比,并据此讨论市场的”临界自反性”。这个分歧至今没有定论,实用的态度是:分支比不是资产的固有属性,它是”核族 + 时间尺度”的函数,报告 nn 的时候必须把这两样一起报出来。

应用一:高频交易中的订单到达

限价订单簿里的订单到达是 Hawkes 最成功的应用场景。自激励捕捉的事实很直白:大单会触发跟随单,市场参与者在对成交流里隐含的信息作反应。经验上衰减速率 β\beta 的量级从秒到分钟,随资产而变。

实务上 Hawkes 模型用在三处。市场冲击建模:通过模拟跟随单的级联来预测一笔大单会把价格推多远。最优执行:决定怎么切分大单以最小化冲击。流动性提供:设置买卖价差时把被知情流选走的概率算进去。这个模型现在是学术市场微观结构的标配,也被若干交易公司在用。

在这三处里,分支比都是最要紧的那个参数,因为它度量的是订单流对干预的脆弱程度。nn 高意味着小的干预会被级联放大成大的效果——你自己的单子也会被放大,这既是机会也是风险;nn 低意味着流更稳健,你推一下它就弹回去。这是 nn 在交易层面的读法,和它在方差、在功率谱里的读法是同一件事。

应用二:信用违约级联

在信用风险里违约是成簇的:一家公司违约,它的交易对手和竞争对手更可能跟着违约。这就是违约级联。

Hawkes 过程可以给组合里违约的到达建模,新违约的强度依赖于过去的违约,核代表困境的传播。对 nn 个信用的组合,

λi(t)=μi+∑Tj<tϕij(t−Tj)\lambda_i(t) = \mu_i + \sum_{T_j < t} \phi_{ij}(t - T_j)

其中 ϕij\phi_{ij} 是信用 jj 的违约对信用 ii 违约强度的影响。交叉核 ϕij\phi_{ij}(i≠ji \neq j)捕捉传染,对角核 ϕii\phi_{ii} 捕捉单个信用违约的自相关(对个体罕见,对组合相关)。

难点在数据:违约本来就稀少,ϕij\phi_{ij} 有 n2n^2 个自由度而观测只有几十个事件。2008 年金融危机提供了一次估计传染效应的自然实验,多数校准得到的交叉核效应中等但不可忽略。这里报告的分支比要格外小心——样本量小,前一节那个向下偏差会很大。

应用三:操作风险与保险

操作损失事件(欺诈、系统故障、差错)在时间上同样成簇:一次大事件之后往往跟着更多,因为根因分析会挖出相关问题,监管注意力也会转过来。保险理赔是类似的形态,飓风、地震之后理赔扎堆,用 Hawkes 建模这种聚集可以改善准备金估计。

操作风险里的分支比通常估在 0.1-0.5,随事件类型而变:欺诈事件的分支比更高(一起欺诈会牵出相关的几起),系统故障更低(基础设施彼此独立)。这些数字同样受核族和窗口影响,只能当量级看。

多元与标记:两个必要的扩展

上面几个应用其实都超出了一维模型。多个相互作用的点过程要用多元 Hawkes,强度是一个向量:

λi(t)=μi+∑j∑Tjk<tϕij(t−Tjk)\lambda_i(t) = \mu_i + \sum_j \sum_{T_j^k < t} \phi_{ij}(t - T_j^k)

其中 TjkT_j^k 是过程 jj 的第 kk 个事件,ϕij\phi_{ij} 是从过程 jj 到过程 ii 的核。分支比在这里变成一个矩阵 Nij=∫ϕij(s) dsN_{ij} = \int \phi_{ij}(s) \, ds,平稳性条件相应变成 NN 的谱半径小于 1——还是同一个判据,只是从标量升到了矩阵的谱。这是建模相关成交流(不同资产)、违约级联(多个信用)和跨业务线操作风险的基础。高维系统(比如 100 个以上的信用)校准很吃力,实践中要靠矩闭合或低秩结构做近似。

另一个方向是标记:每个事件除时刻外还带额外信息。成交的标记是大小、方向和价格,违约的标记是违约损失率,操作事件的标记是严重性。标记 Hawkes 让强度依赖于过去事件的标记,

λ(t)=μ+∑Ti<tϕ(t−Ti,Mi)\lambda(t) = \mu + \sum_{T_i < t} \phi(t - T_i, M_i)

其中 MiM_i 是事件 ii 的标记。市场微观结构里最常见的用法是让振幅随成交量变化,标准核写成 ϕ(s,m)=α(m)e−βs\phi(s, m) = \alpha(m) e^{-\beta s}。大单比小单激励更强,这是数据里很稳定的一条。

它不是 Cox 过程

有一个说法在信用风险文献里流传得很广,需要纠正:Hawkes 过程不是双重随机(Cox)过程的特例。

两者确实都写成”随机的强度 + 条件泊松”,但 Cox 过程要求强度由一个外生的随机源驱动,且条件于这条强度路径,事件才是泊松的。Hawkes 的强度是内生的,由它自己的事件历史决定,条件于强度就等于条件于事件本身,那个条件泊松结构不成立。两者共同的框架是条件强度(compensator)而非双重随机性。

区分这个不是咬文嚼字。它正是 nn 有意义的原因:Cox 模型里聚集全部来自外部驱动因子,Hawkes 模型里聚集来自过程自身,而 nn 度量的就是有多少聚集是内生的。把一批事件同时用两种模型拟合,得到的风险含义完全不同——外生驱动的聚集可以靠观测那个驱动因子来预测,内生的聚集只能靠观测事件本身。

更一般的模型可以两者都要:把背景速率 μ\mu 本身做成随机的(比如一个 CIR 过程),就得到一个既有外生冲击、又有内生级联的模型。此时 nn 仍然回答同一个问题,只是分母上多了一块外生方差。

线性 Hawkes 的边界

上面讨论的都是”线性”Hawkes:强度线性依赖于过去事件(就是定义里那个求和)。这是最常见的形式,它有三条明确的限制。只激励不抑制:过去事件只能抬高未来强度,没有办法表达”刚发生过所以接下来不太会再发生”。衰减单调:核通常随距离事件的时间单调递减。外生速率平稳:背景速率 μ\mu 是常数。

想突破就得换模型。非线性 Hawkes 让强度通过一个非线性函数依赖于过去事件,能表达抑制和饱和,比如订单取消模式里那种”排队已经很长了所以新单不来”的效应。带标记的 前面讲过。带外生驱动的 把 μ\mu 做成随机过程。对大多数金融应用,线性 Hawkes 够用,扩展留给特定现象。

和其他点过程模型摆在一起

泊松过程没有聚集也没有激励,是基线。更新过程的到达间隔 i.i.d. 但非指数,能产生一些聚集,但那是间隔分布的形状带来的,不是自激励——它没有记忆,前面十次事件密集不会让第十一次更早到来。状态空间模型让强度依赖于一个未观测的马尔可夫状态,更一般但更难校准,而且它把聚集归因于外生状态,这一点上和 Cox 过程是一路的。

离散时间里的对应物是整数值自回归一类的计数模型(INAR 及其亲戚):当期计数依赖于往期计数,机制上和 Hawkes 的自激励对应,只是时间被分了格。数据天然按格聚合时(比如日度计数)用它们更自然;事件时戳是连续的,就该用 Hawkes。顺带一提,Hawkes 的分支结构和 Yule、优先连接一类模型共享同一套数学(都是分支过程),但它们不是同一个模型的连续/离散版本,别把这层类比推得太远。

在这一排里,Hawkes 是捕捉自激励的最简单模型:分支解释让它可解释,指数核版本解析可处理,多元和标记扩展覆盖了大多数应用。

经济学解释与微观结构

Bowsher (2007) 把多元点过程方法系统地引入了市场事件的计量分析,成交、报价变动等可以放进同一个耦合的强度系统里估计。这类工作把经验规律(成交聚集)和经济学上的原始概念(信息到达、交易者异质性、策略性择时)连了起来,让拟合出的参数不只是拟合参数。

需要说清楚的是,这类模型给的是计量框架和可解释性,不是一个从均衡推出 Hawkes 形式的定理。实际工作里你不需要微观基础,你只是把 Hawkes 拟合到数据;但知道参数的经济含义能帮你判断校准结果是否离谱。

这条线的现代形态是限价订单簿模型。订单簿被建模成一个排队系统,Hawkes 过程作为各个价格档位上订单到达的模型进入。一个完整的 LOB 模型有多个耦合的 Hawkes:市价买、市价卖、限价买、限价卖、撤单,各一个甚至各若干个,交叉激励捕捉它们之间的依赖(一笔市价买单可以在更低价位触发限价买单,如此等等)。它计算量大,但能生成真实感的订单流;校准有难度,对流动资产是可行的。

收尾

如果你手上有一批在时间上成簇的事件数据,拟合一个 Hawkes 过程,然后读两个数。1/β1/\beta 告诉你激励的时间尺度。nn 告诉你聚集里有多少是内生的——同时它也就告诉了你方差会比泊松大多少((1−n)−2(1-n)^{-2} 倍)、长窗计数的谱抬高多少(同一个倍数)、级联平息要多久(1/[β(1−n)]1/[\beta(1-n)])、以及这个系统对干预有多敏感。报告这个数的时候,把核族和时间尺度一并报上,并且记住有限样本会让它偏低。

参考文献:Hawkes (1971), “Spectra of Some Self-Exciting and Mutually Exciting Point Processes”, Biometrika 58(1): 83-90,原始论文,功率谱那一节就出自这里;Bacry, Mastromatteo & Muzy (2015), “Hawkes Processes in Finance”, Market Microstructure and Liquidity 1(1),金融应用的标准综述,认真做这方面工作应该读它;Hardiman, Bercot & Bouchaud (2013), “Critical reflexivity in financial markets: a Hawkes process analysis”, European Physical Journal B,关于分支比估计对核族的依赖;Bowsher (2007), “Modelling security market events in continuous time: Intensity based, multivariate point process models”, Journal of Econometrics,多元点过程的计量框架。