econml.score.RScorer

class econml.score.RScorer(*, model_y, model_t, discrete_treatment=False, categories='auto', cv=2, mc_iters=None, mc_agg='mean', random_state=None)[源代码]

基类: object

基于 RLearner 损失的评分器。在拟合时拟合残差模型,并以交叉拟合方式计算评估数据的残差

Yres = Y - E[Y|X, W]
Tres = T - E[T|X, W]

然后对于任何给定的 CATE 模型计算损失

loss(cate) = E_n[(Yres - <cate(X), Tres>)^2]

还基于常数处理效应模型计算基线损失,即

base_loss = min_{theta} E_n[(Yres - <theta, Tres>)^2]

返回回归的 R 方评分的一个模拟值

score = 1 - loss(cate) / base_loss

这对应于通过引入 CATE 模型捕获的效应异质性所解释的额外结果方差,而不是总是预测常数效应。负分意味着 CATE 模型表现甚至比常数效应模型更差,并暗示 CATE 模型在训练过程中存在过拟合。

与其他几种因果模型选择替代方案进行比较时,[Schuleretal2018] 的近期工作也提倡使用此方法,该方法由 [NieWager2017] 在其工作中引入。

参数
  • model_y (估计器) – 用于将响应拟合到特征的估计器。必须实现 fitpredict 方法。

  • model_t (估计器) – 用于将处理拟合到特征的估计器。必须实现 fitpredict 方法。

  • discrete_treatment (bool, 默认值 False) – 处理值是否应被视为分类量而不是连续量

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

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

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

    • integer,指定折叠数。

    • CV 分割器

    • 一个可迭代对象,将 (train, test) 分割作为索引数组提供。

    对于 integer/None 输入,如果处理是离散的,则使用 StratifiedKFold;否则,使用 KFold(两种情况下都有随机混洗)。

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

  • mc_iters (int, 可选) – 重跑第一阶段模型的次数,以减少干扰项的方差。

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

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

参考文献

NieWager2017

X. Nie and S. Wager. Quasi-Oracle Estimation of Heterogeneous Treatment Effects. arXiv preprint arXiv:1712.04912, 2017. https://arxiv.org/pdf/1712.04912.pdf

Schuleretal2018

Alejandro Schuler, Michael Baiocchi, Robert Tibshirani, Nigam Shah. “个体处理效应估计中的模型选择方法比较。” Arxiv, 2018 https://arxiv.org/pdf/1804.05146.pdf

__init__(*, model_y, model_t, discrete_treatment=False, categories='auto', cv=2, mc_iters=None, mc_agg='mean', random_state=None)[源代码]

方法

__init__(*, model_y, model_t[, ...])

best_model(cate_models[, return_scores])

从模型列表中选择最佳模型

ensemble(cate_models[, eta, return_scores])

根据模型的性能对其进行集成

fit(y, T[, X, W, sample_weight, groups])

参数
  • Y ((n × d_y) 矩阵 或 长度为 n 的向量) -- 每个样本的结果

score(cate_model)

参数

cate_model (已拟合的 BaseCateEstimator 实例)

best_model(cate_models, return_scores=False)[源代码]

从模型列表中选择最佳模型

参数
  • cate_models (已拟合的 BaseCateEstimator 实例列表)

  • return_scores (bool, 默认值 False) – 是否返回每个模型的评分列表

返回值

  • best_model (已拟合的 BaseCateEstimator 实例) – 获得最佳评分的模型

  • best_score (double) – 最佳模型的评分

  • scores (double 列表) – 每个输入模型的评分列表。仅当 return_scores=True 时返回。

ensemble(cate_models, eta=1000.0, return_scores=False)[源代码]

根据模型的性能对其进行集成

参数
  • cate_models (已拟合的 BaseCateEstimator 实例列表)

  • eta (double, 默认值 1000) – 集成的 softmax 参数

  • return_scores (bool, 默认值 False) – 是否返回每个模型的评分列表

返回值

  • ensemble_model (已拟合的 EnsembleCateEstimator 实例) – 一个已拟合的集成 CATE 模型,根据输入 CATE 模型的加权版本计算效应,权重为其评分性能的 softmax

  • ensemble_score (double) – 集成模型的评分

  • scores (double 列表) – 每个输入模型的评分列表。仅当 return_scores=True 时返回。

fit(y, T, X=None, W=None, sample_weight=None, groups=None)[源代码]
参数
  • Y ((n × d_y) 矩阵 或 长度为 n 的向量) – 每个样本的结果

  • T ((n × dₜ) 矩阵 或 长度为 n 的向量) – 每个样本的处理

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

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

  • sample_weight ((n,) 向量, 可选) – 每行的权重

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

返回类型

self

score(cate_model)[源代码]
参数

cate_model (已拟合的 BaseCateEstimator 实例)

返回值

score – 因果设置下 R 方损失的一个模拟值。

返回类型

double