尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

因果模型与因果推断入门:从DAG、Uplift到去混淆建模

因果模型与因果推断入门:从DAG、Uplift到去混淆建模 1. 从相关不等于因果说起为什么做模型的人迟早要补上这一课做推荐、风控、增长的同学大概都经历过这种场面离线模型的AUC涨了两个点上线之后核心指标纹丝不动甚至倒退反过来某个拍脑袋的运营动作看起来平平无奇效果却好得离谱。前一种是预测能力没转化成决策能力后一种则更微妙——你以为自己发现了规律其实只是撞上了数据里的选择性偏差。这两件事指向同一个东西因果模型。因果模型要回答的不是什么和什么一起变而是如果我动手改了XY会变成什么样。它是一套把干预从观测里剥离出来的方法论涉及图模型、潜在结果、识别策略、估计量和敏感性分析。适合谁看做AB实验平台的同学、做Uplift营销的算法工程师、做风控策略的分析师以及任何需要在没有实验、只有历史数据的条件下做决策的人。这篇入门综述不打算把你送进计量经济学的深水区而是把因果模型的主干脉络、常见方法的适用边界、以及我在实际项目里踩过的坑一次性讲清楚。1.1 辛普森悖论一个让业务方和算法团队同时沉默的例子假设某电商做了一次首页改版整体数据看起来是这样新版本转化率12.5%旧版本转化率11.8%新版本赢了0.7个百分点业务方很高兴。但当你按用户类型拆开看用户类型新版本转化率旧版本转化率流量占比新版/旧版新用户8%9%70% / 30%老用户25%26%20% / 60%分层之后新版本在两个子群里都输了但整体反而赢了。原因很简单新版被大量投放给了转化率天然偏低的新用户而旧版承接了更多高转化的老用户。这就是辛普森悖论——一个在聚合层和分层层给出相反结论的经典陷阱。它要命的地方在于两个结论都不是算错了而是回答了两个不同的问题。整体对比回答的是这次投放的整体结果如何分层对比回答的是如果我强制把所有用户都切到新版会怎样。前者是观测量的描述后者才是干预效应的估计。很多团队吵架吵到最后发现双方其实在争论两个不同的量。1.2 混淆、对撞与中介三类变量决定了你的系数能不能信在动手建模之前先搞清楚你手里的变量属于哪一类这比选什么算法重要得多。混淆变量Confounder同时影响处理变量和结果变量的变量。比如用户活跃度既影响他是否看到新版页面也影响他是否下单。不控制它你估计出来的效应就是混合了活跃度差异和版本差异的混合物。对撞变量Collider由处理变量和结果变量共同影响的变量。比如是否收到客服回访同时受是否用了新功能和是否投诉影响。对撞变量最反直觉——控制它反而会引入偏差。经典的例子是演技好和长得帅都影响是否成为明星如果你只统计已经成为明星的人会得出演技和颜值负相关的荒谬结论。中介变量Mediator处在处理到结果路径中间的变量。比如新版页面通过停留时长影响转化。如果你把停留时长放进回归得到的是直接效应而总效应被遮掉了一部分。到底要不要控制中介取决于你想回答直接还是总的问题没有标准答案。判断这三类变量靠的不是统计检验而是业务理解和领域知识。一个实操建议在建模前先手画一张因果图DAG把你能想到的变量和它们之间的箭头都画出来然后逐个问这条箭头成立吗。这张图丑一点没关系它会逼着你想清楚建模假设后面所有方法选择都依赖它。1.3 因果模型的三个层次关联、干预、反事实Judea Pearl把因果推断分成三层这个框架我认为是入门最值得先记住的东西。第一层是关联P(Y|Xx)看到X等于某个值时Y的分布。所有的机器学习预测模型基本都在这一层它们擅长的是拟合条件分布而不是回答改了会怎样。第二层是干预P(Y|do(Xx))主动把X设成x时Y的分布。这里的关键符号是do()它代表强制干预切断了X的所有入边。从P(Y|X)到P(Y|do(X))的跨越靠的是识别策略——后门准则、前门准则、工具变量等等。第三层是反事实给定已经观测到的事实问如果当时做了另一个选择会怎样。这一层最贴近业务语言这个用户如果当时不给他发券他还会不会买但也最难估计因为它需要完整的结构模型。三层之间的跃迁不是靠更多数据或更深的网络就能完成的它靠的是假设。这也是因果模型和纯预测模型最大的分歧点预测模型可以靠数据说话因果模型必须靠假设说话数据只能帮你检验假设是否与观测相容。2. 两套主流语言潜在结果框架与结构因果模型该怎么选因果推断领域有两套并行的语言体系一套来自统计学一套来自计算机科学和流行病学。刚入门的人经常被潜在结果do算子后门路径这些词搞得晕头转向其实它们描述的是同一件事只是切入角度不同。搞清楚两套语言的对应关系能省下你大量读论文的时间。2.1 潜在结果框架从ATE到CATE的定义方式潜在结果框架Rubin Causal Model的核心思想是每个个体都有两个潜在结果Y(1)表示接受处理时的结果Y(0)表示未接受处理时的结果。个体处理效应就是ITE Y(1) - Y(0)。问题在于你永远只能观测到其中一个——这叫因果推断的根本问题。观测到Y(1)的人Y(0)是反事实观测到Y(0)的人Y(1)是反事实。所以个体层面的效应永远无法直接计算只能估计群体层面的平均量ATE平均处理效应E[Y(1) - Y(0)]适用于要不要对全体上这个策略。ATT处理组平均处理效应E[Y(1) - Y(0) | T1]适用于已处理的这批人受益多少。ATU未处理组平均处理效应适用于评估如果扩展到未处理人群会怎样。CATE条件平均处理效应E[Y(1) - Y(0) | Xx]随特征变化的效应是做个性化决策的关键。潜在结果框架有一个非常干净的识别假设组无混淆性给定协变量X后处理与潜在结果独立、正性每个X下都有接受和未接受处理的个体、SUTVA个体间无干扰、处理版本唯一。这三个假设只要有一个不成立ATE的估计就有系统性偏差而且偏差不会因为样本变大而消失。2.2 结构因果模型DAG、do算子与后门准则结构因果模型SCM的入口是有向无环图DAG。每个节点是一个变量每条有向边代表一个直接的因果机制。相比潜在结果框架里抽象的假设DAG的好处是把假设画出来了别人可以直接指着你的图说这条边我不认同。识别因果效应时最常用的是后门准则如果你想估计X对Y的效应需要找到一组变量Z满足两点——Z阻断了X和Y之间所有指向X的路径后门路径且Z中不含X的后代。满足后门准则的Z就叫充分调整集。把所有后门路径都挡住之后P(Y|do(X))就等于在Z分层下的P(Y|X,Z)加权平均。还有两个进阶工具值得知道名字前门准则当混淆变量不可观测但存在一个完整的中介链时使用do演算一套把含do的表达转化成纯观测表达的代数规则。入门阶段不必急着推公式但要知道它们存在遇到混淆不可测的场景时能想起来还有别的路。2.3 两套框架的翻译表与选型建议概念潜在结果框架结构因果模型效应定义Y(1) - Y(0)do(X)引起的分布变化核心假设无混淆、正性、SUTVA因果马尔可夫性、忠实性识别工具倾向得分、匹配、加权后门准则、前门准则、do演算优势估计量理论成熟、统计性质清楚假设可视化、适合复杂多变量系统短板假设抽象、难以表达复杂结构图结构依赖领域知识、检验困难实际项目里我的做法是两套混用先用DAG和领域专家把结构理清楚确定调整集再用潜在结果框架下的成熟估计量IPW、AIPW、双重机器学习去做数值估计。DAG负责我该调整什么潜在结果负责怎么估得准各司其职。3. 识别策略工具箱从随机实验到准实验方法假设你已经有了DAG和调整集下一步是选识别策略。这里的核心矛盾是方法越可信适用的业务场景越窄方法越通用需要的假设越强。下面按可信度从高到低排一遍。3.1 黄金标准随机实验与它无法覆盖的场景随机实验A/B测试之所以被称为黄金标准是因为随机化让处理变量独立于所有潜在混淆无混淆性自动成立。你不需要画DAG不需要找调整集直接比较两组的均值就是ATE的无偏估计。但A/B测试有三个绕不过去的限制。第一伦理和成本你不能随机给用户提高利率来测违约率。第二溢出效应社交产品里处理组和对照组用户会互相影响SUTVA被破坏。第三长期效应和新鲜感短期实验测出的往往是新奇效应长期均衡效应可能完全不同。还有一类常见问题是实验污染和触发偏差——用户被分到处理组但根本没看到实验内容直接算ITT和按实际曝光算CACE会给出不同答案。提示只要条件允许优先做实验。因果模型不是在替代实验而是在实验做不了的时候用更弱的假设换取一个可用的估计。3.2 基于可观测变量的方法匹配、倾向得分与双重稳健当只有观测数据时最直接的做法是控制可观测混淆。倾向得分把高维协变量压成一个一维概率e(X) P(T1|X)然后做匹配或加权。IPW逆概率加权给每个样本按1/e(X)或1/(1-e(X))加权构造出一个伪总体使得处理组和对照组在协变量上分布一致。IPW的致命弱点是对倾向得分模型的设定极度敏感尤其是接近0或1的极端概率会让权重爆炸方差失控。实践中必须做重叠性检查把倾向得分分布画出来看两组是否重叠重叠差的区域直接裁剪或截断权重trimming。AIPW增广逆概率加权和双重机器学习DML是对这个问题的回应同时训练结果模型和倾向模型只要其中一个是正确的估计就是一致的这叫双重稳健性。DML进一步用交叉拟合cross-fitting消除了正则化偏差在高维协变量场景下表现明显优于传统IPW。我在一个用户增长项目里对比过DML在协变量维度超过200时估计的方差比IPW低了将近一半。3.3 基于设计的方法工具变量、断点回归、双重差分、合成控制当混淆不可观测时需要借助外部的准随机变异源工具变量IV找一个影响处理但不直接影响结果的变量Z。经典的例子是距离最近医院的距离作为是否接受治疗的工具。2SLS是标准估计手段但弱工具问题会让估计极不稳定务必检查第一阶段F统计量。断点回归RDD处理由一个连续变量是否越过阈值决定。比如考试分数超过60分才能进重点班那么在60分附近的样本近似随机。关键是操纵检验——确认没人能精确控制这个变量。双重差分DID比较处理组和对照组在处理前后的变化之差。核心假设是平行趋势即无处理时两组的变化轨迹相同。务必做事件研究图来目视检查。合成控制SC用多个未处理单位加权组合出一个假处理单位比较真实处理单位与合成单位的轨迹。适合只有一个处理单位的场景比如某城市试点政策的效果评估。3.4 方法选型对照表方法核心假设适用场景主要风险随机实验随机化能做实验的一切场景溢出、合规、长期效应倾向得分/IPW无未观测混淆混淆可观测、样本充足模型误设、重叠不足AIPW/DML其一模型正确高维协变量交叉拟合实现复杂工具变量排除性约束存在外生冲击弱工具、约束不可检验断点回归阈值附近连续有明确阈值规则操纵阈值、带宽敏感双重差分平行趋势面板数据、政策冲击趋势不平行、预期效应合成控制凸组合近似单一处理单位供体池选择、拟合期长度4. 因果发现当连DAG都画不出来的时候前面所有方法都建立在一个前提上你有一张可信的DAG。但现实里更常见的情况是业务方说不清变量之间的箭头方向或者有几十个变量根本理不出头绪。这时候就要用因果发现算法从数据里学结构。先给结论因果发现在业务数据上的表现远不如论文里好看把它当作生成假设的工具而不是当作结论。4.1 基于约束与基于评分PC、GES的适用边界PC算法是典型的基于约束的方法。它从完全图出发通过一系列条件独立性检验逐步删边再定向。理论上是可证明的在忠实性和因果马尔可夫性下但实践中有两个大坑一是条件独立性检验的样本量需求随条件集大小指数增长条件集一大检验功效就崩了二是多个等价的马尔可夫等价类算法只能给出无向边和部分定向边剩下的方向要靠领域知识补。GES贪婪等价搜索是基于评分的方法通过加边、删边、翻边来优化BIC之类的评分。它比PC稳一些但也受限于评分函数的设定而且在高维下搜索空间巨大。我的经验是变量数控制在20以内样本量至少在几千以上PC和GES才有一点参考价值。超过这个规模跑出来的图基本没法看。4.2 函数因果模型与LiNGAM的假设代价如果愿意接受更强的假设LiNGAM这类函数因果模型可以直接定向。它假设每个变量是其他变量的线性组合加非高斯噪声通过独立成分分析来恢复因果顺序。假设很漂亮但要求噪声非高斯且过程线性真实业务数据里经常不满足。更通用的是加性噪声模型ANMY f(X) NN独立于X。可以做X→Y和Y→X的拟合对比残差独立性更好的那个方向获胜。实测下来ANM在连续变量、噪声不强的情况下方向判断准确率大概70%出头比随机猜好但绝不到可以盲信的程度。4.3 连续优化路线NOTEARS及其变体在业务数据上的表现NOTEARS把无环约束写成一个光滑的等式约束矩阵指数形式把结构学习变成一个连续优化问题可以用梯度下降解。后面的DAG-GNN、GraN-DAG、GOLEM都是这条路线的延伸。这类方法在标准数据集如Sachs蛋白质信号数据上表现不错但搬到业务数据上我遇到的实际问题是参数敏感正则化强度稍微变一下结构就大不同可扩展性有限变量上千之后显存和计算都吃紧结果稳定性差换一批样本跑出来的图差异明显。所以我的实际用法是因果发现只用来生成候选假设最终的结构必须经过领域专家判断和小规模实验验证。把它当成一个帮我看看数据里有什么可疑关系的助手而不是告诉我真相的权威。5. 因果感知模型融合把因果结构塞进机器学习管线这是最近两年比较热的方向也是因果感知模型融合这个热搜词背后真正在讨论的东西。核心思路是不再把因果推断当作一个独立的事后分析步骤而是把因果结构或不变性约束直接编进模型训练过程。下面挑四个我实际接触过的方向讲。5.1 不变性学习与因果表征为什么换环境就不掉点传统机器学习模型学的是P(Y|X)一旦部署环境变化联合分布漂移模型就掉点。**不变性学习Invariant Learning**的思路是真正的因果关系在所有环境下保持不变只有因果特征才值得依赖伪相关特征会随环境变化。具体做法是跨环境风险最小化IRM把训练数据按环境切分比如不同的时间段、不同的渠道要求模型在每个环境下的风险都接近这样模型会被迫学环境不变的因果特征。实测下来在推荐场景的跨渠道迁移里IRM类方法相比普通ERM在目标域的AUC能高1-2个点但前提是你得有明确的环境划分环境切得不对效果会适得其反。因果表征学习则更进一步试图学出解耦的隐变量表示让每个维度对应一个独立的因果机制。思路很美但目前落地案例还不多主要卡在隐变量的可识别性需要很强的假设。5.2 去混淆建模推荐、广告与风控里的落地姿势推荐和广告里有一个根深蒂固的混淆曝光由推荐系统自己决定。用户看到某个商品本身就是系统基于预测的分数选出来的这就构成了选择性偏差。直接拿曝光数据训练CTR模型模型学到的很大一部分是系统喜欢推什么而不是用户真的喜欢什么。主流做法是把曝光当作处理变量用逆概率加权或双重稳健估计来纠正。具体到工程上就是训练一个曝光倾向模型然后在损失函数里给每条样本乘上权重的倒数。代价是方差会变大而且权重需要裁剪。我在一个信息流项目里做过对比加权之后的CTR预估在冷启动品类上提升明显但在头部品类上反而略降因为头部品类曝光充足、偏差本来就小加权只是引入了噪声。风控场景更复杂因为标签本身受策略影响你拒绝了某笔申请就永远不知道它是否会违约。这类问题叫拒绝推断Reject Inference严格来说需要因果框架来处理常用的做法有外推法、增强法、混合法各有各的偏差走向没有免费午餐。5.3 异质效应与Uplift从会不会到对谁会营销场景里最值钱的问题不是发券能提升多少转化而是应该给谁发券。这就从ATE转向了CATE。业界的标准工具族是元学习器Meta-LearnerS-Learner把处理变量当作一个普通特征丢进模型。简单但处理变量容易被其他特征淹掉效应估计偏保守。T-Learner处理组和对照组各训一个模型效应是两者预测之差。适合处理组和对照组样本都充足的情况但两组模型误差会累积。X-Learner先训T-Learner再用处理组模型去预测对照组的反事实、用对照组模型预测处理组的反事实最后加权融合。样本不平衡时表现更稳。R-Learner把CATE估计问题转化为残差上的加权回归配合双重机器学习使用理论性质比较干净。评估Uplift模型比评估普通预测模型难得多因为个体效应不可观测。常用的替代指标有Qini系数和AUUC它们衡量的是按模型推荐排序发放累积增益曲线是否优于随机发放。我建议在离线评估时同时看Qini和多组实验的增益一致性单看Qini容易被过拟合骗到。5.4 决策优化与因果强化学习当决策是多轮、序列相关的时候因果模型要和强化学习结合。比如定价、库存、动态补贴每次动作都会改变用户的状态进而影响未来的动作空间。因果强化学习的核心是把环境动力学分解成因果机制避免策略学到看起来相关但实际是混淆的状态特征。这块目前工业界的成熟案例还比较少主要卡在反事实估计的方差和探索成本上。一个务实的做法是先用因果模型估计单步效应把结果喂给一个约束优化器而不是直接上完整的因果RL。6. 评估、敏感性与落地节奏没有真值的时候怎么验证因果模型最尴尬的地方在于你永远拿不到个体层面的反事实真值。A/B测试能给你一个金标准但如果没有A/B怎么知道自己估得对不对这一节讲我在项目里常用的几套兜底手段。6.1 反事实不可观测用安慰剂检验与负对照兜底安慰剂检验的思路是找一个理论上不该有因果效应的变量或时间点如果模型在那里也报出了显著效应说明你的方法有系统性问题。比如把处理时间人为提前三个月看模型是否还能估出效应——能估出来就说明存在预趋势或残差混淆。负对照结果是同一个思路的变量版选一个明知不受处理影响的指标比如用户的地理位置分布如果模型显示处理改变了它那就是出问题了。正对照则相反选一个理论上肯定受影响的指标比如发券一定影响领券率如果模型连这个都测不出来说明估计的功效不足或调整集选得太激进把真实效应也一起挡住了。这三套对照组合起来是我判断一个观测研究可信度下限的基本盘成本低、见效快比任何漂亮的置信区间都更能说明问题。6.2 敏感性分析E-value与Rosenbaum边界所有观测研究都建立在无未观测混淆的假设上而这条假设永远无法用数据检验。既然检验不了那就量化要推翻这个结论未观测混淆需要多强。E-value的含义是一个未观测混淆需要把处理组和对照组的风险比同时提高多少倍才能把观测到的效应完全解释掉。E-value越大结论越稳健。比如你估计出的风险比是2.0对应的E-value是3.4意味着未观测混淆需要跟处理变量和结果都有3.4倍的关联强度才能抹掉这个效应。如果业务上根本不存在这么强的混淆变量结论就比较可信。Rosenbaum边界是匹配研究里的版本它给出一个Γ值表示处理组和对照组的匹配成功几率最多差多少倍时结论仍然成立。Γ接近1说明结论对隐藏偏差极度敏感。我的习惯是在报告里强制附上敏感性分析哪怕业务方不看。它至少能挡住你这个结论是不是被我没想到的某个变量解释了这类质疑。6.3 落地节奏从一张DAG开始的四周计划如果让我给一个从零开始的团队排计划大概是这样第一周画图和对齐。找业务方、数据分析师、产品经理一起画DAG。重点不是画得多漂亮而是把大家默认的因果假设显式化。这个过程中通常能发现三四个团队内部本来就有分歧的地方早发现比建模后返工强。第二周数据核查。检查调整集里每个变量的可得性、缺失率、以及是否存在后处理即测量时间在处理之后的问题。后处理变量一旦混进调整集会引入严重偏差。第三周跑基线和重叠性检查。先用最简单的IPW或回归调整跑一个基线然后必做重叠性检查。发现重叠差的区域要么裁剪样本要么明确说明估计的适用范围。第四周敏感性分析和对照检验。跑安慰剂、负对照算E-value把所有假设和局限写成一段话。这段话是最后交付文档里最重要的部分比点估计值本身更重要。7. 工具选型与几个我踩过的坑最后聊点实在的工具和坑。7.1 工具与库的选型Python生态里EconML微软和DoWhy也是微软是我用得最多的两个。DoWhy负责建模—识别—估计—反驳这套流程它把DAG、后门准则、估计量和敏感性分析串起来了适合把整条链路工程化。EconML专注异质效应估计DML、Meta-Learner、DR-Learner都有现成实现文档里的例子也够用。CausalMLUber在Uplift评估上的工具更全Qini、AUUC都有。CausalNex偏向贝叶斯网络和结构学习GUI不错适合跟业务方一起探索结构。R里的话dagitty画DAG、MatchIt做匹配、did包做DID都是各自领域的事实标准。选型的核心问题不是哪个最强而是你的瓶颈在识别还是在估计。识别不清用再好的估计量也没用识别清楚了一个几十行的IPW就能跑出可用的结果。7.2 我踩过的几个坑第一个坑把后处理变量放进调整集。有一个项目我为了提高预测精度把用户近7天的活跃天数放进了倾向得分模型但这个变量是在处理发生之后测的属于处理后变量。结果估计的效应被严重压缩。教训是调整集里的每个变量都要问清楚它的测量时间点在哪。第二个坑忽略重叠性直接看结果。有一次跑IPW几个权重上万估计出来的效应大得离谱。回头画倾向得分分布才发现处理组和对照组几乎没有重叠区。不要跳过重叠性检查这是廉价且高价值的动作。第三个坑把因果发现的结果当结论。早期跑NOTEARS跑出几张好看的图直接拿去指导业务后来做了小规模实验才发现有两条边方向错了。教训很朴素因果发现生成的是假设验证还得靠干预。第四个坑低估敏感性分析的沟通价值。一开始我觉得E-value这种东西业务方不看后来发现只要用它来解释为什么这个结论不是拍脑袋业务方的接受度明显提高。它不是给统计学家的它是给决策者的。因果模型这个东西入门门槛不算高但真正入门的标志不是会跑几个模型而是养成先问我的识别策略是什么、假设是什么、假设破了会怎样的习惯。工具会换方法会迭代这个习惯不会过时。
返回列表