因果推断在有限资源决策中的应用
导读: 本文将分享因果推断在有限资源决策中的应用。
主要内容包括:
-
什么是因果推断
-
有限资源决策
-
因果推断技术如何助力智能决策
-
Future Work & Discussions
分享嘉宾|罗文娟博士 快手 增长算法工程师
编辑整理|林文辉 西安工业大学
出品社区|DataFun
01/什么是因果推断
1. 吃冰淇淋导致溺水的谬论
首先,介绍一下什么是因果推断,在互联网算法领域,尤其是用户增长算法圈,我们提到的因果关系到底是指什么。
先举一个例子,某个文章的统计数据表明,随着冰淇淋销量的增加,溺水的人数在急剧增加。溺水和冰淇淋之间的强相关性,受到混杂变量------天气热的影响。对两个没有因果关系的变量进行相关性统计,有时候也能得出很强的相关性系数。相关不等于因果,由相关性得到的信息进行决策有错误归因的危险。若想做出一个相对理性的决策,需确保我们从数据中得到的结论是可信的,并且没有其它未观测到的混杂变量。
2. 相关性建模和因果推断的区别
对于一个经典的深度学习网络,相关性建模需要回答的问题是,给定输入 X,输出 Y 会如何。一个基于图的结构化因果模型需要回答的问题是,如果改变输入的某一维 T,Y 会如何变化,它更关注 ΔT 带来的 ΔY 是什么。
灵魂拷问:对于一个二分类模型,AUC 高的模型和因果效应区分度高的模型等价吗?
答案是不等价。对于 Y 的学习误差小,并不等价于对于 ΔY 的学习误差小,反之亦然。
一般而言,我们所要预估的因果效应,也叫 treatment effect,就是指我们改变模型中某个控制变量 T ,能够带来 outcome 变量 Y 多大的变化,这个控制变量的变化到 outcome 的变化,ΔT 到 ΔY 的关系,是我们需要去研究的。
--
02/有限资源决策
1. 有限资源决策场景
(1)经典背包问题
给定一组物品,每种物品都有自己的重量和价格,在限定的背包总承重重量内,我们如何选择,才能使物品的总价格最高?这个问题里面,我们的资源总量是背包的总承重容量,我们需要决策的是,每个物品选或者不选。这个问题在解空间不大,或者约束条件不很复杂的时候,都能找到不错的解法。但是如果物品空间变得极大,几十亿或者几百亿,约束条件变得更复杂,有容积的约束,还有成本的约束,这种情况下我们应如何求解?
(2)网约车补贴分配
在网约车交易市场中,不同的用户或城市对补贴的敏感度不同,在给定总预算的前提下,如何分配补贴,使得整个交易市场的总 GMV 最大?在这个问题里,约束就是总预算,我们需要决策的变量就是某个城市分配还是不分配补贴,如果分配的话,能够分配的补贴是多少?
(3)不同日期的机票定价
机票价格通常在提前一段时间预定的时候比较便宜,在越接近出行日期的时候越贵,在给定飞机总座位数的情况下,如何给不同预定日期的机票定价,使得整个航班的运营收入最大化?在这个问题里,资源约束是机票的座位数,需要决策的变量是在不同日期的机票售价。
2. 有限资源决策中的数学抽象
将目标拆解成一个个容易预估的子模块。好的目标拆解让建模结构更清晰,同时提升系统容错率。目标拆解的好坏取决于在当前业务中积累沉淀的业务知识。对约束也需做相应拆解,好的约束拆解能够提高系统稳健性。拆解的总思路是让模型和模型之间的预测任务正交,也就是说一个模型的错误会尽可能少的传递给下一个模型。对做完拆解的目标或约束,我们都要去预估如果改变决策变量 x,那么目标和约束会有怎样的变化。这里就需要因果建模去预测。
3. 有限资源决策中的技术抽象
为了解决有限资源决策中的数学问题,要搭建什么样的系统,建设什么样的能力呢?主要分为两大部分,预测服务和运筹优化。
预测服务 包括目标预测和成本预测。成本预测又分为固定成本和浮动成本,固定成本不会随决策变量的选择而变化,例如航班燃油费和仓库租金等;浮动成本会随着决策变量的选择而变化,例如城市的资源分配中,不同城市选择不同的补贴,会影响城市的投入成本。遍历所有的决策变量,完成对应的目标和成本的预测后,会生成候选集,在对候选集进行合理的过滤、剪枝、聚类后,再采用运筹优化的办法,在满足约束的条件下,对目标进行最优化,最后产出让目标最优的解决方案。
--
03/因果推断技术如何助力智能决策
1. 城市资源分配
以城市的资源分配为例,下图中左图是经典的价格需求曲线,经典的定价问题需准确地预估价格需求曲线,并且基于价格需求曲线做出让总收益最大化的定价。中间这幅图,是一个经典的投入回报曲线,总回报会随着投入的增加而增加,即我们熟悉的单调性。但是这种回报的增加速度,会随着投入的增加而逐渐放缓,也就是我们熟悉的边际效应递减。
再举一个城市资源分配的例子,如下图所示。可以发现,我们对投资回报率高的城市 B,分配了较少的预算,对于城市 C 则投入了大量的预算。在理想的情况下,应是拉齐城市 B 和城市 C 的边际回报,即再增加一块钱的预算投入,城市 B 和城市 C 的回报是一样的。
所以,资源分配的本质应该是拉齐不同城市的边际回报的 ROI,为了达到这个目的,其实我们需要给投入回报高的城市多分预算,给投入回报低的城市少分预算,所以一次比较合理的分配应该是如图中五角星所示。
上面的最优分配结果有一个比较强的前提假设,即我们已经准确地知道了所有城市的投入回报曲线,然后在约束总预算的情况下进行决策。但在实际应用中,我们怎样才能准确地预估投入回报曲线呢?投入回报曲线其实是要预估不同的投入情况下的回报,这是一个典型的因果推断问题。
2. 因果推断中随机实验的设计
设计随机实验的准则就是因果效应可识别的准则,主要有三点:
**(1)可交换性。**被测试的人群满足可交换性,使人群和人群之间是同质的。
**(2)非负性。**每个人被分配到某个 treatment 的概率都是大于 0 的。
**(3)SUTVA(Stable Unit Treatment Value Assumption)。**指的是我们对A用户进行随机实验并观测结果,不会影响我们对 B 用户的观测和随机实验。
3. 业界常用的因果推断模型
接下来介绍一些业界常用的因果推断的模型,主要有四大类:
① 树模型;
② Meta-Learners;
③ 表征学习;
④ DML。
各个模型的优缺点如表格中所示。目前因果森林和表征学习在业界应用较为广泛。
4. 因果推断建模算法原理
简单介绍一下各个建模算法的原理。
(1)因果森林
因果森林借鉴了随机森林的思想,由多棵因果树构成,每一棵因果树的构造按照最大化不同节点之间的因果效应的异质性进行节点分裂。
(2)Meta-Learners
主要介绍四大类:T-learner、S-learner、X-learner 和 R-learner。
T-learner是基于机器学习方法来实现的,T-learner 把训练数据分成两部分,control 组样本训练一个模型 M0,treat 组样本训练一个模型 M1,因果效应的计算用 M1 的预测值减去 M0 的预测值。T-learner 的优点就是因果效应的公式比较清晰,缺点是因果效应的预估叠加了两个模型的预测误差。
S-learner是直接建模一个模型,然后 treatment effect 就是模型等于 1 时 treatment 的预测值减去 treatment 等于 0 时的预测值。S-learner 的缺点是当建模的特征维度很高,或者建模的特征中有和 treatment 强相关的特征时,模型学不出来 treatment effect。
X-learner 的学习流程比较复杂,一共包括 5 个模型。X-learner 的优点也是理论比较清晰,然后问题和 T-learner 有点相似,就是它的预估其实是叠加了 5 个模型的误差的。
最后介绍 R-learner,R-learner 是有一个比较强的前提假设,就是回归的 treatment 误差和 treatment 以及回归特征 X 之间是无关的。R-learner 需要学习三个模型。
(3)表征学习
许多用深度学习做因果推断的想法和之前介绍的 Meta-learners 比较相似,只不过是把 Meta-learners 中每一个学习的模块用深度学习的网络来实现。以下这幅图片,是一篇 paper 里面的,试图从更本质的角度来区分统计模型和因果模型。
(4)DML
DML 的提出同样是基于一个比较强的假设,即在这个公式里面这个 treatment D 对 outcome Y 的因果效应是由这个 θ0 刻画的,并且回归 Y 的其它模型或者变量都与 treatment D 无关。这样 θ0 和它的预估值 θ 之间它的残差就可以写成最下面这个公式的形式,然后我们对 θ0 的预估也就是因果效应的预估和它真实的因果效应 θ0 之间的误差尽可能小。
5. 评估因果推断模型常用指标
业内用的比较多的指标有以下三个:
(1)QiniScore
QiniScore 是一个排序类的指标,计算公式按照因果推断模型预估的 ITE,从大到小排序,然后在前t个排序的样本中 treatment 组样本的总 outcome 减去 control 组样本的总 outcome。为避免 treatment 组的样本和控制组的样本总的不均衡,对后者做了一个样本数量占比的加权。即这条曲线通常会和一条随机排序的线做比较,曲线在和随机排序的线之间的面积就是 QiniScore。通常对于有正 ITE 的 treatment,这个值越大,表明模型对 ITE 的区分度越好。
(2)AUUC
AUUC 的计算原理和 QiniScore 非常相似,只不过它排序时计算的是ATE。由于 AUUC 的计算最后要除以总的 ATE,可以把它看成是一个归一化版本的 QiniScore。
(3)AUCC
AUCC 的全称是 Area Under Cost Curve,它也是按照模型预估的因果效应进行排序之后,产出的成本和回报之间的一个曲线。如图中所示,如果 QiniScore 和 AUUC 度量的是曲线和随机线之间的面积 A,那么 AUCC 其实算的是 (A+B)/2B 这样一个比值,也就是说 QiniScore 和 AUUC 度量的是比随机挑人要好多少,AUCC 度量的是比随机挑要好多少个百分比。
6. 因果推断中的特征选择
接下来介绍因果推断中的特征选择,有以下几点需要注意:
① 多做减法,少做加法,非必要不添加特征;
② Explore 实验时,尽量避免引入工具变量;
③ 工具变量,调整变量,混淆变量合理分解;
④ 不要引入对撞变量;
⑤ 不要 post-treatment 变量。
这是浙大况琨老师论文里的一张图,在建模过程中把特征的混淆变量和调整变量作了一些分解,这样的分解也会让 ATE 的预估的方差变小,感兴趣的同学可以去了解下具体的原理和证明。
--
04/Future Work & Discussions
最后和大家探讨下我们在工业界做因果建模时碰到的一些还没有解决的特别好的问题。
(1)因为法律法规等不可抗力的原因无法做随机实验,怎么进行因果推断?
在法律允许的情况下,我们可在某个人群的分层中做随机实验,比如说虽然法律不允许人和人之间的差异化定价,但是不同的区域、不同的城市,因为经济发展水平的不同,进行差异化定价是否可以?当然如果还是无法做随机实验,那么我们怎么基于观测到的有偏数据进行因果推断?基于观测数据做因果推断需要做非常多消偏的工作,并且需要在目标函数里面加入非常多的正则项。但是最终因果效应预估的准确性其实还是需要随机的实验数据来评估的。
(2)treatment 维度过高,treatment 空间过大,怎么进行因果推断?
这个问题我个人的经验是可以优先对 treatment 空间进行剪枝,有一些不需要探索,或者是收益极低的 treatment 可以不进行随机实验。其次,如果高维的 treatment 之间的各个维度是可以正交的,那么可以分维度进行正交的随机实验,然后做一些正交的优化策略,也就是分维度的做因果效应的优化。当然这个方案肯定不是一个最理想的解决方案,但是它可能是在高维空间里面一条可行的解决方案。
(3)随机实验之间不满足 SUTVA 假设时,怎么进行因果推断?
这个效应其实在做网络效应比较大的 A/B 实验时,我们碰到过。实验的人群之间存在网络效应。这个问题的解法其实就是不再做人群随机分流的随机实验了,而是做时间片轮转的随机实验。
(4)当观测到的 UPLIFT 信号极弱,模型很难学出来 ITE,我们怎么做优化?
这个问题其实目前没有特别好的解法,我们的做法更像是一些 trick,当因果推断模型学不出来一个比较靠谱的 ITE 时,我们会尝试观测数据因果建模那一套来调整模型,这里确实是需要特别强而且特别靠谱的业务先验知识,把这些业务先验知识变成损失函数,让模型产出一个虽然有偏但是可用的预估。
以上就是今天的分享内容,谢谢大家!
▌2023数据智能创新与实践大会
- 4大体系,专业解构数据智能
- 16个主题论坛,覆盖当下热点与趋势
- 40+演讲,兼具创新与最佳实践
- 1000+专业观众,内行人的技术盛会
第四届DataFunCon数据智能创新与实践大会将于⏰ 7月21-22日在北京召开,会议主题为新基建·新征程,聚焦数据智能四大体系:数据架构 、数据效能 、算法创新 、智能应用 。在这里,你将领略到数据智能技术实践最前沿的景观。
欢迎大家点击下方链接获取大会门票~
DataFunCon2023(北京站):数据智能创新与实践大会