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
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)
在EconML的LinearDML
模型中,有不同的属性用于表示不同的模型部分,如treatment_model_
表示干预模型,outcome_model_
表示结果模型,final_model_
表示最终模型等。
在LinearDML
模型中,cate_model
表示常数边际CATE模型,它是在拟合模型后通过fit
方法获得的。你可以使用cate_model
属性来对已经拟合好的常数边际CATE模型进行预测操作,计算不同干预值下的CATE。
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
方法,其中 X
、T0
和 T1
是参数。这样的调用通常用于扩展父类的方法,而不是完全替代它。子类可以在父类方法的基础上添加额外的功能或对其进行修改。
const_marginal_effect
在经济学因果推断(EconML)中,marginal_effect
和 effect
是两个不同的概念:
-
Effect
(因果效应):effect
通常是指一个因果估计的结果,表示一个变量(例如处理、干预、政策等)对另一个变量(例如结果、响应)的影响程度。这通常是一个定量的值,可以是正数、负数或零,用于表示处理对结果的影响,例如处理导致结果增加或减少了多少。 -
Marginal Effect
(边际效应):marginal effect
是指一个因果估计模型中,对一个变量进行微小变化时,对结果的影响。它表示了在其他变量保持不变的情况下,对某个特定变量进行微小变化时,对结果的影响。Marginal effect
可以用来理解在不同情况下,对一个特定变量的微小变化对结果的影响。
例如,在回归模型中,effect
可能表示了某个因素对目标变量的总体影响,而 marginal effect
可能表示了在某个特定数值点上,对一个自变量进行微小变化时,目标变量的变化程度。
总之,effect
表示总体影响,而 marginal effect
表示在特定情境下,自变量微小变化对因果结果的影响。这两个概念在因果推断中经常使用,用于深入理解因果关系和模型的行为。
-
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。
-
effect(X, T0=None, T1=None):
effect
用于计算特定干预水平T0
到T1
的边际 CATE,即在干预从T0
到T1
的情况下的效应。- 这允许你计算干预的效果,即当干预从某个水平
T0
到T1
时,特定特征向量X[i]
的效应有多大。 - 结果通常是一个二维矩阵,表示在每个样本
X[i]
和每个结果d_y
上的边际 CATE。
总的来说,const_marginal_effect
是一个更宽泛的方法,它计算了每个可能的特征向量 X[i]
和每个可能的干预水平下的常数边际 CATE,而 effect
用于特定的干预水平,计算了在这个干预水平下的边际 CATE。根据具体问题的需求,你可以选择使用其中一个来进行因果推断。
参考
- 微软EconML简介:基于机器学习的Heterogeneous Treatment Effects估计 - 知乎
- 因果推断笔记——因果图建模之微软开源的EconML(五) - 知乎
- 用户增长因果推断方法_因果路径决策树_wendaJ的博客-CSDN博客
- 史上最全因果推断合集-10(滴滴的国际化外卖团队智能补贴实战)_滴滴 单明辉_草帽-路飞的博客-CSDN博客
- 应用双重机器学习(Double Machine Learning)计算额度-响应弹性系数 - 知乎
- 【机器学习-因果推断】EconML 双重机器学习正交森林上手小案例 n(Python) - 知乎
- 一图讲清因果推断 - 搜索结果 - 知乎
- 因果推断笔记(五)——自整理因果推断应用 - 知乎
- 【因果前沿】因果效应估计综述:挑战、机会和最新进展 - 知乎
- 因果推断与反事实预测——利用DML进行价格弹性计算(二十四) - 知乎
- 基于表征学习的因果推断技术在快手的实践 - AIQ
- 因果推断笔记——DML :Double Machine Learning案例学习(十六)_悟乙己的博客-CSDN博客
- 因果论文精读与总结(一)_语洛的博客-CSDN博客