应用Ylearn框架实现因果推断

成长演进

具备清晰骨架、初步数学推导或工程验证,持续补充论据与实测。

ℹ数字花园

🌿 什么是数字花园与思想演进?

遵循 Maggie Appleton 与 Andy Matuschak 的常青笔记理念:这里不是按时间沉底的流水账,而是持续修剪打磨的知识生态。文章按成熟度经历:

  • 🌱 萌芽 (Seedling): 发散灵感、读书摘录、开放猜想
  • 🌿 演进 (Budding): 结构渐明、初步代码推导、积极修正
  • 🌳 常青 (Evergreen): 逻辑闭环、持久经得起检验的基石
  • 🔬 实验待证 (Speculative): 结合沙盒与仿真探针的理论探索
浏览全站数字花园与笔记全景 →

引言#

在数据科学领域,我们经常听到这样一句话:“相关不代表因果”(Correlation does not imply causation)。传统的机器学习方法擅长发现数据中的模式和相关性,但在回答”为什么”以及”如果这样做会怎样”等因果问题时却力不从心。

因果推断(Causal Inference)正是解决这一问题的关键技术。无论是在医疗健康(新药是否有效?)、营销决策(优惠券是否真的提升了销量?)还是政策制定(教育投资能否提高收入?)中,理解变量之间的因果关系都至关重要。

YLearn(“Why Learn”)是阿里巴巴开源的一个端到端因果学习 Python 库,集成了因果图发现、因果效应估计、uplift modeling 等多种功能,大幅降低了因果推断的技术门槛。

本文将系统介绍因果推断的核心概念,并通过丰富的实战案例展示如何使用 YLearn 解决实际业务问题。

1. 因果推断基础理论#

1.1 为什么需要因果推断?#

问题示例:某电商平台发现,发放优惠券后用户的购买金额增加了。能否得出结论:优惠券提升了销售额?

潜在陷阱:

  • 可能是因为原本就要购买的用户更倾向于领取优惠券
  • 可能是季节性因素导致销量上升
  • 可能存在选择偏差(selection bias)

相关 vs 因果:

相关分析因果推断
X 与 Y 同时变化X 的改变导致 Y 的改变
观察性结论反事实推理
预测未来趋势预测干预效果
机器学习擅长需要因果推断方法

1.2 因果推断的核心概念#

1.2.1 反事实框架(Potential Outcomes Framework)#

定义:每个个体在不同干预下都有潜在结果。

  • Yi(1)Y_i(1):个体 ii 接受干预时的结果
  • Yi(0)Y_i(0):个体 ii 不接受干预时的结果
  • 个体因果效应:τi=Yi(1)−Yi(0)\tau_i = Y_i(1) - Y_i(0)

根本问题:我们只能观察到 Yi(Ti)Y_i(T_i)(实际发生的结果),无法同时观察 Yi(1)Y_i(1) 和 Yi(0)Y_i(0)。

1.2.2 平均处理效应(ATE)#

ATE=E[Y(1)−Y(0)]=E[Y(1)]−E[Y(0)]\text{ATE} = E[Y(1) - Y(0)] = E[Y(1)] - E[Y(0)]

实际含义:整个群体接受干预相比不接受干预的平均效果。

1.2.3 条件平均处理效应(CATE)#

CATE(x)=E[Y(1)−Y(0)∣X=x]\text{CATE}(x) = E[Y(1) - Y(0) | X = x]

异质性效应:不同特征的个体可能对干预有不同的反应。

示例:

  • 年轻用户对优惠券的响应可能比老年用户更强
  • 高收入群体可能对小额优惠券不敏感

1.2.4 混淆因子(Confounder)#

定义:同时影响干预和结果的变量。

混淆因子 C
↙ ↘
干预 T → 结果 Y

示例:

  • C = 用户活跃度
  • T = 是否发放优惠券
  • Y = 购买金额

活跃用户更可能领取优惠券,也更可能购买,造成虚假的因果关系。

1.3 因果推断的三大支柱#

  1. 随机对照试验(RCT)

    • 金标准,但成本高、周期长、伦理限制
  2. 因果图(Causal Graph)

    • DAG(有向无环图)表示变量间的因果关系
    • 用于识别混淆因子和调整策略
  3. 潜在结果模型

    • Rubin Causal Model
    • 通过建模反事实结果估计因果效应

