econml.dr.DRLearner

class econml.dr.DRLearner(*, model_propensity='auto', model_regression='auto', model_final=StatsModelsLinearRegression(), discrete_outcome=False, multitask_model_final=False, featurizer=None, min_propensity=1e-06, categories='auto', cv=2, mc_iters=None, mc_agg='mean', random_state=None, allow_missing=False, use_ray=False, ray_remote_func_options=None)[source]

基类: econml._ortho_learner._OrthoLearner

使用双重稳健校正技术来解释处理组之间的协变量偏移(选择偏差)的 CATE 估计器。该估计器是 _OrthoLearner 估计器的一个特例,因此它遵循两阶段过程:第一阶段以交叉拟合的方式估计一组无关函数(nuisance functions),最后阶段估计 CATE 模型。有关此两阶段过程的描述,请参阅 _OrthoLearner 的文档。

在该估计器中,CATE 使用以下估计方程进行估计。如果我们设

\[Y_{i, t}^{DR} = E[Y | X_i, W_i, T_i=t] + \frac{Y_i - E[Y | X_i, W_i, T_i=t]}{Pr[T_i=t | X_i, W_i]} \cdot 1\{T_i=t\}\]

则以下估计方程成立

\[E\left[Y_{i, t}^{DR} - Y_{i, 0}^{DR} | X_i\right] = \theta_t(X_i)\]

因此,如果在第一阶段估计无关函数 \(h(X, W, T) = E[Y | X, W, T]\)\(p_t(X, W)=Pr[T=t | X, W]\),我们可以通过对 \(Y_{i, t}^{DR} - Y_{i, 0}^{DR}\)\(X_i\) 进行回归,估计每个处理 t 的最终阶段 cate。

估计无关函数 \(p\) 的问题是一个简单的多类别分类问题,即从 \(X, W\) 预测标签 \(T\)DRLearner 类将参数 model_propensity 作为输入,它是一个任意的 scikit-learn 分类器,在内部用于解决此分类问题。

第二个无关函数 \(h\) 是一个简单的回归问题,DRLearner 类将参数 model_regressor 作为输入,它是一个任意的 scikit-learn 回归器,在内部用于解决此回归问题。

最终阶段是多任务回归问题,其输出是每个非基线处理 t 的标签 \(Y_{i, t}^{DR} - Y_{i, 0}^{DR}\)DRLearner 将参数 model_final 作为输入,它是内部用于解决此多任务回归问题的任何 scikit-learn 回归器。如果参数 multitask_model_final 为 False,则假定此模型是单任务回归器,并使用其独立的克隆分别解决每个回归目标。训练好的模型的 predict(X) 输出将包含每个处理相对于基线处理(按字母顺序最小)的 CATE。如果 multitask_model_final 为 False,则假定为单任务模型,并为每个输出训练一个独立的模型克隆。然后,第 t 个克隆的 predict(X) 将是按字母顺序排列的第 t 个处理相对于基线的 CATE。

