因果推断(六)基于微软框架dowhy的因果推断

这篇具有很好参考价值的文章主要介绍了因果推断(六)基于微软框架dowhy的因果推断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

因果推断(六)基于微软框架dowhy的因果推断

DoWhy 基于因果推断的两大框架构建:「图模型」「潜在结果模型」。具体来说,其使用基于图的准则与 do-积分来对假设进行建模并识别出非参数化的因果效应;而在估计阶段则主要基于潜在结果框架中的方法进行估计。DoWhy 的整个因果推断过程可以划分为四大步骤:

  • 「建模」(model):利用假设(先验知识)对因果推断问题建模
  • 「识别」(identify):在假设(模型)下识别因果效应的表达式(因果估计量)
  • 「估计」(estimate):使用统计方法对表达式进行估计
  • 「反驳」(refute):使用各种鲁棒性检查来验证估计的正确性

同样的,不过多涉及原理阐述,具体的可以参考因果推断框架 DoWhy 入门。

准备数据

# !pip install dowhy
import pandas as pd
from dowhy import CausalModel
from IPython.display import Image, display
import warnings
warnings.filterwarnings('ignore') # 设置warning禁止

以下数据如果有需要的同学可关注公众号HsuHeinrich,回复【因果推断06】自动获取~

raw_data = pd.read_csv('BankChurners.csv')
raw_data.head()

因果推断(六)基于微软框架dowhy的因果推断,数据分析,python,数据分析

特征工程

# 计算高额信贷:信贷额度超过20000
raw_data['High_limit'] = raw_data['Credit_Limit'].apply(lambda x: True if x > 20000 else False)
# 定义流失用户
raw_data['Churn'] = raw_data['Attrition_Flag'].apply(lambda x: True if x == 'Attrited Customer' else False)
# 剔除
  • 目标变量(Y):Churn
  • 干预变量(V/treatment):High_limit
  • 混淆变量(W):其他变量

这里通过随机试验进行简单的因果关系判断:

# 随机试验简单判断因果关系
def simple_cause(df, y, treatment, n_sample):
    counts_sum=0
    for i in range(1,10000):
            counts_i = 0
            rdf = df.sample(n_sample)
            counts_i = rdf[rdf[y] == rdf[treatment]].shape[0]
            counts_sum+= counts_i
    return counts_sum/10000

simple_cause(raw_data, 'Churn', 'High_limit', 1000)

750.6551 \displaystyle 750.6551 750.6551

  • 对X~Y进行随机试验,随机取1000个观测,统计y=treatment的次数,如果越接近于500,则越无法确定因果关系,越接近0/1则估计存在因果
  • 对上述实验随机进行了10000次,得到y=treatment的次数均值为750。因此假设存在一定的因果关系

因果推断建模

定义问题

y = 'Churn'
treatment = 'High_limit'
W = raw_data.drop([y, treatment, 'Credit_Limit', 'Attrition_Flag'], axis=1).columns.to_list()

问题定义为:额度限制是影响客户流失的原因,因为低限制类别的人可能不那么忠诚于银行

因果图建模

# 定义训练集:y+treatment+W
train = raw_data[[y, treatment]+W].copy()
# 定义因果图的先验假设
causal_graph = """
digraph {
High_limit;
Churn;
Income_Category;
Education_Level;
U[label="Unobserved Confounders"];
Education_Level->High_limit; Income_Category->High_limit;
U->Churn;
High_limit->Churn; Income_Category -> Churn;
}
"""
# 因果图绘制
model= CausalModel(
        data = train,
        graph=causal_graph.replace("\n", " "),
        treatment=treatment,
        outcome=y)
model.view_model()

因果推断(六)基于微软框架dowhy的因果推断,数据分析,python,数据分析

先验假设:额度高限制影响流失;收入类别影响额度限制从而影响流失;教育程度影响额度限制;其他混淆因素影响流失

识别

# 识别因果效应的估计量
ie = model.identify_effect()
print(ie)
Estimand type: nonparametric-ate

