[我正在使用python软件包DoWhy
,查看基于使用权和客户流失率之间是否存在因果关系;
我也有许多其他变量。
1-我想知道这是一种进行分析的写方法吗?
2-我不知道常见原因是什么,以及如何选择它们?
3-还有如何解释结果以及确定性如何?
预先感谢
让我们一个个地回答您的问题。
是,您的代码段是正确的,假设您想通过以tenure
和Churn
为条件来估计nr_login
和avg_movies
的因果关系。
但是此方法将输出包含结果Churn
的interventional值的数据帧。即,搅动变量的值就好像权属已被更改,而与指定的常见原因无关。如果处理tenure
是离散的,则可以做一个简单的图以可视化tenure
的不同值的效果。类似于:
causal_df = df.causal.do('tenure',
method = 'weighting',
variable_types = {'Churn': 'd', 'tenure': 'd', 'nr_login', 'c','avg_movies': 'c'},
outcome='Churn',common_causes=['nr_login':'c','avg_movies': 'c']).groupby('tenure').mean()
但是,要计算平均因果效应,更直接的过程是对将要计算效应的两个治疗值运行两次do
方法(典型值是将治疗= 1与0进行比较) 。结果代码如下所示,如example notebook中所述(对于docs方法,另请参见do
):
df_treatment1 = df.causal.do({'tenure': 1},
method = 'weighting',
variable_types = {'Churn': 'd', 'tenure': 'd', 'nr_login', 'c','avg_movies': 'c'},
outcome='Churn',common_causes=['nr_login':'c','avg_movies': 'c'])
df_treatment0 = df.causal.do({'tenure': 0},
method = 'weighting',
variable_types = {'Churn': 'd', 'tenure': 'd', 'nr_login', 'c','avg_movies': 'c'},
outcome='Churn',common_causes=['nr_login':'c','avg_movies': 'c'])
causal_effect = (df_treatment1['churn'] - df_treatment0["churn"]).mean()
还有使用主DoWhy API达到相同结果的等效方法。
model= CausalModel(
data=df,
treatment='tenure',
outcome='churn',
common_causes=['nr_login', 'avg_movies'])`
identified_estimand = model.identify_effect()
model.estimate_effect(identified_estimand, method="backdoor.propensity_score_weighting")
就是说,根据您的数据集,可能还有其他更合适的估算方法。例如,如果考虑到常见原因的可能值而不太可能获得其中一种治疗值,则“加权”方法有望具有较高的方差。另外,如果数据有限,则此方法可能不适用于连续治疗,因为它是一种非参数方法,通常会有很大的差异。在这种情况下,您可以使用其他估计方法,例如double-ML,它使用参数假设来减少估计的方差(以可能的偏差为代价)。您可以像这样调用double-ML或其他高级EconML估算器(this notebook中的完整示例):
model.estimate_effect(identified_estimand,
method_name="backdoor.econml.dml.DMLCateEstimator",
control_value = 0,
treatment_value = 1,
confidence_intervals=False,
method_params={"init_params":
{'model_y':GradientBoostingRegressor(),
'model_t': GradientBoostingRegressor(),
"model_final":LassoCV(),
'featurizer':PolynomialFeatures(degree=1,
include_bias=True)
},
"fit_params":{}
})
共同原因是既导致治疗又导致结果的变量。因此,治疗与结果之间的相关性可能是由于治疗的因果关系,也可能是由于常见原因的影响(经典示例是冰淇淋销售与泳池会员资格相关,而一个不会导致另一个;炎热的天气是这里的常见原因)。因果推论的目的是以某种方式消除常见原因的影响,只返回治疗的效果。形式上,因果效应是当所有常见原因均保持不变时,治疗对结果的影响。有关更多信息,请查看此tutorial因果推理)
因此,在您的示例中,您希望包含所有变量,这些变量既可以使客户拥有较高的任职期,又可以减少客户流失的机会(例如,他们的每月使用量,对平台的信任度等)。这些是需要包含在模型中的常见原因或混杂因素。
如上所述,因果效应的标准解释是当治疗方法每改变1单位,结果的改变(churn
)。但是对于连续变量,这只是一个约定:您可以将因果效应定义为治疗的任意两个值的结果变化。]
为了估计不确定性,您可以估计置信区间和/或进行反驳测试。置信区间将告诉您有关统计的不确定性(大致来说,如果给您新的i.i.d.数据样本,您的估计值将发生多少变化?)。驳斥测试将量化因果假设导致的不确定性(如果您错过指定重要的共同原因,那么估计会发生多少变化?)。
这里是一个例子。您可以找到有关反驳方法here的更多信息。
# Confidence intervals
est = model.estimate_effect(identified_estimand, method="backdoor.propensity_score_weighting",
confidence_intervals=True)
# Refutation test by adding a random common cause
model.refute_estimate(identified_estimand, est, method_name="random_common_cause")