这个包包含计算条件平均治疗效果的几种方法

econml的Python项目详细描述


生成状态pypi versionpypi wheel支持的python版本

econml:基于ml的异构治疗效果评估的python包

econml是一个python包,用于通过机器学习从观察数据中估计异质治疗效果。此软件包是作为Microsoft Research的Alice项目的一部分设计和构建的,目的是将最先进的机器学习结合起来 计量经济学的技术,使复杂的因果推理问题自动化。econml的承诺:

  • 在计量经济学和机器学习的交叉点实施文献中的最新技术
  • 在建模效果异质性时保持灵活性(通过随机森林、boosting、套索和神经网络等技术),同时保留对所学模型的因果解释,并通常提供有效的置信区间
  • 使用统一的API
  • 建立在机器学习和数据分析的标准python包之上

简而言之,这个 工具包旨在测量某些治疗变量对治疗结果的因果影响 变量y,控制一组功能x。关于包裹的详细信息, 请参阅https://econml.azurewebsites.net/上的文档。 <详情>

目录 <详细内容>

简介

关于治疗效果评估

机器学习的最大承诺之一是在许多领域实现决策自动化。许多数据驱动的个性化决策场景的核心是对异质治疗效果的估计:对于具有特定特征集的样本,干预对感兴趣结果的因果影响是什么?

这些问题经常出现在客户细分(将客户置于另一层之上的某一层的影响是什么)、动态定价(定价政策对需求的影响是什么)和医学研究(治疗对患者的影响是什么)中。在许多这样的情况下,我们有大量的观察数据,其中治疗是通过一些未知的策略选择的,但是运行控制A/B测试的能力是有限的。

示例应用程序

<表> IMGsrc="https://warehouse-camo.cmh1.psfhosted.org/357FCA66112A66112A2A3335C9C01DF5C654CBB10CBB10CBB10DDF47E/68747470733A3A3222222222F775706C661642E776966D56469666D65564646966E6567672F67672F6767672F7676767672626672F676767676767676B676767676762622F626F6D6F6D6F6D6E732F7746875666D62626D626D626F62626F652F652F622F652F622F62623070782D427573696号E657335F636172645F2D5F5468655F4E6F756E5F50726F6A6563742E7376672E706E67" />

客户目标

企业为客户提供个性化的激励措施,以提高销售额和参与度。任何此类个性化干预都对应于货币投资,而商业分析被要求回答的主要问题是:投资回报率是多少?分析投资回报率本质上是一个治疗效果问题:任何投资对客户支出的影响是什么?了解不同客户的投资回报率如何变化,可以通过更好的目标定位实现更具针对性的投资策略和更高的投资回报率。

个性化定价

个性化折扣在数字经济中已经非常普遍。为了制定最优的个性化折扣政策,企业需要了解价格下跌对客户对产品需求的影响,这是客户特征的函数。这种个性化需求弹性的估计也可以用异质处理效果的语言来表达,其中处理是需求上的价格,作为客户可观察特征的函数。

学习点击率

在页面布局和广告投放的设计中,了解页面组件在页面不同位置的点击率非常重要。现代的方法可能是运行多个A/B测试,但是当这样的页面组件涉及到收入考虑时,观察数据可以帮助指导正确的A/B测试运行。非均匀处理效果估计可以从观测数据中估计页面组件的点击率。在这个设置中,处理方法很简单,就是组件是否被放置在那个页面位置,响应是用户是否点击了它。

<表>

新闻

2019年10月4日:版本v0.2,请参见此处的发行说明

2019年6月3日:版本v0.1,欢迎尝试并提供反馈。

入门

安装

从pypi安装最新版本

pip install econml

要从源代码安装,请参见下面的"开发人员"部分。

