因果推断(五)基于谷歌框架Causal Impact的因果推断
因果推断(五)基于谷歌框架Causal Impact的因果推断
除了传统的因果推断外,还有一些机器学习框架可以使用,本文介绍来自谷歌框架的Causal Impact。该方法基于合成控制法的原理,利用多个对照组数据来构建贝叶斯结构时间序列模型,并调整对照组和实验组之间的大小差异后构建综合时间序列基线,最终预测反事实结果。
CausalImpact适用于时间序列在干预后的效果评估,例如某功能上线后是否提升了用户活跃。本文参考自CausalImpact 贝叶斯结构时间序列模型、tfcausalimpact官网示例。
准备数据
# pip install tfcausalimpact
import tensorflow as tf
from causalimpact import CausalImpact
import pandas as pdtf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) # 忽略tf警告信息
以下数据如果有需要的同学可关注公众号HsuHeinrich,回复【因果推断05】自动获取~
# 读取数据
data = pd.read_csv('arma_data.csv')
data.iloc[70:, 0] += 5 # 手动增加y值。构造提升效果
data.head()
数据格式:
第一列为因变量,后面为协变量,例如本立中的y和X。
数据需要标准化处理,可参考官方示例
# causalimpact.misc.standardize标准化 import numpy as np import pandas as pd import pytest import tensorflow as tf import tensorflow_probability as tfp from numpy.testing import assert_array_equal from pandas.util.testing import assert_frame_equalfrom causalimpact import CausalImpact from causalimpact.misc import standardizedata = pd.read_csv('tests/fixtures/btc.csv', parse_dates=True, index_col='Date') training_start = "2020-12-01" training_end = "2021-02-05" treatment_start = "2021-02-08" treatment_end = "2021-02-09" pre_period = [training_start, training_end] post_period = [treatment_start, treatment_end]pre_data = rand_data.loc[pre_int_period[0]: pre_int_period[1], :] # 标准化 normed_pre_data, (mu, sig) = standardize(pre_data)# 自定义标准化 x-mu/sigma normed_my_data = (pre_data - mu) / sig # 伪代码 # 定义model_args参数 model_args == {'fit_method': 'hmc', 'niter': 1000, 'prior_level_sd': 0.01, 'season_duration': 1, 'nseasons': 1, 'standardize': True}
| y | X | |
|---|---|---|
| 0 | 118.188694 | 99.795292 |
| 1 | 120.233276 | 100.663180 |
| 2 | 118.627775 | 98.883699 |
| 3 | 119.609722 | 100.448941 |
| 4 | 121.391508 | 101.561734 |
模型拟合
# 分析报告
pre_period = [0, 69] # 干预前时期
post_period = [70, 99] # 干预后时期ci = CausalImpact(data, pre_period, post_period)
print(ci.summary())
ci.plot()
Posterior Inference {Causal Impact}Average Cumulative
Actual 125.23 3756.86
Prediction (s.d.) 120.23 (0.33) 3606.76 (9.97)
95% CI [119.58, 120.89] [3587.5, 3626.57]Absolute effect (s.d.) 5.0 (0.33) 150.11 (9.97)
95% CI [4.34, 5.65] [130.3, 169.36]Relative effect (s.d.) 4.16% (0.28%) 4.16% (0.28%)
95% CI [3.61%, 4.7%] [3.61%, 4.7%]Posterior tail-area probability p: 0.0
Posterior prob. of a causal effect: 100.0%For more details run the command: print(impact.summary('report'))

- Causal Impact报告
- 实验最终的平均预测值(prediction)为120.34,平均实际值(actual)为125.23;而累计预测值3610.16,累计实际值3756.86;这里的平均数据范围就是上述虚线之后(干预后)的时间段
- 经过MCMC估计指标绝对效应(absolute effect)平均增长4.89,累计增长146.71;相对比率(relative effect)平均增长4.06%,累计增长4.06%
- Causal Impact图
- 第一张图(original)黑色实线为干预前后的实际结果,橙色虚线为模拟的策略未上线时的结果。阴影为置信区间
- 第二张图(pointwise)橙色虚线为策略前后y的差值,可以看到策略上线后,y差值是显著为正的。
- 第三张图(cumulative)橙色虚线为策略上线后的累加值,是持续增大的,可见策略有明显的正向作用。
# 打印详细报告
print(ci.summary(output='report'))