参数
  • model_propensity (估计器, 默认 'auto') – 用于 Pr[T=t | X, W] 的分类器。通过对处理变量进行(特征、控制变量)串联的回归进行训练。

    • 如果为 'auto',则模型将是线性模型和森林模型集合中的最佳拟合模型

    • 否则,请参阅 模型选择 以获取支持的选项范围

  • model_regression (估计器, 默认 'auto') – 用于 E[Y | X, W, T] 的估计器。通过对 Y 进行(特征、控制变量、one-hot 编码处理变量)串联的回归进行训练。one-hot 编码不包括基线处理变量。

    • 如果为 'auto',则模型将是线性模型和森林模型集合中的最佳拟合模型

    • 否则,请参阅 模型选择 以获取支持的选项范围;如果指定了单个模型,则如果 discrete_outcome 为 True,它应该是一个分类器,否则应该是一个回归器

  • model_final – 最终 cate 模型的估计器。通过对双重稳健潜在结果进行(特征 X)的回归进行训练。

    • 如果 X 为 None,则 model_final 的 fit 方法应该能够处理 X=None。

    • 如果 featurizer 不为 None 且 X 不为 None,则在 featurizer.fit_transform(X) 的结果上进行训练。

    • 如果 multitask_model_final 为 True,则此模型必须支持多任务处理,并且通过对所有双重稳健目标结果同时进行(特征化后的)特征回归进行训练。

    • 训练好的模型的 predict(X) 输出将包含每个处理相对于基线处理(按字母顺序最小)的 CATE。如果 multitask_model_final 为 False,则假定为单任务模型,并为每个输出训练一个独立的模型克隆。然后,第 t 个克隆的 predict(X) 将是按字母顺序排列的第 t 个处理相对于基线的 CATE。

  • discrete_outcome (bool, 默认 False) – 输出是否应被视为二元变量

  • multitask_model_final (bool, 默认 False) – model_final 是否应被视为多任务模型。参阅 model_final 的描述。

  • featurizer (转换器, 可选) – 必须支持 fit_transform 和 transform 方法。用于在最终 CATE 回归中创建复合特征。如果 X 为 None,则忽略。最终的 CATE 将在 featurizer.fit_transform(X) 的结果上进行训练。如果 featurizer=None,则 CATE 在 X 上进行训练。

  • min_propensity (浮点数, 默认 1e-6) – 倾向性估计值的最小截断值,以避免除以零。

  • categories (‘auto’ 或 list, 默认 ‘auto’) – 对离散处理进行编码时使用的类别(或 ‘auto’ 表示使用唯一排序值)。第一个类别将被视为控制处理。

  • cv (int, 交叉验证生成器或可迭代对象, 默认 2) – 确定交叉验证分割策略。cv 的可能输入包括

    • None,使用默认的 3 折交叉验证,

    • 整数,指定折数。

    • CV 分割器

    • 一个可迭代对象,生成以索引数组表示的 (train, test) 分割。

    对于整数/None 输入,如果处理变量是离散的,则使用 StratifiedKFold,否则使用 KFold(两种情况下都会随机打乱)。

    除非使用可迭代对象,否则我们调用 split(concat[W, X], T) 来生成分割。如果所有 W, X 都为 None,则我们调用 split(ones((T.shape[0], 1)), T)

  • mc_iters (int, 可选) – 重复运行第一阶段模型的次数,以减少无关变量(nuisances)的方差。

  • mc_agg ({‘mean’, ‘median’}, 默认 ‘mean’) – 如何在 mc_iters 次蒙特卡洛交叉拟合迭代中聚合每个样本的无关变量值。

  • random_state (int, RandomState 实例或 None) – 如果是 int,则 random_state 是随机数生成器使用的种子;如果是 RandomState 实例,则 random_state 是随机数生成器;如果是 None,则随机数生成器是 np.random 使用的 RandomState 实例。

  • allow_missing (bool) – 是否允许 X, W 中存在缺失值。如果为 True,则需要提供能够处理缺失值的 model_propensity, model_regression 和 model_final。

  • use_ray (bool, 默认 False) – 是否使用 Ray 来并行化交叉拟合步骤。如果为 True,则必须安装 Ray。

  • ray_remote_func_options (dict, 默认 None) – 使用 Ray 时传递给远程函数的选项。参见 https://docs.rayai.org.cn/en/latest/ray-core/api/doc/ray.remote.html

示例

使用默认模型的简单示例

from econml.dr import DRLearner

np.random.seed(123)
X = np.random.normal(size=(1000, 3))
T = np.random.binomial(2, scipy.special.expit(X[:, 0]))
sigma = 0.001
y = (1 + .5*X[:, 0]) * T + X[:, 0] + np.random.normal(0, sigma, size=(1000,))
est = DRLearner()
est.fit(y, T, X=X, W=None)
>>> est.const_marginal_effect(X[:2])
array([[0.516931..., 0.995704...],
       [0.356427..., 0.671870...]])
