econml介绍

EconML简介

EconML: A Python Package for ML-Based Heterogeneous Treatment Effects Estimation

EconML是一个通过机器学习方法从观察数据中估计heterogeneous treatment effects的Python包。该软件包是微软研究院ALICE项目的一部分,目的是将最新的机器学习方法与计量经济学结合,从而实现复杂因果推断问题的自动化。EconML希望做到以下几点:

  • 实现同时涉及计量经济学和机器学习的最新方法
  • 保持对effect heterogeneity建模的灵活性(通过随机森林、boosting、lasso和神经网络等技术),同时保留所学模型的因果解释,并同时提供有效的置信区间
  • 使用统一的API
  • 构建标准的Python包以用于机器学习和数据分析

机器学习最大的promise之一是在许多领域实现决策的自动化。许多数据驱动的决策场景的核心问题是对heterogeneous treatment effects的估计,也即:对于具有特定特征集的样本,干预对输出结果的causal effect是什么?简言之,这个Python工具包旨在测量某些干预变量T对结果变量Y的causal effect,控制一组特征X和W,来衡量causal effect如何随X的变化而变化。这个包里实现的方法适用于观察的数据集(非实验或历史)。为了使估计结果具有因果解释,一些算法假设数据中没有未观察到的混杂因子(即同时对T和Y产生影响的因子均被包含在X,W中),而其他一些算法则假设可以使用工具变量Z(即观测变量Z对干预T有影响,但对结果变量Y没有直接影响)。并且包中的大多数算法都可以提供置信区间和推断结果。

EconML包的详细文档见:Welcome to econml’s documentation

causal inference和heterogeneous treatment effects的使用背景和具体的case见文档。具体的例子有:ABtest的例子客户细分软件公司的多元投资归因

GITHUB :https://github.com/py-why/EconML

doc::econml.dml.CausalForestDML — econml 0.14.1 documentation

b775496921b74c3aa991ce322df61894.png

CausalForestDML

est = CausalForestDML(discrete_treatment=False)
# 拟合模型
est.fit(y, T, X=X)
# 最终模型结果
est.summary() # 如果dlm最终模型是线性模型,那这里显示线性模型的回归系数,此时是一个二次项模型,还有截距项
est.coef_# The coefficients in the linear model of the constant marginal treatment effect. 最终模型是线性的话,就是线性回归系数
est.intercept_ # 线性模型的截距项

# 使用的模型:最终模型 / T~X模型 / Y~X模型
est.model_cate,est.models_t,est.models_y

# 模型计算过程中,前面步骤的残差
res_dict = ['y_res', 'T_res', 'X', 'W']
{res_dict[n]:i for n,i in enumerate(est.residuals_)}  # y_res, T_res, X, W,需要cache_values=True

from lightgbm import LGBMRegressor
from econml.dml import DML, CausalForestDML
 
######第一步,训练uplift模型########
dmlmodel = CausalForestDML(
    criterion='mse',
    n_estimators=240,
    max_depth=4,
    min_samples_leaf=2000,
    min_samples_split=2000,
    n_jobs=-1,
    model_y=LGBMRegressor(n_estimators=250, ##
                       max_depth=5,
                       num_leaves=31,
                       learning_rate=0.01,
                       subsample=0.7,
                       min_child_samples=2000,
                       reg_alpha=0.01,
                       reg_lambda=0.01,
                       importance_type='gain'),
     #model_t=RandomPropensityScoreModel(t),此处可以自定义,但是如果不添加,那么用默认的数据
    , verbose=0
    , discrete_treatment=False
    , honest=True
    , min_var_fraction_leaf=0.1
    , min_var_leaf_on_val=True
)
 
dmlmodel.fit(Y=y, T=t, X=x)
#预测部分,在treatment=1时候的结果
pred1=dmlmodel.effect(X=X_test,T0=0,T1=1)
pred2=dmlmodel.effect(X=X_test,T0=0,T1=2)
 
model_path = 'model.pkl'
with open(model_path, 'wb') as f:
    pickle.dump(dmlmodel, f)
 
 
