CausalMatch v0.0.1 正式发布,字节跳动开源因果推理利器,助力科学决策分析
文章来源|字节跳动数据科学团队
开源项目地址|https://github.com/bytedance/CausalMatch
CausalMatch 是字节跳动于 2024 年 7 月正式开源的一款基于 Python 的轻量化统计分析工具,主要涵盖了因果推断常用的统计分析方法——匹配(Matching)。它孵化于字节跳动内部,从上线至今支持多个业务线对非实验场景进行策略效果分析的需求。在经历了不断发展和完善的过程后,我们相信 CausalMatch 已经准备好在更多业务场景提供服务,并很高兴的宣布 0.0.1 版本正式发布。
01 背景
因果推断主要研究干预策略如何影响结果,被广泛应用于生物、医学、经济学等各个行业。常用于建立因果关系的方法以随机实验(或 AB 测试)为主,但在互联网行业应用场景中常受限于法务风险或实验可能带来负向营收,导致随机实验并不总是可行,因此需要辅助因果推断的统计方法测算策略效果。
在这种情况下,如何科学的估计策略效应成了数据分析或者数据科学团队的一个挑战。因此我们将日常业务中应用最广泛的因果效应估计方法 —— 匹配,进行了理论梳理,并开发了一套专注于匹配的轻量化因果关系分析工具 CausalMatch,为使用该方法来做决策分析的业务场景构建一套流程性且规范化的分析框架。
02 项目介绍
CausalMatch 主要通过匹配解决样本偏差,而样本偏差中最常见的问题是自选择偏差(self-selection)。在电商业务中一个常见的有自选择偏差的场景是:运营鼓励商家报名某活动并且给予一定的扶持,而报名的商家大部分是活跃度高的;此时如果分析运营策略对商家的影响并且直接比较“报名商家”和“无报名商家”在活动开始后的营收,会导致运营策略收益被高估。匹配的逻辑是找出和有报名的商家在某些特征上最相似的未报名商家,并且进行有针对性的比较:
基于上述场景举一个简单分析案例,假设商家报名活动数据如下:
商家ID | 是否报名活动(T) | 报名前7日是否登陆抖店(X) | 报名后7日GMV,元(y) |
---|---|---|---|
1 | 1 | 0 | 10 |
2 | 0 | 0 | 11 |
3 | 1 | 1 | 3 |
... | ... | ... | ... |
定义因变量y为“商家报名后7日GMV”,特征变量X为“报名前7日是否登陆抖店”,实验变量T为“是否报名活动”。基于上述数据,如果直接用线性回归模型 $y=\alpha T+\varepsilon$ 求解实验效应 $\alpha$,策略效应会包含活跃度高的商家以及活跃度低的商家之间的“自选择偏差”。因此我们需要用匹配的方法,为报名了活动的商家1和商家3在未报名活动的商家中寻找相似商家 - 商家1需要在“报名前7日无登陆抖店”的商家中搜寻对照组、商家3需要在“报名前7日有登陆抖店”的商家中搜寻对照组。
架构
CausalMatch 包括如下组件:
1. 初始化:包括预处理数据等功能。
2. 匹配调参:包括有参的倾向性得分匹配(Propensity Score Matching)以及非参的粗粒度匹配(Coarsened Exact Matching)两种方法。
3. 平衡检验:对匹配前和匹配后输出特征变量的均值差异检验。
4. 计算实验效应:包括平均处理效应(ATE)和异质性处理效应(HTE)两种估计方法。
使用指南
基于前述电商场景下的案例,我们在这里展示如何使用CausalMatch对样本进行纠偏并估计纠偏后的策略效应。首先在shell中安装指令如下:
pip install causalmatch==0.0.2
安装后,可以在jupyter notebook中运行如下代码:
from causalmatch import matching id = '商家ID' X = ['报名前7日是否登陆抖店'] y = ['报名后7日GMV,元'] T = '是否报名活动' # 1.初始化函数,包括清洗数据等功能;df为包含上述变量的pandas dataframe match_obj = matching(data = df, T = T, X = X, y = y, id = id) # 2.PSM匹配 match_obj . psm(n_neighbors = 1, model = LogisticRegression(C=1e6), trim_percentage = 0,caliper = 1, test_size = 0.2) # 3.平衡检验 print(match_obj . balance_check(include_discrete = True)) # 4.计算平均处理效应ATE print(match_obj . ate())
我们提供有参的倾向性得分匹配(Propensity Score Matching)以及非参的粗粒度匹配(Coarsened Exact Matching)两种估计方法用于筛选策略分析样本,并且提供平均处理效应(ATE)和异质性处理效应(HTE)两种估计方法用于计算策略效果(具体细节请参考github的README介绍)。
03 项目特点
灵活配置
CausalMatch 支持用户灵活接入 scikit-learn 函数输入,可自由调参优化倾向性得分模型,以实现更高的可扩展性和弹性。
构建完整分析流程
在 CausalMatch 的架构中允许用户以最少代码成本构建规范的分析流程,帮助减少因果分析本身由于不确定性带来的业务问题。
04 总结
CausalMatch v0.0.1 反映了开发人员在过去半年中取得的成就,感谢所有参与此版本的贡献者。我们非常期待更多开发者和用户能加入到 CausalMatch 开源社区中,和我们一起交流和探讨数据科学相关话题。如果有问题,请随时在github issue中向我们反馈。同时,团队积极关注社区技术动向,拥抱开源和标准,欢迎更多同学加入我们,一起交流学习。点击链接(https://job.toutiao.com/s/ih8wxpwx)了解职位详情,欢迎大家投递简历至shenheng.shen@bytedance.com。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
PHP 8.3.11 发布
PHP 8.3.11 现已发布,这是一个错误修复版本。具体更新内容包括: Core: 修复错误GH-15020(Zend/Optimizer/escape_analysis.c 中的内存泄漏)。 修复错误GH-15023(Zend/zend_ini.c 中的内存泄漏)。 修复错误GH-13330(有条件地附加 -Wno-implicit-fallthrough flag)。 修复 network.c 中未初始化的内存。 修复错误GH-15108(关机期间 destroying generator 时的 Segfault)。 修复错误GH-15275(暂停 generator delegate 的 GC 期间的崩溃)。 Curl: 修复了 curl_error 返回空字符串的情况。 DOM: 修复删除 doctype 并使用 foreach iteration 时的 UAF。 FFI: 修复错误GH-14286(ffi 枚举类型(当枚举没有名称时)会导致内存泄漏)。 Hash: 修复在 xxh3 中为 shm 中的数组转换数组数据时发生崩溃的问题。 Intl: 修复错误GH-15087(...
- 下一篇
开源 OA 办公系统 — 勾股 OA 5.0 新版发布
勾股 OA 办公系统是一款简单实用的开源的企业办公系统。系统集成了系统设置、附件管理、人事管理、行政管理、消息管理、企业公告、知识库、审批流程设置、办公审批、日常办公、财务管理、客户管理、合同管理、项目管理、任务管理等功能模块。系统简约,易于功能扩展,方便二次开发,可以用来做日常 OA,CRM,ERP,业务管理等系统。 历经半年的开发,勾股 OAv5.0 发布啦,本次更新是跨版本更新,重构了很多之前已有的功能,也新增了很多功能,具体看如下功能导图: 内置模块 配置管理:对系统的常规配置信息进行维护,网站配置管理功能统一维护。 用户管理:维护管理系统的用户,常规信息的维护与账号设置。 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 权限角色:角色菜单管理与权限分配、设置角色所拥有的菜单权限。 部门管理:管理系统组织架构,对组织架构进行统一管理维护。 岗位管理:管理用户担任的岗位。 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 基础数据:对系统中常用的较为固定的数据进行统一维护管理。 消息通知:系统通知私信、消息等管理。 企业公告:企业公告信息发布维护。 办公审批...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19