本节摘要:把前七章收束成一条可执行的端到端流程:问题因果化、假设文档化、识别优先、估计双跑、反驳自动化、结论分级。本节给出流程清单、假设文档的模板要素、团队评审的质询清单,以及把因果结论接入决策系统的工程注意。
第一步:问题因果化。 把业务语句翻译成因果量:处理是什么(策略而非变量名)、结果是什么、目标总体是谁、效应量选 ATE/ATT/CATE(第 1.2 节)。写不出这句话就还不该动手——它同时决定了后续所有方法选择。
第二步:假设文档化。 画因果图(第 2 章),把每条边的领域依据写进"假设文档":边的方向由谁背书、哪些变量确定未测、怀疑但不确定的混杂列成清单。图与代码一起进版本管理,改图必须像改代码一样留 review 记录。假设文档的模板要素:变量表(类型、测量时点、是否处理前)、边清单(方向 + 依据 + 置信度)、已知缺口(未测混杂候选与第 4.6 节敏感性分析挂钩)。
第三步:识别优先。 对图跑识别(DoWhy 或手工按第 3.1 节五步),列出全部可行策略与各自所需条件。识别失败的图回到第二步改图——不要在这一步调估计器,方法救不了不可识别的问题。
第四步:估计双跑。 至少两种不同假设形态的估计器(如 IPW 与 AIPW、匹配与加权回归)交叉验证;结论分歧大时定位支撑域或模型错设问题(第 4.2、4.3 节)。所有诊断图(支撑域、SMD 平衡、权重分布)随报告归档。
第五步:反驳自动化。 安慰剂、子集重估、未测混杂扰动(DoWhy refute 流水线)+ E-value/Γ 敏感性量化。反驳结果不是脚注,与效应估计同权重呈现。
第六步:结论分级。 按证据强度给结论定级:随机化 + 反驳全过为最强;观察数据 + 稳健敏感性为可用;识别假设有争议或反驳有失败项为"探索性结论,禁止直接驱动重大决策"。分级写进结论首行,而不是文末免责声明。
⚠️ 故障一:效应估计异常大。先查支撑域(IPW 极端权重)与单位/时间窗错位,再看是否把结果变量当协变量控制(第 2.2 节对撞)。
⚠️ 故障二:匹配后协变量仍不平衡。回到倾向模型加入交互项或换非参数模型——放宽卡钳只会掩盖问题。SMD 大于 0.1 的协变量列表应逐条处理并留痕。
⚠️ 故障三:两估计器方向相反。几乎必是支撑域外推或处理定义不一致(ATT 与 ATE 目标错配),对照第 1.2 节的效应量定义逐项核对。
团队评审因果分析时,以下问题应当能当场回答:处理的时间零点在哪里(第 7.1 节)?调整集是图推导的还是"有啥放啥"?哪些变量被刻意排除、为什么?敏感性分析在哪个强度翻案?效应属于哪个人群(LATE/ATT)?反驳四项各自的输出?——六问答不上任何一问,报告退回。
因果结论上线成策略(如 uplift 分数驱动的发券)时有三件工事:版本与回滚——分数模型上线要能一键回退旧策略,因为分数基于的历史数据分布会漂移;持续校验——线上保留小比例随机触达(不按分数),持续验证分数桶的实测增量(第 7.3 节分桶验证的在线版);漂移监控——监控协变量分布与权重分布,漂移超阈值触发重训评审。因果结论不是一次性交付物,它是一条需要持续照看的生产管线。
# 概念流程:六步的最小工程骨架(示意) steps = { "1_问题因果化": "写出: 处理=?? 结果=?? 总体=?? 效应量=ATE/ATT/CATE", "2_假设文档化": "边清单+依据+未测混杂缺口表, 与代码同库版本管理", "3_识别": "DoWhy identify_effect 或手工后门五步, 打印全部可行策略", "4_估计双跑": ["IPW", "AIPW/DR"], # 两种假设形态交叉 "5_反驳": ["placebo", "subset", "random_cause", "E-value"], "6_结论分级": "最强/可用/探索性 三级, 写在报告首行", } # 每步产物落盘: 假设文档.md / 识别表达式.txt / 诊断图/ 反驳结果表 # 任何一步改动 → 回到第2步登记假设变更 → 全链重跑(管线化而非手工重做)
工程化的要害是"每步产物落盘、假设变更触发全链重跑"——把第 8.1 节的循环从一次性分析变成可回归测试的管线。团队的第一个因果项目就该按这个骨架搭,后期迁移的成本远高于一开始多写这层脚手架。
因果分析报告的最小完整结构,按说服力排序:一、问题句(处理/结果/总体/效应量四元组,两行内);二、结论句(效应点估计与区间、属于谁、分级标签);三、识别论证(图 + 调整集 + 关键假设列表,各一行依据);四、稳健性证据(双估计器对照、敏感性 E-value、反驳四项,做成一表);五、限制与未测混杂候选清单。五段结构里第三段最常被跳过,而它恰恰是内行评审唯一逐字读的部分——识别论证的完整度,决定报告是"统计结果"还是"因果结论"。
| 反驳器 | 健康输出 | 异常输出的含义 |
|---|---|---|
| 安慰剂处理 | 效应接近零且不显著 | 处理变量混入了信息泄漏 |
| 随机公共原因 | 效应稳定 | 模型对无关扰动过敏,方差可疑 |
| 数据子集 | 效应小幅波动 | 效应被少数样本驱动,查杠杆点 |
| 模拟未测混杂 | 给出翻案所需强度 | 与 E-value 互证,标注脆弱等级 |
四项全绿再加敏感性数字达标,报告才够"可用"级;任何一项异常都不应被注释掉,而应写进限制小节并触发回查——反驳的目的从来不是让结果好看,是让错误早一天被发现。
给假设文档配一个轻量评审仪式,性价比极高:半小时会议,因果图投在墙上,逐条边轮流由非作者发问这条边的机制是什么、反例是什么,答不上的边当场标黄。标黄边不强制删除,但必须进入敏感性清单与第 4.6 节挂接。仪式的产物是带颜色标记的图第二版,与代码一起提交评审。经验上每轮评审能揪出一到两条想当然的边,而那两条边往往正是后续结论翻车的位置——识别质量的最大杠杆从来不在估计器里,在这半小时里。