######第二步,训练y0基础模型###########
base_model=LGBMClassifier(n_estimators=400,
                       max_depth=4,
                       num_leaves=16,
                       learning_rate=0.2,
                       subsample=0.3,
                       min_child_samples=5000,
                       reg_alpha=0.01,
                       reg_lambda=0.01,
                       importance_type='gain',
                         class_weight=None)
base_model.fit(X_train, y_train, eval_set=(X_test, y_test), 
             eval_names=None, 
             eval_sample_weight=None, 
             eval_class_weight=None, 
             eval_init_score=None, 
             eval_metric='auc', 
             early_stopping_rounds=100,
         )
 
base_prob = base_model.predict_proba(X_test)

fdc9e938ae3a468bb0a23bf76d67a9bf.png

在EconML的LinearDML模型中,有不同的属性用于表示不同的模型部分,如treatment_model_表示干预模型,outcome_model_表示结果模型,final_model_表示最终模型等。

LinearDML模型中,cate_model表示常数边际CATE模型,它是在拟合模型后通过fit方法获得的。你可以使用cate_model属性来对已经拟合好的常数边际CATE模型进行预测操作,计算不同干预值下的CATE。

bc7aab7235f14334b54fffb9d856a7e4.png

    def effect(self, X=None, *, T0=0, T1=1):
        # NOTE: don't explicitly expand treatments here, because it's done in the super call
        return super().effect(X, T0=T0, T1=T1)
    effect.__doc__ = BaseCateEstimator.effect.__doc__

super() 是 Python 中用于调用父类(或超类)的方法的内置函数。在面向对象编程中,通常会有继承关系,子类可以继承父类的属性和方法,但有时需要在子类中对继承的方法进行扩展或重写。super() 允许你在子类中调用父类的同名方法,以便扩展或覆盖父类的行为。

在你提供的代码片段中,super().effect(X, T0=T0, T1=T1) 用于调用父类的 effect 方法,其中 XT0T1 是参数。这样的调用通常用于扩展父类的方法,而不是完全替代它。子类可以在父类方法的基础上添加额外的功能或对其进行修改。

const_marginal_effect

在经济学因果推断(EconML)中,marginal_effecteffect 是两个不同的概念:

  1. Effect(因果效应):effect 通常是指一个因果估计的结果,表示一个变量(例如处理、干预、政策等)对另一个变量(例如结果、响应)的影响程度。这通常是一个定量的值,可以是正数、负数或零,用于表示处理对结果的影响,例如处理导致结果增加或减少了多少。

  2. Marginal Effect(边际效应):marginal effect 是指一个因果估计模型中,对一个变量进行微小变化时,对结果的影响。它表示了在其他变量保持不变的情况下,对某个特定变量进行微小变化时,对结果的影响。Marginal effect 可以用来理解在不同情况下,对一个特定变量的微小变化对结果的影响。

例如,在回归模型中,effect 可能表示了某个因素对目标变量的总体影响,而 marginal effect 可能表示了在某个特定数值点上,对一个自变量进行微小变化时,目标变量的变化程度。

总之,effect 表示总体影响,而 marginal effect 表示在特定情境下,自变量微小变化对因果结果的影响。这两个概念在因果推断中经常使用,用于深入理解因果关系和模型的行为。

  1. const_marginal_effect(X=None):

    • const_marginal_effect 用于计算在给定一组测试样本 X 上的常数边际 CATE(Constant Marginal Conditional Average Treatment Effect)。
    • 这表示它计算了在给定特征向量 X[i] 的情况下,对于所有可能的干预水平(通常是一个范围或一组干预值),在每个干预水平下的 CATE 都是常数,不会随着 X[i] 的变化而变化。
    • 结果是一个三维矩阵,表示在每个样本 X[i],每个结果 d_y 和每个特征化干预 d_f_t 上的常数边际 CATE。
  2. effect(X, T0=None, T1=None):

    • effect 用于计算特定干预水平 T0T1 的边际 CATE,即在干预从 T0T1 的情况下的效应。
    • 这允许你计算干预的效果,即当干预从某个水平 T0T1 时,特定特征向量 X[i] 的效应有多大。
    • 结果通常是一个二维矩阵,表示在每个样本 X[i] 和每个结果 d_y 上的边际 CATE。