2. YLearn 框架概览#

2.1 YLearn 的设计哲学#

YLearn 遵循 端到端因果学习流程:

数据准备 → 因果图发现 → 因果效应识别 → 因果效应估计 → 策略优化

2.2 核心模块#

2.2.1 Causal Discovery(因果发现)#

从数据中自动学习变量间的因果结构。

支持算法:

  • PC 算法(基于条件独立测试)
  • GES 算法(基于评分的搜索)
  • LiNGAM(线性非高斯无环模型)

2.2.2 Causal Effect Estimation(因果效应估计)#

估计干预的因果效应(ATE、CATE等)。

支持方法:

  • S-Learner:单模型学习
  • T-Learner:双模型学习(treatment + control)
  • X-Learner:针对样本不平衡优化
  • R-Learner:鲁棒学习器
  • DR-Learner:双重鲁棒学习器
  • Causal Tree/Forest:因果树/森林

2.2.3 Uplift Modeling(提升建模)#

识别对干预响应最强的个体,优化资源分配。

2.2.4 Policy Learning(策略学习)#

学习最优干预策略,最大化整体效用。

2.3 安装 YLearn#

Terminal window
pip install ylearn

依赖库:

  • numpy, pandas
  • scikit-learn
  • networkx(因果图)
  • matplotlib, seaborn(可视化)

3. 实战案例一:营销优惠券因果效应分析#

3.1 问题背景#

某电商平台想评估优惠券对用户购买的真实影响,数据包括:

  • Treatment(T):是否发放优惠券
  • Outcome(Y):用户消费金额
  • Covariates(X):用户特征(年龄、历史消费、活跃度等)

3.2 数据准备#

import numpy as np
import pandas as pd
from ylearn.exp_dataset.exp_data import single_continuous_treatment
from ylearn.estimator_model import *
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# 生成模拟数据
np.random.seed(2024)
n = 5000
# 用户特征
age = np.random.randint(18, 65, n)
income = np.random.lognormal(10, 1, n)
activity = np.random.gamma(2, 2, n)
# 混淆因子:活跃用户更可能收到优惠券
propensity = 1 / (1 + np.exp(-(0.01 * age - 0.00005 * income + 0.1 * activity - 5)))
treatment = np.random.binomial(1, propensity)
# 结果:真实因果效应 + 混淆效应
true_effect = 50 + 10 * (age > 30) - 5 * (income > 30000) # 异质性效应
outcome = (
100 + # 基准消费
0.5 * age + # 年龄效应
0.001 * income + # 收入效应
10 * activity + # 活跃度效应
treatment * true_effect + # 真实因果效应
np.random.normal(0, 20, n) # 噪声
)
# 构建DataFrame
data = pd.DataFrame({
'age': age,
'income': income,
'activity': activity,
'treatment': treatment,
'outcome': outcome
})
print(data.head())
print(f"\n样本量: {len(data)}")
print(f"治疗组比例: {treatment.mean():.2%}")

3.3 朴素对比的陷阱#

# 错误方法:直接比较治疗组和对照组
naive_ate = data[data['treatment'] == 1]['outcome'].mean() - \
data[data['treatment'] == 0]['outcome'].mean()
print(f"朴素 ATE 估计: {naive_ate:.2f}")
print(f"真实 ATE(平均): {true_effect.mean():.2f}")
print(f"估计偏差: {naive_ate - true_effect.mean():.2f}")

结果解读:朴素估计往往有显著偏差,因为忽略了混淆因子。

3.4 使用 YLearn 估计 ATE#

3.4.1 准备数据格式#

from sklearn.model_selection import train_test_split
# 划分训练集和测试集
train_data, test_data = train_test_split(data, test_size=0.3, random_state=42)
# 定义变量
treatment_col = 'treatment'
outcome_col = 'outcome'
covariate_cols = ['age', 'income', 'activity']
# 提取特征
X_train = train_data[covariate_cols].values
y_train = train_data[outcome_col].values
w_train = train_data[treatment_col].values
X_test = test_data[covariate_cols].values
y_test = test_data[outcome_col].values
w_test = test_data[treatment_col].values

3.4.2 S-Learner 方法#