>>> est.effect(X[:2], T0=0, T1=1)
array([0.516931..., 0.356427...])
>>> est.score_
2.84365756...
>>> est.score(y, T, X=X)
1.06259465...
>>> est.model_cate(T=1).coef_
array([ 0.447095..., -0.001013... ,  0.018982...])
>>> est.model_cate(T=2).coef_
array([ 0.925055..., -0.012357... ,  0.033489...])
>>> est.cate_feature_names()
['X0', 'X1', 'X2']

非默认模型示例

from sklearn.linear_model import LassoCV
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor
from econml.dr import DRLearner

np.random.seed(123)
X = np.random.normal(size=(1000, 3))
T = np.random.binomial(2, scipy.special.expit(X[:, 0]))
sigma = 0.01
y = (1 + .5*X[:, 0]) * T + X[:, 0] + np.random.normal(0, sigma, size=(1000,))
est = DRLearner(model_propensity=RandomForestClassifier(n_estimators=100, min_samples_leaf=10),
                model_regression=RandomForestRegressor(n_estimators=100, min_samples_leaf=10),
                model_final=LassoCV(cv=3),
                featurizer=None)
est.fit(y, T, X=X, W=None)
>>> est.score_
1.7...
>>> est.const_marginal_effect(X[:3])
array([[0.68..., 1.10...],
       [0.56..., 0.79... ],
       [0.34..., 0.10... ]])
>>> est.model_cate(T=2).coef_
array([0.74..., 0.        , 0.        ])
>>> est.model_cate(T=2).intercept_
1.9...
>>> est.model_cate(T=1).coef_
array([0.24..., 0.00..., 0.        ])
>>> est.model_cate(T=1).intercept_
0.94...
score_

最终双重稳健潜在结果回归中的 MSE,即

\[\frac{1}{n_t} \sum_{t=1}^{n_t} \frac{1}{n} \sum_{i=1}^n (Y_{i, t}^{DR} - \hat{\theta}_t(X_i))^2\]

其中 n_t 是处理变量的数量(不包括控制变量)。

如果在拟合时 sample_weight 不为 None,则返回样本的加权平均值。

类型

浮点数

__init__(*, model_propensity='auto', model_regression='auto', model_final=StatsModelsLinearRegression(), discrete_outcome=False, multitask_model_final=False, featurizer=None, min_propensity=1e-06, categories='auto', cv=2, mc_iters=None, mc_agg='mean', random_state=None, allow_missing=False, use_ray=False, ray_remote_func_options=None)[source]

方法

__init__(*[, model_propensity, ...])

ate([X, T0, T1])

计算平均处理效应 \(E_X[\tau(X, T0, T1)]\)

ate_inference([X, T0, T1])

模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的推断结果。

ate_interval([X, T0, T1, alpha])

模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的置信区间。

cate_feature_names([feature_names])

获取输出特征名称。

cate_output_names([output_names])

获取输出名称的公共接口。

cate_treatment_names([treatment_names])

获取处理变量名称。

const_marginal_ate([X])

计算平均常数边际 CATE \(E_X[\theta(X)]\)

const_marginal_ate_inference([X])

模型产生的量 \(E_X[\theta(X)]\) 的推断结果。

const_marginal_ate_interval([X, alpha])

模型产生的量 \(E_X[\theta(X)]\) 的置信区间。

const_marginal_effect([X])

计算常数边际 CATE \(\theta(·)\)

const_marginal_effect_inference([X])

模型产生的量 \(\theta(X)\) 的推断结果。

const_marginal_effect_interval([X, alpha])

模型产生的量 \(\theta(X)\) 的置信区间。

effect([X, T0, T1])

计算异质处理效应 \(\tau(X, T0, T1)\)

effect_inference([X, T0, T1])

模型产生的量 \(\tau(X, T0, T1)\) 的推断结果。

effect_interval([X, T0, T1, alpha])

模型产生的量 \(\tau(X, T0, T1)\) 的置信区间。

fit(Y, T, *[, X, W, sample_weight, ...])

