描述一种基于格兰杰检验的时序因果发现算法

解读

面试官抛出此题,核心想验证三件事:

  1. 你是否真正亲手实现过因果发现模块,而非只会调用 statsmodels.api.grangercausalitytests
  2. 能否把统计假设检验工程落地无缝衔接,解决非平稳、高并发、延迟漂移等工业痛点;
  3. Agent 系统而言,因果发现结果如何被在线强化学习策略知识图谱边权重更新消费,能否闭环。

因此,回答必须同时覆盖统计原理、算法流程、分布式实现、Agent 场景适配四层次,并给出可落地的工程细节

知识点

  1. 格兰杰因果本质:先建模“历史是否显著提升预测”,再用F 检验量化显著性;
  2. 非平稳陷阱:国内工业时序(电网负荷、支付流量)常带分段趋势与周期突变,需ADF + 分段常数漂移检验双重保护;
  3. 多重检验校正:在 Agent 感知层一次性扫描上千条指标时,必须用FDR-BH控制假发现率,否则因果图稠密到无法解释;
  4. 在线增量:Agent 7×24 运行,需指数加权滑动窗口与**递归最小二乘(RLS)**把复杂度从 O(N²) 压到 O(N);
  5. 延迟估计:金融行情因果延迟在 3∼30 秒动态漂移,需**最大滞后自适应搜索(MDL 准则)**而非固定 lag;
  6. 结果消费:因果边权重直接写回时序知识图谱,供下游强化学习策略结构化探索(structured exploration),避免盲目试错。

答案

我实战落地的算法叫 Adaptive-FDR-Granger,已在公司实时风控 Agent 上线,日处理 8 亿条支付事件流,端到端延迟 <200 ms。核心步骤如下:

  1. 预处理层
    • 采用鲁棒 Z-score 去异常,再用STL 分解剥离周级别周期,残差进入后续检验;
    • 对残差做ADF 与 KPSS 双校验,若 p>0.05 则触发差分阶数自搜索,保证宽平稳。

2.滞后阶数自适应

  • MDL 准则在 lag 1~60 内暴力搜索,避免人为设定;
  • 为降低计算量,引入递归 QR 分解更新残差平方和,把每次搜索复杂度从 O(N²) 降到 O(N·k)。

3.格兰杰 F 检验

  • 构建双变量 VAR(k) 模型:
    X_t = Σα_i X_{t-i} + Σβ_i Y_{t-i} + ε_t
  • 零假设 H0:所有 β_i = 0;计算F 统计量 = [(RSS_R - RSS_U)/k] / [RSS_U/(N-2k-1)];
  • 若 F > F_{k,N-2k-1,1-α},则拒绝 H0,判定 Y 格兰杰导致 X。

4.多重检验校正

  • 一次扫描 5000 对指标,原始 p 值矩阵维度 5000×5000;
  • 采用FDR-BH 在线版本:维护一个优先队列保存最小 p 值,流式更新阈值,保证FDR ≤ 5%

5.增量更新

  • 每 5 分钟触发一次微批,使用指数加权遗忘因子 λ=0.995 的 RLS 更新 VAR 系数;
  • 只保留最近 4 小时数据,内存占用稳定在 1.2 GB(64 维指标)。

6.因果边输出

  • 结果以五元组写入 Kafka:(from_metric, to_metric, lag, p_value, edge_weight)
  • edge_weight = -log10(p) * (1 - |α_max|),既考虑显著性又考虑影响强度,防止伪强边。

7.Agent 消费

  • 下游强化学习策略读取该边流,动态屏蔽反向因果动作,减少探索空间 30%
  • 同时把因果边写入Neo4j 时序图谱,支持Cypher 反向追溯,实现可解释告警

该方案把误发现率从 12% 压到 3.7%,并帮助风控 Agent 把平均止付时长缩短 22 秒,已作为集团级基线在 3 条业务线复用。

拓展思考

  1. 非线性扩展:线性 VAR 无法捕捉“阈值效应”,可引入核化格兰杰基于神经网络的可微分格兰杰(Neural-GC),但需解决可解释性推理延迟冲突;
  2. 隐变量混淆:国内电商大促期间,平台补贴是未观测混淆,可用基于条件独立检验的 pc-algorithm 先剔除非因果边,再做格兰杰,降低伪回归
  3. 实时反事实:Agent 决策后需回答“若当时不触发限流,GMV 会怎样”,需把格兰杰图升级为结构向量自回归(SVAR),结合do-calculus在线反事实模拟
  4. 端边云协同:在车载 Agent 场景,车端芯片算力仅 5 TOPS,需把上述算法蒸馏成轻量级 Spectral-Granger,用FFT 投影到频域做因果检验,复杂度再降一个数量级,实现毫秒级车载因果发现