from ylearn.estimator_model.meta_learner import SLearner
from sklearn.ensemble import GradientBoostingRegressor
# 创建 S-Learner
s_learner = SLearner(
model=GradientBoostingRegressor(n_estimators=100, random_state=42)
)
# 训练模型
s_learner.fit(
data=train_data,
outcome=outcome_col,
treatment=treatment_col,
covariate=covariate_cols
)
# 估计 ATE
s_ate = s_learner.estimate(
data=test_data,
quantity='ATE'
)
print(f"S-Learner ATE: {s_ate:.2f}")

3.4.3 T-Learner 方法#

from ylearn.estimator_model.meta_learner import TLearner
# 创建 T-Learner(分别为治疗组和对照组训练模型)
t_learner = TLearner(
model=GradientBoostingRegressor(n_estimators=100, random_state=42)
)
t_learner.fit(
data=train_data,
outcome=outcome_col,
treatment=treatment_col,
covariate=covariate_cols
)
t_ate = t_learner.estimate(
data=test_data,
quantity='ATE'
)
print(f"T-Learner ATE: {t_ate:.2f}")

3.4.4 X-Learner 方法(推荐)#

from ylearn.estimator_model.meta_learner import XLearner
# X-Learner 对样本不平衡更鲁棒
x_learner = XLearner(
model=GradientBoostingRegressor(n_estimators=100, random_state=42)
)
x_learner.fit(
data=train_data,
outcome=outcome_col,
treatment=treatment_col,
covariate=covariate_cols
)
x_ate = x_learner.estimate(
data=test_data,
quantity='ATE'
)
print(f"X-Learner ATE: {x_ate:.2f}")

3.4.5 双重鲁棒估计(DR-Learner)#

from ylearn.estimator_model.doubly_robust import DRLearner
dr_learner = DRLearner(
model_final=GradientBoostingRegressor(n_estimators=100, random_state=42),
model_propensity=GradientBoostingRegressor(n_estimators=50, random_state=42),
model_regression=GradientBoostingRegressor(n_estimators=50, random_state=42)
)
dr_learner.fit(
data=train_data,
outcome=outcome_col,
treatment=treatment_col,
covariate=covariate_cols
)
dr_ate = dr_learner.estimate(
data=test_data,
quantity='ATE'
)
print(f"DR-Learner ATE: {dr_ate:.2f}")

3.5 估计 CATE(异质性效应)#

# 使用 X-Learner 估计每个个体的 CATE
cate_estimates = x_learner.estimate(
data=test_data,
quantity='CATE'
)
# 可视化 CATE 分布
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.hist(cate_estimates, bins=50, edgecolor='black', alpha=0.7)
plt.xlabel('CATE Estimate')
plt.ylabel('Frequency')
plt.title('Distribution of CATE Estimates')
plt.axvline(cate_estimates.mean(), color='red', linestyle='--', label=f'Mean: {cate_estimates.mean():.2f}')
plt.legend()
plt.subplot(1, 2, 2)
plt.scatter(test_data['age'], cate_estimates, alpha=0.5)
plt.xlabel('Age')
plt.ylabel('CATE Estimate')
plt.title('CATE vs Age')
plt.tight_layout()
plt.show()

3.6 效果评估对比#

import pandas as pd
results = pd.DataFrame({
'Method': ['Naive', 'S-Learner', 'T-Learner', 'X-Learner', 'DR-Learner'],
'ATE Estimate': [naive_ate, s_ate, t_ate, x_ate, dr_ate],
'True ATE': [true_effect.mean()] * 5
})
results['Bias'] = results['ATE Estimate'] - results['True ATE']
results['Absolute Bias'] = results['Bias'].abs()
print(results)

4. 实战案例二:Uplift Modeling 精准营销#

4.1 Uplift 建模的核心思想#

目标:识别对干预响应最强的个体,优化 ROI。

用户分类:

用户类型不干预结果干预结果Uplift决策
Sure Things转化转化0不需要优惠券
Persuadables不转化转化正目标群体
Lost Causes不转化不转化0无效投入
Sleeping Dogs转化不转化负避免打扰

4.2 使用 YLearn 实现 Uplift Modeling#