### Estimand : 1
Estimand name: backdoor
Estimand expression:
     d                                          
────────────(Expectation(Churn|Income_Category))
d[Highₗᵢₘᵢₜ]                                    
Estimand assumption 1, Unconfoundedness: If U→{High_limit} and U→Churn then P(Churn|High_limit,Income_Category,U) = P(Churn|High_limit,Income_Category)

### Estimand : 2
Estimand name: iv
Estimand expression:
Expectation(Derivative(Churn, [Education_Level])*Derivative([High_limit], [Edu
cation_Level])**(-1))
Estimand assumption 1, As-if-random: If U→→Churn then ¬(U →→{Education_Level})
Estimand assumption 2, Exclusion: If we remove {Education_Level}→{High_limit}, then ¬({Education_Level}→Churn)

### Estimand : 3
Estimand name: frontdoor
No such variable(s) found!
  • 我们称干预Treatment导致了结果Outcome,当且仅当在其他所有状况不变的情况下,干预的改变引起了结果的改变
  • 因果效应即干预发生一个单位的改变时,结果变化的程度。通过因果图的属性来识别因果效应的估计量
  • 根据先验假设,模型支持backdoor、和iv准则下的两者因果关系。具体的因果表达式见打印结果

估计因果效应

# 根据倾向得分的逆概率加权估计
estimate = model.estimate_effect(ie,
                                 method_name="backdoor.propensity_score_weighting")
print(estimate)
propensity_score_weighting
*** Causal Estimate ***

## Identified estimand
Estimand type: nonparametric-ate

### Estimand : 1
Estimand name: backdoor
Estimand expression:
     d                                          
────────────(Expectation(Churn|Income_Category))
d[Highₗᵢₘᵢₜ]                                    
Estimand assumption 1, Unconfoundedness: If U→{High_limit} and U→Churn then P(Churn|High_limit,Income_Category,U) = P(Churn|High_limit,Income_Category)

## Realized estimand
b: Churn~High_limit+Income_Category
Target units: ate

## Estimate
Mean value: -0.028495525240213704

估计平均值为-0.03,表明具有高额度限制的客户流失率降低了3%

反驳结果

# 随机共同因子检验:用随机选择的子集替换给定的数据集,如果假设是正确的,则估计值不应有太大变化。
refutel = model.refute_estimate(ie, estimate, "random_common_cause")
print(refutel)
Refute: Add a random common cause
Estimated effect:-0.028495525240213704
New effect:-0.02852304490516341
p value:0.96
# 数据子集:用随机选择的子集替换给定的数据集,如果假设是正确的,则估计值不应有太大变化。
refutel = model.refute_estimate(ie, estimate, "data_subset_refuter")
print(refutel)
Refute: Use a subset of data
Estimated effect:-0.028495525240213704
New effect:-0.027690470580490477
p value:0.98
# 安慰剂:用独立的随机变量代替真实的干预变量,如果假设是正确的,则估计值应接近零
refutel = model.refute_estimate(ie, estimate, "placebo_treatment_refuter")
print(refutel)
Refute: Use a Placebo Treatment
Estimated effect:-0.028495525240213704
New effect:0.0006977458004958939
p value:0.98

基于上述的反驳,即稳健检验。表明High_limit与Churn具有因果关系

总结

和上期一样,这里的分享也权当一种冷门数据分析方法的科普,如果想深入了解的同学可自行查找资源进行充电。因果推断算的上一门高深的专业知识了,我本人也只是了解了些皮毛,如果在后续工作中有较深层次的理解后,再进行补充分享吧。也欢迎该领域的大佬慷慨分享~

共勉~文章来源地址https://www.toymoban.com/news/detail-687624.html

