1. 工具简介
Salesforce CausalAI 是一个Python实现的数据因果分析工具,支持对表格和时间序列数据等数据进行因果分析,支持离散和连续的数据类型。Salesforce CausalAI中含有多种因果关系分析算法,支持进行线性和非线性因果关关系分析,并使用并行处理来加速分析过程。Salesforce CausalAI还提供了一个数据生成器,能够为上述数据格式和类型生成具有指定结构方程模型的合成数据,帮助用户在研究各种算法时的真实因果过程。Salesforce CausalAI还提供了一个用户UI界面 ,允许用户无需编写代码即可对数据进行因果分析。该库的开发初衷是为因果关系领域的各种问题提供快速灵活的解决方案。
2. 背景介绍
因果推理旨在确定系统一部分的变化如何影响另一部分,即系统的其他部分不允许独立变化。这种推断与基于变量之间相关性的机器学习模型所做的预测有根本不同。这种差异背后的原因是相关性并不一定意味着因果关系。作为一个简单的例子,考虑两个离散的随机变量X和Y。X可以独立地取两个状态(−1和+1),概率分别为0.5。另一方面,当X是−1时,Y取状态0,当X为+1时,状态−1和+1的概率分别为0.5。按设计,X导致Y。然而,两个变量之间的相关性为0。如果存在第三个变量Z是X和Y的共同原因,后两者之间没有因果关系。在这种情况下,X和Y很可能是相关的。然而,根据设计,X的任何孤立变化都不会导致Y的变化,因为Z是固定的。
以上示例说明了在预测一个变量对另一个变量的因果影响时使用基于相关性的模型的基本局限性。这个问题在销售、医药、诊断等多个领域都有重要的应用。例如,企业可能会感兴趣的是,如果他们提供折扣,与在电视上播放广告相比,是否会有更多的客户购买他们的产品。另一个例子是,查明某些化学品是否对健康造成有害影响,可以造福更广泛的社会。与通常用于自动化的基于相关性的机器学习模型不同,这种类型的知识有助于干预,这些干预是可用于改变未来结果的可操作项目。因果分析工具帮助我们发现系统中的哪些变量可以被干预,以实现特定时间变量的预期结果。
3. Salesforce CausalAI
3.1 Salesforce CausalAI介绍
Salesforce CausalAI 是一个开源 Python 库,用于使用观察数据进行因果分析,其整体的Pipeline如上图1所示。
Salesforce CausalAI的关键特性:
-
数据:对离散和连续类型的表格和时间序列数据进行因果分析; -
缺失值:支持处理数据中的缺失值/NaN 值; -
数据生成器:包含一种合成数据生成器,它使用指定的结构方程模型 (SEM) 来生成表格和时间序列数据。这可用于评估和比较不同的因果发现算法; -
分布式计算:使用Python Ray 库使用并行运行,在处理大型数据集或多个变量以加快计算速度时; -
有针对性的因果发现:在某些情况下,我们支持有针对性的因果发现,在这种情况下,用户只对发现感兴趣的特定变量的因果关系而不是整个因果图感兴趣。此选项可以减少了计算开销; -
可视化:可视化表格和时间序列因果图; -
先验知识:在因果发现过程中结合任何用户提供的关于因果图的部分先验知识; -
无代码UI:提供无代码用户界面,用户可以直接上传数据,一键选择因果分析算法。
Salesforce CausalAI 的API由四个主要组件组成-数据层、先验知识、因果发现和因果推理。数据层包括数据生成模块、数据转换模块和数据规范模块。先验知识层帮助用户指定关于变量之间因果关系的任何部分知识。因果关系发现层旨在从观测数据中检索底层因果关系图。最后,因果推理层旨在估计干预措施对指定目标变量的一个变量子集的平均处理效应(ATE)和条件处理效应(CATE)。除了这些组件外,Salesforce CausalAI 还支持因果图可视化,因果图的正确性评估。下表1展示了与其它的因果分析工具的功能对比,Salesforce CausalAI 提供了更好的并行化和用户界面(UI)设计,使因果分析更具可扩展性和用户友好性。
3.2 安装使用
Salesforce CausalAI需要使用Python 3.9及以上环境进行运行,可以通过执行conda构建虚拟环境。
# 创建python3.9的虚拟环境
conda create -n causal_ai_env python=3.9
# 激活虚拟环境
conda activate causal_ai_env
# 克隆Salesforce CausalAI 代码
git clone https://github.com/salesforce/causalai.git
# 安装Salesforce CausalAI
cd causalai && pip install -e .
3.3 使用示例
UI界面使用
CausalAI为用户提供了一个 UI,可以直接上传数据并运行因果发现和因果推理算法,而无需编写任何代码。要启动 UI,请转到代码的根目录并执行./launch_ui.sh,然后在浏览器中打开终端中指定的 url。要终止 UI,请在启动 UI 的终端中按 Ctrl+c,然后执行./exit_ui.sh.
代码API调用
下面示例使用具有线性相关性的合成数据模拟因故分析的过程。
# 导入依赖包
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
%matplotlib inline
import pickle as pkl
import time
from functools import partial
from causalai.data.data_generator import DataGenerator, ConditionalDataGenerator
from causalai.models.time_series.causal_inference import CausalInference
from sklearn.linear_model import LinearRegression
from sklearn.neural_network import MLPRegressor
# 模拟生成因果数据
def define_treatments(name, t,c):
treatment = dict(var_name=name,
treatment_value=t,
control_value=c)
return treatment
fn = lambda x:x
coef = 0.1
sem = {
'a': [],
'b': [(('a', -1), coef, fn), (('f', -1), coef, fn)],
'c': [(('b', -2), coef, fn), (('f', -2), coef, fn)],
'd': [(('b', -4), coef, fn), (('g', -1), coef, fn)],
'e': [(('f', -1), coef, fn)],
'f': [],
'g': [],
}
T = 5000
data,var_names,graph_gt = DataGenerator(sem, T=T, seed=0)
t1='a'
t2='b'
target = 'c'
target_var = var_names.index(target)
intervention11 = 1*np.ones(T)
intervention21 = 10*np.ones(T)
intervention_data1,_,_ = DataGenerator(sem, T=T, seed=0,
intervention={t1:intervention11, t2:intervention21})
intervention12 = -0.*np.ones(T)
intervention22 = -2.*np.ones(T)
intervention_data2,_,_ = DataGenerator(sem, T=T, seed=0,
intervention={t1:intervention12, t2:intervention22})
true_effect = (intervention_data1[:,target_var] - intervention_data2[:,target_var]).mean()
print("True ATE = %.2f" %true_effect)
# 进行因果分析
tic = time.time()
treatments = [define_treatments(t1, intervention11,intervention12),\
define_treatments(t2, intervention21,intervention22)]
CausalInference_ = CausalInference(data, var_names, graph_gt, LinearRegression , discrete=False)
ate, y_treat,y_control = CausalInference_.ate(target, treatments)
print(f'Estimated ATE: {ate:.2f}')
toc = time.time()
print(f'{toc-tic:.2f}s')
3.4 性能对比
图2对比了不同模型所需的时间成本。我们可以发现 CausalAI和tigramite比causal-learn快得多。这是因为这两个库都考虑了时间序列的特征,并在不覆盖因果关系时减少了潜在的搜索空间。我们还可以观察到通过在CausalAI中使用多处理,尤其是在处理具有大样本量或大变量量的数据时,速度会加快。这验证了所提出的方法在因果AI中处理大规模数据的有效性。
在图3中,我们显示了计算了估计因果图和真实因果图之间的F1得分,可以发现CausalAI和tigramite的表现causal-learn要好得多。这是因为causal-learn中的PC算法是不考虑时间序列特征的更一般的实现,因此有必要手动包含适当的先验知识,以进一步提高其性能。
4. 总结展望
本文介绍Salesforce CausalAI工具,可以用于时间序列和表格数据的因果分析。Salesforce CausalAIL旨在为因果分析的各种需求提供一站式解决方案,包括处理不同的数据类型、数据生成、多处理加速、利用领域知识和提供用户友好的免代码UI界面。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/111083
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!