✨ 欢迎关注Python机器学习AI ✨
本节介绍: 因果推断中的虚假性检验:如何验证因果图的有效性与可靠性 。数据采用模拟数据,作者根据个人对机器学习的理解进行代码实现与图表输出,细节并不保证与原文一定相同,仅供参考。 详细数据和代码、文献将在稍后上传至交流群,付费成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。 购买前请咨询,避免不必要的问题。
✨ 文献信息 ✨
在因果推断的背景下,虚假性检验 在验证因果图的有效性和可靠性方面起着至关重要的作用。因果图,通常表示为有向无环图(DAG),描绘了变量之间的假定因果关系,可用于预测结果、理解系统动态或进行干预。然而,这些因果图的准确性取决于潜在的假设,这些假设在现实数据中可能并不总是成立,特别是当真实的因果关系未知时
虚假性检验 指的是测试因果图中所描绘的关系在观测数据中是否成立。其目的 是识别不一致性和错误,特别是在依赖于专家驱动模型或因果发现算法的情况下。通过使用如条件独立(CI)关系的统计检验,研究人员可以评估所提出的因果图与观测数据的契合度。这种方法的好处 在于,它为完善因果模型提供了一种方法,能够突出显示模型未能捕捉到真实依赖关系或独立性的地方,从而指导未来的调整并提高模型的鲁棒性
总而言之,虚假性检验确保因果图不仅是可信的,而且与现有证据一致,帮助在因果推断过程中消除错误的因果推理,避免其在决策或干预规划中被误用。这种方法对于推进因果发现方法至关重要,尤其是在处理复杂系统时,当数据本身可能无法完全揭示潜在结构时。当然这里主要是说明如何通过python实现因果推断中的虚假性检验
✨ 代码实现 ✨
import numpy as np
import pandas as pd
import networkx as nx
from sklearn.ensemble import GradientBoostingRegressor
from dowhy.gcm.falsify import FalsifyConst, falsify_graph, plot_local_insights, run_validations, apply_suggestions
from dowhy.gcm.independence_test.generalised_cov_measure import generalised_cov_based
from dowhy.gcm.util import plot
from dowhy.gcm.util.general import set_random_seed
from dowhy.gcm.ml import SklearnRegressionModel
from dowhy.gcm.util.general import set_random_seed
set_random_seed(0)
set_random_seed(1332)
import warnings
# 忽略所有警告
warnings.filterwarnings("ignore")
path = r"2025-4-29公众号Python机器学习AI-哈哈哈哈.xlsx"
df = pd.read_excel(path)
加载数据并为其构建因果图模型,要构建因果图,我们需要基于数据的结构和变量之间的潜在因果关系来定义一个DAG(有向无环图),如果没有领域知识可以参考——因果机器学习:如何在不依赖领域知识的情况下构建因果图并定义因果关系进行构建
# 调用falsify_graph函数来验证因果图的有效性
result = falsify_graph(nx_graph, df, plot_histogram=True)
# 打印结果摘要,输出falsify_graph的返回值
print(result)
使用falsify_graph函数验证给定因果图(DAG)的有效性。它通过比较给定DAG与多次节点随机排列的结果,评估该图在实际数据中的一致性。plot_histogram=True表示函数将绘制违反条件独立性测试的直方图,以可视化分析结果
给定的DAG是有信息的,因为它的1/20个排列落在了该DAG的Markov等价类中(p值为0.05)。这表明该图的因果关系具有一定的实际意义,并且它在数据中能够捕捉到真实的因果结构。给定的DAG违反了2个LMC(局部马尔科夫条件),但它比0.0%的随机排列DAG要好(p值为1.00)。这说明,该DAG的表现优于完全随机排列的因果图,尽管它在LMC条件上存在一定的违反。根据提供的显著性水平(0.05),并且因为DAG具有信息量, 没有拒绝该DAG 。也就是说,虽然存在一些LMC的违反,但总体来看,给定的因果图仍然是有效的,并且能够捕捉到数据中的因果结构
print(f"Graph is falsifiable: {result.falsifiable}, Graph is falsified: {result.falsified}")
这段代码的作用是打印出图是否可伪造(falsifiable)以及图是否已经被伪造(falsified)的结果。如果你对绘图不感兴趣,只想知道测试是否伪造了给定的图,可以直接使用这个函数来获取相关信息
Graph is falsifiable: True:表示给定的因果图是可以被伪造的,即存在可能性表明该图与实际数据不一致,Graph is falsified: False:表示在当前测试中,给定的因果图没有被伪造,即它与数据的一致性没有被否定
总体来看,尽管该图是可以被伪造的,但在本次检验中并未被证伪,说明该图在数据中的因果关系仍然是有效的
# 定义一个基于梯度提升决策树(Gradient Boosted Decision Trees, GBDT)的回归模型的创建函数
def create_gradient_boost_regressor(**kwargs) -> SklearnRegressionModel:
# 使用给定的参数(kwargs)创建并返回一个Sklearn回归模型对象
return SklearnRegressionModel(GradientBoostingRegressor(**kwargs))
# 定义广义协方差度量(Generalised Covariance Measure, GCM)函数
def gcm(X, Y, Z=None):
# 使用梯度提升回归模型作为预测模型,计算X和Y之间的广义协方差度量
# 如果提供了Z(条件变量),则会考虑Z作为条件变量
return generalised_cov_based(X, Y, Z=Z, prediction_model_X=create_gradient_boost_regressor,
prediction_model_Y=create_gradient_boost_regressor)
# 调用falsify_graph函数进行图的虚假性检验,并返回结果
result_sachs = falsify_graph(g_sachs, # 图对象:表示因果结构的图,通常是由节点和边组成的结构(例如,因果图)
data_sachs, # 数据集:包含用于检验因果关系的数据,通常是一个Pandas DataFrame
n_permutations=100, # n_permutations: 进行的置换次数,用于虚假性检验的精度
independence_test=gcm, # independence_test: 用于检验变量之间独立性的函数,gcm是广义协方差度量(Generalised Covariance Measure)
conditional_independence_test=gcm, # conditional_independence_test: 用于检验条件独立性的函数,gcm同样用于此,表示在给定条件下变量是否独立
plot_histogram=True) # plot_histogram: 是否绘制直方图,显示置换检验的结果分布
# 输出虚假性检验的结果
print(result_sachs)
这里更换一个数据集及对应的因果图进行类似的检验,定义一个基于梯度提升决策树(GBDT)的回归模型,并使用该模型进行广义协方差度量(GCM)计算(加快运行速度),以便在因果推断中对给定因果图(g_sachs)和数据集(data_sachs)进行虚假性检验。通过调用falsify_graph函数,执行100次置换检验并返回结果
该因果图(DAG)在虚假性检验中的结果表明,首先它具有信息量,因为在100次排列中,0次排列落在该DAG的Markov等价类中(p值为0.00)。虽然该DAG违反了10个LMC条件,但其表现优于97.0%的随机排列DAG(p值为0.03)。基于显著性水平(0.05)和该DAG的有效信息量,我们没有拒绝该DAG,认为它仍然是有效的。简而言之,尽管该DAG违反了一些LMC条件,但由于它的表现优于随机图,因此我们认为该因果图能够有效地捕捉数据中的因果结构
# 调用falsify_graph函数进行图的虚假性检验,并返回结果
result_sachs = falsify_graph(g_sachs, # 图对象:表示因果结构的图,通常是由节点和边组成的结构(例如,因果图)
data_sachs, # 数据集:包含用于检验因果关系的数据,通常是一个Pandas DataFrame
n_permutations=100, # n_permutations: 进行的置换次数,用于虚假性检验的精度
independence_test=gcm, # independence_test: 用于检验变量之间独立性的函数,gcm是广义协方差度量(Generalised Covariance Measure)
conditional_independence_test=gcm, # conditional_independence_test: 用于检验条件独立性的函数,gcm同样用于此,表示在给定条件下变量是否独立
plot_histogram=True, # plot_histogram: 是否绘制直方图,显示置换检验的结果分布
suggestions=True) # suggestions: 是否在虚假性检验后提供改进建议,True表示启用该功能
# 输出虚假性检验的结果
print(result_sachs)
这里相对于前面启用了plot_histogram以绘制检验结果的直方图,并通过suggestions=True获取虚假性检验后的优化建议。这意味着在检验过程中除了虚假性检验的结果外,还提供了 改进建议 ,例如移除某些边(如PIP2 → PKC、PKC → praf等),以优化因果图的结构。这些建议旨在提高因果图的准确性和有效性
# 调用plot_local_insights函数绘制局部洞察图,分析虚假性检验结果
plot_local_insights(g_sachs, # g_sachs: 因果图对象,表示用于虚假性检验的因果图结构
result_sachs, # result_sachs: 虚假性检验的结果,包含了检验的具体数据和统计信息
method=FalsifyConst.VALIDATE_CM) # method: 设置验证方法,这里使用FalsifyConst.VALIDATE_CM,表示验证使用了广义协方差度量方法(Generalised Covariance Measure)
调用plot_local_insights函数绘制局部洞察图,分析虚假性检验的结果,并使用广义协方差度量方法进行验证,通俗来说就是高亮显示前面虚假性检验中提到的 改进建议 ,如移除某些边(例如PIP2 → PKC等)。这些建议在图中会被突出显示,帮助分析和优化因果图的结构。
g_given_pruned = apply_suggestions(g_sachs, result_sachs)
plot(g_given_pruned)
这段代码通过apply_suggestions函数将前面虚假性检验的改进建议应用到给定的因果图(g_sachs)上,生成优化后的因果图(g_given_pruned)
因果推断中的虚假性检验通过验证因果图与数据的一致性来评估其有效性与可靠性,而后续的安慰剂处理、随机共同原因和数据子样本则侧重于测试因果关系的干预效果、隐藏变量的影响或模型在不同数据下的表现,侧重点不同,完整的基础流程将在代码中给出
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 购买介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,购买作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 购买前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!
往期推荐
Frontiers in Oncology:利用生存机器学习RSF模型预测患者预后模拟实现
期刊配图:通过SHAP组图解读模型探索不同类型特征和分组对模型的影响
机器学习在临床数据分析中的应用:从数据预处理到Web应用实现的完整流程教学
Psychiatry Research基于SHAP可解释性的机器学习模型构建与评估:混淆矩阵、ROC曲线、DCA与校准曲线分析
nature communications:基于Light GBM与随机森林结合的多模型特征选择方法
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考