【因果推断python】47_元学习1

目录

S-Learner


简单回顾一下,我们现在感兴趣的是发现治疗效果的异质性,即确定单位对治疗的不同反应。在这个框架中,我们想估计

在连续的情况下。换句话说,我们想知道这些单位对治疗的敏感程度。这在我们不能治疗所有人并且需要对治疗进行优先排序的情况下非常有用,例如,当你想提供折扣但预算有限时。

之前,我们看到了如何转换结果变量Y以便我们可以将其插入预测模型中,并获得条件平均治疗效果(CATE)估计。在那里,我们不得不付出方差增加的代价。这是我们在数据科学中经常看到的。没有一个最好的方法,因为每种方法都有其优缺点。因此,值得学习许多技术,以便根据具体情况进行权衡。本着这种精神,本章将侧重于为您提供更多可供您使用的工具。

元学习器是一种利用现成的预测机器学习方法来解决我们迄今为止一直在研究的相同问题的简单方法:估计CATE。同样,它们都不是最好的,每一个都有自己的弱点。我会试着复习一下,但请记住,这些内容高度依赖于上下文。不仅如此,元学习器还部署了预测ML模型,这些模型可以从线性回归和增强决策树到神经网络和高斯过程。元学习器的成功也将在很大程度上取决于它使用的机器学习方法。通常,你只需要尝试许多不同的东西,看看什么最有效。

python 复制代码
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
from nb21 import cumulative_gain, elast

在这里,我们将使用与以前相同的数据,重新考虑投资广告电子邮件。同样,这里的目标是找出谁能更好地回复电子邮件。不过也有一点小转折。这一次,我们将使用非随机数据来训练模型,并使用随机数据来验证它们。处理非随机数据是一项困难得多的任务,因为元学习者需要对数据进行去噪并估计CATE。

python 复制代码
test = pd.read_csv("./data/invest_email_rnd.csv")
train = pd.read_csv("./data/invest_email_biased.csv")
train.head()

我们的结果变量是转化率,我们的治疗是通过电子邮件1。让我们创建变量,将这些变量与功能一起存储。探索治疗效果的异质性。

python 复制代码
y = "converted"
T = "em1"
X = ["age", "income", "insurance", "invested"]

S-Learner

我们将使用的第一个学习者是S-learner。这是我们能想到的最简单的学习者。我们将使用单个(因此为S)机器学习模型

估计

为此,我们将简单地将治疗作为一个特征包括在试图预测结果Y的模型中。

python 复制代码
from lightgbm import LGBMRegressor

np.random.seed(123)
s_learner = LGBMRegressor(max_depth=3, min_child_samples=30)
s_learner.fit(train[X+[T]], train[y]);

然后,我们可以在不同的治疗方案下进行预测。测试和对照之间的预测差异将是我们的CATE估计

如果我们把它放在一个图表中,下面是它的样子

现在,让我们看看如何在代码中实现这个学习器。

python 复制代码
s_learner_cate_train = (s_learner.predict(train[X].assign(**{T: 1})) -
                        s_learner.predict(train[X].assign(**{T: 0})))

s_learner_cate_test = test.assign(
    cate=(s_learner.predict(test[X].assign(**{T: 1})) - # predict under treatment
          s_learner.predict(test[X].assign(**{T: 0}))) # predict under control
)

为了评估这个模型,我们将查看测试集中的累积增益曲线。我还在火车上画增益曲线。由于训练是有偏差的,如果模型是好的,这条曲线不能给出任何指示,但它可以指出我们是否过度拟合训练集。当这种情况发生时,列车组中的曲线将非常高。如果您想看看它是什么样子,请尝试将max_depth参数从3替换为20。

python 复制代码
gain_curve_test = cumulative_gain(s_learner_cate_test, "cate", y="converted", t="em1")
gain_curve_train = cumulative_gain(train.assign(cate=s_learner_cate_train), "cate", y="converted", t="em1")
plt.plot(gain_curve_test, color="C0", label="Test")
plt.plot(gain_curve_train, color="C1", label="Train")
plt.plot([0, 100], [0, elast(test, "converted", "em1")], linestyle="--", color="black", label="Baseline")
plt.legend()
plt.title("S-Learner");

正如我们从累积增益中看到的那样,S-学习器虽然简单,但在这个数据集上可以表现良好。需要记住的一件事是,这种性能对于这个数据集来说是非常特殊的。根据你掌握的数据类型,S学习者可能会做得更好或更差。在实践中,我发现S-学习器是解决任何因果问题的好方法,主要是因为它的简单性。不仅如此,S-学习者可以处理连续和离散处理,而本章中的其他学习者只能处理离散处理。

S学习者的主要缺点是它倾向于将治疗效果偏向于零。由于S学习器使用通常是正则化的机器学习模型,该正则化可以限制估计的治疗效果。‪切尔诺茹科夫‬ 等人(2016)使用模拟数据概述了这个问题:

在这里,他们绘制了真实因果效应(红色轮廓)和估计因果效应之间的差异,,使用S-学习器。估计的因果效应有很大偏差。

更糟糕的是,如果治疗相对于其他协变量在解释结果时所起的作用非常弱,则S学习者可以完全放弃治疗变量。请注意,这与您所使用的所选ML模型高度相关。正则化程度越高,问题就越严重。我们将看到下一个学习者尝试解决这个问题。

相关推荐
瑞和数智几秒前
案例分享 | 瑞和数智助力某农商行打造标签管理平台
大数据·人工智能·科技·金融
科技前瞻观察几秒前
技术自主、量产突围、产业链协同:宇树科技、优艾智合领衔具身智能TOP20领跑全球
大数据·人工智能·科技
前端不太难6 分钟前
OpenClaw:AI 权限治理的核心问题
人工智能·状态模式
hans汉斯16 分钟前
《人工智能与机器人研究》期刊推介&征稿指南
人工智能·机器人
电商API&Tina20 分钟前
比价 / 选品专用:京东 + 淘宝 核心接口实战(可直接复制运行)
大数据·数据库·人工智能·python·json·音视频
NULL指向我25 分钟前
信号处理学习笔记2:软件RC二阶高通\低通滤波
笔记·学习·信号处理
love530love32 分钟前
Windows 开源项目部署评估与决策清单(完整版)
人工智能·windows·python·开源·github
HyperAI超神经32 分钟前
数据集汇总丨英伟达/OpenAI及多所科研机构开源推理数据集,覆盖数学/全景空间/Wiki问答/科研任务/视觉常识等
人工智能·深度学习·机器学习·数据集·ai编程·llama·图像合成
今夕资源网35 分钟前
零基础 Python 环境搭建工具 一键安装 Python 环境自动配置 升级 pip、setuptools、wheel
开发语言·python·pip·环境变量·python环境变量·python自动安装
啥咕啦呛38 分钟前
java打卡学习4:HashMap底层结构、扩容机制
java·学习·哈希算法