双机器学习
双机器学习(DML)模型 [Chern2016] 适用于当治疗,结果,变量的同时影响治疗和结果的所有的混杂因素都被观察到。令 \(y\) 为结果,\(x\) 为治疗,一个 DML模型解决如下的因果效应估计(CATE估计):
其中 \(F(v)\) 是CATE以 \(v\) 为条件。 此外,为了估计 \(F(v)\),我们注意到
因此通过首先估计 \(\mathbb{E}[y|w, v]\) 和 \(\mathbb{E}[x|w,v]\) 为
我们能够得到一个新的数据集: \((\tilde{y}, \tilde{x})\) 其中
这样 \(\tilde{y}\) 和 \(\tilde{x}\) 之间的关系是线性的
其能够被线性回归模型简单的建模。
另一方面,在现在的版本, \(F(v)\) 采取形式
其中 \(H\) 能够被看作一个秩为3的张量且 \(\rho_k\) 是协变量 \(v\) 的函数,比如,最简单的情况 \(\rho(v) = v\) 。因此, 结果 \(y\) 现在能够被表示为
在这个意义上,\(\tilde{y}\) 和 \(\tilde{x}\) 之间的线性回归问题现在成为,
类结构
- class ylearn.estimator_model.double_ml.DoubleML(x_model, y_model, yx_model=None, cf_fold=1, adjustment_transformer=None, covariate_transformer=None, random_state=2022, is_discrete_treatment=False, categories='auto')
- 参数:
x_model (estimator, optional) – 拟合x的机器学习模型。任何这样的模型应该实现
fit()
和predict`()
(也predict_proba()
如果x是离散的)方法。y_model (estimator, optional) – 为了建模结果训练的机器学习模型。任何合理的y_model应该实现
fit()
和predict()
方法。yx_model (estimator, optional) – 用于拟合基于x的残差的y的残差的机器学习模型。 当前版本只支持线性回归模型。
cf_fold (int, default=1) – 在第一阶段执行交叉拟合的折的数量。
adjustment_transformer (transormer, optional, default=None,) – 调整变量的Transformer,其可以被用于生成调整变量的新特征。
covariate_transformer (transormer, optional, default=None,) – 协变量的Transformer,其可以被用于生成协变量的新特征。
random_state (int, default=2022) –
is_discrete_treatment (bool, default=False) – 如果治疗变量是离散的,把这个设为True。
categories (str, optional, default='auto') –
- fit(data, outcome, treatment, adjustment=None, covariate=None, **kwargs)
拟合DoubleML估计器模型。注意训练一个DML有两个阶段,其中我们在
_fit_1st_stage()
和_fit_2nd_stage()
中实现它们。- 参数:
data (pandas.DataFrame) – 训练估计器的训练数据集。
outcome (list of str, optional) – 结果的名字。
treatment (list of str, optional) – 治疗的名字。
adjustment (list of str, optional, default=None) – 保证无混淆的调整集的名字。
covariate (list of str, optional, default=None) – 协变量的名字。
- 返回:
拟合的model
- 返回类型:
一个DoubleML的实例
- estimate(data=None, treat=None, control=None, quantity=None)
用量的类型估计因果效应。
- 参数:
data (pandas.DataFrame, optional, default=None) – 用于估计器估计因果效应的测试数据,注意如果data是None,估计器直接估计训练数据中所有的量。
treat (float or numpy.ndarray, optional, default=None) – 在单个离散治疗的情况下,treat应该是所有可能的治疗值之一的int或者str, 其表示预期的治疗值,在有多个离散治疗的情况下,treat应该是一个列表或者ndarray,其中treat[i]表示第i个预期的治疗值。例如, 当有多个离散治疗,array([‘run’, ‘read’])意味着第一个治疗的治疗值是 ‘run’ ,第二个治疗是 ‘read’ 。在连续治疗值的情况下,治疗应该是一个float或者ndarray。
quantity (str, optional, default=None) –
返回的估计结果的选项。量的可能值包括:
’CATE’ : 估计器将会估计CATE;
’ATE’ : 估计器将会估计ATE;
None : 估计器将会估计ITE或CITE。
control (float or numpy.ndarray, optional, default=None) – 这和treat的情况相似。
- 返回:
估计的因果效应
- 返回类型:
ndarray
- effect_nji(data=None)
用不同的治疗值计算因果效应。
- 参数:
data (pandas.DataFrame, optional, default=None) – 用于估计器估计因果效应的测试数据,注意如果data是None,估计器会使用训练数据。
- 返回:
不同治疗值的因果效应。
- 返回类型:
ndarray
- comp_transormer(x, categories='auto')
把离散的治疗正确转变为独热向量。
- 参数:
x (numpy.ndarray, shape (n, x_d)) – 包含治疗变量信息的数组。
categories (str or list, optional, default='auto') –
- 返回:
转变的独热向量。
- 返回类型:
numpy.ndarray