from ylearn.estimator_model.meta_learner import SLearner
from sklearn.ensemble import RandomForestRegressor
# 训练 Uplift 模型
uplift_model = SLearner(
model=RandomForestRegressor(n_estimators=200, random_state=42)
)
uplift_model.fit(
data=train_data,
outcome=outcome_col,
treatment=treatment_col,
covariate=covariate_cols
)
# 预测每个用户的 uplift score
test_data['uplift_score'] = uplift_model.estimate(
data=test_data,
quantity='CATE'
)
# 按 uplift 分数排序
test_data_sorted = test_data.sort_values('uplift_score', ascending=False)
print(test_data_sorted[['age', 'income', 'activity', 'uplift_score']].head(10))

4.3 Uplift Curve 评估#

def plot_uplift_curve(data, treatment_col, outcome_col, uplift_score_col, n_bins=20):
"""绘制 Uplift Curve"""
data = data.copy().sort_values(uplift_score_col, ascending=False)
data['percentile'] = np.arange(len(data)) / len(data)
bins = np.linspace(0, 1, n_bins + 1)
uplift_curve = []
for i in range(len(bins) - 1):
subset = data[data['percentile'] <= bins[i+1]]
treated = subset[subset[treatment_col] == 1]
control = subset[subset[treatment_col] == 0]
if len(treated) > 0 and len(control) > 0:
ate = treated[outcome_col].mean() - control[outcome_col].mean()
uplift_curve.append(ate * len(subset))
else:
uplift_curve.append(0)
plt.figure(figsize=(10, 6))
plt.plot(bins[1:], uplift_curve, marker='o')
plt.xlabel('Population Percentile (Ranked by Uplift Score)')
plt.ylabel('Cumulative Uplift')
plt.title('Uplift Curve')
plt.grid(True, alpha=0.3)
plt.show()
plot_uplift_curve(test_data, 'treatment', 'outcome', 'uplift_score')

4.4 精准营销策略#

# 只对 uplift 分数最高的 30% 用户发放优惠券
top_30_pct = test_data_sorted.head(int(len(test_data_sorted) * 0.3))
# 计算 ROI
cost_per_coupon = 10 # 优惠券成本
avg_uplift_top30 = top_30_pct['uplift_score'].mean()
roi_top30 = (avg_uplift_top30 - cost_per_coupon) / cost_per_coupon
print(f"Top 30% 用户的平均 Uplift: {avg_uplift_top30:.2f}")
print(f"ROI: {roi_top30:.2%}")
# 对比:如果随机发放给 30% 用户
random_30_pct = test_data.sample(frac=0.3, random_state=42)
avg_uplift_random = random_30_pct['uplift_score'].mean()
roi_random = (avg_uplift_random - cost_per_coupon) / cost_per_coupon
print(f"\n随机 30% 用户的平均 Uplift: {avg_uplift_random:.2f}")
print(f"ROI: {roi_random:.2%}")
print(f"\nROI 提升: {(roi_top30 - roi_random) / roi_random:.2%}")

5. 实战案例三:因果图发现#

5.1 因果图的作用#

问题:在没有先验知识的情况下,如何从数据中学习变量间的因果关系?

YLearn 支持的因果发现算法:

5.1.1 PC 算法#

from ylearn.causal_discovery import CausalDiscovery
# 准备数据(只使用协变量和处理变量)
discovery_data = data[['age', 'income', 'activity', 'treatment']].copy()
# 使用 PC 算法发现因果图
cd = CausalDiscovery(
method='pc', # PC 算法
alpha=0.05 # 独立性检验的显著性水平
)
# 拟合数据
causal_graph = cd.fit(discovery_data)
# 可视化因果图
import networkx as nx
plt.figure(figsize=(10, 8))
pos = nx.spring_layout(causal_graph, k=2, iterations=50)
nx.draw(
causal_graph,
pos,
with_labels=True,
node_color='lightblue',
node_size=3000,
font_size=12,
font_weight='bold',
arrows=True,
arrowsize=20,
edge_color='gray',
width=2
)
plt.title('Discovered Causal Graph (PC Algorithm)')
plt.axis('off')
plt.tight_layout()
plt.show()

5.1.2 GES 算法(基于评分)#

# GES 算法(Greedy Equivalence Search)
cd_ges = CausalDiscovery(method='ges')
causal_graph_ges = cd_ges.fit(discovery_data)
# 对比两种算法的结果
print("PC Algorithm edges:", list(causal_graph.edges()))
print("GES Algorithm edges:", list(causal_graph_ges.edges()))

5.2 使用因果图进行调整集识别#

