长沙免费建站模板,专业柳州网站建设哪家便宜,企业网页建设公司哪家好,hashone wordpress因果推断#xff08;六#xff09;基于微软框架dowhy的因果推断
DoWhy 基于因果推断的两大框架构建#xff1a;「图模型」与「潜在结果模型」。具体来说#xff0c;其使用基于图的准则与 do-积分来对假设进行建模并识别出非参数化的因果效应#xff1b;而在估计阶段则主要…因果推断六基于微软框架dowhy的因果推断
DoWhy 基于因果推断的两大框架构建「图模型」与「潜在结果模型」。具体来说其使用基于图的准则与 do-积分来对假设进行建模并识别出非参数化的因果效应而在估计阶段则主要基于潜在结果框架中的方法进行估计。DoWhy 的整个因果推断过程可以划分为四大步骤
「建模」model利用假设先验知识对因果推断问题建模「识别」identify在假设模型下识别因果效应的表达式因果估计量「估计」estimate使用统计方法对表达式进行估计「反驳」refute使用各种鲁棒性检查来验证估计的正确性
同样的不过多涉及原理阐述具体的可以参考因果推断框架 DoWhy 入门。
准备数据
# !pip install dowhyimport 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()特征工程
# 计算高额信贷信贷额度超过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_sum0for i in range(1,10000):counts_i 0rdf df.sample(n_sample)counts_i rdf[rdf[y] rdf[treatment]].shape[0]counts_sum counts_ireturn counts_sum/10000simple_cause(raw_data, Churn, High_limit, 1000)750.6551 \displaystyle 750.6551 750.6551 对X~Y进行随机试验随机取1000个观测统计ytreatment的次数如果越接近于500则越无法确定因果关系越接近0/1则估计存在因果对上述实验随机进行了10000次得到ytreatment的次数均值为750。因此假设存在一定的因果关系 因果推断建模
定义问题
y Churn
treatment High_limit
W raw_data.drop([y, treatment, Credit_Limit, Attrition_Flag], axis1).columns.to_list()问题定义为额度限制是影响客户流失的原因因为低限制类别的人可能不那么忠诚于银行 因果图建模
# 定义训练集ytreatmentW
train raw_data[[y, treatment]W].copy()
# 定义因果图的先验假设
causal_graph
digraph {
High_limit;
Churn;
Income_Category;
Education_Level;
U[labelUnobserved Confounders];
Education_Level-High_limit; Income_Category-High_limit;
U-Churn;
High_limit-Churn; Income_Category - Churn;
}# 因果图绘制
model CausalModel(data train,graphcausal_graph.replace(\n, ),treatmenttreatment,outcomey)
model.view_model()先验假设额度高限制影响流失收入类别影响额度限制从而影响流失教育程度影响额度限制其他混淆因素影响流失 识别
# 识别因果效应的估计量
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_namebackdoor.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_limitIncome_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具有因果关系 总结
和上期一样这里的分享也权当一种冷门数据分析方法的科普如果想深入了解的同学可自行查找资源进行充电。因果推断算的上一门高深的专业知识了我本人也只是了解了些皮毛如果在后续工作中有较深层次的理解后再进行补充分享吧。也欢迎该领域的大佬慷慨分享
共勉