机器之心专栏
机器之心编辑部
图灵奖得主 Judea Pearl 曾表示,现有的机器学习模型不过是对数据的精确曲线拟合,只是在上⼀代的基础上提升了性能,在基本的思想方面没有任何进步。
根据福布斯的统计数据,全球范围只有 13% 左右的机器学习项目能够真正上线运行,项目失败的一个重要原因是模型的泛化能力不足,在真实数据上的表现和完全达不到训练数据上的效果。
随着机器学习建模越来越多的应用,企业对人工智能的要求也在进一步提高。近几年提及的「数智化」核心是智能决策,以数据驱动的方式实现自动化决策来提高整体运营效率。用户的需求的重心从预测性分析向指导性分析升级转移,预测性分析是告诉企业未来可能会发生什么,指导性分析也叫处方性分析,是告诉企业我们如果想要实现一个目标需要如何做,这是典型的智能决策问题。
机器学习主要用在预测性分析上,基本上没有能力解决指导性分析这样的决策问题,因此,因果学习正被学界和业界逐渐重视起来,其可以补充机器学习的一些短板,也满足了智能决策这类问题的需求。因果推断的重要性逐渐显示,被认为是人工智能领域的一次范式革命。
7 月 12 日,九章云极 DataCanvas 发布了 YLearn 因果学习开源项目,是全球首款一站式处理因果学习完整流程的开源算法工具包。
一个典型的完整因果推断流程主要由三个部分组成。
YLearn 因果学习开源项目实现了最近文献中多个因果推断相关算法,并且致力于在机器学习的帮助下支持因果推断流程中从因果发现到因果效应估计等各方各面的相关内容,尤其是当有很多观测得到的数据时,这一目的会更有前景。
YLearn 因果学习开源项目(以下简称 YLearn),是业界首款一站式处理因果学习完整流程的开源算法工具包,率先同时解决了因果学习中「因果发现、因果量识别、因果效应估计、反事实推断和策略学习」五大关键问题,具有一站式、新而全、用途广等特点,将「决策者」使用门槛降到最低,助力政府和企业自动化「决策」能力的有效提升。
GitHub 开源地址:https://github.com/DataCanvasIO/YLearn
YLearn 的应用目前主要集中在两个方向:
用于弥补机器学习理论上的缺陷。在机器学习模型中加入因果机制,利用因果关系的稳定性和可解释性,优化模型、提升效率;
帮助实现用户需求从预测到决策的迁移,例如使用基于因果推断的推荐算法帮助企业进行客户增长和智能营销等。
它具有一站式、新而全、用途广等特点:
设计思路
YLearn 因果学习开源项目组成
YLearn 有 5 个主要的因果推断相关概念,包括:
这些不同的部分通过组合,可以完成一个完整的因果学习相关流程,为了方便使用,YLearn 也将它们一起封装在 Why 这个统一的 API 接口中。
YLearn 中的因果推断流程
从用户给定的训练数据开始:
使用示例
1. 表示因果图
在 YLearn 中,给定一个变量集合,与之相关的因果关系需要一个 python dict 去表示变量中的因果关系,在这个 dict 中,每一个 key 都是它相应 value (通常是一个 list)中的每一个元素的 children。我们举一个最简单的例子,给定因果结构 X <- W -> Y ,我们首先定一个一个 python dict 表示相关因果结构,这个 dict 会被当作参数传入 CausalGraph 中:
causation = {'X': ['W'], 'W':[], 'Y':['W']}
cg = CausalGraph(causation=causation)
cg 就是我们的表示了因果关系 X <- W -> Y 的因果图。同时需要注意的是,如果存在 不可观测的混淆因子(unobserved confounder),那么除了前述的 dict 外,我们需要一个额外的 python list 去记录这些不可观测的因果结构,比如下面的因果图存在不可观测的混淆因子(绿色节点):
它会首先被转化为一个有潜在混淆曲线(latent confounding arcs,下图中有两个箭头的黑色曲线)的因果图:
接着为了表示这张图,我们需要
(1) 定义一个 python dict 表示图中可观测的部分。
(2) 定义一个 list 记录不可观测的潜在混淆曲线,其中 list 中的每一个元素包括一条不可观测潜在混淆曲线的两个端点:
from ylearn.causal_model.graph import CausalGraph
causation_unob = {
'X': ['Z2'],
'Z1': ['X', 'Z2'],
'Y': ['Z1', 'Z3'],
'Z3': ['Z2'],
'Z2': [],
}
arcs = [('X', 'Z2'), ('X', 'Z3'), ('X', 'Y'), ('Z2', 'Y')]
cg_unob = CausalGraph(causation=causation_unob, latent_confounding_arcs=arcs)
2. 因果效应识别
因果效应识别对于因果效应(包括因果变量)估计是至关重要的,这一过程可以通过 YLearn 很轻松地实现。例如,假设我们希望识别上面的因果图 cg 中的因果变量 P(Y|do(X=x)),那么我们只需要定义一个 CausalModel 然后调用它的 identify() 方法即可:
cm = CausalModel(causal_graph=cg)
cm.identify(treatment={'X'}, outcome={'Y'}, identify_method=('backdoor', 'simple'))
在上面的例子中我们使用了 后门调整,YLearn 也支持包括前门调整,工具变量识别,一般因果效应识别[1](如果任意因果量可以被识别,返回识别后的结果,如果不可识别,则返回不可识别)等各类识别算法。
3. 工具变量
工具变量是一种因果推断中很重要的手段,利用 YLearn 去寻找工具变量十分方便直接,例如,我们有如下的因果图:
那么我们可以按使用 CausalModel 的常用步骤来识别工具变脸:(1)定义 dict 和 list 去表示因果关系;(2)定义 CausalGraph 的 instance 建立 YLearn 中的因果图;(3)以上一步定义的 CausalGraph 作为参数,定义 CausalModel 的 instance;(4)调用 CausalModel 的 get_iv() 寻找工具变量:
causation = {
'p': [],
't': ['p', 'l'],
'l': [],
'g': ['t', 'l']
}
arc = [('t', 'g')]
cg = CausalGraph(causation=causation, latent_confounding_arcs=arc)
cm = CausalModel(causal_graph=cg)
cm.get_iv('t', 'g')
4. 因果效应估计
使用 YLearn 进行因果效应估计十分方便直接(与通常的机器学习模型使用方式十分类似,因为 YLearn 主要着眼于机器学习与因果推断的交叉),它是一个包括 3 个步骤的流程:
用户可以查看文档中的相关页面查阅各类估计模型的细节。
5. 使用统一接口 API: Why
为了能以一种统一且方便的方式使用 YLearn,YLearn 提供了一个接口 Why,它几乎封装了 YLearn 中的所有内容,包括因果效应识别和评估训练得到的估计模型等。在使用 Why 的过程中,用户可以先创建一个 Why 的实例,然后调用 Why 的 fit() 方法训练这个实例,之后其他的各类方法(如 causal_effect(), score(), whatif())就可以使用了。下面的代码是一个简单的使用样例:
from sklearn.datasets import fetch_california_housing
from ylearn import Why
housing = fetch_california_housing(as_frame=True)
data = housing.frame
outcome = housing.target_names[0]
data[outcome] = housing.target
why = Why()
why.fit(data, outcome, treatment=['AveBedrms', 'AveRooms'])
print(why.causal_effect())
应用场景
从普遍意义上讲,只要是需要决策支持的这类任务都可以使用 YLearn 来完成,弹性定价、客户挽留、产品推荐、广告等等,前提条件和机器学习一样就是要准备好符合要求的数据就可以。
因果学习其中有一个重要的应用就是 Uplift 建模,直接字面理解就是提升建模,提升的是什么可以认为提升 ROI(投入产出比),非常适合用在精准营销上面。提升建模的核心是把目标用户分到 4 个象限里。
举例
在向一些用户推荐去购买一个产品,比如说一个理财或者是线上的订阅服务,那么现实中用户会有 4 类:
对 1、2 类用户,铁粉、黑粉我们都不需要干预他,因为这个投入成本的收益几乎是 0,可以节省营销成本,第 4 类用户更是坚决不要去触达他,避免产生副作用。我们重点需要触达的就是第 3 类用户,促进购买行为。那么机器学习模型是没办法完成这个任务,我们需要通过因果学习里面的异质化因果效应评估也就是 CATE 来完成,而且还可以更进一步,路转粉的用户用哪种手段收益更高,优惠卷、打折、还是什么都不用给打个电话就可以了,这个也是可以学习出来,不同的用户可以有不同的策略,最后我们可以综合性的提高总体投入产出比了。这是一个很典型的 YLearn 的应用场景。
未来发展
下一步的计划主要是对 YLearn 进行不断迭代,从工具的成熟度、算法效率、以及最新算法的支持上不断完善。其将在这三个方向展开:
1、Causal Machine Learning:通过因果学习的能力改善机器学习,解决机器学习遇到的一些问题,比如更高效的特征发现、特征工程。还有希望通过因果关系能够提高机器学习的鲁棒性、泛化能力和解释性。
2、Automated Causal Learning:自动化的因果学习工具包,更 high-level 的 API 接口,解决自动化调参和优化的问题。让因果学习更简单高效。
3、Decision Graph:决策图谱,能够把一个系统内的关键运营指标和可干预变量构建出一个基于因果关系的图谱,通过可视化的交互式的方式来推演各种决策动作对运营指标带来的影响。
© THE END
转载请联系本公众号获得授权
投稿或寻求报道:content@jiqizhixin.com