Uber CausalML 因果机器学习库快速入门指南
概述
Uber CausalML 是一个开源的因果机器学习库,提供了多种因果推断方法的实现。本文将带您快速了解该库的核心功能和使用方法,帮助您快速上手因果机器学习项目。
倾向得分分析
倾向得分估计
倾向得分是因果推断中的重要概念,表示个体接受某种干预的概率。CausalML 提供了 ElasticNetPropensityModel 来进行倾向得分估计:
from causalml.propensity import ElasticNetPropensityModel
pm = ElasticNetPropensityModel(n_fold=5, random_state=42)
ps = pm.fit_predict(X, y)
该方法结合了 L1 和 L2 正则化,可以有效处理高维特征并防止过拟合。
倾向得分匹配
倾向得分匹配是消除混杂变量影响的常用方法:
from causalml.match import NearestNeighborMatch, create_table_one
psm = NearestNeighborMatch(replace=False, ratio=1, random_state=42)
matched = psm.match_by_group(data=df, treatment_col=treatment_col,
score_cols=score_cols, groupby_col=groupby_col)
create_table_one(data=matched, treatment_col=treatment_col,
features=covariates)
匹配后可以使用 create_table_one 检查协变量平衡情况,这是评估匹配效果的重要步骤。
平均处理效应(ATE)估计
元学习器方法
CausalML 实现了多种元学习器算法:
- S-Learner:单一模型估计
- T-Learner:双模型估计
- X-Learner:交叉学习器
- R-Learner:基于残差的学习器
from causalml.inference.meta import LRSRegressor, XGBTRegressor, MLPTRegressor
from causalml.inference.meta import BaseXRegressor, BaseRRegressor
# 线性回归S-Learner
lr = LRSRegressor()
te, lb, ub = lr.estimate_ate(X, treatment, y)
# XGBoost T-Learner
xg = XGBTRegressor(random_state=42)
te, lb, ub = xg.estimate_ate(X, treatment, y)
# 神经网络T-Learner
nn = MLPTRegressor(hidden_layer_sizes=(10,10), learning_rate_init=.1,
early_stopping=True, random_state=42)
te, lb, ub = nn.estimate_ate(X, treatment, y)
# X-Learner
xl = BaseXRegressor(learner=XGBRegressor(random_state=42))
te, lb, ub = xl.estimate_ate(X, treatment, y, e)
# R-Learner
rl = BaseRRegressor(learner=XGBRegressor(random_state=42))
te, lb, ub = rl.estimate_ate(X=X, p=e, treatment=treatment, y=y)
提升树方法
CausalML 还实现了基于决策树的因果推断方法:
from causalml.inference.tree import UpliftTreeClassifier
uplift_model = UpliftTreeClassifier(max_depth=5, min_samples_leaf=100,
min_samples_treatment=50, n_reg=100,
evaluationFunction='KL', control_name='control')
高级算法
反事实价值优化
该功能可用于营销活动优化等场景:
from causalml.optimize import CounterfactualValueEstimator
cve = CounterfactualValueEstimator(
treatment=df_test['treatment_group_key'],
control_name='control',
treatment_names=conditions[1:],
y_proba=y_proba,
cate=tm_pred,
value=conversion_value_array[test_idx],
conversion_cost=cc_array[test_idx],
impression_cost=ic_array[test_idx])
cve_best_idx = cve.predict_best()
工具变量方法
对于存在未观测混杂的情况,可以使用2SLS方法:
from causalml.inference.iv import IV2SLS
iv = IV2SLS()
iv.fit(X, treatment, y, Z)
ate = iv.estimate_ate()
神经网络方法
CausalML 实现了多种基于神经网络的因果推断算法:
- CEVAE:因果效应变分自编码器
- DragonNet:专为因果推断设计的神经网络架构
数据生成与验证
合成数据生成
CausalML 提供了灵活的合成数据生成功能:
from causalml.dataset import synthetic_data
# 生成单一模拟数据
y, X, treatment, tau, b, e = synthetic_data(mode=1)
# 生成多模拟数据
preds_summary = get_synthetic_summary(simulate_nuisance_and_easy_treatment,
n=1000, k=12)
敏感性分析
评估模型对假设的敏感性:
from causalml.metrics.sensitivity import Sensitivity
sens_x = Sensitivity(df=df, inference_features=INFERENCE_FEATURES,
p_col='pihat', treatment_col=TREATMENT_COL,
outcome_col=OUTCOME_COL, learner=learner_x)
sens_sumary_x = sens_x.sensitivity_analysis(methods=['Placebo Treatment',
'Random Cause',
'Subset Data',
'Random Replace',
'Selection Bias'])
特征选择
CausalML 提供了多种因果特征选择方法:
from causalml.feature_selection.filters import FilterSelect
# F检验方法
filter_f = FilterSelect()
f_imp = filter_f.get_importance(df, X_names, y_name, 'F',
treatment_group='treatment1')
# 似然比检验
lr_imp = filter_f.get_importance(df, X_names, y_name, 'LR',
treatment_group='treatment1')
# KL散度方法
kl_imp = filter_f.get_importance(df, X_names, y_name, 'KL',
treatment_group='treatment1', n_bins=10)
结语
本文介绍了 Uber CausalML 库的核心功能和使用方法。该库提供了从基础倾向得分匹配到复杂神经网络方法的完整因果推断工具链,是进行因果机器学习研究的强大工具。建议读者根据实际需求选择合适的算法,并通过敏感性分析等方法验证结果的可靠性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考