从数据中估计反事实模型,即估计函数 \(\theta(\cdot)\)

marginal_ate(T[, X])

计算平均边际效应 \(E_{T, X}[\partial\tau(T, X)]\)

marginal_ate_inference(T[, X])

模型产生的量 \(E_{T,X}[\partial \tau(T, X)]\) 的推断结果。

marginal_ate_interval(T[, X, alpha])

模型产生的量 \(E_{T,X}[\partial \tau(T, X)]\) 的置信区间。

marginal_effect(T[, X])

计算异质边际效应 \(\partial\tau(T, X)\)

marginal_effect_inference(T[, X])

模型产生的量 \(\partial \tau(T, X)\) 的推断结果。

marginal_effect_interval(T[, X, alpha])

模型产生的量 \(\partial \tau(T, X)\) 的置信区间。

model_cate([T])

获取拟合的最终 CATE 模型。

refit_final(*[, inference])

使用新的最终模型规范但保留缓存的第一阶段结果来估计反事实模型。

score(Y, T[, X, W, sample_weight])

在新数据集上对拟合的 CATE 模型进行评分。根据拟合时创建的残差无关模型,为新数据集生成无关参数。它使用由不同交叉拟合折(crossfit folds)拟合的模型的平均预测值。然后计算最终残差 Y 对残差 T 回归的 MSE。

如果 model_final 没有 score 方法,则会引发 AttributeError

shap_values(X, *[, feature_names, ...])

最终阶段模型 (const_marginal_effect) 的 SHAP 值

属性

dowhy

获取 DoWhyWrapper 实例,以使用 dowhy 包的其他功能。

featurizer_

获取拟合的特征化器。

fitted_models_final

model_final_

models_nuisance_

models_propensity

获取拟合的倾向性模型。

models_regression

获取拟合的回归模型。

获取拟合的最终 CATE 模型。

multitask_model_cate

nuisance_scores_propensity

获取倾向性模型在样本外训练数据上的评分

nuisance_scores_regression

获取回归模型在样本外训练数据上的评分

ortho_learner_model_final_

transformer

计算平均处理效应 \(E_X[\tau(X, T0, T1)]\)

ate(X=None, *, T0=0, T1=1)

参数
  • 在两个处理变量点之间计算效应,并在 X 变量的总体上进行平均。

  • T0 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的基线处理变量

  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

返回

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

返回类型

浮点数 或 (d_y,) 数组

ate_inference(X=None, *, T0=0, T1=1)

参数
  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

  • 模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

  • T0 ((m, d_t) 矩阵或长度为 m 的向量, 默认 0) – 每个样本的基线处理变量

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

T1 ((m, d_t) 矩阵或长度为 m 的向量, 默认 1) – 每个样本的目标处理变量

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

PopulationSummaryResults – 推断结果实例包含预测值和预测标准误,并可按需计算置信区间、z 统计量和 p 值。它还可以输出这些推断结果的 DataFrame 摘要。

对象

ate_interval(X=None, *, T0=0, T1=1, alpha=0.05)

参数
  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

  • 模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

  • T0 ((m, d_t) 矩阵或长度为 m 的向量, 默认 0) – 每个样本的基线处理变量

  • 模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

alpha ([0, 1] 范围内的浮点数, 默认 0.05) – 报告区间 的总置信水平。报告的是 alpha/2, 1-alpha/2 置信区间。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

lower, upper – 每个量的置信区间的下界和上界。

tuple(type of ate(X, T0, T1), type of ate(X, T0, T1)) )

获取输出特征名称。

参数

cate_feature_names(feature_names=None)[source]

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

feature_names (长度为 X.shape[1] 的字符串列表或 None) – 输入特征的名称。如果为 None 且 X 是 DataFrame,则默认为 DataFrame 中的列名。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

out_feature_names – 输出特征 \(\phi(X)\) 的名称,即每个处理的最终 CATE 模型关于其呈线性的特征。它是与 coef_() 参数的每个条目关联的特征名称。仅当 featurizer 不为 None 且具有方法 get_feature_names(feature_names) 时可用。否则返回 None。