-
也可以用时间序列+多元变量
数据格式:
- 第一列为因变量,后面为协变量,例如本立中的CHANGED和[NOT_CHANGED_1、NOT_CHANGED_2、NOT_CHANGED_3]
- 数据需要标准化处理,同上
# 读取数据
data = pd.read_csv('comparison_data.csv', index_col=['DATE'])
data.head()
| CHANGED | NOT_CHANGED_1 | NOT_CHANGED_2 | NOT_CHANGED_3 | |
|---|---|---|---|---|
| DATE | ||||
| 2019-04-16 | 83836.5 | 85642.5 | 86137.5 | 81241.5 |
| 2019-04-17 | 83887.5 | 86326.5 | 85036.5 | 80877.0 |
| 2019-04-18 | 82662.0 | 87456.0 | 84409.5 | 80910.0 |
| 2019-04-19 | 83271.0 | 89551.5 | 87568.5 | 82150.5 |
| 2019-04-20 | 84210.0 | 90256.5 | 86602.5 | 83083.5 |
pre_period = ['2019-04-16', '2019-07-14']
post_period = ['2019-7-15', '2019-08-01']ci = CausalImpact(data, pre_period, post_period, model_args={'fit_method': 'hmc'}) # model_args参数提高精度,牺牲效率
print(ci.summary())
ci.plot()

# 打印详细报告
print(ci.summary(output='report'))

