(updated in 20210828)
文章名称
Deep Counterfactual Networks with Propensity-Dropout
核心要点
作者把causal inference视作multitask learning的问题,并通过dropout的方式来进行正则化,减少selection bias带来的影响。这种正则化通过估计每一个样本的propensity score,来调整网络的复杂度。本质上类似于propensity weighting的方法,只是更具有神经网络的风格。调整网络复杂度,会在propensity score较低的时候减少过拟合的风险,实现更好的泛化。
文章主要关注CATE(ITE),并且在binary treatment的场景下展开讨论。但是,可以模仿其他的multiple head的神经网络方法,迁移到multiple treatment的场景下。通过,Generalized Propensity Score,可以泛化文中提出的propensity score dropout。
方法细节
问题引入
文章建立在potential outcome框架下,并且需要满足unconfoundness的假设,即。为了需要估计因果效应,比较老的方法采用直接建模的方式,比如,也就是我们常说的single learner(如果两个带有下表就是T-learner)。这种建模方式的弊端是高维的特征会淹没低纬度的干预。
如果采用T-learner,不会存在干预被淹没的问题,也比较灵活,却引入了模型误差带来的因果效应估计的偏差,并且牺牲了统计效率,不能够充分利用样本。
具体做法
为了同时确保灵活性和样本效率,作者把因果推断问题看做多任务学习的问题,不同的counterfactual估计是不同的、却相关的任务。不同的干预意味着不同的任务,任务id和treatment id一一对应。如下图所示,左侧的potential outcome network具有多层共享网络来提升样本效率,因为通过不同treatment的数据共同训练了这些层,提取了共同的因素。而后续单独的输出网络,有保证了灵活性和独立性。相当于在T-learner和S-learner之间做了一个折中,也是很多神经网络处理不同treatment的惯常方式。
但是,这样的网络并不能纠正由混淆变量带来的偏差。类似IPW和其他传统的因果推断方法,作者也利用propensity score进行样本权重调节。只不过,调节不是发生在loss的权重上,而是改变网络的复杂程度。在propensity score比较极端(非常接近0或者1)的情况下,利用dropout,使得网络变得简单。在propensity score比较接近0.5的情况下,保持原来网络的复杂程度,这样可以充分利用,在不同干预下,特征分布重合度(overlap)较高的样本。这种权重调节,其实是减少了对具有极端propensity score样本的学习充分程度,是另一种意义上的降权。这样的降权,可以减少对selection bias的过度拟合,提升网络预测在不同counterfactual估计上的泛化能力。
作者定义, 其中,是信息熵。这样当propensity score是0或者1的时候,dropout的值为,当propensity score是0.5的时候,dropout的值为。因此,propensity score更极端的样本具有更大的dropout的概率。
除此之外,通过Monte Carlo Dropout可以得到样本的置信度的点估计,估计步骤如下图。图中,是各层对应的权重,是对应的dropout mask向量。通过从Dropout概率的伯努利分布中采样dropout的mask向量,多次估计,最终可以得到的置信区间。
整个网络是交替进行训练的,在训练的过程中,share网络会在每一个epoch中被充分训练,而不同干预的输出网络是每隔一个epoch单独训练的,每一个epoch都会采用propensity dropout。整个流程如下图所示,单数epoch左侧的outcome网络没有被训练,而双数epoch时右侧将不会被训练。
总的来说,propensity dropout的方法是很有创意的结合了神经网络的dropout和propensity score weighting,同时延续了当时multitask learning的counterfactual估计的主流思路。
代码实现
文中训练的伪代码如下图所示,
具体的pytorch实现可以参见,
https://github.com/Shantanu48114860/Deep-Counterfactual-Networks-with-Propensity-Dropout
首先是DCN网络(作者称没有propensity dropout的网络为deep counterfactual network),可以看到是简单的FFN,不过有两个独立的输出和一些共享层(代码里是2层)。
DCN的训练是交替训练的,如下图所示,在偶数epoch的时候,训练potential outcome,奇数的时候训练另一个potential outcome的输出。
之后是propensity score网络,可以看到也是简单的2层FFN,当然可以根据数据采用更复杂的网络结构。
Propensity Score网路的训练是在所有数据集上进行的,训练方法如下图所示。本质就是利用观测样本中treatment的分布,去估计treatment assignment。
最后来看一下Propensity Dropout的部分。可以看到,首先利用得到的Propensity Score,计算信息熵,然后按照公式得到dropout的概率值,进而得到dropout mask向量。
Propensity Dropout过程中用到的一些工具函数,也都比较简单直接。
值得注意的是,训练时候的Propensity Score是数据集中处理得到的,实际训练中,可以先通过训练好的propensity score网络得到估计的每个样本的propensity score。
心得体会
利用propensity score在样本粒度调整模型复杂度
个人理解propensity score dropout,是作者把selection bias对counterfactual估计的影响,看做是某种过拟合的产物,是一种保守的反事实估计策略。为了减少混淆变量的影响,放弃了对观测outcome的充分拟合。
Doubly-Robust
虽然作者说同时利用了利用了outcome和propensity score的信息,所以是doubly-robust的。但是,个人认为没有最多只能说是隐式的进行了propensity score weighting,但是并没有进行显示的doubly-robust的建模。
文章引用
[1] https://github.com/Shantanu48114860/Deep-Counterfactual-Networks-with-Propensity-Dropout