使用Uber CausalML计算必要与充分因果关系的概率边界

使用Uber CausalML计算必要与充分因果关系的概率边界

causalml Uplift modeling and causal inference with machine learning algorithms causalml 项目地址: https://gitcode.com/gh_mirrors/ca/causalml

引言

在因果推断领域,理解干预措施(如优惠券、药物等)与结果(如客户转化、患者康复等)之间的因果关系至关重要。Tian和Pearl在2000年提出的方法为我们提供了一种量化必要因果关系和充分因果关系概率的框架。本文将介绍如何使用Uber CausalML库中的工具来计算这些概率边界。

必要与充分因果关系概念解析

在因果分析中,我们可以区分三种不同类型的因果关系:

  1. 必要因果关系(PN):如果客户没有获得优惠券,他们就不会转化
  2. 充分因果关系(PS):如果客户获得优惠券,他们就会转化
  3. 必要且充分因果关系(PNS):客户转化当且仅当他们收到优惠券

理想情况下,我们希望干预措施是必要且充分的。如果优惠券不是必要的,我们可能在浪费资源;如果不是充分的,我们可能无法实现预期的转化目标。

实验设计与数据准备

Tian和Pearl的研究设想了一个同时包含实验数据和观察数据的场景。实验数据来自随机对照试验(RCT),而观察数据则来自自然观察研究。这两种数据各有优缺点:

  • 实验数据:通过随机化消除混杂因素,但可能缺乏外部有效性
  • 观察数据:反映真实世界情况,但存在自选择偏差

在我们的示例中,我们模拟了一个药物效果研究:

实验数据

| | 治疗组 | 对照组 | |-----------|--------|--------| | 死亡 | 16 | 14 | | 存活 | 984 | 986 |

观察数据

| | 治疗组 | 对照组 | |-----------|--------|--------| | 死亡 | 2 | 28 | | 存活 | 998 | 972 |

使用CausalML计算概率边界

数据生成

首先,我们创建两个数据集来模拟上述场景:

import numpy as np
import pandas as pd
from causalml.optimize import get_pns_bounds

# 创建实验数据集
num_samples = 2000
half = int(num_samples / 2)
treatment = np.tile([0, 1], half)
recovery = np.zeros(num_samples)

df_rct = pd.DataFrame({'treatment': treatment, 'death': recovery})
df_obs = pd.DataFrame({'treatment': treatment, 'death': recovery})

# 设置实验数据标签
df_rct.loc[df_rct.loc[df_rct['treatment'] == 1].sample(n=16).index, 'death'] = 1
df_rct.loc[df_rct.loc[df_rct['treatment'] == 0].sample(n=14).index, 'death'] = 1

# 设置观察数据标签
df_obs.loc[df_obs.loc[df_obs['treatment'] == 1].sample(n=2).index, 'death'] = 1
df_obs.loc[df_obs.loc[df_obs['treatment'] == 0].sample(n=28).index, 'death'] = 1

计算概率边界

使用get_pns_bounds函数可以计算三种类型的概率边界:

# 计算必要且充分因果关系(PNS)边界
pns_lb, pns_ub = get_pns_bounds(df_rct, df_obs, 'treatment', 'death', type='PNS')

# 计算必要因果关系(PN)边界
pn_lb, pn_ub = get_pns_bounds(df_rct, df_obs, 'treatment', 'death', type='PN')

# 计算充分因果关系(PS)边界
ps_lb, ps_ub = get_pns_bounds(df_rct, df_obs, 'treatment', 'death', type='PS')

print(f'''
必要因果关系概率边界: [{round(pn_lb, 3)}, {round(pn_ub, 3)}]
充分因果关系概率边界: [{round(ps_lb, 3)}, {round(ps_ub, 3)}]
必要且充分因果关系概率边界: [{round(pns_lb, 3)}, {round(pns_ub, 3)}]
''')

结果解读

在我们的模拟数据中,计算结果如下:

  1. **必要因果关系(PN)**边界:[1.0, 1]

    • 这意味着在死亡并接受药物治疗的患者中,如果不接受治疗,他们肯定会存活
  2. **充分因果关系(PS)**边界:[0.002, 0.031]

    • 这表明在存活且未接受治疗的患者中,如果接受治疗,他们有0.2%到3.1%的死亡风险
  3. **必要且充分因果关系(PNS)**边界:[0.002, 0.016]

    • 这表示药物既是死亡原因又是预防死亡措施的概率在0.2%到1.6%之间

实际应用价值

这种分析方法在实际业务中有重要应用价值:

  1. 营销活动优化:识别哪些客户真正需要优惠券才能转化,避免资源浪费
  2. 医疗决策:评估药物对患者的必要性和充分性,制定个性化治疗方案
  3. 政策评估:判断政策干预是否真正必要且足以产生预期效果

结论

通过结合实验数据和观察数据,Uber CausalML提供的工具使我们能够获得比单独分析任一数据源更深入的因果洞察。这种方法特别适用于需要评估干预措施必要性和充分性的场景,为决策者提供了更全面的信息基础。

在实际应用中,分析师应当注意数据的质量和代表性,确保实验数据和观察数据来自相同的目标群体,以获得可靠的边界估计。

causalml Uplift modeling and causal inference with machine learning algorithms causalml 项目地址: https://gitcode.com/gh_mirrors/ca/causalml

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢瑜晶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值