总结
这里的分享较为浅显,就当是一种冷门数据分析方法的科普吧,如果想深入了解的同学可自行查找资源进行充电~
共勉~
相关文章:
因果推断(五)基于谷歌框架Causal Impact的因果推断
因果推断(五)基于谷歌框架Causal Impact的因果推断 除了传统的因果推断外,还有一些机器学习框架可以使用,本文介绍来自谷歌框架的Causal Impact。该方法基于合成控制法的原理,利用多个对照组数据来构建贝叶斯结构时间…...
VR全景加盟项目如何开展?如何共赢VR时代红利?
VR全景作为一个新兴蓝海项目,相信有着很多人刚接触VR行业的时候都会有这样的疑问:VR全景加盟后项目如何开展?今天,我们就从项目运营的三个阶段为大家讲解。 一、了解项目时 目前VR全景已经被应用到各行各业中去,学校、…...
Win10+anaconda+CUDA+pytorch+vscode配置
Win10anacondaCUDApytorchvscode配置 1.安装anaconda2.安装CUDA确认CUDA版本确认CUDA和pytorch版本安装CUDA 3.安装cudnn4.安装Pytorch5.vscode配置安装VScodevscode配置pytorch环境 1.安装anaconda 官网https://www.anaconda.com 下载安装,路径全英文然后记得有一…...
vue-router在vue2/3区别
构建选项区别 vue2-router const router-new VueRouter({mode:history,base:_name,})vue-next-router import { createRouter,createWebHistory} from vue-next-router const routercreateRouter({history:createHistory(/) })在上述代码中我们发现,vue2中的构建选项mode和ba…...
Apache Doris 入门教程33:统计信息
统计信息 统计信息简介 Doris 查询优化器使用统计信息来确定查询最有效的执行计划。Doris 维护的统计信息包括表级别的统计信息和列级别的统计信息。 表统计信息: 信息描述row_count表的行数data_size表的⼤⼩(单位 byte)update_rows收…...
有效需求的特征
如何区分优秀的软件需求和软件需求规格说明书(SRS)与可能导致问题的需求和规格说明书?在这篇文章中,我们将首先讨论单个需求应该具有的几种不同特性。然后,我们将讨论成功的SRS整体应具有的理想特征。 1.有效需求的特…...
基于51单片机无线温度报警控制器 NRF24L01 多路温度报警系统设计
一、系统方案 1、本设计默认采用STC89C52单片机,如需更换单片机请联系客服。 2、接收板LCD1602液晶实时显示当前检测的2点温度值以及对应的上下限报警值。发射板由DS18B20采集温度值,通过无线模块NRF24L01传给接收板。 3、按键可以设置温度上下限值&…...
Spring Data JPA的@Entity注解
一、示例说明 rules\CouponTypeConverter.java Converter public class CouponTypeConverterimplements AttributeConverter<CouponType, String> {Overridepublic String convertToDatabaseColumn(CouponType couponCategory) {return couponCategory.getCode();}Overr…...
CANoe panel中,Path Dialog如何保存选择的文件路径
这里写目录标题 Path Dialog控件的设置系统变量和环境变量 Path Dialog控件的设置 过滤加载的文件类型 填写格式为:Hex file |.hex 其中Hex file为自定义name,.hex为你想识别的文件类型 系统变量和环境变量 系统变量:在canoe的Environmen…...
关于es中索引,倒排索引的理解
下面是我查询进行理解的东西 也就是说我们ES中的索引就相当于我们mysql中的数据库表,索引库就相当于我们的数据库,我们按照mapping规则会根据相应的字段(index为true默认)来创建倒排索引,这个倒排索引就相当于我们索引…...
k8s service (二)
K8s service (二) Endpoint Endpoint是kubernetes中的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod访问地址,它是根据service匹配文件中selector描述产生的。 一个Service由一组Pod组成,这些Pod通过Endpoints…...
桌面软件开发框架 Electron、Qt、WPF 和 WinForms 怎么选?
一、Electron Electron 是一个基于 Web 技术的跨平台桌面应用程序开发框架。它使用 HTML、CSS 和 JavaScript 来构建应用程序界面,并借助 Chromium 渲染引擎提供强大的页面渲染能力。Electron 的主要特点包括: 跨平台:Electron 可以在 Windows、macOS 和 Linux 等多个主流操…...
SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第二天)Mybatis的深入学习
SSM框架的学习与应用(Spring Spring MVC MyBatis)-Java EE企业级应用开发学习记录(第二天)Mybatis的深入学习(增删改查的操作) 上一篇我们的项目搭建好了,也写了简答的Junit测试类进行测试,可以正确映射…...
学习笔记:Opencv实现限制对比度得自适应直方图均衡CLAHE
2023.8.19 为了完成深度学习的进阶,得学习学习传统算法拓展知识面,记录自己的学习心得 CLAHE百科: 一种限制对比度自适应直方图均衡化方法,采用了限制直方图分布的方法和加速的插值方法 clahe(限制对比度自适应直方图…...
R语言处理缺失数据(1)-mice
#清空 rm(listls()) gc()###生成模拟数据### #生成100个随机数 library(magrittr) set.seed(1) asd<-rnorm(100, mean 60, sd 10) %>% round #平均60,标准差10 #将10个数随机替换为NA NA_positions <- sample(1:100, 10) asd[NA_positions] <- NA #转…...
SpringBoot自动配置原理
Spring Boot 的自动配置可以根据添加的jar依赖,自动配置 Spring Boot 应用程序。例如,我们想要使用Redis,直接在POM文件中增加spring-boot-starter-data-redis依赖,然后我们配置下连接信息就可以使用了。 那么Spring Boot 是如何…...
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 五)
管理应用拥有的状态概述 LocalStorage:页面级UI状态存储 LocalStorage是页面级的UI状态存储,通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility内,页面间共享状态。 本文仅介绍LocalStora…...
Java基础篇——反射枚举
反射&枚举 课程目标 1. 【理解】类加载器 2. 【理解】什么是反射 3. 【掌握】获取Class对象的三种方式 4. 【掌握】反射获取构造方法并创建对象 5. 【掌握】反射获取成员变量并使用 6. 【掌握】反射获取成员方法并使用 7. 【掌握】反射综合案例 8. 【理解】枚举B友:http…...
每日一学——案例难点Windows配置
在Windows上配置DNS服务器有几个步骤: 步骤1:打开网络连接设置 在任务栏上右键单击网络图标,并选择“打开网络和Internet设置”。 在新窗口中,选择“更改适配器选项”。 在打开的窗口中,找到正在使用的网络适配器&a…...
2023.8 - java - 运算符
Java 运算符 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 算术运算符 算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。 表格中的实例假设整数变量A的值为10,变量B的值为20: …...
零基础玩转Ostrakon-VL-8B:餐饮零售AI视觉助手部署与使用
零基础玩转Ostrakon-VL-8B:餐饮零售AI视觉助手部署与使用 1. 为什么选择Ostrakon-VL-8B? 在餐饮零售行业,每天都有大量视觉数据需要处理:货架商品、门店环境、价格标签等。传统的人工检查方式效率低、成本高且容易出错。Ostrako…...
百川2-13B-4bits模型微调指南:提升OpenClaw任务执行准确率
百川2-13B-4bits模型微调指南:提升OpenClaw任务执行准确率 1. 为什么需要微调百川模型? 去年夏天,当我第一次用OpenClaw自动化整理电脑上的数千份文档时,遇到了一个尴尬的问题——AI经常把技术文档和私人照片混在一起归类。这让…...
阿里图标库(Iconfont)的本地引入 详细步骤
阿里图标库(Iconfont)本地引入 Vue3 详细步骤(文字版) 一、准备工作 登录 Iconfont 官网 访问 Iconfont 官网,使用账号登录(若无账号需注册)。 选择图标并加入项目 在搜索框输入关键词&#x…...
15天深度体验:micro编辑器状态栏系统监控完全指南
15天深度体验:micro编辑器状态栏系统监控完全指南 【免费下载链接】micro A modern and intuitive terminal-based text editor 项目地址: https://gitcode.com/gh_mirrors/mi/micro micro编辑器是一款现代化的终端文本编辑器,以其直观易用和高度…...
AnotherRedisDesktopManager:让Redis管理变得简单高效的5个理由
AnotherRedisDesktopManager:让Redis管理变得简单高效的5个理由 【免费下载链接】AnotherRedisDesktopManager qishibo/AnotherRedisDesktopManager: Another Redis Desktop Manager 是一款跨平台的Redis桌面管理工具,提供图形用户界面,支持连…...
ESP32烧录全攻略:从命令行到GUI工具,新手也能轻松搞定
ESP32烧录全攻略:从命令行到GUI工具,新手也能轻松搞定 第一次接触ESP32开发板时,那块小小的芯片里蕴藏着无限可能,但如何将自己的代码"装进"这个硬件大脑却成了拦路虎。记得我最初尝试烧录时,面对各种专业术…...
欧拉Euler~21.10系统下OpenSSH 9.0升级与安全加固实战指南
1. 环境准备:从零搭建OpenSSH 9.0升级基础 在欧拉Euler~21.10系统上升级OpenSSH,就像给老房子换新门窗——既要保证新功能正常使用,又不能破坏原有结构。我最近刚在测试环境完成这套操作,整个过程踩过几个坑,这里把完整…...
DevExpress GridControl动态添加行的两种高效实现方式
1. 两种动态添加行的核心方法对比 刚接触DevExpress GridControl时,最让我头疼的就是动态添加行这个基础操作。网上教程要么太零散,要么直接贴代码不解释原理。经过多个项目实战,我总结出最高效的两种实现方式,就像给表格数据&quo…...
CHORD-X从零开始:C语言基础概念学习报告自动生成教程
CHORD-X从零开始:C语言基础概念学习报告自动生成教程 你是不是也遇到过这样的烦恼?作为编程老师,每次讲完C语言的指针、结构体这些难点,总想给学生一份清晰易懂的复习报告,但自己动手整理又太花时间。或者,…...
2026搜索量暴涨!这几款配音软件火到刷屏
如果你最近刷短视频,一定注意到了——声音比画面更抓人。从悬疑解说的低沉旁白,到小说推文的多角色演绎,再到带货视频的情绪播报,一条爆款视频的背后,往往藏着一款好用的配音软件。2026年,AI配音市场迎来爆…...
