你在观察一家商店:降价后销量上涨,广告投放也随之增加。到底是降价带动销量,还是广告起了作用?更麻烦的是,节假日、淡旺季和经营策略还会改变这些关系。把几年数据揉成一张平均图,可能得到一个现实中从未存在过的答案。
Causal-TS 想解决的正是这类问题。它是一套开源 Python 工具箱,面向高维、非平稳的多变量时间序列。所谓“高维”,是同时观察许多变量;“非平稳”则指变量之间的关系会随时间变化。论文作者 Mohammad Fesanghary 把四种专用算法、若干经典方法、条件独立检验和分段流程收进了同一套接口。
先说清边界:因果发现(Causal Discovery)是根据观测数据和一组假设,寻找可能的因果结构。它给出候选答案,不等于随机试验已经证明了因果。本文所述功能、兼容性和测试结果均来自项目论文这一项信源,尚不能视为第三方验证。
四把工具,处理四种难题
Causal-TS 收录 CDNOTS、CDNOTS+、Cedar 和 Grace。它们不是四个名字不同、用途相同的按钮。
CDNOTS 在 PC 这一类“约束型”方法上加入时间约束,并用一个可包含时间、季节周期或区间标签的变量表示环境变化。它的思路是:关系变化本身也能提供线索,而不只是需要清理的噪声。
CDNOTS+ 改写了寻找图结构骨架的阶段。它采用类似 PCMCI+ 的程序,只围绕已经发现的父节点设置条件,目标是减少在“枢纽很多”的网络中过度控制变量。这里的父节点,可以理解为图中可能直接影响当前变量的上游节点。
Cedar 更偏向自回归场景——也就是一个变量的当前值会受到自己过去值影响的时间序列。它先选择值得检查的时间滞后,再进行能感知自回归结构的条件独立检验,并用稳定的 MCI 剪枝控制条件集合的增长。
Grace 则在 CDNOTS 找到的骨架上加入神经网络门控。门控像一排可学习的开关,用来决定哪些连接保留;正则化则约束模型不要无节制地保留边。
论文也把 GES、Granger、LASSO-VAR 和 LGES 封装进相同接口。Granger 因果的含义尤其容易误读:如果加入 的过去值能改善对 的预测,就说 Granger-causes 。它说明预测信息有先后,却不能在存在遗漏共同原因时直接证明真正的因果。
关系变了,就不要硬画一张图
这套工具箱最值得注意的设计,是“先分段,再发现”。结构突变指变量之间的关系在某个时点发生变化,例如洪水期和旱季遵循不同机制。Causal-TS 可以接入 PELT、HMM、CUSUM、KS、Levene、ensemble、quantile 和 seasonal 等变点检测器,先找出不同区段,再为每段设置参数并分别运行因果发现。
最后,用户可以用并集、多数票、加权、交集等方式汇总各段图。它不是假定世界始终稳定,而是允许“同一条边在不同阶段成立或消失”。这比把互相矛盾的时期硬揉成一张平均图更贴近问题本身,但分段是否正确也会直接影响后续结论。
工具还支持 AncestralKnowledge,让用户写入领域知识:既可以约束一条直接边,也可以约束一条祖先路径。换句话说,研究者可以告诉算法,哪些方向按常识或业务规则不可能出现。
统一接口真正省在哪里?
许多因果发现算法都依赖条件独立检验(CI test):控制其他变量后,检查两个变量是否仍有统计关联。算法会反复用这类检验删边或判断方向,因此换一种检验,最终图可能也会改变。
Causal-TS 提供统一的 CI 层,包含 ParCorr、KCI、SplitKCI、DFCIT、LinSig、RCOT、CMIknn 和 GCMI 八种检验,也允许单独调用。论文称八种检验均有基于 PyTorch 的 GPU 实现。在其合成数据计时中,最耗时的两项测试里,KCI 从 CPU 的 1.71 秒降到 GPU 的 0.60 秒,报告加速 2.9 倍;SplitKCI 从 0.79 秒降到 0.40 秒,报告加速 2.0 倍,结果为五次运行平均值。论文摘录没有保留该实验的数据规模和硬件配置,因此这些数字只能说明作者给定设置下的表现,不能外推成普遍速度优势。
使用流程被压缩为加载数据、运行发现、分析结果三步。项目还提供命令行界面、合成数据生成器,以及可选的 DoWhy 集成。结果对象可调用 .estimate_effect()、.fit_scm() 和 .counterfactual(),把候选结构继续送往效应估计、结构因果模型拟合和反事实分析。这里的“端到端”主要指工作流被接通,不代表从原始数据到因果结论可以自动跳过假设检查。
为什么现在值得关注?
这项工作的价值首先是工程编排。四种专用算法和四种既有方法共享接口与检验层,研究者更容易替换算法、比较结果,也不必为分段、画图和下游估计反复拼接工具。
其次,它把非平稳性从麻烦变成分析对象。时间序列有一个天然线索:原因应先于结果;机制随时间变化,有时还能帮助排除原本难以区分的方向。Causal-TS 把时间顺序、机制变化和分区发现放在同一条流程里,这比单独发布一种算法更方便实际试用。
论文称项目可通过 pip install causalts 安装,目标版本为 Python 3.10 以上;提交版本是 v0.25.0。作者还报告了 22 个 pytest 测试模块、覆盖 Python 3.10—3.12 的测试,以及 25 个示例 notebook。仓库地址为 https://github.com/bloomberg/causal-ts,代码采用 GPL-3.0-or-later 许可证。不过这些发布与兼容性信息仍来自项目方陈述。
局限与未知
- 论文明确说,工具假定多变量时间序列有足够采样;它本身不能解决隐藏混杂因素或选择偏差。隐藏混杂因素是没有被记录、却同时影响多个变量的原因。
- “高维”没有给出统一的变量规模、样本量门槛或适用上限。现有材料也没有四种专用算法与其他工具的准确率对比,因此不能据此宣称发现结果更好或适合超大规模数据。
- GPU 计时缺少数据规模和硬件配置;PyPI 可安装状态、Python 版本覆盖、仓库可访问性,以及 DoWhy 集成支持哪些具体估计任务,仍需独立核验。