给估计的因果效应打分
用于估计因果效应的估计器模型不能被简单的评价,因为事实上真实的效应不能被直接观察到。这和平常的,结果可以用比如说损失函数的值简单评价的机器学习任务不同。
[Schuler] 的作者提出了一个框架,一个由 [Nie] 表明的模式,来评估不同的估计器模型估计的因果效应。粗略的说,这个框架是双机器学习方法的直接应用。
具体的说,对于一个因果效应模型 ce_model()
(在训练集上训练好的),等待被评价,我们
在通常和训练集不同的验证集中,训练一个模型
y_model()
来估计结果 \(y\) 和一个x_model()
来估计治疗 \(x\) ;在验证集 \(D_{val}\) 中,令 \(\tilde{y}\) 和 \(\tilde{x}\) 表示差
\[\begin{split}\tilde{y} & = y - \hat{y}(v), \\ \tilde{x} & = x - \hat{x}(v)\end{split}\]其中 \(\hat{y}\) 和 \(\hat{x}\) 是在 \(D_{val}\) 中估计的结果和治疗基于协变量 \(v\) 。 此外,令
\[\tau(v)\]表明在 \(D_{val}\) 中由
ce_model()
估计的因果效应,那么对于ce_model因果效应的度量标准这样计算。\[E_{V}[(\tilde{y} - \tilde{x} \tau(v))^2].\]
类结构
- class ylearn.estimator_model.effect_score.RLoss(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, combined_treatment=True, **kwargs)
拟合RLoss估计器模型。注意训练一个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) – 协变量的名字。
combined_treatment (bool, default=True) –
当combined_treatment被设置为True时,那么如果有多个治疗,我们能使用combined_treatment技术 来转变多个离散分类任务成为一个离散分类任务,比如,如果有两个不同的二元治疗:
\[\begin{split}treatment_1 &: x_1 | x_1 \in \{'sleep', 'run'\}, \\ treatment_2 &: x_2 | x_2 \in \{'study', 'work'\},\end{split}\]那么我们能够转变这两个二元分类任务成为一个有四个不同类的分类任务。
\[treatment: x | x \in \{0, 1, 2, 3\},\]其中,比如,1表示(‘sleep’ and ‘study’)。
- 返回:
RLoss的实例
- 返回类型:
拟合的RLoss模型用于在验证集中评价其他的估计模型。
- score(test_estimator, treat=None, control=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。
control (float or numpy.ndarray, optional, default=None) – 这和treat的情况相似。
- 返回:
test_estimator的分数
- 返回类型:
float
- 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