到了这里,关于因果推断(六)基于微软框架dowhy的因果推断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 果推断16--基于反事实因果推断的度小满额度模型学习笔记

    目录 一、原文地址 二、一些问题 2.1如何从RCT随机样本过渡到观测样本因果建模? 2.2反事实学习的核心思想 2.3度小满的连续反事实额度模型 Mono-CFR 2.4Mono-CFR代码实现(待补充) 2.5CFR学习 2.5.1TarNet 2.5.2CFR 2.5.3DR-CFR 参考   基于反事实因果推断的度小满额度模型 对于RCT样本的情

    2024年02月07日
    浏览(44)
  • 因果推断系列16-面板数据与固定效应

    加载第三方包

    2024年02月05日
    浏览(43)
  • 因果推断阶段系列19[阶段2-1]-机器学习预测模型与因果推断

    因果推断的第一部分已经完成。该部分涵盖了因果推断的核心内容,相关的技术非常著名和成熟。第一部分为我们构建了可靠的基础。具体来说,第一部分重点介绍了因果推断的定义,以及避免将相关误认为因果的偏差、调整这些偏差的多种方法(如回归、匹配和倾向得分)

    2024年02月06日
    浏览(37)
  • 因果推断《Causal Inference in Python》中文笔记第1章 因果推断导论

    《Causal Inference in Python: Applying Causal Inference in the Tech Industry》因果推断啃书系列   第1章 因果推断导论   第2章 随机实验与统计学回顾   第3章 图形化因果模型   第4章 线性回归的不合理有效性   第5章 倾向分   第6章 效果异质性   第7章 元学习器   第8章

    2024年02月21日
    浏览(40)
  • 因果推断阶段系列21[阶段2-3]----因果模型评估

    大部分关于因果性的资料中,研究人员使用模拟数据来检查他们的方法是否有效。就像我们在一章中所做的那样,模拟生成关于 Y 0 i Y_{0i}

    2024年02月08日
    浏览(39)
  • 因果推断(四)断点回归(RD)

    在传统的因果推断方法中,有一种方法可以控制观察到的混杂因素和未观察到的混杂因素,这就是断点回归,因为它只需要观察干预两侧的数据,是否存在明显的断点。 ⚠️注意:当然这个方法只能做到局部随机,因此很难依据该结论推向全局。 本文参考自rdd官方示例,通

    2024年02月13日
    浏览(45)
  • 因果推断4--Causal ML(个人笔记)

    目录 1 安装教程及官方文档 1.1 pip安装 1.2 API文档 1.3 代码仓库 2 Uplift模型与主要方法介绍 2.1 发放代金券 2.2 多treatment 2.3 实验方法 3 causalml.inference.tree module 3.1 UpliftTreeClassifier 3.2 UpliftRandomForestClassifier 3.3 CausalRandomForestRegressor 4 待补充 5 问题 pip install causalml https://causalml.r

    2024年02月12日
    浏览(38)
  • 因果推断-PSM的原理及python实现

    目录 一、背景:员工技能培训真的是浪费时间吗 二、PSM的原理及python实现 1、PSM的原理 1.1 计算倾向性得分 1.2 匹配对照组样本 1.3 平衡性检查 1.4 敏感度分析 2、PSM的python实现 假设你是一家大企业的老板,你希望知道员工技能培训对员工生产率的提升有多大帮助。已知参加培

    2024年02月15日
    浏览(39)
  • [因果推断] 增益模型(Uplift Model)介绍(三)

    增益模型(uplift model):估算干预增量(uplift),即 干预动作(treatment) 对 用户响应行为(outcome) 产生的效果。 这是一个 因果推断(Causal Inference) 课题下估算 ITE (Individual Treatment Effect)的问题——估算同一个体在 干预与不干预 (互斥情况下)不同outcome的差异。为了克

    2024年02月06日
    浏览(34)
  • 收集一些因果推断比较好的工具包,教程

    1.国内一个武汉大学教授手下博士写的基础的因果知识课件: http://www.liuyanecon.com/wp-content/uploads/%E7%8E%8B%E5%81%A520201022.pdf 感兴趣可以看看其他手下博士做的课件: Causal inference reading group 2020 – 刘岩 – 宏观金融 2.耶鲁大学教授课程全套  课件+代码+视频 代码:GitHub - paulgp/app

    2023年04月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包