想象你是果园的总园艺师,手里有一批新研制的肥料。你很快发现一个耐人寻味的现象:同样一袋肥,洒在向阳坡的苹果树下,果子又大又甜;洒在背阴洼地的梨树下,产量不升反降,甚至伤了树根。你真正想知道的,不是“哪块地产量高”——那用一把卷尺量一量就清楚了;你想知道的是“这块地值不值得施肥、肥效到底有多大”。前者是预测,后者是因果,两者的答案可能完全不同。因果树,就是那位帮你把果园切成一小块一小块、逐块试出“肥料真实效果”的聪明园艺师。 因果树(Causal Tree)是因果机器学习中最直观的落地工具之一:它把人群按特征切分成一个个子群,在每个子群里分别估计“处理带来的平均效果”。它比普通决策树多了一双“对照的眼睛”,是因果森林的根基。本文会用果园施肥的故事,带你从一棵树走到一片森林,搞懂它凭什么能找到“谁受益、谁无效、谁受损”。
掌握因果树,你就拥有了从“数据里找规律”升级为“数据里找原因”的核心武器。对于做精准营销、个体化医疗、政策评估的 AI 从业者,这是区分“会建模”和“会做决策”的分水岭技能。
目录
可视化演示
展示因果树的分裂结构与叶节点CATE估计、诚实估计的样本分割机制、以及因果树与CART在处理效应估计上的置信区间对比,交互切换三种模式探索。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+CAPS.mode1+'
1. 树的定位:天气预报员与施肥实验员
果园里有两种专家。天气预报员背着手在田埂上走一圈,说“这块地产量高,那块地产量低”——他做的是预测,回答“是什么”。施肥实验员则不同,他手里攥着肥料袋,心里想的是:“如果不施肥,这片地本来能收多少?施了肥,又能多收多少?”他做的是因果,回答“如果怎样,会怎样”。因果树就是第二种专家,而且是一位异常勤奋的:他不满足于说“整体上施肥有效”,他要切开果园,告诉你东边那块、西边那块各自的效果。
因果树由 Athey 和 Imbens 在 2016 年提出,本质是把经典的分类回归树(CART)改造成“效应估计器”。普通树的每个叶子里存的是样本的平均结果,比如“这块地平均产量 300 箱”;因果树的每个叶子里存的是处理效应——“施肥让这块地平均增产 40 箱,而旁边那块地平均减产 15 箱”。它从一个预测工具,变成了一个“扫描效应差异”的雷达。
它的学习目标也随之改变:普通树追求让叶子内的产量尽量接近,叶子间产量尽量不同;因果树追求让叶子内的效应尽量一致,叶子间的效应尽量有反差。下面这个式子就是它的“全局施工图”,目标是最大化叶子之间的效应差异:
回到果园:天气预报员会说“整片果园平均增产 10 箱”,但因果树会指着东南角说“那边增产 60 箱,赶紧施肥”,再指着西北角说“那边减产 20 箱,肥料钱省下来”。这就是定位带来的价值——因果问题不能靠预测答案来回答。
- 叶子集合$c\in \text{leaves}(\theta)$ 表示树 $\theta$ 切出的所有地块(叶子节点),每块地对应一群特征相似的人。
- 叶子内效应$\hat\tau_c$ 是叶子 $c$ 里“施肥组平均产量减去对照组平均产量”,即这块地的平均肥效。
- 全局均值$\bar\tau$ 是所有叶子效应的加权平均,权重就是各叶子的样本占比 $\frac{n_c}{n}$。
- 目标含义把每个叶子的效应与全局均值做差后平方再加权求和——这个值越大,说明各块地的肥效差异越悬殊,说明树找到了真正的“效果分层线”。
2. 核心目标:从“平均效果”到“每个人的效果”
施肥之前,每棵树其实都有两种可能的命运:施肥后的产量 $Y(1)$,和不施肥的产量 $Y(0)$。因果推断里管这叫“潜在结果”。可惜命运只能二选一——你一袋肥撒下去,就只能看到其中一种。另一条时间线里那棵树的样子,永远是个谜,这就是“反事实缺失”。于是你很难直接说出“施这袋肥对 3 号苹果树到底增加了多少产量”。
统计学家的妥协方案是:不追求每棵树的个体效果(那太难了),而是求“一群相似之人的平均效果”。先把果园里的人按特征(坡度、日照、树龄)分类,再在同一类里比较施肥与不施肥的平均差。给定特征 $X=\mathbf{x}$ 时,这个平均处理效应就叫 CATE(条件平均处理效应),它是整棵因果树瞄准的靶心:
注意 ATE(全园平均肥效)和 CATE 的区别:如果全园平均增产 10 箱,你可能以为每块地都增产——但东南角可能增产 60 箱、西北角减产 20 箱,平均下来恰好是 10 箱。这就是“平均值的谎言”。因果树的价值,就是把“全园平均”拆成“每类人自己的平均”。
- 潜在结果$Y_i(1)$ 是第 $i$ 棵树施肥后的产量,$Y_i(0)$ 是同一棵树不施肥的产量,两者都是“理论上存在的”。
- 个体效应$Y_i(1)-Y_i(0)$ 是施肥对第 $i$ 棵树的真实效果,统计上称为 ITE,可惜它永远只能部分观测。
- 条件范围$\mid \mathbf{X}_i=\mathbf{x}$ 表示“只看向量特征等于 $\mathbf{x}$ 的那一群人”,例如“坡向朝南、树龄五年”的苹果树。
- 期望运算$\mathbb{E}[\cdot]$ 对这群人取平均,抹平个体随机波动,得到这群人的平均肥效——这正是决策最需要的信息。
3. 分裂准则:园艺师手里的剪刀
现在园艺师要切分果园了。问题来了:往哪个方向切、在哪个位置切,才能让两块新地的肥效差异最大?因果树的分裂准则,就是那把剪刀的“刻度尺”。
每次考虑一个候选切分点(比如“日照时长是否大于 6 小时”),园艺师会先做一次“预实验”:把数据按这个切分点分成左右两块,分别计算两块的肥效 $\hat\tau_1$ 和 $\hat\tau_2$,然后看它们与整体效应的反差有多大。再加上一个复杂的“惩罚项”——防止园艺师为了追求差异而把地切得稀碎。准则写成:
回到果园:这把剪刀不会因为“东边地大、西边地小”就偏袒谁,因为它把面积权重算进去了;也不会因为“某次切分让效应差异特别夸张”就无脑采用,因为惩罚项在耳边提醒:“你切得太碎了,换一批人来验证恐怕就失效了。”
- 候选子节点$C_1,C_2$ 是按某个特征阈值切出的左右两块新地。
- 加权效应平方$\frac{n_j}{n}\cdot\hat\tau_j^2$ 是第 $j$ 块地的肥效平方乘以该块地人数占比——块越大、效应越强,贡献越大。
- 惩罚项$\mathrm{Pen}(\theta)$ 随叶子数量、树深度增加而增大,相当于对“过度切分”收税。
- 选择规则遍历所有特征的所有候选阈值,选出使 $\Delta$ 最大的那个切分点,作为当前节点的分裂。
4. 诚实划分:先看地图,再验肥效
想象一个心急的园艺师:他先施肥、看产量,发现“咦,施过肥的树产量都高”,于是得出结论“施肥有效”——这当然不靠谱,因为产量高可能只是因为那块地本来就好。因果树也有类似的陷阱,叫做“搜索偏置”:如果先用同一批数据既找切分位置、又估计肥效,那么树会“记住”数据里的噪声,给出的效果估计会系统性偏高——因为它专门挑了那些“看起来差异大”的地方切。
解决办法非常朴素:把样本分成两份,一份当“探路者”,一份当“验收员”。探路者数据集 $S^{tr}$ 用来决定树在哪里切;验收员数据集 $S^{est}$ 用来在切好的叶子里重新估计肥效。切分规则来自探路者,效果数字来自验收员,两边“互不知情”,这就是诚实树(Honest Tree):
用果园的话说:先让探路者对半片果园做地形调查、规划切块方案,再让验收员在另一片园子里按方案施肥、记录肥效。如果探路者规划的“增产区”在验收员那里依然增产,那才是真本事。
- 样本分割$\mathcal{S}=\mathcal{S}^{tr}\sqcup \mathcal{S}^{est}$ 表示把全量样本分成互不相交的两份,通常各占一半。
- 分裂规则来源树的每个切分点、切分阈值都由 $\mathcal{S}^{tr}$ 决定,就像用一份地图规划施肥路线。
- 估计来源叶子里的肥效 $\hat\tau^{honest}$ 只用 $\mathcal{S}^{est}$ 计算,验收员独立给出数字。
- 为何有效因为切分没有“偷看”估计数据里的效应值,效应估计就不会被选择过程带偏。
5. 偏差与方差:跷跷板两端的肥料桶
树该切多深?切浅了,叶子太大,一块地里既有向阳坡又有背阴洼,肥效被平均成一锅粥——这叫“偏差大”,估计不准;切深了,叶子太小,每块地就几棵树,随便一场冰雹就让“增产”变“减产”——这叫“方差大”,估计不稳。园艺师面对的就是这个跷跷板:左端是偏差,右端是方差,他往中间站,才能稳稳接住两桶肥料。
统计学家把这个跷跷板写成均方误差的分解式:任何对肥效的估计,误差都来自三部分——系统性偏差、随机波动、以及果园本身不可预测的噪声:
实践中,园艺师对付跷跷板还有一招:同一套切分规则,用多批验收员数据反复估计再取平均——这就是下一节森林的雏形。单棵树再诚实也难免“手抖”,但一群树一起举手投票,就稳得多了。
- 偏差平方$\mathrm{Bias}^2(\hat\tau)$ 是估计值系统性偏离真实肥效的程度,树太浅、叶子太粗时偏大。
- 方差$\mathrm{Var}(\hat\tau)$ 是换一批果园数据后估计值的波动幅度,树太深、叶子样本太少时偏大。
- 不可约噪声$\sigma^2$ 是果园里打雷、刮风之类的固有随机性,任何模型都无法消除。
- 平衡策略设置最小叶子样本数和最大深度等正则化参数,让偏差与方差之和最小——通常用交叉验证选支点。
6. 森林集成:一群园艺师的会诊
一位园艺师可能会看走眼,但请来一百位园艺师,每人用不同的角度(不同的随机子样本、不同的特征组合)观察果园,再让他们投票,结论就可靠得多。因果森林就是这个思路:种下很多棵“诚实的因果树”,每棵树在随机子样本上生长、在随机特征子空间里找切分,最后把所有树的估计平均起来:
这片森林在现代工具中通常被称为广义随机森林(GRF),它把“找效应分组”的因果树推广到了更一般的估计问题。每棵树依然诚实,但集体智慧让结论既稳又准。
- 多棵树$\hat\tau_b^{honest}(\mathbf{x})$ 是第 $b$ 棵诚实树在特征 $\mathbf{x}$ 处给出的肥效估计。
- 随机性注入每棵树使用不同的自助子样本和特征子集,保证树与树之间“意见独立”,不抱团犯错。
- 平均聚合$\frac{1}{B}\sum_{b=1}^{B}(\cdot)$ 把 $B$ 棵树的估计取平均,独立性越强,平均后方差越小。
- 理论保证Wager 与 Athey 证明,当 $B$ 足够大时,这些树的估计服从近似正态分布,可以构造置信区间——园艺师不仅知道“增产 40 箱”,还知道“大概在 35 到 45 箱之间”。
7. 性能评估:果园验收组的考核表
树长好了,森林也种出来了,怎么知道它挑出的“施肥受益区”是真本事还是瞎蒙?果园请来验收组,拿着考核表逐项打分。
第一项考核叫“排序可靠性”:把全园果树按模型预测的肥效从高到低排序,然后分成若干组(比如按预测值分为高、中、低三档)。真金不怕火炼——如果模型真的找到了效应分层,那么高分群的真实效应应该明显高于低分群:
第二项考核是“对比基线”:把因果树的效果和简单的 S-learner、T-learner 等元学习器对比,用 APE(Effect Heterogeneity 的平均精度)等指标打分,择优录取。验收组还会做“黄金样本”检验——留出一批数据完全不参与训练,专门用来验证。这一切都在回答同一个问题:这片森林的“施肥建议”,是不是真的比“全体平均施肥”更高明。
- 预测排序依据模型输出的 $\hat\tau(\mathbf{X})$ 把样本从高到低排队。
- 高分组$\hat{\mathbb{E}}[\tau(\mathbf{X})\mid \text{高分组}]$ 是排名前 20% 样本的真实效应均值。
- 低分组同理计算排名后 20% 样本的真实效应均值。
- 差值意义$\Delta_{TB}$ 越大,说明模型的排序越贴合真实效应;若接近 0,说明模型只是随机打分。
8. 工程落地:果园里的工具箱与分寸
把因果树搬进真实业务,就像园艺师把理论装进工具箱。市面上的主流工具——R 的 grf 包、微软的 EconML、优步的 causalml——都封装好了诚实因果树与广义随机森林,调用起来并不比随机森林复杂多少。核心工作反而在数据与判断上。
GRF 的估计可以理解为一个带权重的平均:每个样本的权重 $\alpha_i(\mathbf{x})$ 由它落在 $\mathbf{x}$ 附近叶子的频率决定——$\mathbf{x}$ 的“邻居们”越多出现在某棵树的同一个叶子里,它们对估计的发言权就越大:
落地时最重要的分寸在于混淆变量:如果“是否施肥”不是随机决定,而是因为某些地本来就肥沃才施的肥,那么因果树看到的“增产”可能是假象。工程上要么依赖随机实验数据,要么尽力收集并调整可能的混淆因素(倾向得分、双重机器学习等)。最后,把模型输出的高受益人群接入业务系统,形成“预测—施策—评估—迭代”的闭环——这才算把因果树真正种进了果园。
- 局部权重$\alpha_i(\mathbf{x})$ 衡量样本 $i$ 与目标点 $\mathbf{x}$ 的“亲近程度”,由森林中共同叶子的频率决定。
- 潜在结果差$Y_i(1)-Y_i(0)$ 是样本 $i$ 的个体效应,观测数据中由组间均值差替代。
- 加权求和把邻居们的效应按亲密度加权汇总,得到 $\mathbf{x}$ 处的效应估计。
AI 应用场景
精准营销:找出真正会被优惠券打动的用户
阶段:CATE 估计与用户分层
解决的问题:传统营销把同样的优惠券发给所有人,ROI 容易被“无感用户”摊薄。因果树按用户特征(消费频次、客单价、活跃度)切分人群,估计“发券带来的增量购买”,只把钱花在效应为正的用户身上。
具体案例:某电商平台用因果树建模 20 元优惠券的 CATE,发现“月活低但近 7 天有浏览”的用户券效最高,而“高客单价老用户”领券后只是把原本要买的东西提前下单,增量效应几乎为零。调整投放策略后,营销 ROI 提升了约 35%。
个体化治疗:为不同病人选择不同方案
阶段:治疗效应异质性分析
解决的问题:临床中“平均有效”的药物未必对每个人都有效,甚至有人有害。因果树帮助医生回答“哪类病人从方案 A 获益最大,哪类病人更适合方案 B”。
具体案例:某医院分析两种降压药的历史电子病历数据,用因果树按年龄、基础血压、肾功能分组,发现年轻且肾功能正常的患者用 A 药降压效果显著优于 B 药,而老年慢性肾病患者用 B 药心血管风险更低。据此调整处方建议,并发症发生率下降 12%。
政策评估:把就业补贴发给真正需要的人
阶段:政策效应评估与补贴对象筛选
解决的问题:政府发放就业培训补贴常面临“钱花了、就业率没动”的窘境。因果树可以用来估计培训对不同人群的就业增量效应,识别“高响应群体”。
具体案例:某市人社局对近三年培训补贴数据建模,因果树发现“失业超过 6 个月且具有大专学历”的群体培训效应最强,就业率提升 18 个百分点;而“在职提升型”学员的培训几乎不改变就业状态。据此优化补贴发放规则,财政资金使用效率显著提高。
Python 演示
import numpy as np class HonestCausalTree: """A minimal honest causal tree for CATE estimation.""" def __init__(self, max_depth=3, min_leaf=50, split_frac=0.5, n_cut=10): self.max_depth = max_depth self.min_leaf = min_leaf self.split_frac = split_frac self.n_cut = n_cut def fit(self, X, y, w): n = len(y) idx = np.random.permutation(n) m = int(n * self.split_frac) self.root = self._grow(X[idx[:m]], y[idx[:m]], w[idx[:m]], X[idx[m:]], y[idx[m:]], w[idx[m:]], 0) return self def _tau(self, Xe, ye, we): a = we == 1 b = we == 0 if not a.any() or not b.any(): return 0.0 return ye[a].mean() - ye[b].mean() def _split_score(self, Xs, ys, ws, f, v): left = Xs[:, f] <= v n = len(ys) if left.sum() < self.min_leaf or (n - left.sum()) < self.min_leaf: return -np.inf right = ~left tL = ys[left & (ws == 1)].mean() - ys[left & (ws == 0)].mean() tR = ys[right & (ws == 1)].mean() - ys[right & (ws == 0)].mean() return left.sum() * tL ** 2 + right.sum() * tR ** 2 def _find(self, Xs, ys, ws): best_f, best_v, best_s = None, None, -np.inf for f in range(Xs.shape[1]): cuts = np.quantile(Xs[:, f], np.linspace(0, 1, self.n_cut + 2)[1:-1]) for v in np.unique(cuts): s = self._split_score(Xs, ys, ws, f, v) if s > best_s: best_f, best_v, best_s = f, v, s return best_f, best_v def _grow(self, Xs, ys, ws, Xe, ye, we, depth): node = {'tau': self._tau(Xe, ye, we), 'f': None, 'v': None, 'l': None, 'r': None} if depth < self.max_depth and len(ys) >= 2 * self.min_leaf: f, v = self._find(Xs, ys, ws) if f is not None: ls = Xs[:, f] <= v le = Xe[:, f] <= v node['f'], node['v'] = f, v node['l'] = self._grow(Xs[ls], ys[ls], ws[ls], Xe[le], ye[le], we[le], depth + 1) node['r'] = self._grow(Xs[~ls], ys[~ls], ws[~ls], Xe[~le], ye[~le], we[~le], depth + 1) return node def _pred_one(self, x): node = self.root while node['l'] is not None: node = node['l'] if x[node['f']] <= node['v'] else node['r'] return node['tau'] def predict(self, X): return np.array([self._pred_one(x) for x in X]) if __name__ == '__main__': np.random.seed(42) n = 3000 X = np.random.randn(n, 3) w = np.random.binomial(1, 0.5, n) tau = 2.0 * X[:, 0] y = 1.0 + X[:, 0] + w * tau + np.random.randn(n) tree = HonestCausalTree(max_depth=3, min_leaf=50) tree.fit(X, y, w) tau_hat = tree.predict(X) rmse = np.sqrt(np.mean((tau_hat - tau) ** 2)) print('CATE RMSE = %.4f' % rmse)
X[idx[:m]], y[idx[:m]], w[idx[:m]]把样本切成两份,前一半当“探路者”决定切分规则,后一半当“验收员”估计效应,这就是诚实性的实现。_split_score` 中 `left.sum() * tL ** 2 + right.sum() * tR ** 2分裂准则:奖励“左右两块地效应差异大”,同时用最小叶子数过滤掉过碎的切分。cuts = np.quantile(...)对每个特征取分位点作为候选切分阈值,避免逐一扫描所有取值,控制计算量。le = Xe[:, f] <= v关键一步:切分阈值是在训练集上选出的,但必须把同一把尺子应用到估计集上,才能保证“探路”和“验收”互不干扰。while node['l'] is not None预测时沿着树走到叶子,返回该叶子在估计集中算出的平均肥效。
常见误区
误区“我的回归树预测产量特别准,那肯定能看出施肥有没有效。预测精度越高,因果结论越可信。”
正解预测准说明模型掌握了“地好产量高”这类相关性,但相关性不是因果。一块地产量高,可能是因为它本来就肥沃,而不是因为施了肥。因果树必须显式比较“施肥组 vs 对照组”的差异,才能剥离出肥料自身的贡献。
为何常见:日常语言中“预测”和“解释”经常混用,且现实数据里施肥往往恰好施在好地上,相关性天然掩盖了因果,让人误以为预测模型自动包含了原因答案。
误区“数据本来就少,再把样本分成两份太浪费了。直接用全部数据建树、在叶子里算效应,不更充分利用信息吗?”
正解全面利用数据的代价是“搜索偏置”——树会专门挑那些噪声恰好造成效应差异的地方切,叶子里的效应被系统性高估。诚实划分虽然让每份数据只干一件事,但换来的是效应的无偏估计。样本可以少,但不可以“既当运动员又当裁判”。
为何常见:普通回归树没有“诚实性”概念,大家习惯了用全部数据训练;加上“数据越少越要省着用”的直觉,很难意识到切分过程本身会造成选择性偏差。
误区“ATE 算出来是正的,说明施肥整体有效,那我把它推给所有人就行了,不用管个体差异。”
正解平均值会掩盖异质性。可能东南角增产 60 箱、西北角减产 20 箱,平均下来恰好 10 箱。因果树存在的意义就是拒绝“平均主义”,把人群拆开,找出谁受益、谁受损。只报 ATE 而不看 CATE,等于把果园的长度当宽度来量。
为何常见:人类大脑天然倾向用“总体结论”简化认知,而辛普森悖论等反例在日常生活中并不直观,需要刻意训练“分层看数据”的习惯。
误区“我用历史订单数据建了棵因果树,发现发券用户购买率更高——这就是优惠券的因果效应,可以直接汇报给老板。”
正解历史数据里“是否发券”往往不是随机的——平台可能本来就偏爱给高价值用户发券。如果没把这类混淆变量纳入特征或调整,树的“效应”可能是用户本身的价值造成的假象。因果树解决的是“在已控制混淆后如何分层”,而不是替你创造随机性。
为何常见:工具库封装得太友好,随手 fit 一个模型就出结果,让人忽略了因果推断的前提假设;而“发券用户购买率高”这类统计数字在业务上又特别容易被接受。
面试题
Q1. 因果树和普通回归树最主要的区别是什么?
- A.目标是估计处理效应而非预测结果← 正确答案
- B.目标是预测最终结果而非效应
- C.特征必须全是类别型变量
- D.树的深度只能取固定值
答案:A。普通回归树在叶子里存平均结果,回答“是什么”;因果树在叶子里存处理效应(施肥组减对照组),回答“如果怎样会怎样”。B 是普通回归树的任务;C、D 是无关的工程限定。就好比天气预报员和施肥实验员的分工不同。
Q2. 在因果树中,CATE 指的是什么?
- A.全体样本的平均处理效应
- B.给定协变量时的条件平均处理效应← 正确答案
- C.单个个体的真实处理效应
- D.模型在验证集上的预测误差
答案:B。CATE 是 $\tau(x)=E[Y(1)-Y(0)|X=x]$,对“特征相同的一群人”取平均。A 是 ATE,C 是 ITE,D 是预测误差。用果园话说,CATE 问的是“向阳坡五年树龄的苹果树平均肥效多少”,而不是“全园平均”或“3 号树单独的效果”。
Q3. “诚实树”的核心做法是什么?
- A.分裂和估计使用完全相同的样本
- B.分裂样本与效应估计样本不相交← 正确答案
- C.每个叶子里的样本必须等量分配
- D.整棵树只使用一个特征进行分裂
答案:B。诚实性要求一份样本决定“在哪里切”,另一份样本决定“切完后效应是多少”。如果共用样本,树会针对噪声刻意切分,效应被高估。这就像探路者规划路线后,必须由验收员独立复测,不能是同一个人既画地图又填数据。
Q4. 因果树分裂准则的核心目标是什么?
- A.最大化子节点之间的效应差异← 正确答案
- B.最小化子节点内样本方差
- C.最大化整体训练集预测精度
- D.最小化树的深度和叶子数量
答案:A。因果树要找的是“效应异质性”:切出的两块地效应差异越大越好(同时用样本量和惩罚项约束)。B 是普通回归树的目标,C 是预测目标,D 是正则化手段不是目标。目标服务于“精准施策”而非“精准预测”。
Q5. 因果森林相比单棵因果树,最主要的优势是什么?
- A.偏差更低,估计更接近真实效应
- B.方差更低,估计更稳定可靠← 正确答案
- C.可解释性更强,规则更直观
- D.训练速度更快,资源消耗更低
答案:B。森林通过对多棵随机树的平均来降低方差,同时保持较低偏差。单棵树可能因样本波动“手抖”,一百棵树的投票就稳多了。A 是偏差维度的改进,但森林主要降方差;C 和 D 恰恰是森林的劣势。
Q6. 使用观测数据训练因果树时,最重要的前提是什么?
- A.样本规模必须超过一百万条
- B.处理好混淆变量或已满足可忽略性← 正确答案
- C.处理组必须是完全随机分配的
- D.所有特征都必须是连续数值型
答案:B。观测数据中“是否施肥”往往不是随机的,若不控制混淆变量,估计出的效应可能只是“好地本来产量高”的假象。A、D 是工程细节,C 是理想随机试验才有的条件。因果树不是免死金牌,它默认假设你已经把混淆关进了笼子。
Q7. 为什么不能用同一批数据既选切分点又在叶子里算效应?
- A.搜索偏置会导致效应被系统性高估← 正确答案
- B.样本太少会导致模型无法训练
- C.计算复杂度会呈指数级大幅上升
- D.这样会无意中引入未观测混淆变量
答案:A。当切分点由同一批数据选出时,树会专门挑选那些噪声恰好造成差异的位置,叶子效应于是偏高——这就是搜索偏置,也叫“数据窥探”。诚实划分把两组样本分开,从机制上杜绝了这种自欺欺人。B、C、D 都不是根本原因。
Q8. 想要科学评估一棵因果树的质量,可以怎么做?
- A.按预测效应排序后分组对照← 正确答案
- B.使用 APE 度量效应异质性质量← 正确答案
- C.与 S-learner、T-learner 基线对比← 正确答案
- D.只看 R 方判断因果效应大小
答案:ABC。评估因果树要看它是否真的把高效应和低效应人群分开了:排序分组看高分组与低分组的真实效应差,APE 量化异质性精度,与元学习基线对比能判断相对优势。R 方衡量的是结果预测能力,与因果效应大小无关,就像既不能靠“产量预测准”来证明肥效一样。
Q9. 关于 ITE、ATE 和 CATE,下列说法正确的有哪些?
- A.反事实差是 ITE 的定义方式← 正确答案
- B.ATE 是全体样本的效应平均← 正确答案
- C.CATE 是给定特征条件下的期望效应← 正确答案
- D.三者的数值在任何数据下都完全相等
答案:ABC。ITE 是 $Y(1)-Y(0)$,因反事实缺失而不可直接观测;ATE 是对全体的平均;CATE 是对特征子群的平均。三者一般不等:全园平均增产 10 箱,不代表每块地都增产 10 箱。D 把异质性抹掉了,恰恰是因果树要反对的“平均主义”。
Q10. 把因果树落地到工程实践时,需要留意哪些问题?
- A.未观测混淆存在时谨慎解释因果← 正确答案
- B.正则化参数调节偏差方差平衡← 正确答案
- C.诚实划分可消除切分的搜索偏置← 正确答案
- D.预测准确即可保证因果结论成立
答案:ABC。观测数据中若有未观测混淆,因果结论随时可能崩塌,所以要谨慎;正则化(最大深度、最小叶子数)是在调偏差与方差的跷跷板;诚实划分是防搜索偏置的标准做法。D 混淆了预测与因果——预测准确找的是相关性,不是原因。