from ylearn.causal_discovery.graph import CausalGraph
# 创建因果图对象
graph = CausalGraph(causal_graph)
# 识别从 treatment 到 outcome 的调整集
adjustment_set = graph.get_adjustment_set(
treatment='treatment',
outcome='outcome'
)
print(f"识别的调整集: {adjustment_set}")
print("这些变量需要在因果效应估计中作为协变量进行调整")

6. 高级技巧与最佳实践#

6.1 倾向性得分(Propensity Score)#

用途:平衡治疗组和对照组的协变量分布。

from sklearn.linear_model import LogisticRegression
# 估计倾向性得分
ps_model = LogisticRegression(random_state=42)
ps_model.fit(X_train, w_train)
train_data['ps'] = ps_model.predict_proba(X_train)[:, 1]
test_data['ps'] = ps_model.predict_proba(X_test)[:, 1]
# 检查共同支撑(common support)
plt.figure(figsize=(10, 5))
plt.hist(train_data[train_data['treatment'] == 1]['ps'], bins=30, alpha=0.5, label='Treated')
plt.hist(train_data[train_data['treatment'] == 0]['ps'], bins=30, alpha=0.5, label='Control')
plt.xlabel('Propensity Score')
plt.ylabel('Frequency')
plt.title('Propensity Score Distribution')
plt.legend()
plt.show()

6.2 逆概率加权(IPW)#

# 使用倾向性得分进行加权
train_data['ipw'] = np.where(
train_data['treatment'] == 1,
1 / train_data['ps'],
1 / (1 - train_data['ps'])
)
# 使用 IPW 估计 ATE
weighted_outcome_treated = (
train_data[train_data['treatment'] == 1]['outcome'] *
train_data[train_data['treatment'] == 1]['ipw']
).sum() / train_data[train_data['treatment'] == 1]['ipw'].sum()
weighted_outcome_control = (
train_data[train_data['treatment'] == 0]['outcome'] *
train_data[train_data['treatment'] == 0]['ipw']
).sum() / train_data[train_data['treatment'] == 0]['ipw'].sum()
ipw_ate = weighted_outcome_treated - weighted_outcome_control
print(f"IPW ATE: {ipw_ate:.2f}")

6.3 敏感性分析#

def sensitivity_analysis(data, treatment_col, outcome_col, covariate_cols,
n_bootstraps=100):
"""Bootstrap 敏感性分析"""
ate_estimates = []
for i in range(n_bootstraps):
# 重采样
bootstrap_sample = data.sample(frac=1.0, replace=True, random_state=i)
# 估计 ATE
learner = XLearner(
model=GradientBoostingRegressor(n_estimators=50, random_state=i)
)
learner.fit(
data=bootstrap_sample,
outcome=outcome_col,
treatment=treatment_col,
covariate=covariate_cols
)
ate = learner.estimate(data=bootstrap_sample, quantity='ATE')
ate_estimates.append(ate)
# 计算置信区间
ci_lower = np.percentile(ate_estimates, 2.5)
ci_upper = np.percentile(ate_estimates, 97.5)
print(f"ATE 估计: {np.mean(ate_estimates):.2f}")
print(f"95% 置信区间: [{ci_lower:.2f}, {ci_upper:.2f}]")
# 可视化
plt.figure(figsize=(10, 5))
plt.hist(ate_estimates, bins=30, edgecolor='black', alpha=0.7)
plt.axvline(np.mean(ate_estimates), color='red', linestyle='--', label='Mean')
plt.axvline(ci_lower, color='green', linestyle='--', label='95% CI')
plt.axvline(ci_upper, color='green', linestyle='--')
plt.xlabel('ATE Estimate')
plt.ylabel('Frequency')
plt.title('Bootstrap Sensitivity Analysis')
plt.legend()
plt.show()
return ate_estimates
ate_bootstrap = sensitivity_analysis(
train_data, 'treatment', 'outcome', covariate_cols, n_bootstraps=100
)

7. 真实业务场景应用#

7.1 A/B 测试增强#

场景:A/B 测试后,想知道哪些用户群体受益最大。