总的来说,const_marginal_effect 是一个更宽泛的方法,它计算了每个可能的特征向量 X[i] 和每个可能的干预水平下的常数边际 CATE,而 effect 用于特定的干预水平,计算了在这个干预水平下的边际 CATE。根据具体问题的需求,你可以选择使用其中一个来进行因果推断。

参考

  1. 微软EconML简介:基于机器学习的Heterogeneous Treatment Effects估计 - 知乎
  2. 因果推断笔记——因果图建模之微软开源的EconML(五) - 知乎
  3. 用户增长因果推断方法_因果路径决策树_wendaJ的博客-CSDN博客
  4. 史上最全因果推断合集-10(滴滴的国际化外卖团队智能补贴实战)_滴滴 单明辉_草帽-路飞的博客-CSDN博客
  5. 应用双重机器学习(Double Machine Learning)计算额度-响应弹性系数 - 知乎
  6. 【机器学习-因果推断】EconML 双重机器学习正交森林上手小案例 n(Python) - 知乎
  7. 一图讲清因果推断 - 搜索结果 - 知乎
  8. 因果推断笔记(五)——自整理因果推断应用 - 知乎
  9. 【因果前沿】因果效应估计综述:挑战、机会和最新进展 - 知乎
  10. 因果推断与反事实预测——利用DML进行价格弹性计算(二十四) - 知乎
  11. 基于表征学习的因果推断技术在快手的实践 - AIQ
  12. 因果推断笔记——DML :Double Machine Learning案例学习(十六)_悟乙己的博客-CSDN博客
  13. 因果论文精读与总结(一)_语洛的博客-CSDN博客

### 回答1: 要在Python中安装econml,可以使用pip来安装。请按照以下步骤操作: 1. 打开命令行终端(Windows用户可以使用cmd或PowerShell,Mac和Linux用户可以使用终端)。 2. 输入以下命令来安装econml: ``` pip install econml ``` 3. 等待安装完成,然后您就可以在Python中使用econml了。 请注意,为了使用econml,您需要安装一些依赖项。如果您遇到任何问题,请查看econml文档以获取更多信息。 ### 回答2: 要安装econml,我们需要按照以下步骤进行操作。 首先,我们需要确保已经安装了Python环境。我们可以前往Python官方网站(https://www.python.org)下载并安装最新的Python版本。安装完成后,我们可以在命令行中运行`python --version`来确认安装是否成功。 接下来,我们需要确保已经安装了pip,它是Python的软件包管理器。我们可以在命令行中输入`pip --version`来检查是否已安装pip。如果未安装,我们可以通过运行`python -m ensurepip --default-pip`来安装。 安装完成后,我们可以通过运行以下命令来安装econml: ``` pip install econml ``` 一旦安装开始,pip将会自动下载并安装econml软件包及其所有依赖项。安装完成后,我们就可以在Python中使用econml了。 使用econml,我们可以进行经济计量学的机器学习建模和因果推断。该库提供了多种算法和模型,如双重树、双重森林和增强学习器等。可以用于处理因果推断、处理选择性问题和其他经济计量问题。 总之,要安装econml,我们需要先安装Python和pip,然后使用pip命令进行安装。安装完成后,我们可以在Python中使用econml从而进行经济计量学的机器学习建模和因果推断。 ### 回答3: 要安装econml库,首先确保已经安装了Python编程语言。可以从Python官方网站(https://www.python.org/downloads/)下载并安装最新版本的Python。 安装完成Python后,可以使用包管理工具pip来安装econml库。打开命令提示符或终端窗口,并输入以下命令: ``` pip install econml ``` 这将自动从Python软件仓库下载econml的最新版本并安装到Python环境中。安装完成后,可以在Python代码中导入econml库并使用其中的功能。 如果遇到下载或安装过程中的问题,可以尝试使用谷歌等搜索引擎搜索相关错误信息并查找解决方案。常见问题可能包括网络连接问题、权限问题或与其他软件包的版本冲突等。 另外,安装econml之前建议先了解一些基本的Python编程知识和机器学习经济学的原理。可以通过阅读相关的教程、文档或参考书籍来学习。同时,参与相关的讨论社区或问答网站也是一个很好的学习资源,可以与其他开发者交流并解决遇到的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值