这篇是treatment effect估计相关的论文系列第一篇所以会啰嗦一点多给出点背景。

论文

Athey, S., and Imbens, G. 2016. Recursive partitioning for heterogeneous causal effects. Proceedings of the National Academy of
Sciences.

背景

论文给出基于决策树估计实验对不同用户的不同影响。并提出Honest,variance Penalty算法旨在改进CART在tree growth过程中的过拟合问题。

我们举个例子:科研人员想衡量一种新的降血压药对病人的效果,发现服药的患者有些血压降低但有些血压升高。于是问题可以抽象成我们希望预测降压药会对哪些病人有效?相似的问题经常出现在经济,政治决策,医疗研究以及当下的互联网AB测试中。

Treatment effect之所以比通常的预测问题要更难解决,因为groud-truth在现实中是无法直接观测到的,一个人在同一时刻要么吃药要不么吃药,所以你永远无法知道吃药的人要是没吃药血压会不会也降低,或者没吃药的人要是吃了药血压会不会降低。

既然个体的treatment effect无法估计,只能退而求其次去估计群体的treatment effect- ATE (Average treatment effect),既全部用户中(服药效果- 未服药效果)。 但是当出现个体效果差异时ATE无法反应局部效果(E.g.样本稀释)。这时我们需要估计相似群体的treatment effect-CATE(Conditional average treatment effect)

用数学抽象一下上述问题:
\[
\begin{align}
& {(X_i, Y_i,T_i): X_i \in X} \\
& \text{where X是特征,Y是Response,T是AB实验分组}\\
&T_i \in {0,1} \quad \\
&Y_i = \begin{cases}
Y(1) & \quad T_i = 0\\
Y(0) & \quad T_i = 1\\
\end{cases}\\
&CATE: \tau(x) = E(Y_i(1)-Y_i(0)|X=x)\\
\end{align}
\]

模型

这里寻找相似用户的方式是通过决策树。树相较线性模型的优点毫无疑问是它对特征类型的兼容,尤其考虑到实际情况中会存在大量离散特征如性别,地域等等。

那究竟怎样grow tree来找到局部用户群, 取决于cost function的定义。一般决策/回归树是对Y的拟合例如RMSE,或者cross-entropy等等。这里作者选择最大化\(Y(1)-Y(0)\)作为cost Function, 既我们通过树划分出的局部人群可以实现局部实验效果最大化(正向或负向)。 cost function 如下:
\[
\begin{align}
&S_l = {(X_i, Y_i,T_i): X_i \in X_l} \quad \text{叶节点-局部样本}\\
&\hat{\mu_t}(S_l) = \frac{1}{N_{l,t}}\sum_{T_i=t, i \in S_l}Y_i \quad \text{AB组Y的均值} \\
&\hat{\tau}(S_l) = \hat{\mu_1}(S_l) -\hat{\mu_0}(S_l) \quad \text{叶节点CATE}\\
&F(S_l) = N_l * \hat{\tau}^2(S_l)\\
& \text{cost fucntion}: max \sum_{i=1}^L F(S_i)\\
\end{align}
\]

熟悉决策树的朋友也就知道后续split criterion就是去寻找最大化CATE增长的特征和阈值。对决策树不太睡的朋友可以来我之前的博客看看Tree-Decision Tree with Sklearn source code

模型优化

决策树最大的问题就是过拟合,因为每一次split都一定可以带来Information Gain。这里就涉及到ML里最经典的Bias-variance trade off。树划分的节点越小,对样本的估计偏差(Bias)越小但方差(Variance)越大。

传统决策树一般通过几个方法来解决过拟合的问题:

  • cross-validation来确定树深度
  • min_leaf, min_split_gain 用叶节点的最小样本量等参数来停止growth

作者在文章中给出另外两种解决过拟合的方法:

  • Honest approach
  • Variance Penalty

Honest approach是把训练样本分成train和est两部分,用train来训练模型用est来给出每个叶节点的估计
Variance Penaly则是直接把叶节点的方差加到cost function中,最终的cost function如下:

\[
F(S_l) = N_l * \hat{\tau}^2(S_l) - N_l(\frac{Var(S_{l,1})}{p} + \frac{Var(S_{l,0})}{1-p}))
\]

文章大概就是这些信息,这个模型当前还没找到很好的工程实现,在Uber的Casualml项目中是正在开发中的Enhancement

其他相关模型详见AB实验的高端玩法系列1-实用HTE论文GitHub收藏

欢迎留言~