# 模拟 A/B 测试数据
ab_test_data = data.copy()
ab_test_data['variant'] = np.random.binomial(1, 0.5, len(data)) # 随机分组
# 使用 CATE 分析异质性
heterogeneity_model = XLearner(
model=GradientBoostingRegressor(n_estimators=100, random_state=42)
)
heterogeneity_model.fit(
data=ab_test_data,
outcome='outcome',
treatment='variant',
covariate=['age', 'income', 'activity']
)
ab_test_data['cate'] = heterogeneity_model.estimate(
data=ab_test_data,
quantity='CATE'
)
# 识别高价值用户
high_value_users = ab_test_data[ab_test_data['cate'] > ab_test_data['cate'].quantile(0.75)]
print(f"高响应用户特征:")
print(high_value_users[['age', 'income', 'activity']].describe())

7.2 医疗决策支持#

场景:预测不同患者对治疗方案的响应。

# 模拟医疗数据
medical_data = pd.DataFrame({
'age': np.random.randint(30, 80, 1000),
'bmi': np.random.normal(25, 5, 1000),
'blood_pressure': np.random.normal(120, 15, 1000),
'treatment': np.random.binomial(1, 0.5, 1000)
})
# 结果:康复时间(天)
medical_data['recovery_days'] = (
30 - 0.2 * medical_data['age'] +
0.5 * medical_data['bmi'] +
0.1 * medical_data['blood_pressure'] -
medical_data['treatment'] * (5 + 0.1 * medical_data['age']) +
np.random.normal(0, 5, 1000)
)
# 估计个性化治疗效果
medical_model = XLearner(
model=GradientBoostingRegressor(n_estimators=100, random_state=42)
)
medical_model.fit(
data=medical_data,
outcome='recovery_days',
treatment='treatment',
covariate=['age', 'bmi', 'blood_pressure']
)
medical_data['treatment_effect'] = medical_model.estimate(
data=medical_data,
quantity='CATE'
)
# 个性化治疗建议
medical_data['recommend_treatment'] = medical_data['treatment_effect'] < -2 # 康复时间减少超过2天
print(medical_data[['age', 'bmi', 'treatment_effect', 'recommend_treatment']].head(20))

8. 常见陷阱与解决方案#

8.1 选择偏差(Selection Bias)#

问题:治疗组和对照组的协变量分布不同。

检测:

from scipy.stats import ks_2samp
for col in covariate_cols:
treated = train_data[train_data['treatment'] == 1][col]
control = train_data[train_data['treatment'] == 0][col]
stat, pval = ks_2samp(treated, control)
print(f"{col}: KS statistic = {stat:.4f}, p-value = {pval:.4f}")

解决:

  • 使用倾向性得分匹配
  • 使用 IPW 加权
  • 使用双重鲁棒方法

8.2 混淆因子遗漏#

问题:未观测到的混淆因子导致估计偏差。

缓解策略:

  • 敏感性分析
  • 工具变量法(如果有)
  • 差分法(Difference-in-Differences)

8.3 模型误设(Model Misspecification)#

问题:模型假设不符合数据生成过程。

解决:

  • 使用非参数方法(如 Causal Forest)
  • 集成多种模型
  • 交叉验证选择最优模型

9. 总结与展望#

9.1 核心要点回顾#

  1. 因果推断核心概念:

    • 反事实框架
    • ATE vs CATE
    • 混淆因子调整
  2. YLearn 关键功能:

    • 因果发现:PC、GES 算法
    • 因果效应估计:S/T/X/DR-Learner
    • Uplift Modeling:精准营销
  3. 实践流程:

    问题定义 → 数据收集 → 因果图构建 →
    模型选择 → 效应估计 → 敏感性分析 → 决策应用

9.2 YLearn vs 其他因果推断库#

库优势劣势
YLearn端到端流程、文档丰富、易用社区相对较小
DoWhy理论完备、可视化强学习曲线陡峭
EconML经济学方法丰富偏学术化
CausalMLUber 开源、工业级文档较少

9.3 未来方向#

  • 因果强化学习:结合因果推断和 RL
  • 时间序列因果:处理动态因果关系
  • 因果表示学习:从原始数据学习因果特征
  • 因果公平性:消除算法偏见

参考资源#

  1. YLearn 官方文档:https://github.com/DataCanvasIO/YLearn
  2. 经典教材:
    • Causal Inference: The Mixtape by Scott Cunningham
    • The Book of Why by Judea Pearl
  3. 在线课程:
    • Coursera: A Crash Course in Causality
    • edX: Causal Inference (MIT)

