当前位置: 首页 > news >正文

因果推断(五)基于谷歌框架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}
    
yX
0118.18869499.795292
1120.233276100.663180
2118.62777598.883699
3119.609722100.448941
4121.391508101.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'))

output_54_1

  • 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'))

image-20221223205802448

  • 也可以用时间序列+多元变量

    数据格式:

    • 第一列为因变量,后面为协变量,例如本立中的CHANGED和[NOT_CHANGED_1、NOT_CHANGED_2、NOT_CHANGED_3]
    • 数据需要标准化处理,同上
# 读取数据
data = pd.read_csv('comparison_data.csv', index_col=['DATE'])
data.head()
CHANGEDNOT_CHANGED_1NOT_CHANGED_2NOT_CHANGED_3
DATE
2019-04-1683836.585642.586137.581241.5
2019-04-1783887.586326.585036.580877.0
2019-04-1882662.087456.084409.580910.0
2019-04-1983271.089551.587568.582150.5
2019-04-2084210.090256.586602.583083.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()

image-20221223210055654

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

image-20221223210147376

总结

这里的分享较为浅显,就当是一种冷门数据分析方法的科普吧,如果想深入了解的同学可自行查找资源进行充电~

共勉~

相关文章:

因果推断(五)基于谷歌框架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控件的设置 过滤加载的文件类型 填写格式为&#xff1a;Hex file |.hex 其中Hex file为自定义name&#xff0c;.hex为你想识别的文件类型 系统变量和环境变量 系统变量&#xff1a;在canoe的Environmen…...

关于es中索引,倒排索引的理解

下面是我查询进行理解的东西 也就是说我们ES中的索引就相当于我们mysql中的数据库表&#xff0c;索引库就相当于我们的数据库&#xff0c;我们按照mapping规则会根据相应的字段&#xff08;index为true默认&#xff09;来创建倒排索引&#xff0c;这个倒排索引就相当于我们索引…...

k8s service (二)

K8s service (二) Endpoint Endpoint是kubernetes中的一个资源对象&#xff0c;存储在etcd中&#xff0c;用来记录一个service对应的所有pod访问地址&#xff0c;它是根据service匹配文件中selector描述产生的。 一个Service由一组Pod组成&#xff0c;这些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企业级应用开发学习记录&#xff08;第二天&#xff09;Mybatis的深入学习&#xff08;增删改查的操作&#xff09; 上一篇我们的项目搭建好了&#xff0c;也写了简答的Junit测试类进行测试&#xff0c;可以正确映射…...

学习笔记:Opencv实现限制对比度得自适应直方图均衡CLAHE

2023.8.19 为了完成深度学习的进阶&#xff0c;得学习学习传统算法拓展知识面&#xff0c;记录自己的学习心得 CLAHE百科&#xff1a; 一种限制对比度自适应直方图均衡化方法&#xff0c;采用了限制直方图分布的方法和加速的插值方法 clahe&#xff08;限制对比度自适应直方图…...

R语言处理缺失数据(1)-mice

#清空 rm(listls()) gc()###生成模拟数据### #生成100个随机数 library(magrittr) set.seed(1) asd<-rnorm(100, mean 60, sd 10) %>% round #平均60&#xff0c;标准差10 #将10个数随机替换为NA NA_positions <- sample(1:100, 10) asd[NA_positions] <- NA #转…...

SpringBoot自动配置原理

Spring Boot 的自动配置可以根据添加的jar依赖&#xff0c;自动配置 Spring Boot 应用程序。例如&#xff0c;我们想要使用Redis&#xff0c;直接在POM文件中增加spring-boot-starter-data-redis依赖&#xff0c;然后我们配置下连接信息就可以使用了。 那么Spring Boot 是如何…...

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 五)

管理应用拥有的状态概述 LocalStorage&#xff1a;页面级UI状态存储 LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility内&#xff0c;页面间共享状态。 本文仅介绍LocalStora…...

Java基础篇——反射枚举

反射&枚举 课程目标 1. 【理解】类加载器 2. 【理解】什么是反射 3. 【掌握】获取Class对象的三种方式 4. 【掌握】反射获取构造方法并创建对象 5. 【掌握】反射获取成员变量并使用 6. 【掌握】反射获取成员方法并使用 7. 【掌握】反射综合案例 8. 【理解】枚举B友:http…...

每日一学——案例难点Windows配置

在Windows上配置DNS服务器有几个步骤&#xff1a; 步骤1&#xff1a;打开网络连接设置 在任务栏上右键单击网络图标&#xff0c;并选择“打开网络和Internet设置”。 在新窗口中&#xff0c;选择“更改适配器选项”。 在打开的窗口中&#xff0c;找到正在使用的网络适配器&a…...

2023.8 - java - 运算符

Java 运算符 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 算术运算符 算术运算符用在数学表达式中&#xff0c;它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。 表格中的实例假设整数变量A的值为10&#xff0c;变量B的值为20&#xff1a; …...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...