Paper慢慢读 - AB实验人群定向 Recursive Partitioning for Heterogeneous Casual Effects的更多相关文章

  1. Paper慢慢读 - AB实验人群定向 Learning Triggers for Heterogeneous Treatment Effects

    这篇论文是在 Recursive Partitioning for Heterogeneous Casual Effects 的基础上加入了两个新元素: Trigger:对不同群体的treatment ...

  2. Paper慢慢读 - AB实验人群定向 Double Machine Learning

    Hetergeneous Treatment Effect旨在量化实验对不同人群的差异影响,进而通过人群定向/数值策略的方式进行差异化实验,或者对实验进行调整.Double Machine Learn ...

  3. AB实验人群定向HTE模型5 - Meta Learner

    Meta Learner和之前介绍的Casual Tree直接估计模型不同,属于间接估计模型的一种.它并不直接对treatment effect进行建模,而是通过对response effect(ta ...

  4. AB实验的高端玩法系列4- 实验渗透低?用户未被触达?CACE/LATE

    CACE全称Compiler Average Casual Effect或者Local Average Treatment Effect.在观测数据中的应用需要和Instrument Variable ...

  5. AB实验的高端玩法系列2 - 更敏感的AB实验, CUPED!

    背景 AB实验可谓是互联网公司进行产品迭代增加用户粘性的大杀器.但人们对AB实验的应用往往只停留在开实验算P值,然后let it go...let it go ... 让我们把AB实验的结果简单的拆解 ...

  6. AB实验的高端玩法系列3 - AB组不随机?观测试验?Propensity Score

    背景 都说随机是AB实验的核心,为什么随机这么重要呢?有人说因为随机所以AB组整体不存在差异,这样才能准确估计实验效果(ATE) \[ ATE = E(Y_t(1) - Y_c(0)) \] 那究竟随 ...

  7. 滴滴数据驱动利器:AB实验之分组提效

    桔妹导读:在各大互联网公司都提倡数据驱动的今天,AB实验是我们进行决策分析的一个重要利器.一次实验过程会包含多个环节,今天主要给大家分享滴滴实验平台在分组环节推出的一种提升分组均匀性的新方法.本文首先 ...

  8. 为什么在数据驱动的路上,AB 实验值得信赖?

    在线AB实验成为当今互联网公司中必不可少的数据驱动的工具,很多公司把自己的应用来做一次AB实验作为数据驱动的试金石. 文 | 松宝 来自 字节跳动数据平台团队增长平台 在线AB实验成为当今互联网公司中 ...

  9. 关于MySQL幻读的实验

    该实验基于 CentOS 7 + MySQL 5.7 进行 打开两个窗口连接到MySQL 第一个连接的事务我们命名为  T1 第二个连接的事务我们命名为 T2 T2 发生在 T1 的 O1 操作结束以 ...

随机推荐

  1. promise和axios

    1.接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责解释和执行JavaScript代码的 ...

  2. badboy脚本录制工具的安装

    一.获取软件包 百度搜索badboy,或者直接访问官网:https://badboy.en.softonic.com/ 点击Download,下载安装包 或者从我的网盘提取: 链接:https://p ...

  3. WPF 后台模拟界面触摸点击

    win32Api提供一种方法,模拟用户触摸点击 InjectTouchInput function InitializeTouchInjection InjectTouchInput 在模拟添加触摸输 ...

  4. webpack css模块化和ant-design按需加载冲突

    其实具体出现了什么问题,我也记得不清楚了,今天突然回想起来必须记录一下,一个思想就是用exclude将node_module目录下的文件排除,网上有很多相关例子,但不知是不是因为时间久远,都不生效,无 ...

  5. urllib模块使用笔记

    文中所有python代码均使用的是python2.7实现,与python3并不兼容. UrlLib模块 urllib模块是适用于一个简单的网络数据获取和处理(不能处理有关验证和cookie等功能),官 ...

  6. 统计学习方法与Python实现(三)——朴素贝叶斯法

    统计学习方法与Python实现(三)——朴素贝叶斯法 iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1.定义 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设 ...

  7. 【2期】JVM必知必会

    JVM之内存结构图文详解 Java8 JVM内存结构变了,永久代到元空间 Java GC垃圾回收机制 不要再问我“Java 垃圾收集器”了 Java虚拟机类加载机制 Java虚拟机类加载器及双亲委派机 ...

  8. Java之Collection接口(单列集合根接口)

    集合概述 集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据 集合和数组既然都是容器,它们有啥区别呢? 区别1: 数组的长度是固定的. 集合的长度是可变的. 区别2:  数组 ...

  9. ubuntu vscode 写一个C++程序

    博客转载:https://blog.csdn.net/weixin_43374723/article/details/84064644 Visual studio code是微软发布的一个运行于 Ma ...

  10. 1、web爬虫,requests请求

    requests请求,就是用python的requests模块模拟浏览器请求,返回html源码 模拟浏览器请求有两种,一种是不需要用户登录或者验证的请求,一种是需要用户登录或者验证的请求 一.不需要用 ...