【Python实战因果推断】72_图因果模型7

目录

Surrogate Confounding

Randomization Revisited

Selection Bias

Conditioning on a Collider


Surrogate Confounding

在某些情况下,由于未测量的混杂因素,你无法关闭所有的后门路径。在下面的例子中,经理的素质导致经理选择参加培训和团队的参与度提升。因此,在治疗(培训)和结果(团队参与度)的关系中存在混杂。但在这个案例中,你无法对混杂因素进行条件化,因为它无法测量。在这种情况下,由于混杂因素的偏差,治疗对结果的因果效应是无法识别的。然而,你有其他可测量的变量可以作为经理素质的代理变量。这些变量不在后门路径上,但控制它们将有助于减少偏差(即使不能完全消除)。这些变量有时被称为替代混杂因素。

在这个例子中,你无法直接测量经理的素质,但你可以测量其部分原因,如经理的工作年限或教育水平;以及其部分结果,如团队的流失率或表现。控制这些替代变量不足以消除偏差,但它确实有所帮助:

Randomization Revisited

在许多重要且与现实紧密相关的研究问题中,混杂因素是一个主要问题,因为你永远无法确定自己已经控制了所有混杂因素。但如果你打算主要在工业界使用因果推断,我有一个好消息给你。在工业界,你主要感兴趣的是学习公司可以控制的事物的因果效应——如价格、客户服务和营销预算——以便优化它们。在这些情况下,很容易知道混杂因素是什么,因为企业通常知道它用于分配治疗的信息是什么。不仅如此,即使它不知道,几乎总有一种选择是干预治疗变量。这正是A/B测试的要点所在。当你随机化治疗时,你可以从一个有未观测混杂因素的图转化为一个治疗的唯一原因是随机性的图:

因此,除了尝试弄清楚为了识别效应你需要对哪些变量进行条件化之外,你还应该问自己有哪些可能的干预措施可以改变图,使之成为一个感兴趣的因果量可识别的图。

当你有未观测的混杂因素时,并非一切都无药可救。在第四部分,我将介绍可以利用数据中的时间结构来处理未观测混杂因素的方法。第五部分将涵盖使用工具变量达到相同目的的应用。

Selection Bias

如果你认为混杂偏倚已经在你的因果推断鞋子里埋下了难以察觉的小石头,那么等到你听到选择偏倚时,你可能会更加惊讶。虽然混杂偏倚发生在你没有控制治疗和结果的共同原因时,选择偏倚则更多与对共同结果和中介变量的条件化有关。

Conditioning on a Collider

考虑这样一个情况,你为一家软件公司工作,想要估计你刚刚实施的一个新功能的影响。为了避免任何形式的混杂偏倚,你进行了新功能的随机推广:10%的客户被随机选中获得新功能,而其余人则没有。你想要知道这个功能是否让客户更开心、更满意。由于满意度不容易直接测量,你使用净推荐者得分(NPS)作为其代理指标。为了测量NPS,你向推广组(已接受治疗)和对照组的客户发送调查问卷,询问他们是否会推荐你的产品。当结果出来时,你发现拥有新功能且回应了NPS调查的客户,其NPS得分比没有新功能但也回应了NPS调查的客户更高。你能说这个差异完全是由新功能对NPS的因果效应造成的吗?要回答这个问题,你应该从代表这种情况的图开始:

长话短说,遗憾的是,答案是否定的。这里的问题在于,你只能测量那些回应了NPS调查的客户的NPS。你正在估计治疗组和对照组之间的差异,同时也对回应了NPS调查的客户进行条件化。尽管随机化允许你将ATE识别为治疗组和对照组之间结果的差异,但一旦你对共同结果进行条件化,也会引入选择偏倚。为了看清这一点,你可以重新创建这个图并删除新功能到客户满意度的因果路径,这也会关闭直接通往NPS的路径。然后,你可以检查在对回应进行条件化后,NPS是否仍然与新功能相连。你会发现确实如此,这意味着关联通过非因果路径在两个变量间流动,这正是偏倚的含义:

 nps_model = nx.DiGraph([
 ("RND", "New Feature"),
 # ("New Feature", "Customer Satisfaction"),
 ("Customer Satisfaction", "NPS"),
 ("Customer Satisfaction", "Response"),
 ("New Feature", "Response"),
 ])
 
 not(nx.d_separated(nps_model, {"NPS"}, {"New Feature"}, {"Response"}))
 
 True

