Causal Forge 开源项目介绍
最近自己做了个开源项目,叫 Causal Forge ,核心目标是解决因果分析中「决策不可靠」的痛点。
一、项目背景:为什么做这个工具?
我们平时接触的「因果关系」,大多来自两个孤立的维度,最终导致决策靠“拍脑袋”:
- 文本侧:政策文件、研究报告、分析文章中提出的因果判断(比如“调降利率会带动工业生产回升”),有语义、可解释,但主观、不可证伪。
- 数据侧:时间序列等数据中挖掘出的影响关系,客观、可量化,但天生不区分「因果」和「相关」,缺乏业务语义。 写报告的人讲一套,跑数据的人看一套,到底哪些因果链条可信,没有统一标准——这就是 Causal Forge 要解决的核心问题。
二、核心思路:把“文本因果”和“数据因果”放进同一条流水线
不追求“自动生成厉害的因果图”,而是聚焦更朴素、更实用的目标:让因果结论可验证、可追溯、可复盘,具体流程如下:
- 从文本中抽取结构化的因果关系
- 从数据中挖掘候选因果边
- 将文本侧与数据侧的结果双向对撞、对齐
- 通过多轮严格验证,只保留真正站得住脚的因果链条
三、适用场景
目前更适合偏研究、审计类的场景,尤其适配:
- 宏观 / 政策传导分析
- 基本面研究(如投研、行业分析)
- 风险归因与复盘
- 研究结论复核(验证研报/报告中的因果逻辑)
四、核心技术栈
不重复造轮子,基于成熟工具组合,聚焦“流水线编排+证据管理”,核心技术包括:
- LLM + 结构化抽取:将文本中的因果关系抽成 Decision/Callback/Link 等结构化对象,避免模型自由发挥,确保输出规范。
- 因果工具链组合:底层复用 causal-learn 、Tigramite 、DoWhy 、EconML 等成熟库,负责因果发现、估计、反驳与验证。
- 时间序列因果验证:不止看相关性,重点校验时序方向、反向因果可能性、跨窗口稳定性。
- 强类型 Schema 设计:将因果链、证据、验证结果均封装为可追溯的数据结构,避免散乱脚本。
- 可复现实验流水线:配置、运行产物、验证报告、失败原因全部沉淀,支持重复复现,拒绝一次性分析。
五、独特功能(核心优势)
-
文本与数据因果双向验证(核心)
区别于“只做文本抽取”或“只做数据因果发现”的项目,强制让两边结果对撞,只有双方都支持的候选,才进入后续验证。
-
失败也留档,不只展示成功结论
每条因果链若未通过验证,会详细记录“卡在哪一步”“失败原因”(如时序不成立、稳定性不足),为复盘和迭代提供依据。
-
五道闸门式严格验证
验证不止一步,需依次通过:必要性、充分性、时序性、不可逆性、跨周期稳定性,全部通过才认定为可信因果链。
-
因果链条全链路可追溯
最终结论不是“模型认为 A 导致 B”,而是能回查到对应的原始文本段落、数据切片、验证参数和过程,确保可信。
-
偏研究/审计,而非黑盒预测器
核心价值不是“给答案”,而是“说明答案为什么可信”,适配研究、复核等需要严谨证据的场景。
六、核心模块说明
| 模块 | 职责 | 关键依赖 |
|---|---|---|
schema/ |
所有数据契约( Decision / Callback / CausalLink / CausalChain / Evidence ) | Pydantic v2 |
topdown/ |
文本 → 结构化 Decision/Callback 候选 | LLM via instructor, spaCy, CauseNet |
bottomup/ |
数据 → 候选因果边集(静态 + 时序) | causal-learn, Tigramite, DoWhy, EconML |
crosscheck/ |
语义对齐 + 双向取交集 + 冲突标注 | sentence-transformers, networkx |
validate/ |
五道闸门串联校验 + 失败原因记录 | DoWhy, statsmodels, scipy |
chain/ |
Link 拼 DAG + 剪枝 + 综合置信度评分 | networkx |
store/ |
结果沉淀( JSONL/Parquet/GraphML/Neo4j ) | — |
utils/ |
时间轴对齐、随机种子、日志、配置加载 | loguru, rich, OmegaConf |
七、项目价值总结
- 比纯 LLM 抽取更可靠:多了数据侧的验证,避免“只讲故事不落地”;
- 比纯数据因果发现更可解释:有文本语义锚点,让数据结论能对应业务逻辑;
- 比普通分析流程更可复盘:失败链条、验证过程全部保存,便于追溯问题;
- 比单次研究报告更可积累:最终沉淀为因果链仓库,让组织记住因果,而非依赖个人记忆。
八、项目地址
如果你对「把文本因果叙事和数据因果验证结合」有兴趣,欢迎查看完整文档: https://github.com/zjhong/causal-forge/blob/main/README.zh-CN.md