Hawkes 过程:金融的自激励点过程
分支比 n 是这个模型的中心:它同时是平稳性条件、内生事件的占比、方差的放大倍数、功率谱低频端的抬升幅度,也是校准里最容易被低估的那个数。
金融里的随机性大多来自外部。布朗运动是外生的,即使 Lévy 过程,跳跃也在外生的时刻到达。Hawkes 过程不一样:它自激励,过去的事件会抬高未来事件发生的概率。交易带来交易,违约成串,新闻一层层级联——这些不是模型的附加项,而是它的定义本身。
这个模型的技术内容基本围绕一个数展开:分支比 。它是平稳性的判据,是内生事件占全部事件的比例,是方差相对泊松被放大的倍数,是功率谱在低频端抬起来的幅度,也是校准时最容易被低估的那个量。下面每一节其实都在从一个新角度算同一个 。
从点过程到 Hawkes 强度
实数线上的点过程是一组随机的、可数的事件时刻 :一只股票的成交时刻,一个信用组合的违约时刻,地震发生的时刻,限价订单簿里订单到达的时刻。
最简单的是泊松过程,事件以常数速率 到达, 内的事件数服从均值 的泊松分布,到达间隔是均值 的 i.i.d. 指数变量。放松一步是非齐次泊松过程,速率 随时间变化,条件于速率,事件仍然彼此独立。
Hawkes 过程让这个速率依赖于已经发生的事件。时刻 的强度是
其中 是背景速率, 是核函数,描述一个过去事件如何抬高之后的强度。 保证即使一个事件都没发生过,过程也有正的强度; 通常递减,久远的事件影响小于新近的事件。
注意这里的关键差别:非齐次泊松的 是外生给定的一条曲线,Hawkes 的 是过程自己写出来的。
核函数与分支比
决定激励怎么衰减。指数核 给出速率为 的 AR(1) 式衰减,是最常用的一个——用它的时候强度 本身就是马尔可夫的,整个模型因此解析上可处理。幂律核 衰减更慢,用来捕捉长记忆。指数和 是一个能逼近任意核的灵活参数化。
不管选哪个核,有一个泛函把它压缩成一个数:
对指数核就是 。这就是分支比,本文剩下的部分基本都在解释它。
第一重身份:平稳性
过程平稳当且仅当 。 时强度无界增长,过程爆炸。
直觉来自 Hawkes 过程的分支结构:把每个事件看成一个”父”,它按强度 的泊松过程生出”后代”,后代又成为自己后代的父,递归下去。一个父平均生 个直接后代,所以整个家族是一个分支过程—— 时级联终会死掉,一个祖先的后代总数几乎必然有限; 时它会一直长。
这个结构是 Hawkes 过程真正特别的地方。它不只是一个强度公式,它是一个有清晰概率解释的生成模型:每个事件要么是外部到来的”移民”(速率 ),要么是某个已有事件的后代。级联的形状可以用生成函数分析。
顺带得到 的第二个读法:稳态下,后代事件占全部事件的比例正好是 。 意味着一半的事件是被别的事件引发的。
第二重身份:方差放大多少
平稳 Hawkes 过程的平均强度是
即每一个移民平均带来 个事件(自己加上整条后代链)。 时它发散,这是平稳性条件的另一种说法。
计数的方差比这更有意思。它随 线性增长,但系数比泊松大:
于是 Fano 因子(方差比均值)是
泊松过程的 Fano 因子恒等于 1。 时 Hawkes 是 4, 时是约 11。同样的平均事件数,方差可以大一个数量级,而这个倍数完全由 决定。
这正是交易数据里看到的那个经验规律:成交在时间上成簇,一笔大单之后跟着一串。用泊松过程去描述,你会系统性地低估波动——不是低估一点,是低估 倍。Hawkes 把这个簇装了进来。
第三重身份:功率谱
同一件事在频域里看更清楚。平稳 Hawkes 过程(指数核)的功率谱密度是
代入指数核并整理:
两端各读一次。(很短的时间尺度)时 ,这是泊松基线——在足够细的时间分辨率上,你看不出自激励,因为聚集是慢变量。(长时间窗)时
低频端相对泊松抬高了 倍——和上一节的 Fano 因子是同一个数,这不是巧合,长窗计数的方差本来就是谱在零频附近的取值。
转折发生在 ,对应的时间尺度是 。注意它比单个核的衰减时间 长,长了 倍:一次激励在 的尺度上消退,但一整条级联要用更久才平息, 越接近 1 拖得越久。
经验上,成交时刻数据的谱确实是这个形状。拟合它可以反推 、 和 ,作为极大似然之外的一条独立验证路径。
强度 SDE 与模拟
指数核还有一个好处:强度满足一个能直接积分的 SDE。
其中 是计数过程。事件之间 以速率 向 均值回归,每个事件让它跳 。这是一个连续均值回归加离散跳跃的结构,而它的长期平均水平就是前面那个 。
模拟直接照着这个结构走:事件之间按 衰减,每个事件处 。因为强度在事件之间只降不升,当前强度就是接下来一整段的上界,这让 Ogata 的稀疏(thinning)算法特别高效:先按上界 的泊松过程抽一个候选时刻,再按真实强度与上界之比接受或拒绝。
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)
有两个细节值得指出。一是上界必须每步刷新:如果只在开头取一次上界并且只增不减,算法依然正确,但拒绝率会随着时间越来越高,模拟变得很慢。二是这里从 起步,对应” 之前没有历史”;想要平稳样本,扔掉开头一段预热。算法在时间上没有离散化误差, 个事件的代价是 ,常数很小。
校准:把 估出来
给定观测到的事件时刻 ,对数似然是
第一项是补偿子,对指数核可以解析算出:。第二项配上指数核的递推,也是 。于是每次求值都很便宜,梯度上升几次迭代就收敛。更复杂的核就只能靠数值梯度;指数核下 EM 也可用,固定 时 M 步有闭式, 本身仍需数值搜索。在标准正则条件下,MLE 是相合的、渐近正态的,标准误可以从 Fisher 信息算。
落到成交数据上,流程大致是:取一段样本期内该资产每笔成交的时戳;只保留正常交易时段;按上面两项拼出对数似然;用 scipy.optimize.minimize 配合几个不同初值去优化,避开局部最优;最后做健全性检查——分支比必须落在 0 和 1 之间,衰减速率应当和这个资产的成交频率对得上(高频品种快,低频品种慢)。
参数各有直白的解释: 是外生订单的速率(不是由之前订单引起的那些), 是单次事件带来的激励幅度, 是激励的衰减速率, 就是影响消退的时间尺度,而 是后代订单的占比。
第四重身份:最容易被低估的那个数
MLE 相合且渐近正态,但有限样本下的偏差可能不小,而且方向是有规律的:分支比通常被向下低估。
原因在于你只看到级联的一次实现。如果这段样本里级联恰好比平均更短,你估出的 就偏小。 越接近 1,观测窗口越短,偏差越严重——而这恰恰是你最想把 估准的那个区间。对策是常规的:用足够长的观测窗(一个交易日起步),可能的话跨资产合并数据,以及用自助法或刀切法做偏差修正。
还有一个更大的陷阱: 的估计值强烈依赖于你选的核族和时间尺度。同一批数据,用指数核在秒级尺度上估,流动股票的分支比常落在 0.3-0.7;换成幂律核、把记忆拉长,估计会显著上移。Hardiman、Bercot 和 Bouchaud (2013) 用幂律核得到接近 1 的分支比,并据此讨论市场的”临界自反性”。这个分歧至今没有定论,实用的态度是:分支比不是资产的固有属性,它是”核族 + 时间尺度”的函数,报告 的时候必须把这两样一起报出来。
应用一:高频交易中的订单到达
限价订单簿里的订单到达是 Hawkes 最成功的应用场景。自激励捕捉的事实很直白:大单会触发跟随单,市场参与者在对成交流里隐含的信息作反应。经验上衰减速率 的量级从秒到分钟,随资产而变。
实务上 Hawkes 模型用在三处。市场冲击建模:通过模拟跟随单的级联来预测一笔大单会把价格推多远。最优执行:决定怎么切分大单以最小化冲击。流动性提供:设置买卖价差时把被知情流选走的概率算进去。这个模型现在是学术市场微观结构的标配,也被若干交易公司在用。
在这三处里,分支比都是最要紧的那个参数,因为它度量的是订单流对干预的脆弱程度。 高意味着小的干预会被级联放大成大的效果——你自己的单子也会被放大,这既是机会也是风险; 低意味着流更稳健,你推一下它就弹回去。这是 在交易层面的读法,和它在方差、在功率谱里的读法是同一件事。
应用二:信用违约级联
在信用风险里违约是成簇的:一家公司违约,它的交易对手和竞争对手更可能跟着违约。这就是违约级联。
Hawkes 过程可以给组合里违约的到达建模,新违约的强度依赖于过去的违约,核代表困境的传播。对 个信用的组合,
其中 是信用 的违约对信用 违约强度的影响。交叉核 ()捕捉传染,对角核 捕捉单个信用违约的自相关(对个体罕见,对组合相关)。
难点在数据:违约本来就稀少, 有 个自由度而观测只有几十个事件。2008 年金融危机提供了一次估计传染效应的自然实验,多数校准得到的交叉核效应中等但不可忽略。这里报告的分支比要格外小心——样本量小,前一节那个向下偏差会很大。
应用三:操作风险与保险
操作损失事件(欺诈、系统故障、差错)在时间上同样成簇:一次大事件之后往往跟着更多,因为根因分析会挖出相关问题,监管注意力也会转过来。保险理赔是类似的形态,飓风、地震之后理赔扎堆,用 Hawkes 建模这种聚集可以改善准备金估计。
操作风险里的分支比通常估在 0.1-0.5,随事件类型而变:欺诈事件的分支比更高(一起欺诈会牵出相关的几起),系统故障更低(基础设施彼此独立)。这些数字同样受核族和窗口影响,只能当量级看。
多元与标记:两个必要的扩展
上面几个应用其实都超出了一维模型。多个相互作用的点过程要用多元 Hawkes,强度是一个向量:
其中 是过程 的第 个事件, 是从过程 到过程 的核。分支比在这里变成一个矩阵 ,平稳性条件相应变成 的谱半径小于 1——还是同一个判据,只是从标量升到了矩阵的谱。这是建模相关成交流(不同资产)、违约级联(多个信用)和跨业务线操作风险的基础。高维系统(比如 100 个以上的信用)校准很吃力,实践中要靠矩闭合或低秩结构做近似。
另一个方向是标记:每个事件除时刻外还带额外信息。成交的标记是大小、方向和价格,违约的标记是违约损失率,操作事件的标记是严重性。标记 Hawkes 让强度依赖于过去事件的标记,
其中 是事件 的标记。市场微观结构里最常见的用法是让振幅随成交量变化,标准核写成 。大单比小单激励更强,这是数据里很稳定的一条。
它不是 Cox 过程
有一个说法在信用风险文献里流传得很广,需要纠正:Hawkes 过程不是双重随机(Cox)过程的特例。
两者确实都写成”随机的强度 + 条件泊松”,但 Cox 过程要求强度由一个外生的随机源驱动,且条件于这条强度路径,事件才是泊松的。Hawkes 的强度是内生的,由它自己的事件历史决定,条件于强度就等于条件于事件本身,那个条件泊松结构不成立。两者共同的框架是条件强度(compensator)而非双重随机性。
区分这个不是咬文嚼字。它正是 有意义的原因:Cox 模型里聚集全部来自外部驱动因子,Hawkes 模型里聚集来自过程自身,而 度量的就是有多少聚集是内生的。把一批事件同时用两种模型拟合,得到的风险含义完全不同——外生驱动的聚集可以靠观测那个驱动因子来预测,内生的聚集只能靠观测事件本身。
更一般的模型可以两者都要:把背景速率 本身做成随机的(比如一个 CIR 过程),就得到一个既有外生冲击、又有内生级联的模型。此时 仍然回答同一个问题,只是分母上多了一块外生方差。
线性 Hawkes 的边界
上面讨论的都是”线性”Hawkes:强度线性依赖于过去事件(就是定义里那个求和)。这是最常见的形式,它有三条明确的限制。只激励不抑制:过去事件只能抬高未来强度,没有办法表达”刚发生过所以接下来不太会再发生”。衰减单调:核通常随距离事件的时间单调递减。外生速率平稳:背景速率 是常数。
想突破就得换模型。非线性 Hawkes 让强度通过一个非线性函数依赖于过去事件,能表达抑制和饱和,比如订单取消模式里那种”排队已经很长了所以新单不来”的效应。带标记的 前面讲过。带外生驱动的 把 做成随机过程。对大多数金融应用,线性 Hawkes 够用,扩展留给特定现象。
和其他点过程模型摆在一起
泊松过程没有聚集也没有激励,是基线。更新过程的到达间隔 i.i.d. 但非指数,能产生一些聚集,但那是间隔分布的形状带来的,不是自激励——它没有记忆,前面十次事件密集不会让第十一次更早到来。状态空间模型让强度依赖于一个未观测的马尔可夫状态,更一般但更难校准,而且它把聚集归因于外生状态,这一点上和 Cox 过程是一路的。
离散时间里的对应物是整数值自回归一类的计数模型(INAR 及其亲戚):当期计数依赖于往期计数,机制上和 Hawkes 的自激励对应,只是时间被分了格。数据天然按格聚合时(比如日度计数)用它们更自然;事件时戳是连续的,就该用 Hawkes。顺带一提,Hawkes 的分支结构和 Yule、优先连接一类模型共享同一套数学(都是分支过程),但它们不是同一个模型的连续/离散版本,别把这层类比推得太远。
在这一排里,Hawkes 是捕捉自激励的最简单模型:分支解释让它可解释,指数核版本解析可处理,多元和标记扩展覆盖了大多数应用。
经济学解释与微观结构
Bowsher (2007) 把多元点过程方法系统地引入了市场事件的计量分析,成交、报价变动等可以放进同一个耦合的强度系统里估计。这类工作把经验规律(成交聚集)和经济学上的原始概念(信息到达、交易者异质性、策略性择时)连了起来,让拟合出的参数不只是拟合参数。
需要说清楚的是,这类模型给的是计量框架和可解释性,不是一个从均衡推出 Hawkes 形式的定理。实际工作里你不需要微观基础,你只是把 Hawkes 拟合到数据;但知道参数的经济含义能帮你判断校准结果是否离谱。
这条线的现代形态是限价订单簿模型。订单簿被建模成一个排队系统,Hawkes 过程作为各个价格档位上订单到达的模型进入。一个完整的 LOB 模型有多个耦合的 Hawkes:市价买、市价卖、限价买、限价卖、撤单,各一个甚至各若干个,交叉激励捕捉它们之间的依赖(一笔市价买单可以在更低价位触发限价买单,如此等等)。它计算量大,但能生成真实感的订单流;校准有难度,对流动资产是可行的。
收尾
如果你手上有一批在时间上成簇的事件数据,拟合一个 Hawkes 过程,然后读两个数。 告诉你激励的时间尺度。 告诉你聚集里有多少是内生的——同时它也就告诉了你方差会比泊松大多少( 倍)、长窗计数的谱抬高多少(同一个倍数)、级联平息要多久()、以及这个系统对干预有多敏感。报告这个数的时候,把核族和时间尺度一并报上,并且记住有限样本会让它偏低。
参考文献: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,多元点过程的计量框架。