为了培养你对这种偏倚的直觉,让我们重新赋予你神一般的能力,假装你可以看到反事实结果的世界。也就是说,你可以看到所有客户在对照组下会有的NPS(NPS0)和在治疗组下会有的NPS(NPS1),即使那些没有回答调查的客户也是如此。我们还模拟数据,这样我们知道真实效应。这里,新功能将NPS提高了0.4(对于任何商业标准来说,这是一个很高的数字,但请为了这个例子忍受一下)。我们还假设新功能和客户满意度都会增加回应NPS调查的可能性,就像我们在前面的图中所示的那样。有了测量反事实的能力,如果你按治疗组和对照组汇总数据,这就是你看到的情况:

首先,注意到有63%的拥有新功能的客户回应了NPS调查,而对照组中只有18%的客户回应了它。接下来,如果你看治疗组和对照组的行,你会看到从NPS0到NPS1增加了0.4。这仅仅意味着新功能对两组的影响都是0.4。最后,注意到治疗组(new_feature=1)和对照组(new_feature=0)之间的NPS差异大约是0.4。再次,如果你能看到那些没有回应NPS调查的客户的NPS,你只需比较治疗组和对照组就能得到真实的ATE。

当然,在现实中,你无法看到NPS0和NPS1列。你也看不到这样的NPS列,因为你只有那些回应了调查的客户(对照组的18%和治疗组的63%)的NPS:

如果你进一步根据回应者细分分析,你会看到那些回应了调查的客户的NPS。但请注意,在这个群体中,治疗组和对照组之间的差异不再是0.4,而只是大约一半(0.22)。怎么会这样呢?这全都是由于选择偏倚:

加入那些无法观测的数量,你可以看到正在发生什么(在这里专注于回应者群体):

最初,治疗组和对照组在基线满意度Y0方面是可比的。但一旦你对那些回应了调查的人进行条件化,治疗组的基线满意度E(Y0|T=0,R=1)低于E(Y0|T=1,R=1)。这意味着,在对那些回应的人进行条件化之后,治疗组和对照组之间简单的平均数差异并不能识别ATE:\begin{aligned}E[Y|T=1,R=1]-E[Y|T=1,R=1]&=\underbrace{E[Y_1-Y_0|R=1]}_{ATE}\\&+\underbrace{E[Y_0|T=0,R=1]-E[Y_0|T=1,R=1]}_{\text{SelectionBias}}\end{aligned}

如果结果,即客户满意度,影响了回应率,那个偏差项将不会为零。由于满意的客户更可能回答NPS调查,因此在这种情况下,识别是不可能的。如果治疗增加了满意度,那么对照组将包含更多基线满意度高于治疗组的客户。这是因为治疗组将包括那些本来就很满意(高基线满意度)的客户,加上那些原本满意度较低,但由于治疗,变得更满意并回应了调查的客户。 

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
贝叶斯因果推断是一种使用贝叶斯网络(Bayesian Network)进行因果关系推断的方法。贝叶斯网络是一种概率模型,用于表示变量之间的依赖关系和因果关系。在贝叶斯网络中,节点表示变量,边表示变量之间的依赖关系。通过观察节点的状态,可以推断其他节点的状态。 在Python中,可以使用PyMC3库来构建贝叶斯网络模型。《Python贝叶斯分析》这本书从实际应用和编写程序的角度解释了贝叶斯统计的关键概念,并介绍了如何使用PyMC3来构建概率模型。这本书不要求读者具备生物学方面的基础知识,但需要读者具备使用Python编写程序的经验\[1\]。 贝叶斯因果推断的一个挑战是数据的结构与贝叶斯网络的独立性不一致。贝叶斯网络的推断算法旨在从概率中推断因果关系,与任何实验无关。因此,贝叶斯网络的推断是基于概率观察数据进行的。此外,贝叶斯网络的推断是从特定前提中得出一般性结论,与理论假设的表述无关。这是因为贝叶斯网络的推断是演绎的,而不是从因果假设的表述中得出的\[3\]。 因此,Python中的贝叶斯因果推断可以通过构建贝叶斯网络模型,并使用PyMC3库进行推断。这种方法可以帮助我们从观察数据中推断因果关系,并进行因果推断分析。 #### 引用[.reference_title] - *1* [Python贝叶斯分析 PDF 完整原版](https://blog.csdn.net/weixin_39850143/article/details/110996376)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [数学推导+纯Python实现机器学习算法12:贝叶斯网络](https://blog.csdn.net/weixin_37737254/article/details/102920363)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [贝叶斯因果网络_因果关系和贝叶斯网络](https://blog.csdn.net/weixin_26752765/article/details/108132740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水木流年追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值