字符串列表或 None

获取输出名称的公共接口。

cate_output_names(output_names=None)

参数

由对输出应用转换的估计器覆盖。

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

output_names (长度为 Y.shape[1] 的字符串列表或 None) – 输出的名称。如果为 None 且传递给 fit 的 Y 是 DataFrame,则默认为 DataFrame 中的列名。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

output_names – 返回输出名称。

字符串列表

获取处理变量名称。

cate_treatment_names(treatment_names=None)

参数

如果处理变量是离散的或已经特征化,则会返回扩展的处理变量名称。

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

treatment_names (长度为 T.shape[1] 的字符串列表, 可选) – 处理变量的名称。如果为 None 且传递给 fit 的 T 是 DataFrame,则默认为 DataFrame 中的列名。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

output_names – 返回输出名称。

out_treatment_names – 返回(可能扩展的)处理变量名称。

计算平均常数边际 CATE \(E_X[\theta(X)]\)

参数

const_marginal_ate(X=None)[source]

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

X ((m, d_x) 矩阵, 可选) – 每个样本的特征。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

theta – 每个处理变量对每个结果的平均常数边际 CATE。请注意,当 Y 或 T 是向量而不是二维数组时,输出中对应的单例维度将折叠(例如,如果两者都是向量,则此方法的输出将是标量)

(d_y, d_t) 矩阵

const_marginal_ate_inference(X=None)

参数

T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

T1 ((m, d_t) 矩阵或长度为 m 的向量, 默认 1) – 每个样本的目标处理变量

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

PopulationSummaryResults – 推断结果实例包含预测值和预测标准误,并可按需计算置信区间、z 统计量和 p 值。它还可以输出这些推断结果的 DataFrame 摘要。

