选择偏差相较于混淆偏差,是一个独特的问题,尽管两者都源于与未观测因素相关的问题。混淆偏差涉及变量同时影响处理和结果,而选择偏差则出现在被纳入分析样本 ($S=1$) 的概率本身依赖于处理 ($T$)、结果 ($Y$),或与两者均相关的变量时,通常涉及未观测因素 $U$。这意味着所分析的样本与我们希望得出因果结论的目标总体存在系统性差异。即使在调整了已观测协变量 $X$ 后,应用于此类选择样本的标准估计器仍可能产生对因果效应(例如平均处理效应 (ATE) 或条件平均处理效应 (CATE))的有偏差估计。试想估计一个新的在线学习平台 ($T$) 对学生考试成绩 ($Y$) 的有效性。如果只有那些感到显著受益(意味着更高的潜在 $Y$)的学生选择报告他们的分数,那么样本就是根据与结果相关的因素进行选择的。同样,基于参与公司 ($Y$) 的收入来估计创业加速器项目 ($T$) 的投资回报时,如果只有成功的公司($S=1$ 取决于高 $Y$)同意分享数据,也可能会出现选择偏差。经典方法:赫克曼修正处理选择偏差的奠基性工作源自计量经济学,特别是赫克曼两步修正程序(常称为Heckit)。其核心思路是明确地将选择过程与结果过程一同建模。假设存在一个决定选择的潜在变量 $S^$: $$S^_i = Z_i \gamma + \nu_i$$ 如果 $S^*_i > 0$,则个体 $i$ 被选入样本 ($S_i=1$)。这里,$Z_i$ 代表影响选择的变量,$\gamma$ 是系数,$\nu_i$ 是误差项。针对整个总体(无论是否被选择)的结果模型为: $$Y_i = X_i \beta + T_i \alpha + \epsilon_i$$ 这里,$X_i$ 是协变量,$T_i$ 是处理,$\beta$ 和 $\alpha$ 是参数($\alpha$ 是我们感兴趣的因果效应),$\epsilon_i$ 是误差项。如果选择模型和结果模型的误差项 $\nu_i$ 和 $\epsilon_i$ 相关,则会发生选择偏差,这通常是因为两者都受到共同的未观测因素 $U$ 的影响。如果我们简单地仅使用选定样本 ($S_i=1$) 估计结果模型,误差项的期望值将不为零: $$E[\epsilon_i | S_i=1] = E[\epsilon_i | Z_i \gamma + \nu_i > 0] \neq 0$$在 $\nu_i$ 和 $\epsilon_i$ 服从具有相关性 $\rho$ 的二元正态分布的假设下,赫克曼表明此条件期望可以表示为: $$E[\epsilon_i | S_i=1] = \rho \sigma_\epsilon \lambda(Z_i \gamma)$$ 这里 $\sigma_\epsilon$ 是 $\epsilon_i$ 的标准差,$\lambda(\cdot)$ 是逆米尔斯比率 (IMR): $$\lambda(c) = \frac{\phi(c)}{\Phi(c)}$$ 这里,$\phi$ 是标准正态概率密度函数 (PDF),$\Phi$ 是标准正态累积分布函数 (CDF)。赫克曼两步程序包括:选择模型: 在完整样本(如果可用,包括已选择和未选择的单位)上使用 Probit 模型(该模型假设误差 $\nu_i$ 服从正态分布)估计选择方程,以获得估计值 $\hat{\gamma}$。对于已选择的单位 ($S_i=1$),计算预测的 IMR,$\hat{\lambda}_i = \lambda(Z_i \hat{\gamma})$。结果模型: 仅在选定样本上使用普通最小二乘法 (OLS) 估计结果方程,将计算出的 IMR ($\hat{\lambda}_i$) 作为额外回归变量: $$Y_i = X_i \beta + T_i \alpha + \theta \hat{\lambda}_i + \text{error}i$$ 该回归中的系数 $\hat{\alpha}$ 是处理效应的偏差校正估计值。$\hat{\theta}$ 的显著性可以作为选择偏差的检验($\theta = \rho \sigma\epsilon$)。经典赫克曼模型中识别的一个必要条件是排他性限制:$Z$ 中必须至少有一个变量影响选择 ($S$) 但不直接影响结果 $Y$,除非可能是通过其对选择本身的影响(即它不包含在 $X$ 中)。该变量充当选择过程的工具。机器学习中修正方法的调整尽管简洁,经典的赫克曼程序依赖于在复杂机器学习场景中常难以证明的强假设:分布假设: 误差项 ($\nu_i, \epsilon_i$) 的联合正态性。线性性: 选择模型和结果模型中的线性关系。排他性限制: 找到一个影响选择但不影响结果的有效变量可能非常困难。现代机器学习应用通常涉及高维数据、非线性关系和复杂交互,这需要更灵活的方法。调整选择偏差修正涉及用机器学习算法取代刚性参数模型,同时保留建模选择和校正结果预测的核心思路。使用分类器建模选择替代 Probit 模型,我们可以使用灵活的二元分类器来建模选择概率 $P(S=1 | Z)$。适用的模型包括:逻辑回归(灵活性较低但可解释)梯度提升机(例如 LightGBM, XGBoost)随机森林神经网络输入特征 $Z$ 将包括所有被认为影响样本纳入的已观测变量。该模型的输出为我们提供了估计的选择概率,$\hat{p}(Z_i) = \hat{P}(S=1 | Z_i)$。校正结果模型借助基于机器学习的选择模型,我们可以调整校正步骤:使用选择概率逆加权法 (IPSW): 如果选择仅依赖于已观测的预处理协变量 $Z$(如果选择发生在处理分配之后,则可能包括 $X$ 和潜在的处理 $T$),我们可以考虑用其估计选择概率的倒数对选定样本进行加权:$w_i = 1 / \hat{p}(Z_i)$。然后,使用这些权重在选定样本上训练结果模型。但此方法要求在给定 $Z$ 的情况下,选择机制与结果 $Y$ 相互独立,即“基于可观测变量的选择”。这是一个在实践中经常被违反的强假设(例如,如果人们根据他们感知到的结果自愿参与研究)。它还需要正性假设(对于所有相关的 $Z$, $P(S=1|Z) > 0$)。控制函数方法(广义 IMR): 这更接近赫克曼最初的思路。我们需要一种方法来捕捉给定选择条件下的结果误差的条件期望 $E[\epsilon_i | S_i=1, Z_i]$。在没有正态性假设的情况下,之前推导的 IMR 不能直接成立。然而,我们可以使用估计选择概率 $\hat{p}(Z_i)$ 或分类器原始分数的函数作为“控制函数”,并将其作为额外特征包含在结果模型中。在完整样本(或允许估计选择概率的相关样本)上训练 $P(S=1 | Z)$ 的分类器。对于已选择的单位 ($S_i=1$),计算一个控制函数项 $g(\hat{p}(Z_i))$。这可以是 $\hat{p}(Z_i)$ 本身、$\log(\hat{p}(Z_i))$ 或其他转换。在没有强假设的情况下,最优形式通常是未知的。使用已选择的样本 ($S_i=1$) 训练一个灵活的机器学习模型(例如随机森林、梯度提升、神经网络)来预测结果 $Y$。将已观测协变量 $X_i$、处理 $T_i$ 和计算出的控制函数项 $g(\hat{p}(Z_i))$ 作为输入特征。 $$Y \sim \text{ML_Model}(X, T, g(\hat{p}(Z)))$$ 之后可以通过比较处理组 ($T=1$) 和控制组 ($T=0$) 单位的预测结果来估计因果效应,可能是在感兴趣的协变量分布上取平均。挑战与考量排他性限制: 即使使用机器学习模型,对影响选择但不影响结果的变量的需求仍然是一个重要难题。没有它,识别通常严重依赖于控制函数的函数形式假设或特定的分布性质,从而降低了结果的可信度。如果存在这样的变量,它应包含在用于选择模型的 $Z$ 中,但应从结果模型的 $X$ 中排除。数据要求: 估计选择模型通常需要已选择 ($S=1$) 和未选择 ($S=0$) 单位的数据,或者至少知道目标总体中代表性样本的特征 $Z$。这些数据经常不可用。模型设定: 为选择和结果选择正确的机器学习模型,并确定合适的控制函数转换 $g(\cdot)$,需要仔细考量和验证。存在过拟合或模型设定偏差的风险。敏感性分析: 考虑到强假设(通常无法检验,特别是关于选择机制和未观测变量的作用),敏感性分析非常重要。如果我们改变关于选择和结果误差之间相关性的假设,或改变控制函数的选择,估计的因果效应会发生多大变化?实现概述让我们概述使用 Python 库调用实现控制函数方法的步骤:# 假设: # df_full 包含用于选择建模的特征 Z(所有单位) # df_selected 包含特征 X、处理 T、结果 Y 和 Z(仅已选择单位) # df_full 中的 'selected' 列表示 S=1 或 S=0 from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor from sklearn.model_selection import train_test_split import numpy as np import pandas as pd # 1. 训练选择模型 # 选择模型的特征 Z_features = ['z1', 'z2', 'instrument'] # 'instrument' ideally satisfies exclusion restriction # 选择模型的目标 selection_target = 'selected' selector_model = RandomForestClassifier(n_estimators=100, random_state=42) selector_model.fit(df_full[Z_features], df_full[selection_target]) # 2. 为已选择样本计算控制函数 # 预测已选择单位的选择概率 selection_probs_selected = selector_model.predict_proba(df_selected[Z_features])[:, 1] # 定义一个控制函数(例如,概率本身或 logit) # 避免除以零或 log(0) epsilon = 1e-6 control_function = np.log(selection_probs_selected / (1 - selection_probs_selected + epsilon)) # 备选方案:control_function = selection_probs_selected df_selected['control_func'] = control_function # 3. 使用控制函数训练结果模型 # 结果模型的特征(如果使用了工具变量,则将其从 Z 中排除) X_features = ['x1', 'x2'] T_feature = 'treatment' outcome_target = 'outcome' # 组合结果模型的特征 outcome_features = X_features + [T_feature, 'control_func'] outcome_model = RandomForestRegressor(n_estimators=100, random_state=123) outcome_model.fit(df_selected[outcome_features], df_selected[outcome_target]) # 4. 估计因果效应(例如 ATE) # 创建用于预测的反事实数据框 df_cf_treated = df_selected[outcome_features].copy() df_cf_treated[T_feature] = 1 df_cf_control = df_selected[outcome_features].copy() df_cf_control[T_feature] = 0 # 预测潜在结果 y_hat_treated = outcome_model.predict(df_cf_treated) y_hat_control = outcome_model.predict(df_cf_control) # 在已选择样本上估计 ATE ate_estimate = np.mean(y_hat_treated - y_hat_control) print(f"估计的 ATE(已调整选择偏差):{ate_estimate:.4f}") "> 该代码概述演示了工作流程。实现需要仔细的特征工程、超参数调优、交叉验证以及标准误差估计(由于其两阶段性质,通常需要自助法)。"总结与替代方案调整机器学习中的选择偏差修正方法比经典方法提供了更大的灵活性,但也继承了基本难题:依赖于关于选择过程和未观测变量作用的强假设(通常无法检验)。排他性限制的要求在许多机器学习场景中特别难以令人信服地满足。因此,这些方法应谨慎应用,并始终伴随严格的敏感性分析。在可能的情况下,本章讨论的替代策略,例如工具变量法(如果存在有效工具变量)、回归不连续性设计(如果存在明确的分配阈值)、双重差分法(如果面板数据和平行趋势假设成立),或近端因果推断(如果存在合适的代理变量),可能通过利用不同类型的数据结构或假设提供更可靠的识别途径,这些假设避免仅仅基于相关性明确建模选择机制。方法的选择在很大程度上取决于具体问题背景、数据可用性以及潜在假设的合理性。