楼主: wenO6ZTcp8ct6
98 1

[其他] CausalPy 准实验因果推断 Python 库:方法清单、运行条件与示例 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

已卖:30份资源

初中生

95%

还不是VIP/贵宾

-

威望
0 级
论坛币
520 个
通用积分
98.1151
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
330 点
帖子
11
精华
0
在线时间
0 小时
注册时间
2020-9-16
最后登录
2020-9-16

楼主
wenO6ZTcp8ct6 发表于 昨天 17:30 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

不用真的做随机实验,也能估计因果效应——CausalPy 把合成控制、双重差分、断点回归、中断时间序列、工具变量这些准实验方法,统一做成了 Python 接口:底层默认走 PyMC 的贝叶斯估计,也能用 scikit-learn 的普通最小二乘。库由 PyMC Labs 维护,Apache License 2.0 下开源。

 

支持的方法与适用场景

 

按决策场景选方法:

 

决策场景可用方法
对特定单位(地区、产品)做聚焦测试合成控制、地理提升(geographical lift)
评估前后变化、上线、政策变动双重差分、错峰双重差分、中断时间序列
利用门槛规则或按分数准入断点回归、回归弯折(regression kink)
无法随机化、需纠正选择偏差工具变量、逆倾向得分加权
组间差异并控制协变量ANCOVA

 

各方法的定位:合成控制用控制单位的加权组合构造「合成的处理组」,适合单一单位被处理、有多个对照单位的比较案例研究;地理提升用相似地区做对照,评估某一区域的干预效果,常用于区域营销活动;ANCOVA 把方差分析与回归结合,在比较组间均值时控制定量协变量;双重差分比较处理组与对照组随时间的结果变化,用时间趋势修正观测研究中的偏差;错峰双重差分处理不同单位在不同时点采纳处理的情形,用插补方式建模未处理结果、再把观测结果与反事实预测对比;断点回归利用分配变量的门槛,比较门槛两侧;回归弯折看的是变量关系斜率在门槛处的变化,适合处理强度在阈值上变化的情形;中断时间序列比较干预前后序列的水平与趋势变化;工具变量用一个与误差项不相关的工具变量处理内生性;逆倾向得分加权按接受处理概率的倒数加权,使处理分配与可测协变量独立,从而调整混杂。

 

安装与运行条件

 

最新稳定版 pip install CausalPy,或 conda install causalpy -c conda-forge;要跟进开发版可从 GitHub 仓库直接安装。运行条件有三条值得注意的提示:当前版本运行在 PyMC 6 / PyTensor 3 / ArviZ
1.x 上,要求 Python 3.12 及以上;numba 已成为传递性硬依赖和默认后端,新定义的模型第一次采样会有一次性的编译延迟,之后的采样复用编译结果;numba 编译的采样 worker 出问题时,可能表现为原生崩溃或静默卡住,而不是 Python 异常——排障时别只等 traceback。

 

另外,装了 nutpie 后 PyMC 默认改用 nutpie 作为 NUTS 采样器、并采用它自己的调优步数(PyMC 内置默认 1000),需要内置采样器时显式传 nuts_sampler="pymc"。

 

一个最小示例(断点回归)

 

文档的快速上手用「饮酒合法年龄」数据集做断点回归:载入 cp.load_data("drinking"),按年龄是否大于 21 构造 treated 变量,然后

 

  1. result = cp.RegressionDiscontinuity(
  2.     df,
  3.     formula="all ~ 1 + age + treated",
  4.     running_variable_name="age",
  5.     model=cp.pymc_models.LinearRegression(),
  6.     treatment_threshold=21,
  7. )
复制代码

 

result.plot() 画出断点处估计的跳跃,result.summary() 给出带不确定性区间的后验估计。

 

输出与诊断

 

设计上「诊断优先」:每个实验都提供 effect_summary(),返回表格与文字两种格式的决策摘要;贝叶斯模型报 HDI(最高密度区间),OLS 模型报置信区间;ROPE(实际等价区间)用来判断效应是否超过有实际意义的门槛;还有方向性检验,例如 P(effect > 0) 这样的尾概率,用于方向性推断。

 

适合与不适合的场景

 

适合:手上有可信的准实验设计(门槛规则、政策变动、分批上线、地区 lift 等);要的是带不确定性与诊断的估计,而不只是点估计;需要可复现的分析产物供审阅与沟通。不适合:要从弱识别的观测数据里做因果发现;想要不写假设的全自动「黑箱」答案;主要需求是生产级工作流工具(管道、治理、多人协作)。

 

引用与许可

 

项目给出的引用条目为:作者 PyMC Labs,标题 CausalPy: Causal inference for quasi-experiments in Python,年份 2026,指向 GitHub 仓库;稳定的 Zenodo DOI 在计划中。许可为 Apache License 2.0;技术使用问题走 GitHub Discussions 的问答区,缺陷与功能请求走 Issues,详细指南在官方文档站。

 

────────────────

回复后可见:GitHub 仓库、官方文档站、Discussions 问答区与 Issues、conda-forge 渠道和 LICENSE 文件的完整地址。


游客,如果您要查看本帖隐藏内容请回复
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
新三板83887 发表于 昨天 18:58
收藏备用,谢谢分享

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-10-30 03:38