连续因果森林模型的构造与实践
桔妹导读:近年来,因果推断逐渐成为了机器学习中的热点话题。增益模型(Uplift Model)作为工业界因果推断与机器学习结合最成熟的算法之一,在智能营销中有着广泛的应用。目前大多数增益模型仅讨论了二元处理变量情况下的处理效应估计,然而在网约车市场中存在大量多维、连续的处理变量。针对这一困境,我们构造了连续因果森林模型,并成功地应用在了网约车交易市场策略上。
1.
前言
在网约车供需策略技术基础能力团队,我们最关注的工作之一就是量化价格对网约车供需关系的影响。这对于精细化定价补贴策略的制定和优化有着重要的意义。
在业界,我们称针对某个处理变量(Treatment),衡量其处理效应(Treatment Effect)的一类模型为增益模型(Uplift Modeling)。
与传统的监督学习模型关注于准确估计响应变量(Y)不同, 增益模型专注于估计处理变量(W)对响应变量(Y)的影响。因此这类问题通常被放在因果推断(Causal Inference)的框架下进行讨论。
目前市面上大多数流行的增益模型框架(如CausalML, pylift, grf),都很好地支持了二元处理变量(如发券或不发券,吃药或不吃药)的效应估计。但在多元/连续处理变量方面,尚未有很好的支持。
然而,在广大的应用场景中,多元或连续的处理变量更为普遍。例如,价格就是一个连续变量,存在理论上无限多的可能值。当我们希望估计各个价格点对供需关系的影响的时候,二元处理效应模型的局限性就显露了出来。
图 1 滴滴App截图
针对这种困境,我们开始思考是否可以在因果推断的框架下实现对多元或连续处理变量的效应估计。经过一段时间的开发和测试,在二元因果森林的基础上,我们扩展研发了连续因果森林,初步解决了部分场景下连续变量处理效应的估计问题。
本文主要介绍连续因果森林模型的构建原理及应用,希望对大家在处理相关问题时有所启发和帮助。
2.
模型构造
▍2.1 因果森林简介
因果森林(Causal Forest)是由Susan Athey、Stefan Wager等人开发,专门估计异质处理效应的机器学习模型,是当前增益模型领域最为流行的算法之一。目前,官方有基于C++/R语言的算法实现(https://grf-labs.github.io/grf)。
与其他增益树模型(Tree-based Uplift Model)类似,因果森林以随机森林为基础,通过对特征空间进行重复划分(Recursive Partitioning),以达到局部特征空间的数据同质/无混淆。在一定的假设下[1],我们就可以得到各个维度上异质处理效应(Heterogeneous Treatment Effect)的无偏估计。
▍2.2 二元因果森林
对于二元处理变量,我们对处理效应[2]做如下定义
其中
Y为响应变量
W为处理变量
X为协变量
θ为处理效应
我们称为条件平均处理效应(Conditional Average Treatment Effect)。这里的条件是指,给定局部特征空间下的平均处理效应。
下图简略展示了二元因果森林中某一颗决策树的生成逻辑。
图 2 二元因果森林的构造
定义节点分裂标准为
其中:
P,C: 父节点,子节点
n: 样本量
θ: 处理效应
即我们希望从协变量中,找到一个最优分裂节点,最大化子节点间处理效应差异。
在节点内,我们认为所有样本同质,因此可以应用公式(1)进行处理效应的计算。
如此重复分裂,直到满足一些预设的停止条件(节点最小样本值、处理变量不平衡度、最小信息增益等),完成一棵树的构造。
▍2.3 基于二元因果森林的多元处理效应估计
不失一般性,我们设多元处理变量W为W=0,1,...,k,其中0为参照(Control)处理值,其余处理值为对照(Treated)处理值。
基于此,我们定义多元处理效应为
即各个对照处理值相对参照处理值的处理效应。
从上述定义中我们不难发现,对于某个对照处理值,实际上我们仍然还是在计算二元处理变量(i和1)的处理效应。
从这个观察出发,我们可以定义如下简单算法:
图3 多重二元因果森林
图 4 多元处理效应估计
这样,通过上述的简单改造,我们就可以基于现有的二元处理效应模型,实现多元处理效应的估计。
优点
易于实现,无需额外开发;所有二元处理效应模型均适用;
缺点
当处理变量值较多时,会产生大量模型,增加训练和部署成本;
数据利用不充分,单个模型只用到部分(2/(k+1))数据;
不同处理效应间无关联。这在部分场景中并不合理,例如我们认为价格和供需存在单调关系;
无法对未出现在数据集中的对照变量值进行推断。
▍2.4 连续因果森林
在定价策略中,所有的模型归根结底都在拟合价格曲线。在需求侧,我们可以合理假设价格曲线具有如下特征:
单调性:价格越高,需求越低 ;
局部线性:在局部价格区间内,价格与需求呈线性关系。
图 5 价格需求曲线
树模型的一个优点在于,在节点内部我们可以自定义统计量的计算方式。
利用价格需求曲线的特性,我们对节点内的样本(W1,Y1),(W2,Y2),...进行线性回归,然后以线性回归得到的斜率代表连续处理效应。
基于这个想法,在ATE的基础上,我们定义平均偏效应(Average Partial Effect)为
我们可以证明(https://z.didi.cn/CAPE),上述公式等价于Y对W和做简单线性回归后得到的斜率系数。
通过将CAPE代替CATE作为节点统计值用作树分裂,我们就实现了通过单一模型估计多元/连续处理效应。
图 6 连续因果森林
在模型的预估/推断阶段,为了跳脱出线性假设的约束, 在估计各个对照处理效应的时候,我们退回之前的定义,仅选取对应的对照/参照变量值样本计算对应的处理效应。
因此在我们的连续因果森林模型中,整体的CAPE仅被用作分裂,不会用于效应估计。
优点:
考虑了不同处理效应间的关系
充分利用数据,不同处理变量间可以互相学习
单一模型,减少训练/部署成本
缺点:
使用中需考察线性假设的合理性
3.
评估与应用
在离线指标上,我们选择了Qini Score作为评估标准,分别比较多重二元因果森林模型和连续因果森林模型的效果。
图 7 离线评估
基于此,我们上线了基于连续因果森林的定价策略。经过多周的在线AB实验后,取得了15%+的ROI收益。
目前连续因果森林已作为智能主策略覆盖了全国大部分城市。
4.
总结与展望
基于一个新的指标(CAPE),我们构造了连续因果森林,成功地将多元/连续处理效应纳入单一模型进行估计,并取得了显著的离线和在线结果。
目前连续因果森林仍处于早期的开发阶段,存在大量的优化空间。例如:
可否使用非线性假设
如何处理无单调关系的处理变量(如不同套餐)
如何估计多维处理效应(如多个产品线价格间的相互影响)
其中的部分问题,我们在一些离线实验上已有令人期待的结果。期望在不久的将来能够与大家分享。
5.
说明
[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.
本文作者
▬
团队招聘
▬
滴滴网约车MPT团队致力于打造世界顶尖的智能交易平台,包括订单分配,司机调度,拼车,定价,补贴等方向,通过不断探索机器学习、强化学习等前沿技术,完善交易市场设计,实现资源最优化分配,力求解决正在发生的以及潜在供需失衡的状况,最大程度满足平台多样化的出行需求,持续优化乘客体验和保障司机收入,提升业务经营效率,引领出行行业变革与发展。
MPT长期招聘算法、工程(C++、Go)等职位,欢迎有兴趣的小伙伴加入,可投递简历至 diditech@didiglobal.com,邮件请邮件主题请命名为「姓名-投递岗位-投递团队」。
扫码了解更多岗位
延伸阅读
▬
内容编辑 | Hokka
联系我们 | DiDiTech@didiglobal.com
连续因果森林模型的构造与实践相关推荐
- 连续因果森林模型在网约车交易市场策略上的应用
近年来,因果推断逐渐成为了机器学习中的热点话题.增益模型(Uplift Model)作为工业界因果推断与机器学习结合最成熟的算法之一,在智能营销中有着广泛的应用.但是目前大多数增益模型仅讨论了二元处理 ...
- 在spark上构造随机森林模型过程的一点理解
这篇文章仅仅是为了帮助自己理解在分布式环境下是如何进行随机森林模型构建的,文章中记录的内容可能不太准确,仅仅是大致上的一个理解. 1.特征切分点统计 不管是连续取值型特征还是离散取值型特征,分裂树结点 ...
- 因果森林总结:基于树模型的异质因果效应估计
来源: PaperWeekly 编辑:王菁 校对:林亦霖本文约1700字,建议阅读5分钟本文中各类 forest-based methods 主要从 split 和 predict 两个角度展开,忽略 ...
- kaggle项目:基于随机森林模型的心脏病患者预测分类!
公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 新年的第一个项目实践~给大家分享一个新的kaggle案例:基于随机森林模型(RandomForest)的心脏病人预测分类 ...
- 【干货】大数据驱动的因果建模在滴滴的应用实践
今天给大家带来滴滴网约车MPT基础能力负责人.高级专家算法工程师杨晓庆所做的分享<大数据驱动的因果建模在滴滴的应用实践.pdf>,关注大数据.数据指标.数据分析等的伙伴们别错过啦!(到小程 ...
- 大数据分析案例-基于随机森林模型对北京房价进行预测
目录 1.项目背景 2.项目简介 2.1数据说明 2.2技术工具 3.算法原理 4.项目实施步骤 4.1理解数据 4.2数据预处理 4.2.1缺失值处理 4.2.2重复值处理 4.2.3异常值处理 4 ...
- 《基于模型的系统工程最佳实践》- 读书笔记(一)
总结构: 第一章至第二章:<基于模型的系统工程最佳实践>- 读书笔记(一) 第三章相关笔记:Rhapsody项目结构 第四章:<基于模型的系 ...
- UE4用Spline Component蓝图生成连续SplineMesh路径模型
Spline Component(不是SplineMesh)是UE4常用的样条曲线组件,是生成各种可视化路径.控制物体运行轨迹.生成排列组合模型等的基础. Spline可以不断增加控制点,以生成复杂的 ...
- DTI-CDF:一种基于混合特征预测药物靶点相互作用的级联深层森林模型
1. 摘要 药物靶标相互作用(DTIs)在靶向药物的发现和开发中起着至关重要的作用.DTIs的计算预测可以有效地补充湿实验室技术对DTIs的识别.然而,现有的DTI预测方法存在精度低.假阳性率 ...
最新文章
- MaxCompute常用语句汇总(更新ing)
- ASP.NET MVC+HighCharts开发统计图表
- 基于Qt的OpenGL可编程管线学习(9)- X射线
- Python-OpenCV 处理图像(二):滤镜和图像运算
- Redis应用案例 查找某个值的范围
- SAP Spartacus 中的 Commands and queries
- VMware使两台windows虚拟机能够互相ping通
- java_IO流之 NIO
- RocketMQ入门到入土(四)producer生产消息源码剖析
- python+requests对app和微信小程序进行接口测试
- mercurial使用_DBA对Mercurial的介绍–什么时候以及为什么我们应该使用版本控制
- java jshelllink_Jshell使用
- 计算机操作系统pv操作讲解,计算机操作系统PV操作例题
- myeclipse10破解找不到common文件夹的问题
- HDMI九画面视频分割器(MT-SW091)
- [转载]国内物联网平台初探(三):QQ物联智能硬件开放平台
- gff文件_gff/gtf格式
- 程序员必备5个编程自学网站,你都用到过吗?
- jy-11-AJAX--承租红+成恒
- 【神经网络】自编码聚类算法--DEC (Deep Embedded Clustering)