“因果森林 Causal Forest”的版本间的差异
(因果森林,基于随机森林(Random Forest)算法的扩展形式,由苏珊·艾西(Susan Athey)等人提出,用于在高维数据中识别个体或群体层面的因果效应差异,属于因果推断(Causal Inference)领域的一类重要方法。) |
(因果森林(英语:Causal Forest)是一种用于估计异质性处理效应(Heterogeneous Treatment Effects, HTE)的非参数机器学习方法。它基于随机森林(Random Forest)算法的扩展形式,由苏珊·艾西(Susan Athey)等人提出,用于在高维数据中识别个体或群体层面的因果效应差异,属于因果推断(Causal Inference)领域的一类重要方法。) |
||
| 第4行: | 第4行: | ||
'''因果森林'''(''Causal Forest'')是一种用于估计异质性处理效应(''Heterogeneous Treatment Effects'', HTE)的非参数机器学习方法。它基于随机森林(''Random Forest'')算法的扩展形式,由苏珊·艾西(Susan Athey)等人提出,用于在高维数据中识别个体或群体层面的因果效应差异,属于因果推断(''Causal Inference'')领域的一类重要方法。 | '''因果森林'''(''Causal Forest'')是一种用于估计异质性处理效应(''Heterogeneous Treatment Effects'', HTE)的非参数机器学习方法。它基于随机森林(''Random Forest'')算法的扩展形式,由苏珊·艾西(Susan Athey)等人提出,用于在高维数据中识别个体或群体层面的因果效应差异,属于因果推断(''Causal Inference'')领域的一类重要方法。 | ||
| − | + | ==背景与发展== | |
| − | |||
| − | |||
| − | |||
| − | == 背景与发展 == | ||
传统的因果推断方法,如倾向得分匹配(''Propensity Score Matching'')或工具变量法(''Instrumental Variables''),主要关注平均处理效应(''Average Treatment Effect'', ATE)。然而在实际应用中,不同个体对于同一处理可能反应不同,因此估计个体层面的处理效应,即条件平均处理效应(''Conditional Average Treatment Effect'', CATE)成为重要研究方向。 | 传统的因果推断方法,如倾向得分匹配(''Propensity Score Matching'')或工具变量法(''Instrumental Variables''),主要关注平均处理效应(''Average Treatment Effect'', ATE)。然而在实际应用中,不同个体对于同一处理可能反应不同,因此估计个体层面的处理效应,即条件平均处理效应(''Conditional Average Treatment Effect'', CATE)成为重要研究方向。 | ||
因果森林最早由斯坦福大学经济学家 Susan Athey 与 Stefan Wager 等人在 2015 年提出,后续发展为通用随机森林(''Generalized Random Forest'', GRF)框架,并于 2018 年在《美国统计协会期刊》(''Journal of the American Statistical Association'')上发表正式论文。 | 因果森林最早由斯坦福大学经济学家 Susan Athey 与 Stefan Wager 等人在 2015 年提出,后续发展为通用随机森林(''Generalized Random Forest'', GRF)框架,并于 2018 年在《美国统计协会期刊》(''Journal of the American Statistical Association'')上发表正式论文。 | ||
| − | == 方法概述 == | + | ==方法概述== |
因果森林的核心思想是在随机森林的基础上调整分裂准则与估计过程,使其能够估计因变量在不同处理组下的条件差异。主要特点包括: | 因果森林的核心思想是在随机森林的基础上调整分裂准则与估计过程,使其能够估计因变量在不同处理组下的条件差异。主要特点包括: | ||
| − | * '''诚实估计(Honest Estimation)''':将训练数据分为两个子集,一个用于构建决策树,另一个用于估计处理效应,以减少过拟合。 | + | *'''诚实估计(Honest Estimation)''':将训练数据分为两个子集,一个用于构建决策树,另一个用于估计处理效应,以减少过拟合。 |
| − | * '''自适应分裂准则''':优先选择能揭示处理效应差异(而非仅预测误差最小化)的分裂变量。 | + | *'''自适应分裂准则''':优先选择能揭示处理效应差异(而非仅预测误差最小化)的分裂变量。 |
| − | * '''森林聚合(Ensemble Averaging)''':将多棵树的估计值加权平均,提高稳健性与泛化能力。 | + | *'''森林聚合(Ensemble Averaging)''':将多棵树的估计值加权平均,提高稳健性与泛化能力。 |
| − | == 应用领域 == | + | ==应用领域== |
因果森林被广泛应用于需要个性化决策支持的领域,例如: | 因果森林被广泛应用于需要个性化决策支持的领域,例如: | ||
| − | * '''医疗''':评估新药在不同患者群体中的效果; | + | *'''医疗''':评估新药在不同患者群体中的效果; |
* '''公共政策''':识别社会项目在不同地区或人群中的效应差异; | * '''公共政策''':识别社会项目在不同地区或人群中的效应差异; | ||
| − | * '''教育''':分析干预措施对不同学生群体的影响; | + | *'''教育''':分析干预措施对不同学生群体的影响; |
| − | * '''市场营销''':发现不同客户对促销手段的反应差异。 | + | *'''市场营销''':发现不同客户对促销手段的反应差异。 |
| − | ==算法== | + | ==算法 == |
[[文件:广义随机森林.png|缩略图]] | [[文件:广义随机森林.png|缩略图]] | ||
| 第35行: | 第31行: | ||
因果森林算法基于随机森林的框架,但在建树与预测过程中做出了若干关键修改,以用于估计'''条件平均处理效应'''(CATE)。其算法设计强调'''异质性识别'''与'''估计的正态性''',可简述如下: | 因果森林算法基于随机森林的框架,但在建树与预测过程中做出了若干关键修改,以用于估计'''条件平均处理效应'''(CATE)。其算法设计强调'''异质性识别'''与'''估计的正态性''',可简述如下: | ||
| − | === 基本流程 === | + | ===基本流程=== |
| − | # '''样本拆分(Honest Splitting)''' 数据集被分为两个子集: | + | #'''样本拆分(Honest Splitting)''' 数据集被分为两个子集: |
| − | ## 构树集(用于构建树的结构) | + | ##构树集(用于构建树的结构) |
| − | ## 估计集(用于估计每个叶子节点中的处理效应) 这种拆分方式称为“诚实性”(honesty),可避免过拟合,并保证渐近一致性。 | + | ##估计集(用于估计每个叶子节点中的处理效应) 这种拆分方式称为“诚实性”(honesty),可避免过拟合,并保证渐近一致性。 |
| − | # '''分裂标准(Splitting Criterion)''' | + | #'''分裂标准(Splitting Criterion)''' 与传统随机森林最小化均方误差(MSE)不同,因果森林的分裂准则最大化处理效应的异质性,通常使用以下目标函数:△= Var[f(X)] |
即寻找能最有效区分处理效应差异的协变量。 | 即寻找能最有效区分处理效应差异的协变量。 | ||
| − | # '''叶节点处理效应估计''' 在每个叶节点中,使用估计集中的样本计算处理组与对照组的均值差异来估计 CATE:公式1!!!! | + | #'''叶节点处理效应估计''' 在每个叶节点中,使用估计集中的样本计算处理组与对照组的均值差异来估计 CATE:公式1!!!! |
| − | # '''森林聚合(Ensemble Aggregation)''' 最终的 CATE 估计为所有树对该样本估计的平均:公式1!!!! | + | #'''森林聚合(Ensemble Aggregation)''' 最终的 CATE 估计为所有树对该样本估计的平均:公式1!!!! |
| − | === 理论性质 === | + | ===理论性质=== |
Wager 和 Athey(2018)证明,在一定正则条件下,因果森林具备以下渐近性质: | Wager 和 Athey(2018)证明,在一定正则条件下,因果森林具备以下渐近性质: | ||
| − | * 一致性(Consistency) | + | *一致性(Consistency) |
| − | * 渐近正态性(Asymptotic Normality) | + | *渐近正态性(Asymptotic Normality) |
| − | * 可构造有效置信区间(Valid Confidence Intervals) | + | *可构造有效置信区间(Valid Confidence Intervals) |
==算法实现== | ==算法实现== | ||
| 第59行: | 第55行: | ||
目前因果森林的主要实现为: | 目前因果森林的主要实现为: | ||
| − | * '''R语言''':由 Wager 和 Athey 团队开发的 <code>grf</code> 包,支持 CATE、quantile regression forest 等多种功能; | + | *'''R语言''':由 Wager 和 Athey 团队开发的 <code>grf</code> 包,支持 CATE、quantile regression forest 等多种功能; |
| − | * '''Python''':微软开发的 <code>econml</code> 库,提供对 Causal Forest 的接口实现。 | + | *'''Python''':微软开发的 <code>econml</code> 库,提供对 Causal Forest 的接口实现。 |
| − | == 示例: == | + | ==示例:== |
<code>#-----------环境准备----------# | <code>#-----------环境准备----------# | ||
import numpy as np | import numpy as np | ||
| 第84行: | 第80行: | ||
print(f"{feature}: {effect}")</code> | print(f"{feature}: {effect}")</code> | ||
| − | == 局限性 == | + | ==局限性== |
尽管因果森林在建模灵活性与处理异质性方面具有显著优势,但也存在以下局限: | 尽管因果森林在建模灵活性与处理异质性方面具有显著优势,但也存在以下局限: | ||
| − | * 对样本量要求较高; | + | *对样本量要求较高; |
| − | * 可解释性较差(相较于单棵因果树); | + | *可解释性较差(相较于单棵因果树); |
| − | * 训练成本高,对计算资源有较大需求; | + | *训练成本高,对计算资源有较大需求; |
| − | * 在某些结构性模型假设下可能不如参数方法高效。 | + | *在某些结构性模型假设下可能不如参数方法高效。 |
<span class="lark-record-clipboard" data-lark-record-format="docx/record" data-lark-record-data="{"isCut":false,"rootId":"IhD5dRzJRoav8vx1Jvic1szWnjg","parentId":"IhD5dRzJRoav8vx1Jvic1szWnjg","blockIds":[42,43,44,45,46,47,48,49,50,51,52],"recordIds":["BerVduY2hoNfolxfOENcwSDnnfg","LBycdiiK8oQMtNxdIx8cQ07enZH","ACQadsUBioHqSmxhkEscVR7xnsb","TFspd4llDoaOMQxJMfecixmlnqg","W4vFd0bYnooHESxSfPZc3uzenSe","DVZGdo21toImqZxbbxdcIFv8nFh","TYRLdI8s7ozJGdxCoGccz5hznTe","MyEcdHeftoLyRpxG0BNc2y1Sn2e","ZxFFdzJUPoXpY5xkfZecaF0onfh","CjRedHGXfobglLx3tErceJrNn3e","A79rdd6VIoweftxQwJIcYa7QnIg"],"recordMap":{"BerVduY2hoNfolxfOENcwSDnnfg":{"id":"BerVduY2hoNfolxfOENcwSDnnfg","snapshot":{"type":"text","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"initialAttributedTexts":{"text":{"0":"目前因果森林的主要实现为:"},"attribs":{"0":"*0+d"}},"apool":{"numToAttrib":{"0":["author","7352883777854586881"]},"nextNum":1}},"align":"","folded":false}},"LBycdiiK8oQMtNxdIx8cQ07enZH":{"id":"LBycdiiK8oQMtNxdIx8cQ07enZH","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":4,"numToAttrib":{"0":["author","7352883777854586881"],"1":["bold","true"],"2":["inlineCode","true"],"3":["link","https%3A%2F%2Fgithub.com%2Fgrf-labs%2Fgrf"]}},"initialAttributedTexts":{"attribs":{"0":"*0*1+3*0+n*0*2*3+3*0+18"},"text":{"0":"R语言:由 Wager 和 Athey 团队开发的 grf 包,支持 CATE、quantile regression forest 等多种功能;"}}},"align":"left","folded":false}},"ACQadsUBioHqSmxhkEscVR7xnsb":{"id":"ACQadsUBioHqSmxhkEscVR7xnsb","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":4,"numToAttrib":{"0":["author","7352883777854586881"],"1":["bold","true"],"2":["inlineCode","true"],"3":["link","https%3A%2F%2Fgithub.com%2Fmicrosoft%2FEconML"]}},"initialAttributedTexts":{"attribs":{"0":"*0*1+6*0+7*0*2*3+6*0+r"},"text":{"0":"Python:微软开发的 econml 库,提供对 Causal Forest 的接口实现。"}}},"align":"left","folded":false}},"TFspd4llDoaOMQxJMfecixmlnqg":{"id":"TFspd4llDoaOMQxJMfecixmlnqg","snapshot":{"type":"heading2","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7438450976719978500","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7438450976719978500"]}},"initialAttributedTexts":{"attribs":{"0":"*0+3"},"text":{"0":"示例:"}}},"align":"","folded":false}},"W4vFd0bYnooHESxSfPZc3uzenSe":{"id":"W4vFd0bYnooHESxSfPZc3uzenSe","snapshot":{"type":"code","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7438450976719978500","children":[],"text":{"apool":{"nextNum":3,"numToAttrib":{"0":["author","7438450976719978500"],"1":["textHighlight","rgb(143,149,158)"],"2":["textHighlightBackground","rgb(187,191,196)"]}},"initialAttributedTexts":{"attribs":{"0":"*0|1+s*0*1*2|3+2i*0*1*2+1t*0|2+s*0*1*2|2+1v*0*1*2+d*0|1+1*0+q*0*1*2|2+18*0*1*2+c*0|2+p*0*1*2+1d*0|2+q*0*1*2|4+2d*0*1*2+x"},"text":{"0":"#-----------环境准备----------#\nimport numpy as np\nimport pandas as pd\nfrom sklearn.ensemble import RandomForestRegressor\nfrom causal_forest import CausalForest # 假设已有一个名为causal_forest的库\n#----------数据准备----------#\n# 假设我们有一个名为data的DataFrame,包含预测变量X和目标变量y\nX = data.drop('y', axis=1)\ny = data['y']\n#---------模型训练-----------#\ncf = CausalForest(RandomForestRegressor())\ncf.fit(X, y)\n#--------因果效应估计-------#\ncausal_effects = cf.estimate_causal_effects(X, y)\n#-------预测和解释----------#\npredictions = cf.predict(X)\n\n# 输出因果效应\nfor feature, effect in causal_effects.items():\n print(f\"{feature}: {effect}\")"}}},"align":"","folded":false,"language":"PowerShell","wrap":false,"caption":{"text":{"apool":{"nextNum":0,"numToAttrib":{}},"initialAttributedTexts":{"attribs":{"0":"|1+1"},"text":{"0":"\n"}}}},"is_language_picked":true}},"DVZGdo21toImqZxbbxdcIFv8nFh":{"id":"DVZGdo21toImqZxbbxdcIFv8nFh","snapshot":{"type":"heading2","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7352883777854586881"]}},"initialAttributedTexts":{"attribs":{"0":"*0+3"},"text":{"0":"局限性"}}},"align":"","folded":false}},"TYRLdI8s7ozJGdxCoGccz5hznTe":{"id":"TYRLdI8s7ozJGdxCoGccz5hznTe","snapshot":{"type":"text","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7352883777854586881"]}},"initialAttributedTexts":{"attribs":{"0":"*0+10"},"text":{"0":"尽管因果森林在建模灵活性与处理异质性方面具有显著优势,但也存在以下局限:"}}},"align":"","folded":false}},"MyEcdHeftoLyRpxG0BNc2y1Sn2e":{"id":"MyEcdHeftoLyRpxG0BNc2y1Sn2e","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7352883777854586881"]}},"initialAttributedTexts":{"attribs":{"0":"*0+9"},"text":{"0":"对样本量要求较高;"}}},"align":"left","folded":false}},"ZxFFdzJUPoXpY5xkfZecaF0onfh":{"id":"ZxFFdzJUPoXpY5xkfZecaF0onfh","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7352883777854586881"]}},"initialAttributedTexts":{"attribs":{"0":"*0+h"},"text":{"0":"可解释性较差(相较于单棵因果树);"}}},"align":"left","folded":false}},"CjRedHGXfobglLx3tErceJrNn3e":{"id":"CjRedHGXfobglLx3tErceJrNn3e","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7352883777854586881"]}},"initialAttributedTexts":{"attribs":{"0":"*0+h"},"text":{"0":"训练成本高,对计算资源有较大需求;"}}},"align":"left","folded":false}},"A79rdd6VIoweftxQwJIcYa7QnIg":{"id":"A79rdd6VIoweftxQwJIcYa7QnIg","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"initialAttributedTexts":{"text":{"0":"在某些结构性模型假设下可能不如参数方法高效。"},"attribs":{"0":"*0+m"}},"apool":{"numToAttrib":{"0":["author","7352883777854586881"]},"nextNum":1}},"align":"left","folded":false}},"IhD5dRzJRoav8vx1Jvic1szWnjg":{"id":"IhD5dRzJRoav8vx1Jvic1szWnjg","snapshot":{"type":"page","parent_id":"","comments":null,"revisions":null,"locked":false,"hidden":false,"author":"7352883777854586881","children":["Yl6GdCo56on9ZTxzS0YcI0dun8c","D1ezd0MKwokZvlxLKVWcSguHnTb","WT6XdpJJ6o8YHfxQUz9caUPXnCc","RCx9dQk7so5rHLxJ5Z4c1bxmnoh","DOTvdYS0EozbK4xiBztckL4MnFg","IHiadW9ProNettx9U5tc45smnZg","AC4MdxPXooFtimxNyCPc8GCxnub","XAMmdiZUboKeP2xapbccdFZYnHe","BnxydX0LmoIiNtxes92cJDukngg","EGZzd5zQPovDrlxjeW1cXCEQnkh","CFYxdaf9Go3TvlxHipDchunInHf","ZRSIdxk0WoTuoXxekV2cQcsRnoq","LyNQdhpZwoz89fxCRofcqRI6n2c","GY4LdHIMtohExHxRbckclFz3nsh","LjfEdTB0VoSJ8FxvmxpcIvOZnAg","V6wTdngRqoUteox0cLbcHjvknZg","WDV4dKCvZojlwUxI7fkcBYMtnze","QYggd5mQqo01oUxxv9gcxRFxnnd","W8uedBa1OoTRr1xyAb0cwTxnnBc","HOR3d4i7zo9iyzxanEDcb61Mnsg","OxkndfIYNo6q1XxEGiRcxKRunue","Q5tEdzWX3oIKcgxGpKfcjwaTnzb","CGJXdPW5Pogc0QxQaWbc0GA0nHe","O3ELdgHeVoy7Wxx8b1scMDsWnfd","OofMdznhLo89SZxwg5XcEnzSnGf","Lmkbd3ovno5cUax76tNcIzmTn3g","BxS9d5mm4oqa1pxiwiAcFhSnn5c","HwendyrQeoStnbxMczHcRivTnOg","RsbkdBBwXovB6gxUdIZc7lEJnMd","CqvDdyeMjoYE7txmKCocckFGnbh","Lk61d51PaoNesyxVeKdcwrvOn0e","SPNidPzcfofDEaxu2sjcdwG0n9e","Onm7dfmL3oXnpFxcatPcYlXHnUf","P4l2dHC5poGv0oxiciHccUbsnTc","RyT1dSz3Uonc3sx38ILccCUXnye","Cu1IdAboRogac9xqbTMcsJMMn6d","DTKjd9roHopiFjxXs5Qc5fETnVb","B6lRdsHj5oFKZpxHx3LceYXVnFg","BerVduY2hoNfolxfOENcwSDnnfg","LBycdiiK8oQMtNxdIx8cQ07enZH","ACQadsUBioHqSmxhkEscVR7xnsb","TFspd4llDoaOMQxJMfecixmlnqg","W4vFd0bYnooHESxSfPZc3uzenSe","DVZGdo21toImqZxbbxdcIFv8nFh","TYRLdI8s7ozJGdxCoGccz5hznTe","MyEcdHeftoLyRpxG0BNc2y1Sn2e","ZxFFdzJUPoXpY5xkfZecaF0onfh","CjRedHGXfobglLx3tErceJrNn3e","A79rdd6VIoweftxQwJIcYa7QnIg","ZDCed7r9doTkn2xh6N8c4ooVnRf","JU2bddXlhoKRcRxlTAAcCaEhnod","WeCpdAHmqo6wVwxK0zscXQ2zntd","F2UIdqf7iosEw7xGux1cNCkXnWb","EdHkddi3Go2YgAxJkDncCRFLnjO","IFOWdj4n7obS50xRAiYcuZRtnTe","NJzKdybiRoCcAUxZu2nc8EJ1nud","ULV2dGgVMoQ0BKxKRcMc0bhTnFf","URLEddA4soBypQxNMPtcFeZyn1e","LkgodhIzaoA8tkxJs1hcwkhLnXd","R8IPdY9aMoPszgxvPfGc58qynbf","OjGWdnK8wo9DOrxCWHjcYMY2nSh","DqbbdMoJYohxyHxuQ4fcseTIn1d","JgrkdwIXDoJj3ExpmyachG52n6f","MBwmd05nXouA21xLw6wclvEmnBh","MoSsdRzOsojr5jx7AaJci52Tnng","Erj4dk6Xto3ysrxyy8tcPWGino0"],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7438450976719978500"]}},"initialAttributedTexts":{"attribs":{"0":"*0+4"},"text":{"0":"因果森林"}}},"align":"","doc_info":{"editors":["7352883777854586881","7438450976719978500"],"options":["editors","edit_time"],"deleted_editors":[],"option_modified":null}}}},"payloadMap":{"BerVduY2hoNfolxfOENcwSDnnfg":{"level":1},"TYRLdI8s7ozJGdxCoGccz5hznTe":{"level":1}},"extra":{"channel":"saas","pasteRandomId":"c3bf1c1c-5ec8-4c2e-9df6-332bb7f35f58","mention_page_title":{},"external_mention_url":{},"isEqualBlockSelection":true},"isKeepQuoteContainer":false,"selection":[{"id":42,"type":"text","selection":{"start":0,"end":13},"recordId":"BerVduY2hoNfolxfOENcwSDnnfg"},{"id":43,"type":"text","selection":{"start":0,"end":73},"recordId":"LBycdiiK8oQMtNxdIx8cQ07enZH"},{"id":44,"type":"text","selection":{"start":0,"end":46},"recordId":"ACQadsUBioHqSmxhkEscVR7xnsb"},{"id":45,"type":"text","selection":{"start":0,"end":3},"recordId":"TFspd4llDoaOMQxJMfecixmlnqg"},{"id":46,"type":"block","recordId":"W4vFd0bYnooHESxSfPZc3uzenSe"},{"id":47,"type":"text","selection":{"start":0,"end":3},"recordId":"DVZGdo21toImqZxbbxdcIFv8nFh"},{"id":48,"type":"text","selection":{"start":0,"end":36},"recordId":"TYRLdI8s7ozJGdxCoGccz5hznTe"},{"id":49,"type":"text","selection":{"start":0,"end":9},"recordId":"MyEcdHeftoLyRpxG0BNc2y1Sn2e"},{"id":50,"type":"text","selection":{"start":0,"end":17},"recordId":"ZxFFdzJUPoXpY5xkfZecaF0onfh"},{"id":51,"type":"text","selection":{"start":0,"end":17},"recordId":"CjRedHGXfobglLx3tErceJrNn3e"},{"id":52,"type":"text","selection":{"start":0,"end":22},"recordId":"A79rdd6VIoweftxQwJIcYa7QnIg"}],"pasteFlag":"65469ebb-6506-4f73-811e-7d7d6f383b15"}"></span> | <span class="lark-record-clipboard" data-lark-record-format="docx/record" data-lark-record-data="{"isCut":false,"rootId":"IhD5dRzJRoav8vx1Jvic1szWnjg","parentId":"IhD5dRzJRoav8vx1Jvic1szWnjg","blockIds":[42,43,44,45,46,47,48,49,50,51,52],"recordIds":["BerVduY2hoNfolxfOENcwSDnnfg","LBycdiiK8oQMtNxdIx8cQ07enZH","ACQadsUBioHqSmxhkEscVR7xnsb","TFspd4llDoaOMQxJMfecixmlnqg","W4vFd0bYnooHESxSfPZc3uzenSe","DVZGdo21toImqZxbbxdcIFv8nFh","TYRLdI8s7ozJGdxCoGccz5hznTe","MyEcdHeftoLyRpxG0BNc2y1Sn2e","ZxFFdzJUPoXpY5xkfZecaF0onfh","CjRedHGXfobglLx3tErceJrNn3e","A79rdd6VIoweftxQwJIcYa7QnIg"],"recordMap":{"BerVduY2hoNfolxfOENcwSDnnfg":{"id":"BerVduY2hoNfolxfOENcwSDnnfg","snapshot":{"type":"text","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"initialAttributedTexts":{"text":{"0":"目前因果森林的主要实现为:"},"attribs":{"0":"*0+d"}},"apool":{"numToAttrib":{"0":["author","7352883777854586881"]},"nextNum":1}},"align":"","folded":false}},"LBycdiiK8oQMtNxdIx8cQ07enZH":{"id":"LBycdiiK8oQMtNxdIx8cQ07enZH","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":4,"numToAttrib":{"0":["author","7352883777854586881"],"1":["bold","true"],"2":["inlineCode","true"],"3":["link","https%3A%2F%2Fgithub.com%2Fgrf-labs%2Fgrf"]}},"initialAttributedTexts":{"attribs":{"0":"*0*1+3*0+n*0*2*3+3*0+18"},"text":{"0":"R语言:由 Wager 和 Athey 团队开发的 grf 包,支持 CATE、quantile regression forest 等多种功能;"}}},"align":"left","folded":false}},"ACQadsUBioHqSmxhkEscVR7xnsb":{"id":"ACQadsUBioHqSmxhkEscVR7xnsb","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":4,"numToAttrib":{"0":["author","7352883777854586881"],"1":["bold","true"],"2":["inlineCode","true"],"3":["link","https%3A%2F%2Fgithub.com%2Fmicrosoft%2FEconML"]}},"initialAttributedTexts":{"attribs":{"0":"*0*1+6*0+7*0*2*3+6*0+r"},"text":{"0":"Python:微软开发的 econml 库,提供对 Causal Forest 的接口实现。"}}},"align":"left","folded":false}},"TFspd4llDoaOMQxJMfecixmlnqg":{"id":"TFspd4llDoaOMQxJMfecixmlnqg","snapshot":{"type":"heading2","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7438450976719978500","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7438450976719978500"]}},"initialAttributedTexts":{"attribs":{"0":"*0+3"},"text":{"0":"示例:"}}},"align":"","folded":false}},"W4vFd0bYnooHESxSfPZc3uzenSe":{"id":"W4vFd0bYnooHESxSfPZc3uzenSe","snapshot":{"type":"code","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7438450976719978500","children":[],"text":{"apool":{"nextNum":3,"numToAttrib":{"0":["author","7438450976719978500"],"1":["textHighlight","rgb(143,149,158)"],"2":["textHighlightBackground","rgb(187,191,196)"]}},"initialAttributedTexts":{"attribs":{"0":"*0|1+s*0*1*2|3+2i*0*1*2+1t*0|2+s*0*1*2|2+1v*0*1*2+d*0|1+1*0+q*0*1*2|2+18*0*1*2+c*0|2+p*0*1*2+1d*0|2+q*0*1*2|4+2d*0*1*2+x"},"text":{"0":"#-----------环境准备----------#\nimport numpy as np\nimport pandas as pd\nfrom sklearn.ensemble import RandomForestRegressor\nfrom causal_forest import CausalForest # 假设已有一个名为causal_forest的库\n#----------数据准备----------#\n# 假设我们有一个名为data的DataFrame,包含预测变量X和目标变量y\nX = data.drop('y', axis=1)\ny = data['y']\n#---------模型训练-----------#\ncf = CausalForest(RandomForestRegressor())\ncf.fit(X, y)\n#--------因果效应估计-------#\ncausal_effects = cf.estimate_causal_effects(X, y)\n#-------预测和解释----------#\npredictions = cf.predict(X)\n\n# 输出因果效应\nfor feature, effect in causal_effects.items():\n print(f\"{feature}: {effect}\")"}}},"align":"","folded":false,"language":"PowerShell","wrap":false,"caption":{"text":{"apool":{"nextNum":0,"numToAttrib":{}},"initialAttributedTexts":{"attribs":{"0":"|1+1"},"text":{"0":"\n"}}}},"is_language_picked":true}},"DVZGdo21toImqZxbbxdcIFv8nFh":{"id":"DVZGdo21toImqZxbbxdcIFv8nFh","snapshot":{"type":"heading2","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7352883777854586881"]}},"initialAttributedTexts":{"attribs":{"0":"*0+3"},"text":{"0":"局限性"}}},"align":"","folded":false}},"TYRLdI8s7ozJGdxCoGccz5hznTe":{"id":"TYRLdI8s7ozJGdxCoGccz5hznTe","snapshot":{"type":"text","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7352883777854586881"]}},"initialAttributedTexts":{"attribs":{"0":"*0+10"},"text":{"0":"尽管因果森林在建模灵活性与处理异质性方面具有显著优势,但也存在以下局限:"}}},"align":"","folded":false}},"MyEcdHeftoLyRpxG0BNc2y1Sn2e":{"id":"MyEcdHeftoLyRpxG0BNc2y1Sn2e","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7352883777854586881"]}},"initialAttributedTexts":{"attribs":{"0":"*0+9"},"text":{"0":"对样本量要求较高;"}}},"align":"left","folded":false}},"ZxFFdzJUPoXpY5xkfZecaF0onfh":{"id":"ZxFFdzJUPoXpY5xkfZecaF0onfh","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7352883777854586881"]}},"initialAttributedTexts":{"attribs":{"0":"*0+h"},"text":{"0":"可解释性较差(相较于单棵因果树);"}}},"align":"left","folded":false}},"CjRedHGXfobglLx3tErceJrNn3e":{"id":"CjRedHGXfobglLx3tErceJrNn3e","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7352883777854586881"]}},"initialAttributedTexts":{"attribs":{"0":"*0+h"},"text":{"0":"训练成本高,对计算资源有较大需求;"}}},"align":"left","folded":false}},"A79rdd6VIoweftxQwJIcYa7QnIg":{"id":"A79rdd6VIoweftxQwJIcYa7QnIg","snapshot":{"type":"bullet","parent_id":"IhD5dRzJRoav8vx1Jvic1szWnjg","comments":[],"revisions":[],"locked":false,"hidden":false,"author":"7352883777854586881","children":[],"text":{"initialAttributedTexts":{"text":{"0":"在某些结构性模型假设下可能不如参数方法高效。"},"attribs":{"0":"*0+m"}},"apool":{"numToAttrib":{"0":["author","7352883777854586881"]},"nextNum":1}},"align":"left","folded":false}},"IhD5dRzJRoav8vx1Jvic1szWnjg":{"id":"IhD5dRzJRoav8vx1Jvic1szWnjg","snapshot":{"type":"page","parent_id":"","comments":null,"revisions":null,"locked":false,"hidden":false,"author":"7352883777854586881","children":["Yl6GdCo56on9ZTxzS0YcI0dun8c","D1ezd0MKwokZvlxLKVWcSguHnTb","WT6XdpJJ6o8YHfxQUz9caUPXnCc","RCx9dQk7so5rHLxJ5Z4c1bxmnoh","DOTvdYS0EozbK4xiBztckL4MnFg","IHiadW9ProNettx9U5tc45smnZg","AC4MdxPXooFtimxNyCPc8GCxnub","XAMmdiZUboKeP2xapbccdFZYnHe","BnxydX0LmoIiNtxes92cJDukngg","EGZzd5zQPovDrlxjeW1cXCEQnkh","CFYxdaf9Go3TvlxHipDchunInHf","ZRSIdxk0WoTuoXxekV2cQcsRnoq","LyNQdhpZwoz89fxCRofcqRI6n2c","GY4LdHIMtohExHxRbckclFz3nsh","LjfEdTB0VoSJ8FxvmxpcIvOZnAg","V6wTdngRqoUteox0cLbcHjvknZg","WDV4dKCvZojlwUxI7fkcBYMtnze","QYggd5mQqo01oUxxv9gcxRFxnnd","W8uedBa1OoTRr1xyAb0cwTxnnBc","HOR3d4i7zo9iyzxanEDcb61Mnsg","OxkndfIYNo6q1XxEGiRcxKRunue","Q5tEdzWX3oIKcgxGpKfcjwaTnzb","CGJXdPW5Pogc0QxQaWbc0GA0nHe","O3ELdgHeVoy7Wxx8b1scMDsWnfd","OofMdznhLo89SZxwg5XcEnzSnGf","Lmkbd3ovno5cUax76tNcIzmTn3g","BxS9d5mm4oqa1pxiwiAcFhSnn5c","HwendyrQeoStnbxMczHcRivTnOg","RsbkdBBwXovB6gxUdIZc7lEJnMd","CqvDdyeMjoYE7txmKCocckFGnbh","Lk61d51PaoNesyxVeKdcwrvOn0e","SPNidPzcfofDEaxu2sjcdwG0n9e","Onm7dfmL3oXnpFxcatPcYlXHnUf","P4l2dHC5poGv0oxiciHccUbsnTc","RyT1dSz3Uonc3sx38ILccCUXnye","Cu1IdAboRogac9xqbTMcsJMMn6d","DTKjd9roHopiFjxXs5Qc5fETnVb","B6lRdsHj5oFKZpxHx3LceYXVnFg","BerVduY2hoNfolxfOENcwSDnnfg","LBycdiiK8oQMtNxdIx8cQ07enZH","ACQadsUBioHqSmxhkEscVR7xnsb","TFspd4llDoaOMQxJMfecixmlnqg","W4vFd0bYnooHESxSfPZc3uzenSe","DVZGdo21toImqZxbbxdcIFv8nFh","TYRLdI8s7ozJGdxCoGccz5hznTe","MyEcdHeftoLyRpxG0BNc2y1Sn2e","ZxFFdzJUPoXpY5xkfZecaF0onfh","CjRedHGXfobglLx3tErceJrNn3e","A79rdd6VIoweftxQwJIcYa7QnIg","ZDCed7r9doTkn2xh6N8c4ooVnRf","JU2bddXlhoKRcRxlTAAcCaEhnod","WeCpdAHmqo6wVwxK0zscXQ2zntd","F2UIdqf7iosEw7xGux1cNCkXnWb","EdHkddi3Go2YgAxJkDncCRFLnjO","IFOWdj4n7obS50xRAiYcuZRtnTe","NJzKdybiRoCcAUxZu2nc8EJ1nud","ULV2dGgVMoQ0BKxKRcMc0bhTnFf","URLEddA4soBypQxNMPtcFeZyn1e","LkgodhIzaoA8tkxJs1hcwkhLnXd","R8IPdY9aMoPszgxvPfGc58qynbf","OjGWdnK8wo9DOrxCWHjcYMY2nSh","DqbbdMoJYohxyHxuQ4fcseTIn1d","JgrkdwIXDoJj3ExpmyachG52n6f","MBwmd05nXouA21xLw6wclvEmnBh","MoSsdRzOsojr5jx7AaJci52Tnng","Erj4dk6Xto3ysrxyy8tcPWGino0"],"text":{"apool":{"nextNum":1,"numToAttrib":{"0":["author","7438450976719978500"]}},"initialAttributedTexts":{"attribs":{"0":"*0+4"},"text":{"0":"因果森林"}}},"align":"","doc_info":{"editors":["7352883777854586881","7438450976719978500"],"options":["editors","edit_time"],"deleted_editors":[],"option_modified":null}}}},"payloadMap":{"BerVduY2hoNfolxfOENcwSDnnfg":{"level":1},"TYRLdI8s7ozJGdxCoGccz5hznTe":{"level":1}},"extra":{"channel":"saas","pasteRandomId":"c3bf1c1c-5ec8-4c2e-9df6-332bb7f35f58","mention_page_title":{},"external_mention_url":{},"isEqualBlockSelection":true},"isKeepQuoteContainer":false,"selection":[{"id":42,"type":"text","selection":{"start":0,"end":13},"recordId":"BerVduY2hoNfolxfOENcwSDnnfg"},{"id":43,"type":"text","selection":{"start":0,"end":73},"recordId":"LBycdiiK8oQMtNxdIx8cQ07enZH"},{"id":44,"type":"text","selection":{"start":0,"end":46},"recordId":"ACQadsUBioHqSmxhkEscVR7xnsb"},{"id":45,"type":"text","selection":{"start":0,"end":3},"recordId":"TFspd4llDoaOMQxJMfecixmlnqg"},{"id":46,"type":"block","recordId":"W4vFd0bYnooHESxSfPZc3uzenSe"},{"id":47,"type":"text","selection":{"start":0,"end":3},"recordId":"DVZGdo21toImqZxbbxdcIFv8nFh"},{"id":48,"type":"text","selection":{"start":0,"end":36},"recordId":"TYRLdI8s7ozJGdxCoGccz5hznTe"},{"id":49,"type":"text","selection":{"start":0,"end":9},"recordId":"MyEcdHeftoLyRpxG0BNc2y1Sn2e"},{"id":50,"type":"text","selection":{"start":0,"end":17},"recordId":"ZxFFdzJUPoXpY5xkfZecaF0onfh"},{"id":51,"type":"text","selection":{"start":0,"end":17},"recordId":"CjRedHGXfobglLx3tErceJrNn3e"},{"id":52,"type":"text","selection":{"start":0,"end":22},"recordId":"A79rdd6VIoweftxQwJIcYa7QnIg"}],"pasteFlag":"65469ebb-6506-4f73-811e-7d7d6f383b15"}"></span> | ||
| 第100行: | 第96行: | ||
''[Submitted on 5 Apr 2015 (v1), last revised 30 Dec 2015 (this version, v3)]'' | ''[Submitted on 5 Apr 2015 (v1), last revised 30 Dec 2015 (this version, v3)]'' | ||
| − | ===Estimation and Inference of Heterogeneous Treatment Effects ... === | + | ===Estimation and Inference of Heterogeneous Treatment Effects ...=== |
''[Submitted on 14 Oct 2015 (v1), last revised 10 Jul 2017 (this version, v4)]'' | ''[Submitted on 14 Oct 2015 (v1), last revised 10 Jul 2017 (this version, v4)]'' | ||
2025年6月12日 (四) 19:23的版本
因果森林 (Causal Forest) 是由 Wager and Athey [2017] 提出的异质因果效应估计算法。该算法本质上可以理解成通过子采样生成大量不同的因果树,然后取这些树的平均。 类似于随机森林算法,因果森林可以被理解成一种近邻匹配算法,但是用数据驱动的方法来确定样本之间的相似度。
介绍
因果森林(Causal Forest)是一种用于估计异质性处理效应(Heterogeneous Treatment Effects, HTE)的非参数机器学习方法。它基于随机森林(Random Forest)算法的扩展形式,由苏珊·艾西(Susan Athey)等人提出,用于在高维数据中识别个体或群体层面的因果效应差异,属于因果推断(Causal Inference)领域的一类重要方法。
背景与发展
传统的因果推断方法,如倾向得分匹配(Propensity Score Matching)或工具变量法(Instrumental Variables),主要关注平均处理效应(Average Treatment Effect, ATE)。然而在实际应用中,不同个体对于同一处理可能反应不同,因此估计个体层面的处理效应,即条件平均处理效应(Conditional Average Treatment Effect, CATE)成为重要研究方向。
因果森林最早由斯坦福大学经济学家 Susan Athey 与 Stefan Wager 等人在 2015 年提出,后续发展为通用随机森林(Generalized Random Forest, GRF)框架,并于 2018 年在《美国统计协会期刊》(Journal of the American Statistical Association)上发表正式论文。
方法概述
因果森林的核心思想是在随机森林的基础上调整分裂准则与估计过程,使其能够估计因变量在不同处理组下的条件差异。主要特点包括:
- 诚实估计(Honest Estimation):将训练数据分为两个子集,一个用于构建决策树,另一个用于估计处理效应,以减少过拟合。
- 自适应分裂准则:优先选择能揭示处理效应差异(而非仅预测误差最小化)的分裂变量。
- 森林聚合(Ensemble Averaging):将多棵树的估计值加权平均,提高稳健性与泛化能力。
应用领域
因果森林被广泛应用于需要个性化决策支持的领域,例如:
- 医疗:评估新药在不同患者群体中的效果;
- 公共政策:识别社会项目在不同地区或人群中的效应差异;
- 教育:分析干预措施对不同学生群体的影响;
- 市场营销:发现不同客户对促销手段的反应差异。
算法
因果森林算法基于随机森林的框架,但在建树与预测过程中做出了若干关键修改,以用于估计条件平均处理效应(CATE)。其算法设计强调异质性识别与估计的正态性,可简述如下:
基本流程
- 样本拆分(Honest Splitting) 数据集被分为两个子集:
- 构树集(用于构建树的结构)
- 估计集(用于估计每个叶子节点中的处理效应) 这种拆分方式称为“诚实性”(honesty),可避免过拟合,并保证渐近一致性。
- 分裂标准(Splitting Criterion) 与传统随机森林最小化均方误差(MSE)不同,因果森林的分裂准则最大化处理效应的异质性,通常使用以下目标函数:△= Var[f(X)]
即寻找能最有效区分处理效应差异的协变量。
- 叶节点处理效应估计 在每个叶节点中,使用估计集中的样本计算处理组与对照组的均值差异来估计 CATE:公式1!!!!
- 森林聚合(Ensemble Aggregation) 最终的 CATE 估计为所有树对该样本估计的平均:公式1!!!!
理论性质
Wager 和 Athey(2018)证明,在一定正则条件下,因果森林具备以下渐近性质:
- 一致性(Consistency)
- 渐近正态性(Asymptotic Normality)
- 可构造有效置信区间(Valid Confidence Intervals)
算法实现
目前因果森林的主要实现为:
- R语言:由 Wager 和 Athey 团队开发的
grf包,支持 CATE、quantile regression forest 等多种功能; - Python:微软开发的
econml库,提供对 Causal Forest 的接口实现。
示例:
#-----------环境准备----------#
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from causal_forest import CausalForest # 假设已有一个名为causal_forest的库
#----------数据准备----------#
# 假设我们有一个名为data的DataFrame,包含预测变量X和目标变量y
X = data.drop('y', axis=1)
y = data['y']
#---------模型训练-----------#
cf = CausalForest(RandomForestRegressor())
cf.fit(X, y)
#--------因果效应估计-------#
causal_effects = cf.estimate_causal_effects(X, y)
#-------预测和解释----------#
predictions = cf.predict(X)
# 输出因果效应
for feature, effect in causal_effects.items():
print(f"{feature}: {effect}")
局限性
尽管因果森林在建模灵活性与处理异质性方面具有显著优势,但也存在以下局限:
- 对样本量要求较高;
- 可解释性较差(相较于单棵因果树);
- 训练成本高,对计算资源有较大需求;
- 在某些结构性模型假设下可能不如参数方法高效。
参考文献
Recursive Partitioning for Heterogeneous Causal Effects - arXiv
[Submitted on 5 Apr 2015 (v1), last revised 30 Dec 2015 (this version, v3)]
Estimation and Inference of Heterogeneous Treatment Effects ...
[Submitted on 14 Oct 2015 (v1), last revised 10 Jul 2017 (this version, v4)]
Generalized Random Forests - arXiv
[Submitted on 5 Oct 2016 (v1), last revised 5 Apr 2018 (this version, v4)]
Machine Learning Methods Economists Should Know About
[Submitted on 24 Mar 2019]
参考文献格式!!!!!!
编者推荐
待补充