模型产生的量 \(E_X[\theta(X)]\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

const_marginal_ate_interval(X=None, *, alpha=0.05)

参数
  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

  • 模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

alpha ([0, 1] 范围内的浮点数, 默认 0.05) – 报告区间 的总置信水平。报告的是 alpha/2, 1-alpha/2 置信区间。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

模型产生的量 \(E_X[\theta(X)]\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

tuple(type of const_marginal_ate(X) , type of const_marginal_ate(X) )

计算常数边际 CATE \(\theta(·)\)

const_marginal_effect(X=None)[source]

参数

const_marginal_ate(X=None)[source]

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

边际效应是在一组 m 个测试样本 X[i] 的特征向量上进行条件计算的。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

theta – 每个样本 X[i] 的每个处理变量对每个结果的常数边际 CATE。请注意,当 Y 或 T 是向量而不是二维数组时,输出中对应的单例维度将折叠(例如,如果两者都是向量,则此方法的输出也将是向量)

(m, d_y, d_t) 矩阵 或 (d_y, d_t) 矩阵 (如果 X 为 None)

const_marginal_effect_inference(X=None)

参数

T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

模型产生的量 \(\theta(X)\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

PopulationSummaryResults – 推断结果实例包含预测值和预测标准误,并可按需计算置信区间、z 统计量和 p 值。它还可以输出这些推断结果的 DataFrame 摘要。

InferenceResults – 推断结果实例包含预测值和预测标准误,并可按需计算置信区间、z 统计量和 p 值。它还可以输出这些推断结果的 DataFrame 摘要。

const_marginal_effect_interval(X=None, *, alpha=0.05)

参数
  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

  • 模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

alpha ([0, 1] 范围内的浮点数, 默认 0.05) – 报告区间 的总置信水平。报告的是 alpha/2, 1-alpha/2 置信区间。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

模型产生的量 \(\theta(X)\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

tuple(type of const_marginal_effect(X) , type of const_marginal_effect(X) )

计算异质处理效应 \(\tau(X, T0, T1)\)

effect(X=None, *, T0=0, T1=1)

参数
  • 在两个处理变量点之间计算效应,并在 X 变量的总体上进行平均。

  • T0 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的基线处理变量

  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

在 m 个测试样本 \(\{T0_i, T1_i, X_i\}\) 的特征向量条件下,计算两个处理变量点之间的效应。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

τ – 每个样本的每个结果的异质处理效应。请注意,当 Y 是向量而不是二维数组时,相应的单例维度将折叠(因此此方法将返回一个向量)

(m, d_y) 矩阵

effect_inference(X=None, *, T0=0, T1=1)

参数
  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

  • 模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

  • T0 ((m, d_t) 矩阵或长度为 m 的向量, 默认 0) – 每个样本的基线处理变量

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

模型产生的量 \(\theta(X)\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

PopulationSummaryResults – 推断结果实例包含预测值和预测标准误,并可按需计算置信区间、z 统计量和 p 值。它还可以输出这些推断结果的 DataFrame 摘要。

模型产生的量 \(\tau(X, T0, T1)\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

effect_interval(X=None, *, T0=0, T1=1, alpha=0.05)

参数
  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

  • 模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

  • T0 ((m, d_t) 矩阵或长度为 m 的向量, 默认 0) – 每个样本的基线处理变量

  • 模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

alpha ([0, 1] 范围内的浮点数, 默认 0.05) – 报告区间 的总置信水平。报告的是 alpha/2, 1-alpha/2 置信区间。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

模型产生的量 \(\tau(X, T0, T1)\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

tuple(type of effect(X, T0, T1), type of effect(X, T0, T1)) )

从数据中估计反事实模型,即估计函数 \(\theta(\cdot)\)

参数
  • fit(Y, T, *, X=None, W=None, sample_weight=None, freq_weight=None, sample_var=None, groups=None, cache_values=False, inference='auto')[source]

  • Y (长度为 n 的 (n,) 向量) – 每个样本的结果

  • T (长度为 n 的 (n,) 向量) – 每个样本的处理变量

  • X ((n, d_x) 矩阵, 可选) – 每个样本的特征

  • W ((n, d_w) 矩阵, 可选) – 每个样本的控制变量

  • sample_weight ((n,) array_like 对象, 可选) – 每个样本的个体权重。如果为 None,则假定权重相等。

  • freq_weight ((n,) int 类型的 array_like 对象, 可选) – 观测的权重。观测 i 被视为 freq_weight[i] 个独立观测的平均结果。当 sample_var 不为 None 时,应提供此参数。

  • sample_var ((n,) nd array_like 对象, 可选) – 用于计算观测 i 代表的平均结果的原始 freq_weight[i] 个观测的结果的方差。

  • groups ((n,) 向量, 可选) – 属于同一组的所有行在分割期间将保持在一起。如果 groups 不为 None,则传递给此类初始化器的 cv 参数必须支持其 split 方法的 ‘groups’ 参数。

  • cache_values (bool, 默认 False) – 是否缓存输入和第一阶段结果,这将允许重新拟合不同的最终模型

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

inference (str, Inference 实例, 或 None) – 执行推断的方法。此估计器支持 ‘bootstrap’(或 BootstrapInference 的实例)。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

self

DRLearner 实例

计算平均边际效应 \(E_{T, X}[\partial\tau(T, X)]\)

marginal_ate(T, X=None)

参数
  • 边际效应围绕一个基线处理变量点计算,并在 X 的总体上进行平均。

  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

T ((m, d_t) 矩阵) – 每个样本的基线处理变量

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

grad_tau – 每个结果的平均边际效应。请注意,当 Y 或 T 是向量而不是二维数组时,输出中对应的单例维度将折叠(例如,如果两者都是向量,则此方法的输出将是标量)

(d_y, d_t) 数组

marginal_ate_inference(T, X=None)

参数
  • 边际效应围绕一个基线处理变量点计算,并在 X 的总体上进行平均。

  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

T1 ((m, d_t) 矩阵或长度为 m 的向量, 默认 1) – 每个样本的目标处理变量

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

PopulationSummaryResults – 推断结果实例包含预测值和预测标准误,并可按需计算置信区间、z 统计量和 p 值。它还可以输出这些推断结果的 DataFrame 摘要。

模型产生的量 \(E_{T,X}[\partial \tau(T, X)]\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

marginal_ate_interval(T, X=None, *, alpha=0.05)

参数
  • 边际效应围绕一个基线处理变量点计算,并在 X 的总体上进行平均。

  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

  • 模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

alpha ([0, 1] 范围内的浮点数, 默认 0.05) – 报告区间 的总置信水平。报告的是 alpha/2, 1-alpha/2 置信区间。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

模型产生的量 \(E_{T,X}[\partial \tau(T, X)]\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

tuple(type of marginal_ate(T, X), type of marginal_ate(T, X) )

计算异质边际效应 \(\partial\tau(T, X)\)

marginal_effect(T, X=None)

参数
  • 边际效应围绕一个基线处理变量点计算,并在 X 的总体上进行平均。

  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

在 m 个测试样本 \(\{T_i, X_i\}\) 的特征向量条件下,围绕一个基线处理变量点计算边际效应。如果 treatment_featurizer 为 None,则在此计算中忽略基线处理变量,结果等同于 const_marginal_effect。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

grad_tau – 每个样本的每个结果的异质边际效应。请注意,当 Y 或 T 是向量而不是二维数组时,输出中对应的单例维度将折叠(例如,如果两者都是向量,则此方法的输出也将是向量)

(m, d_y, d_t) 数组

marginal_effect_inference(T, X=None)

参数
  • 边际效应围绕一个基线处理变量点计算,并在 X 的总体上进行平均。

  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

模型产生的量 \(\theta(X)\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

PopulationSummaryResults – 推断结果实例包含预测值和预测标准误,并可按需计算置信区间、z 统计量和 p 值。它还可以输出这些推断结果的 DataFrame 摘要。

模型产生的量 \(\partial \tau(T, X)\) 的推断结果。仅在调用 fit 方法时,当 inference 不为 None 时可用。

marginal_effect_interval(T, X=None, *, alpha=0.05)

参数
  • 边际效应围绕一个基线处理变量点计算,并在 X 的总体上进行平均。

  • T1 ((m, d_t) 矩阵或长度为 m 的向量) – 每个样本的目标处理变量

  • 模型产生的量 \(E_X[\tau(X, T0, T1)]\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

alpha ([0, 1] 范围内的浮点数, 默认 0.05) – 报告区间 的总置信水平。报告的是 alpha/2, 1-alpha/2 置信区间。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

模型产生的量 \(\partial \tau(T, X)\) 的置信区间。仅在调用 fit 方法时,当 inference 不为 None 时可用。

tuple(type of marginal_effect(T, X), type of marginal_effect(T, X) )

获取拟合的最终 CATE 模型。

参数

model_cate(T=1)[source]

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

T (字母数字) – 我们希望获取其拟合 CATE 模型的处理变量。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

model_cate – 调用 fit 后拟合的 model_final 对象实例,它对应于处理变量 T=t 相对于基线的 CATE 模型。在 multitask_model_final=False 时可用。

类型为 (model_final) 的对象

使用新的最终模型规范但保留缓存的第一阶段结果来估计反事实模型。

refit_final(*, inference='auto')[source]

参数

为了使其成功,必须使用 cache_values=True 调用 fit。此调用将仅重新拟合最终模型。此调用将使用任何更改最终阶段估计的参数的当前设置。如果更改了影响第一阶段无关变量估计的任何参数,则此调用将无效。您需要再次调用 fit 来更改第一阶段估计结果。

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

inference (推断方法, 可选) – 表示推断方法的字符串或对象

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

PopulationSummaryResults – 推断结果实例包含预测值和预测标准误,并可按需计算置信区间、z 统计量和 p 值。它还可以输出这些推断结果的 DataFrame 摘要。

self – 此实例

score(Y, T, X=None, W=None, sample_weight=None)[source]

在新数据集上对拟合的 CATE 模型进行评分。根据拟合时创建的残差无关模型,为新数据集生成无关参数。它使用由不同交叉拟合折(crossfit folds)拟合的模型的平均预测值。然后计算最终残差 Y 对残差 T 回归的 MSE。

参数
  • fit(Y, T, *, X=None, W=None, sample_weight=None, freq_weight=None, sample_var=None, groups=None, cache_values=False, inference='auto')[source]

  • Y (长度为 n 的 (n,) 向量) – 每个样本的结果

  • T (长度为 n 的 (n,) 向量) – 每个样本的处理变量

  • X ((n, d_x) 矩阵, 可选) – 每个样本的特征

  • 如果 model_final 没有 score 方法,则会引发 AttributeError

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

sample_weight ((n,) 向量, 可选) – 每个样本的权重

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

浮点数

score – 最终 CATE 模型在新数据上的 MSE。

shap_values(X, *[, feature_names, ...])

参数
  • shap_values(X, *, feature_names=None, treatment_names=None, output_names=None, background_samples=100)[source]

  • 最终阶段模型 (const_marginal_effect) 的 SHAP 值

  • X ((m, d_x) 矩阵) – 每个样本的特征。应与最终阶段拟合的 X 具有相同的形状。

  • feature_names (长度为 X.shape[1] 的字符串列表, 可选) – 输入特征的名称。

  • treatment_names (列表, 可选) – 特征化处理变量的名称。在离散处理场景中,名称不应包含基线处理变量的名称(即控制处理变量,默认为按字母顺序较小的那个)

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

output_names (列表, 可选) – 输出的名称。

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

background_samples (int, 默认 100) – 用于计算基线效应的样本数量。如果为 None,则使用所有样本。

shap_outs – 一个嵌套字典,使用每个输出名称(例如,当 output_names=None 时为 ‘Y0’, ‘Y1’, …)和每个处理变量名称(例如,当 treatment_names=None 时为 ‘T0’, ‘T1’, …)作为键,SHAP 值解释对象作为值。如果在拟合时的输入数据也包含元数据(例如,是 pandas DataFrames),则使用处理变量、输出和特征的列元数据代替上述默认值(除非用户通过显式传递相应名称进行覆盖)。

Explanation 对象的嵌套字典

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

property dowhy

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

获取 DoWhyWrapper 的实例,以使用 dowhy 包的其他功能。(例如,因果图、反驳测试等)

DoWhyWrapperDoWhyWrapper 的实例

featurizer_

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

实例

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

property featurizer_

featurizer – 用于在最终 CATE 模型训练中预处理 X 的拟合特征化器实例。仅当 featurizer 不为 None 且 X 不为 None 时可用。

models_propensity

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

类型为 (featurizer) 的对象

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

property models_propensity

models_propensitymodel_propensity 对象实例的嵌套列表。子列表数量等于蒙特卡洛迭代次数,子列表中的每个元素对应一个交叉拟合折(crossfitting fold),并且是针对该训练折拟合的模型实例。

models_regression

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

类型为 (model_propensity) 的对象嵌套列表

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

property models_regression

model_regression – model_regression 对象实例的嵌套列表。子列表数量等于蒙特卡洛迭代次数,子列表中的每个元素对应一个交叉拟合折(crossfitting fold),并且是针对该训练折拟合的模型实例。

获取拟合的最终 CATE 模型。

X ((m, d_x) 矩阵, 可选) – 每个样本的特征

类型为 (model_regression) 的对象嵌套列表

τ – 每个结果的平均处理效应。请注意,当 Y 是向量而不是二维数组时,结果将是标量

property multitask_model_cate

multitask_model_cate – 调用 fit 后拟合的 model_final 对象实例,其输出向量对应于每个处理变量相对于基线的 CATE 模型。仅在 multitask_model_final=True 时可用。

nuisance_scores_propensity

类型为 (model_final) 的对象

nuisance_scores_regression