因果推断是数据科学从”是什么”到”为什么”的关键跃升。掌握 YLearn 等因果推断工具,不仅能提升分析深度,更能为业务决策提供可靠的反事实预测,真正实现数据驱动的科学决策。 123

文章概念网络

从章节进入正文概念。实线表示所属层级,虚线连接跨章节重复出现的概念,不代表因果关系。

56 / 161 个节点 · 正文标记术语与关键词概念

应用Ylearn框架实现因果推断同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept应用Ylearn框架实现因果推断应用Ylearn框架实现因果推断引言引言因果推断因果推断YLearnYLearn1. 因果推断基础理论1. 因果推断基础理论1.1 为什么需要因果推断1.1 为什么需要因果推断1.2 因果推断的核心概念1.2 因果推断的核心概念1.3 因果推断的三大支柱1.3 因果推断的三大支柱2. YLearn 框架概览2. YLearn 框架概览2.1 YLearn 的设计哲学2.1 YLearn 的设计哲学2.2 核心模块2.2 核心模块2.3 安装 YLearn2.3 安装 YLearn3. 实战案例一:营销优惠券因果效应分析3. 实战案例一:营销优惠券因果效应分析3.1 问题背景3.1 问题背景3.2 数据准备3.2 数据准备3.3 朴素对比的陷阱3.3 朴素对比的陷阱3.4 使用 YLearn 估计 ATE3.4 使用 YLearn 估计 ATE3.5 估计 CATE(异质性效应)3.5 估计 CATE(异质性效应)3.6 效果评估对比3.6 效果评估对比4. 实战案例二:Uplift Modeling 精准营销4. 实战案例二:Uplift Modeling 精准营销4.1 Uplift 建模的核心思想4.1 Uplift 建模的核心思想4.2 使用 YLearn 实现 Uplift Modeling4.2 使用 YLearn 实现 Uplift Modeling4.3 Uplift Curve 评估4.3 Uplift Curve 评估4.4 精准营销策略4.4 精准营销策略5. 实战案例三:因果图发现5. 实战案例三:因果图发现5.1 因果图的作用5.1 因果图的作用5.2 使用因果图进行调整集识别5.2 使用因果图进行调整集识别6. 高级技巧与最佳实践6. 高级技巧与最佳实践6.1 倾向性得分(Propensity Score)6.1 倾向性得分(Propensity Score)6.2 逆概率加权(IPW)6.2 逆概率加权(IPW)6.3 敏感性分析6.3 敏感性分析7. 真实业务场景应用7. 真实业务场景应用7.1 A/B 测试增强7.1 A/B 测试增强7.2 医疗决策支持7.2 医疗决策支持8. 常见陷阱与解决方案8. 常见陷阱与解决方案8.1 选择偏差(Selection Bias)8.1 选择偏差(Selection Bias)8.2 混淆因子遗漏8.2 混淆因子遗漏8.3 模型误设(Model Misspecification)8.3 模型误设(Model Misspecification)9. 总结与展望9. 总结与展望9.1 核心要点回顾9.1 核心要点回顾9.2 YLearn vs 其他因果推断库9.2 YLearn vs 其他因果推断库9.3 未来方向9.3 未来方向参考资源参考资源YLearn 官方文档YLearn 官方文档经典教材经典教材在线课程在线课程因果因果技术技术causal inferencecausal inferencePythonPython因果效应因果效应YLearnYLearncausal inferencecausal inference因果推断因果推断causalitycausality反事实反事实
应用Ylearn框架实现因果推断

应用Ylearn框架实现因果推断

回到原文 ↗
BIBTEX

引用本文

@article{2024-6-30-应用ylearn框架实现因果推断,
  author  = {枫语},
  title   = {应用Ylearn框架实现因果推断},
  journal = {枫语},
  year    = {2024},
  month   = {jun},
  url     = {https://meiluosi.github.io/posts/2024-6-30-%E5%BA%94%E7%94%A8ylearn%E6%A1%86%E6%9E%B6%E5%AE%9E%E7%8E%B0%E5%9B%A0%E6%9E%9C%E6%8E%A8%E6%96%AD/}
}
🌐

本篇知识星丛与滑动侧栈

应用Ylearn框架实现因果推断 当前主轴

搜索

正在载入索引…