双鲁棒

双鲁棒方法(参考 [Funk2010] )估计因果效应当治疗是离散的且满足无混淆条件。 训练一个双鲁棒模型由3步组成。

  1. \(k\) 为一个int。形成一个对数据 \(\{(X_i, W_i, V_i, Y_i)\}_{i = 1}^n\)\(K\)-fold 随机划分,这样

    \[\{(x_i, w_i, v_i, y_i)\}_{i = 1}^n = D_k \cup T_k\]

    其中 \(D_k\) 表示训练数据且 \(T_k\) 表示测试数据且 \(\cup_{k = 1}^K T_k = \{(X_i, W_i, V_i, Y_i)\}_{i = 1}^n\).

  2. 对于每个 \(k\), 训练两个模型 \(f(X, W, V)\)\(g(W, V)\)\(D_k\) 上来分别预测 \(y\)\(x\)。接着估计它们在 \(T_k\) 中的性能, 结果保存为 \(\{(\hat{X}, \hat{Y})\}_k\) 。所有的 \(\{(\hat{X}, \hat{Y})\}_k\) 将被合并来给出新的数据集 \(\{(\hat{X}_i, \hat{Y}_i(X, W, V))\}_{i = 1}^n\)

  3. 对于任何给定的一对治疗组其中 \(X=x\) 和控制组其中 \(X = x_0\) ,我们构建最终数据集 \(\{(V, \tilde{Y}_x - \tilde{Y}_0)\}\) 其中 \(\tilde{Y}_x\) 被定义为

    \[\begin{split}\tilde{Y}_x & = \hat{Y}(X=x, W, V) + \frac{(Y - \hat{Y}(X=x, W, V)) * \mathbb{I}(X=x)}{P[X=x| W, V]} \\ \tilde{Y}_0 & = \hat{Y}(X=x_0, W, V) + \frac{(Y - \hat{Y}(X=x_0, W, V)) * \mathbb{I}(X=x_0)}{P[X=x_0| W, V]}\end{split}\]

    并在这个数据集上训练最终的机器学习模型 \(h(W, V)\) 来预测因果效应 \(\tau(V)\)

    \[\tau(V) = \tilde{Y}_x - \tilde{Y}_0 = h(V).\]

    接着我们可以直接估计因果效应,通过传入协变量 \(V\) 到模型 \(h(V)\)

类结构

class ylearn.estimator_model.doubly_robust.DoublyRobust(x_model, y_model, yx_model, cf_fold=1, random_state=2022, categories='auto')
参数:
  • x_model (estimator, optional) – 经过训练的机器学习模型,用于对治疗建模。任何合理的x_model应该实现 fit()predict_proba() 方法。

  • y_model (estimator, optional) – 经过训练的机器学习模型,用于使用协变量(可能是调整)和治疗对结果建模。任何合理的y_model应该实现 fit()predict() 方法。

  • yx_model (estimator, optional) – 经过在双鲁棒方法的最后阶段训练的机器学习模型,用于使用协变量(可能是调整)对因果效应建模。任何合理的yx_model应该实现 fit()predict() 方法。

  • cf_fold (int, default=1) – 在第一阶段执行交叉拟合的折的数量。

  • random_state (int, default=2022) –

  • categories (str, optional, default='auto') –

fit(data, outcome, treatment, adjustment=None, covariate=None, treat=None, control=None, combined_treatment=True, **kwargs)

拟合DoublyRobust估计器模型。注意训练一个双鲁棒模型有三个阶段,其中我们在 _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) – 协变量的名字。

  • treat (int, optional) – 预期治疗组的标签。如果为None,那么 treat 将会被设置为1。 在单个离散治疗的情况下,treat应该是所有可能的治疗值之一的int或者str, 其表示预期的治疗值,在有多个离散治疗的情况下,treat应该是一个列表或者ndarray,其中treat[i]表示第i个预期的治疗值。例如, 当有多个离散治疗,array([‘run’, ‘read’])意味着第一个治疗的治疗值是 ‘run’ ,第二个治疗是 ‘read’ 。

  • control (int, optional) – 预期控制组的标签。这和treat的情况相似。如果是None,那么 control 将会被设置为0。

返回:

拟合的DoublyRobust的实例。

返回类型:

DoublyRobust的实例

estimate(data=None, quantity=None, treat=None, all_tr_effects=False)

用量的类型估计因果效应。

参数:
  • data (pandas.DataFrame, optional, default=None) – 测试数据。注意被设置为None,模型会使用训练数据。

  • quantity (str, optional, default=None) –

    返回的估计结果的选项。量的可能值包括:

    1. ’CATE’ : 估计器将会估计CATE;

    2. ’ATE’ : 估计器将会估计ATE;

    3. None : 估计器将会估计ITE或CITE。

  • treat (float or numpy.ndarray, optional, default=None) – 在单个离散治疗的情况下,treat应该是所有可能的治疗值之一的int或者str, 其表示预期的治疗值,在有多个离散治疗的情况下,treat应该是一个列表或者ndarray,其中treat[i]表示第i个预期的治疗值。例如, 当有多个离散治疗,array([‘run’, ‘read’])意味着第一个治疗的治疗值是 ‘run’ ,第二个治疗是 ‘read’ 。

  • all_tr_effects (bool, default=False,) – 如果为True,返回所有的因果效应和所有的 treatments 的值,否则,仅返回 在如果提供了的 treat 中的治疗的因果效应。如果 treat 没提供,那么治疗的值作为拟合估计器模型的值。

返回:

估计的因果效应

返回类型:

ndarray

effect_nji(data=None)

用不同的治疗值计算因果效应。注意这个方法仅将把任何有离散治疗的问题转变为二元治疗。能够使用 _effect_nji_all() 去获得 treatmenttreat 所有值时的因果效应。

返回:

不同治疗值的因果效应。

返回类型:

ndarray

comp_transormer(x, categories='auto')

把离散的治疗正确转变为独热向量。

参数:
  • x (numpy.ndarray, shape (n, x_d)) – 包含治疗变量信息的数组。

  • categories (str or list, optional, default='auto') –

返回:

转变的独热向量。

返回类型:

numpy.ndarray