根据福布斯的统计数据,全球范围只有 13% 左右的机器学习项目能够真正上线运行,项目失败的一个重要原因是模型的泛化能力不足,在真实数据上的表现和完全达不到训练数据上的效果。 随着机器学习建模越来越多的应用,企业对人工智能的要求也在进一步提高。近几年提及的「数智化」核心是智能决策,以数据驱动的方式实现自动化决策来提高整体运营效率。用户的需求的重心从预测性分析向指导性分析升级转移,预测性分析是告诉企业未来可能会发生什么,指导性分析也叫处方性分析,是告诉企业我们如果想要实现一个目标需要如何做,这是典型的智能决策问题。 机器学习主要用在预测性分析上,基本上没有能力解决指导性分析这样的决策问题,因此,因果学习正被学界和业界逐渐重视起来,其可以补充机器学习的一些短板,也满足了智能决策这类问题的需求。因果推断的重要性逐渐显示,被认为是人工智能领域的一次范式革命。 7 月 12 日,九章云极 DataCanvas 发布了 YLearn 因果学习开源项目,是全球首款一站式处理因果学习完整流程的开源算法工具包。 一个典型的完整因果推断流程主要由三个部分组成。图灵奖得主 Judea Pearl 曾表示,现有的机器学习模型不过是对数据的精确曲线拟合,只是在上⼀代的基础上提升了性能,在基本的思想方面没有任何进步。
第一,数据中的因果结构应当首先被学习和发现,用作这一任务的手段通常被称为因果发现(causal discovery)。这些被发现的因果关系会被表示为因果结构公式(structural causal models, SCM)或因果图(一种有向无环图,directed acyclic graphs, DAG)。
第二,我们需要将我们感兴趣的因果问题中的量用因果变量(causal estimand)表示,其中一个例子是平均治疗效应(average treatment effect, ATE)。这些因果变量接下来会通过因果效应识别转化为统计变量(statistical estimand),这是因为因果变量无法从数据中直接估计,只有识别后的因果变量才可以从数据中被估计出来。
最后,我们需要选择合适的因果估计模型从数据中去学些这些被识别后的因果变量。完成这些事情之后,诸如策略估计问题和反事实问题等因果问题也可以被解决了。
GitHub 开源地址:https://github.com/DataCanvasIO/YLearn YLearn 的应用目前主要集中在两个方向: 用于弥补机器学习理论上的缺陷。在机器学习模型中加入因果机制,利用因果关系的稳定性和可解释性,优化模型、提升效率; 帮助实现用户需求从预测到决策的迁移,例如使用基于因果推断的推荐算法帮助企业进行客户增长和智能营销等。 它具有一站式、新而全、用途广等特点:
一站式:通常的因果学习流程包括从数据中发现因果结构,对因果结构建立因果模型,使用因果模型进行因果效应识别和对从数据中对因果效应进行估计。YLearn 一站式地支持这些功能,使用户以最低的学习成本使用与部署因果学习。
新而全:YLearn 实现了多个近年来在因果学习领域中发展出的各类算法,例如 Meta-Learner、Double Machine Learning 等。也将一直致力于紧跟前沿进展,保持因果识别与估计模型的先进和全面。
用途广:YLearn 支持对估计得到的因果效应进行解释、根据因果效应在各种方案中选取收益最大的方案并可视化决策过程等功能。除此之外,YLearn 也支持将因果结构中识别出的因果效应的概率分布表达式以 LaTex 的形式输出等小功能,帮助用户将因果学习与其他方向交叉。
YLearn 因果学习开源项目组成 YLearn 有 5 个主要的因果推断相关概念,包括:
YLearn 中的因果推断流程 从用户给定的训练数据开始:
causation = {'X': ['W'], 'W':[], 'Y':['W']}
cg = CausalGraph(causation=causation)
它会首先被转化为一个有潜在混淆曲线(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)
cm = CausalModel(causal_graph=cg)
cm.identify(treatment={'X'}, outcome={'Y'}, identify_method=('backdoor', 'simple'))
那么我们可以按使用 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')
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 进行不断迭代,从工具的成熟度、算法效率、以及最新算法的支持上不断完善。其将在这三个方向展开: 1、Causal Machine Learning:通过因果学习的能力改善机器学习,解决机器学习遇到的一些问题,比如更高效的特征发现、特征工程。还有希望通过因果关系能够提高机器学习的鲁棒性、泛化能力和解释性。 2、Automated Causal Learning:自动化的因果学习工具包,更 high-level 的 API 接口,解决自动化调参和优化的问题。让因果学习更简单高效。 3、Decision Graph:决策图谱,能够把一个系统内的关键运营指标和可干预变量构建出一个基于因果关系的图谱,通过可视化的交互式的方式来推演各种决策动作对运营指标带来的影响。
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !