近年来,因果推断逐渐成为了机器学习中的热点话题。增益模型(Uplift Model)作为工业界因果推断与机器学习结合最成熟的算法之一,在智能营销中有着广泛的应用。但是目前大多数增益模型仅讨论了二元处理变量情况下的处理效应估计,然而在网约车市场中存在大量多维、连续的处理变量。针对这一困境,我们构造了连续因果森林模型,并成功地应用在了网约车交易市场策略上。
一. 前言
在网约车供需策略技术基础能力团队,我们最关注的工作之一就是量化 价格 对网约车 供需 关系的影响。这对于精细化定价补贴策略的制定和优化有着重要的意义。
在业界,我们称针对某个 处理变量 (Treatment),衡量其 处理效应 (Treatment Effect)的一类模型为 增益模型 ( Uplift Modeling )。
与传统的监督学习模型关注于准确估计 响应变量 (Y)不同, 增益模型专注于估计 处理变量 (W)对 响应变量 (Y)的影响。因此这类问题通常被放在**因果推断(Causal Inference)**的框架下进行讨论。
目前市面上大多数流行的增益模型框架(如CausalML, pylift, grf),都很好地支持了
二元处理变量
(如发券或不发券,吃药或不吃药)的效应估计。但在多元/连续处理变量方面,尚未有很好的支持。
然而,在广大的应用场景中,多元或连续的处理变量更为普遍。例如,价格就是一个连续变量,存在理论上无限多的可能值。当我们希望估计各个价格点对供需关系的影响的时候,二元处理效应模型的局限性就显露了出来。
图 1 滴滴App截图
针对这种困境,我们开始思考是否可以在因果推断的框架下实现对多元或连续处理变量的效应估计。经过一段时间的开发和测试,在二元因果森林的基础上,我们扩展研发了 连续因果森林 ,初步解决了部分场景下连续变量处理效应的估计问题。
本文主要介绍 连续因果森林 模型的构建原理及应用,希望对大家在处理相关问题时有所启发和帮助。
二. 模型构造
****** ▍**************2.1 因果森林简介
因果森林 (Causal Forest)是由Susan Athey、Stefan Wager等人开发,专门估计异质处理效应的机器学习模型,是当前增益模型领域最为流行的算法之一。目前,官方有基于C++/R语言的算法实现( grf-labs.github.io/grf)。
与其他增益树模型(Tree-based Uplift Model)类似, 因果森林 以 随机森林 为基础,通过对特征空间进行重复划分(Recursive Partitioning),以达到局部特征空间的数据同质/无混淆。在一定的假设下[1],我们就可以得到各个维度上异质处理效应( H eterogeneous T reatment E ffect)的无偏估计。
** ▍**************2.2 二元因果森林 对于二元处理变量,我们对 处理效应 [2]做如下定义
Y为响应变量
W为处理变量
X为协变量
θ为处理效应
我们称为条件平均处理效应( C onditional A verage T reatment E ffect)。这里的条件是指,给定局部特征空间下的平均处理效应。
下图简略展示了二元因果森林中某一颗决策树的生成逻辑。
图 2 二元因果森林的构造
定义节点分裂标准为
P,C: 父节点,子节点
n: 样本量
θ: 处理效应
即我们希望从协变量中,找到一个最优分裂节点,最大化子节点间
处理效应
差异。
在节点内,我们认为所有样本同质,因此可以应用公式(1)进行处理效应的计算。如此重复分裂,直到满足一些预设的停止条件(节点最小样本值、处理变量不平衡度、最小信息增益等),完成一棵树的构造。
▍**************2.3
基于二元因果森林的多元处理效应估计
不失一般性,我们设多元处理变量W为W=0,1,...,k,其中0为
参照
(Control)处理值,其余处理值为
对照**(Treated)处理值。
基于此,我们定义多元处理效应为
即各个
对照
处理值相对
参照
处理值的处理效应。
从上述定义中我们不难发现,对于某个
对照
处理值,实际上我们仍然还是在计算二元处理变量(i和1)的处理效应。
从这个观察出发,我们可以定义如下简单算法:
图3 多重二元因果森林
图 4 多元处理效应估计
这样,通过上述的简单改造,我们就可以基于现有的二元处理效应模型,实现多元处理效应的估计。
****** ▍**************2.4 连续因果森林 在定价策略中,所有的模型归根结底都在拟合价格曲线。在需求侧,我们可以合理假设价格曲线具有如下特征:
图 5 价格需求曲线
树模型的一个优点在于,在节点内部我们可以自定义统计量的计算方式。
利用价格需求曲线的特性,我们对节点内的样本(W1,Y1),(W2,Y2),...进行线性回归,然后以线性回归得到的斜率代表 连续处理效应 。
基于这个想法,在ATE的基础上,我们定义平均偏效应( A verage P artial E ffect)为
我们可以证明( z.didi.cn/CAPE),上述公式等…
通过将CAPE代替CATE作为节点统计值用作树分裂,我们就实现了通过单一模型估计多元/连续处理效应。
图 6 连续因果森林
在模型的预估/推断阶段,为了跳脱出线性假设的约束, 在估计各个 对照 处理效应的时候,我们退回之前的定义,仅选取对应的 对照 / 参照 变量值样本计算对应的处理效应。
因此在我们的 连续因果森林 模型中,整体的CAPE仅被用作分裂,不会用于效应估计。
2.充分利用数据,不同处理变量间可以互相学习
3.单一模型,减少训练/部署成本
使用中需考察线性假设的合理性
三. 评估与应用
在离线指标上,我们选择了 Qini Score 作为评估标准,分别比较 多重****二元因果森林 模型和 连续因果森林 模型的效果。
图 7 离线评估
基于此,我们上线了基于
连续因果森林
的定价策略。经过多周的在线AB实验后,取得了15%+的ROI收益。
目前
连续因果森林
已作为智能主策略覆盖了全国大部分城市。
四. 总结与展望
基于一个新的指标(CAPE),我们构造了 连续因果森林 ,成功地将多元/连续处理效应纳入单一模型进行估计,并取得了显著的离线和在线结果。
目前 连续因果森林 仍处于早期的开发阶段,存在大量的优化空间。例如:
其中的部分问题,我们在一些离线实验上已有令人期待的结果。期望在不久的将来能够与大家分享。
五. 说明
[1] 常见的假设为: Unconfoundedness, Exchangeability, Positivity[2] 为了方便说明,我们省略了local centering的处理。
Reference:
[1] Susan Athey and Stefan Wager. Estimating Treatment Effects with Causal Forests: An Application. Observational Studies, 5, 2019.
[2] Susan Athey, Julie Tibshirani and Stefan Wager. Generalized Random Forests. Annals of Statistics, 47(2), 2019.
滴滴Logi
滴滴Logi日志服务套件在滴滴内部经过7年多的沉淀打磨,针对日志采集、日志存储、日志计算、日志检索、日志分析各个环节,在组件能力上PAAS化建设、在引擎稳定性与扩展性上进行了针对性的优化。
目前该套件已经开源了滴滴Logi-KafkaManager,后期还会陆续开源Logi-Agent、Logi-LogX、Logi-ElasticSearchManager各PAAS套件。
1、滴滴Logi-KafkaManager Github: z.didi.cn/4newP
2、快速体验地址: http://117.51.150.133:8080/kafka 账号密码 admin/admin
3、日常FAQ: github.com/didi/Logi-K…
4、手册: github.com/didi/Logi-K…
5、滴滴Logi-KafkaManager云平台建设总结:
6、系列视频教程: mp.weixin.qq.com/s/9X7gH0tpt…
滴滴夜莺是一套 分布式高可用 的运维监控系统,最大的特点是混合云支持,既可以支持传统物理机虚拟机的场景,也可以支持K8S容器的场景。同时,滴滴夜莺也不只是监控,还有一部分CMDB的能力、自动化运维的能力,很多公司都基于夜莺开发自己公司的运维平台。
Github: z.didi.cn/4WurZ
官方文档: n9e.didiyun.com
提问必读: gocn.vip/topics/1081…
语音答疑: m.ximalaya.com/keji/450958…
视频教程: m.bilibili.com/space/44253…
二次开发: xie.infoq.cn/article/30d…
如果大家在使用滴滴Logi-KafkaManager和夜莺的过程中出现问题,或者有疑问需要与开发者交流的,都可以扫描下方二维码进入滴滴Logi及夜莺的开源用户群,在群中提问。
群内有滴滴Logi-KafkaManager和夜莺项目负责人:滴滴高级专家工程师—张亮、秦晓辉等技术大咖,在线为大家解答问题 ,欢迎大家长按二维码加小助手进群。(需备注Kafka或夜莺)