用法示例

  • 双机器学习

    fromeconml.dmlimportDMLCateEstimatorfromsklearn.linear_modelimportLassoCVest=DMLCateEstimator(model_y=LassoCV(),model_t=LassoCV)est.fit(Y,T,X,W)# W -> high-dimensional confounders, X -> featurestreatment_effects=est.const_marginal_effect(X_test)
  • 正交随机林

    fromeconml.ortho_forestimportContinuousTreatmentOrthoForest# Use defaultsest=ContinuousTreatmentOrthoForest()# Or specify hyperparametersest=ContinuousTreatmentOrthoForest(n_trees=500,min_leaf_size=10,max_depth=10,subsample_ratio=0.7,lambda_reg=0.01,model_T=LassoCV(cv=3),model_Y=LassoCV(cv=3))est.fit(Y,T,X,W)treatment_effects=est.const_marginal_effect(X_test)
  • 深层仪器变量

    importkerasfromeconml.deepivimportDeepIVEstimatortreatment_model=keras.Sequential([keras.layers.Dense(128,activation='relu',input_shape=(2,)),keras.layers.Dropout(0.17),keras.layers.Dense(64,activation='relu'),keras.layers.Dropout(0.17),keras.layers.Dense(32,activation='relu'),keras.layers.Dropout(0.17)])response_model=keras.Sequential([keras.layers.Dense(128,activation='relu',input_shape=(2,)),keras.layers.Dropout(0.17),keras.layers.Dense(64,activation='relu'),keras.layers.Dropout(0.17),keras.layers.Dense(32,activation='relu'),keras.layers.Dropout(0.17),keras.layers.Dense(1)])est=DeepIVEstimator(n_components=10,# Number of gaussians in the mixture density networks)m=lambdaz,x:treatment_model(keras.layers.concatenate([z,x])),# Treatment modelh=lambdat,x:response_model(keras.layers.concatenate([t,x])),# Response modeln_samples=1# Number of samples used to estimate the response)est.fit(Y,T,X,Z)# Z -> instrumental variablestreatment_effects=est.effect(T0,T1,X_test)
  • 引导置信区间

    fromeconml.bootstrapimportBootstrapEstimator# Bootstrap estimator wrapperboot_est=BootstrapEstimator(est,n_bootstrap_samples=10)boot_est.fit(Y,T,X,W)treatment_effect_interval=boot_est.const_marginal_effect_interval(X_test,lower=1,upper=99)

要查看更复杂的示例,请转到存储库的笔记本部分。有关治疗效果估计算法的更详细描述,请参阅econml文档

对于开发人员

您可以从克隆此存储库开始。我们使用 用于构建和分发我们的包的setuptools。 我们依赖于setuptools的一些最新功能,因此请确保使用 pip install setuptools--升级。然后,从存储库的本地副本运行python setup.py develop开始。

运行测试

此项目使用pytest进行测试。要在安装包后在本地运行测试, 您可以使用python setup.py pytest

生成文档

本项目的文档通过sphinx生成。生成本地副本 在这个存储库的克隆文档中,只需运行python setup.py build_sphinx,它将构建文档并放置它 在build/sphinx/html路径下。

构成文档的重构文本文件存储在文档目录中;模块文档由Sphinx生成过程自动生成。

博客和出版物

贡献和反馈

这个项目欢迎大家提出意见和建议。大多数捐款要求您同意 出资人许可协议(CLA)声明您有权并且实际上有权授予我们 使用您的捐款的权利。有关详细信息,请访问https://cla.microsoft.com" rel="nofollow">https://cla.microsoft.com

当您提交拉取请求时,cla bot将自动确定您是否需要提供 a cla并适当地装饰pr(例如,标签、注释)。只需按照说明操作 由机器人提供。您只需使用我们的CLA在所有回购协议中执行一次即可。

本项目采用了微软开源行为准则。 有关更多信息,请参见行为准则常见问题解答或 如有任何其他问题或意见,请联系opencode@microsoft.com

参考资料

奥普雷斯库,V.锡尔加尼斯和Z.S.吴。 用于因果推理的正交随机林。 2018年,arxiv预印本arxiv:1806.03467

贾森·哈特福德、格雷格·刘易斯、凯文·莱顿·布朗和马特·塔迪。Deep IV:反事实预测的灵活方法。第34届机器学习国际会议记录,2017。

V.切尔诺朱科夫、D.切特维里科夫、M.德米尔、E.杜弗洛、C.汉森和A.W.纽伊。治疗和因果参数的双机器学习。arxiv预印本arxiv:1608.00060,2016。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法在未设置数据源的情况下启动springboot应用程序   返回/泛型的类型?   java通过在navigationView中按id重新加载navigationView内容   java实现安卓的状态更新   java Equals()对于两个相等的字符串不返回true   java如何保存屏幕截图(matlab)   java GWT如何在重新加载页面之前确保函数已完全执行   java在Groovy中实现ObjectJSON映射的标准方法是什么?   java在ApacheTomcat中,是否可以通过连接器过滤多个访问日志文件?   java当JVM达到其Xmx限制时,它会强制垃圾收集吗?   如何在JAVA中生成包含特定数字的不同随机数列表?   rcp中透视图之间的java切换   java理解名为“分区”的Linkedlist算法中的无限循环   RestTemplate的java测微计统计信息   Android中使用自定义服务BLE的java读/写特性   java验证输入以确保负数   关于Java扫描器的io基本查询   java如何使用子字符串或其他函数将字符串拆分为单词?   java Storm群集重复元组