# 微软开源 DoWhy 之因果分析快速入门

0 / 816

Pylady 2021-04-07 08:20:00 159 收藏 4

DoWhy的因果分析

1. 定义问题
在开始分析数据之前，我们需要定义要解决的问题。在客户流失数据集中，假设我们正在与信贷部门合作，我们想知道信贷额度是否对客户流失具有因果关系。信贷部门限制，任何超过 20000 的信贷额度都被视为高额客户。在这种情况下问题为：“高额信贷会影响银行流失吗？”

import pandas as pd

df.info()

#Creating the High_Limit attribute
df['High_limit'] = df['Credit_Limit'].apply(lambda x: True if x > 20000 else False)
#Creating True or False columns from the Attrition flag for the churn column
df['Churn'] = df['Attrition_Flag'].apply(lambda x: True if x == 'Attrited Customer' else False)

1. 创建因果模型
因果模型基于问题假设，这意味着该模型将基于我们的先验知识建立。我们可以在图中表示我们的先验知识。

training= df[['Customer_Age','Education_Level','Income_Category', 'High_limit', 'Churn' ]].copy()

#Creating the
causal_graph = """
digraph {
High_limit;
Churn;
Income_Category;
Education_Level;
Customer_Age;
U[label="Unobserved Confounders"];
Customer_Age -> Education_Level; Customer_Age -> Income_Category;
Education_Level -> Income_Category; Income_Category->High_limit;
U->Income_Category;U->High_limit;U->Churn;
High_limit->Churn; Income_Category -> Churn;
}
"""

from dowhy import CausalModel
from IPython.display import Image, display
model= CausalModel(
data = training,
graph=causal_graph.replace("\n", " "),
treatment='High_limit',
outcome='Churn')
model.view_model()
display(Image(filename="causal_model.png"))

1. 确定因果关系
因果分析的定义是，如果除干预外的其他变量不变时，干预的改变将影响结果。使用 DoWhy 因果模型确定因果效应。

#Identify the causal effect
estimands = model.identify_effect()
print(estimands)

1. 基于统计方法估算因果效应
干预对结果的因果关系基于干预变量值的变化。统计因果效应的方法有很多，常用的有以下几种：

#Causal Effect Estimation
estimate = model.estimate_effect(estimands,method_name = "backdoor.propensity_score_weighting")
print(estimate)

1. 稳健性检验
因果效应估计是基于数据统计估计，但因果关系本身并不基于数据；而是基于我们之前的假设。

refutel = model.refute_estimate(estimands,estimate, "random_common_cause")
print(refutel)

refutel = model.refute_estimate(estimands,estimate, "data_subset_refuter")
print(refutel)

refutel = model.refute_estimate(estimands,estimate, "placebo_treatment_refuter")
print(refutel)

1. 结论
因果分析是在统计领域内建立因果关系的实验分析。它从根本上与机器学习预测不同，因为我们尝试根据反事实来近似估计干预效应。使用 Microsoft 开源的 DoWhy 包，使用四个步骤来估计因果关系：