因果推断5--DML(个人笔记)

news2024/11/18 16:54:17

目录

1论文介绍

1.1论文

1.2摘要

1.3DML思路

2价格需求曲线

2.1价格需求弹性

2.2价格需求弹性计算DML代码

2.3价格需求弹性例子--数据集

2.4建模过程

2.5回归结果


1论文介绍

1.1论文

V. Chernozhukov, D. Chetverikov, M. Demirer, E. Duflo, C. Hansen, and a. W. Newey. Double Machine Learning for Treatment and Causal Parameters. ArXiv e-prints 文章链接

1.2摘要

我们重新讨论在高维有害参数η0存在的情况下对低维参数θ0的推理的经典半参数问题。我们通过允许η0的高维值来脱离经典设置,从而打破了限制该对象参数空间复杂性的传统假设,如Donsker性质。为了估计η0,我们考虑使用统计或机器学习(ML)方法,这些方法特别适合于现代高维情况下的估计。在实践中,ML方法通过使用正则化来减少方差,并通过过拟合来抵消正则化偏差,从而取得了较好的效果。然而,在估计η0时的正则化偏倚和过拟合导致θ0的估计量有很大的偏倚,这些估计量是通过天真地将η0的ML估计量代入θ0的估计方程而得到的。这种偏差导致朴素估计量不符合N−1/2,其中N是样本容量。我们表明,正则化偏差和过拟合对感兴趣的参数θ0的估计的影响可以通过使用两个简单但关键的成分来消除:(1)使用内曼正交矩/分数,它降低了对有害参数的敏感性来估计θ0,以及(2)使用交叉拟合,它提供了一种有效的数据分割形式。我们将得到的方法集称为双偏ML或去偏ML (DML)。我们验证了DML提供的点估计集中在真参数值的N−1/2-邻域内,并且近似无偏且正态分布,这允许构建有效的置信度语句。DML的一般统计理论是初级的,同时依赖于薄弱的理论要求,这将允许使用广泛的现代ML方法来估计有害参数,如随机森林、lasso、岭回归、深度神经网络、增强树以及这些方法的各种混合和集成。我们通过应用DML学习部分线性回归模型中的主回归参数,DML学习部分线性工具变量模型中内生变量上的系数,DML学习无混淆情况下平均处理效果和被治疗者的平均处理效果来说明一般理论,应用DML在工具变量设置下学习局部平均处理效果。除了这些理论应用,我们还通过三个经验示例说明了DML的使用。

1.3DML思路

Hetergeneous Treatment Effect旨在量化实验对不同人群的差异影响,进而通过人群定向/数值策略的方式进行差异化实验,或者对实验进行调整。Double Machine Learning把Treatment作为特征,通过估计特征对目标的影响来计算实验的差异效果。

Machine Learning擅长给出精准的预测,而经济学更注重特征对目标影响的无偏估计。DML把经济学的方法和机器学习相结合,在经济学框架下用任意的ML模型给出特征对目标影响的无偏估计

HTE其他方法流派详见 因果推理的春天-实用HTE论文GitHub收藏

2价格需求曲线

2.1价格需求弹性

经济学课程里谈到价格需求弹性,描述需求数量随商品价格的变动而变化的弹性。价格一般不直接影响需求,而是被用户决策相关的中间变量所中介作用。假设 Q 为某个商品的需求的数量,P 为该商品的价格,则计算需求的价格弹性为,

假设线性:

y = a*x +b,弹性是线性。
在这里插入图片描述

通过上式可以简单知道,价格改变 1 元比价格改变 100 元,会导致更大的需求改变。比如以 5 元的价格每日可以卖 100 单位产品,如果价格需求弹性为 -3 ,那供应商将价格提升 5%(dp /P,从 5 元-> 5.25 元),需求将下降 15%(dQ/Q ,从 100->85)。那么收入将减少 1005-5.2585=53.75。如果单价降低 5%,那么收入同理将提升 46.25。如果供应商知道了产品的价格弹性,那无须反复测试,即可清楚为提升收入到底应该是提价还是降价。

2.2价格需求弹性计算DML代码

36-methods-for-data-analysis/DML.ipynb at main · Serena-TT/36-methods-for-data-analysis · GitHub

2.3价格需求弹性例子--数据集

原数据是购物篮分析数据,这个数据集包含了一家英国在线零售公司在8个月期间的所有购买行为。

同时对P / Q进行对数化处理:

# 将单价和数量取log
df_mdl = df_mdl.assign(
    LnP = np.log(df_mdl['UnitPrice']),
    LnQ = np.log(df_mdl['Quantity']),
)

 理解:P是treatment,Q是Outcome

2.4建模过程

# 混杂因子针对Q \ P 分别建模
model_y = Pipeline([
    ('feat_proc', feature_generator_full),
    ('model_y', RandomForestRegressor(n_estimators=50, min_samples_leaf=3, n_jobs=-1, verbose=0)) 
    # n_samples_leaf/n_estimators is set to reduce model (file) size and runtime
    # larger models yield prettier plots.
])
model_t = Pipeline([
    ('feat_proc', feature_generator_full),
    ('model_t', RandomForestRegressor(n_estimators=50, min_samples_leaf=3, n_jobs=-1, verbose=0))
])

# 上述模型得到预估值
# Get first-step, predictions to residualize ("orthogonalize") with (in-sample for now)
q_hat = model_y.predict(df_mdl)
p_hat = model_t.predict(df_mdl)

# 用观测值减去预测得到的值求解残差
df_mdl = df_mdl.assign(
    dLnP_res = df_mdl['dLnP'] - p_hat,
    dLnQ_res = df_mdl['dLnQ'] - q_hat,
)

# 模型训练
import joblib

try: # load existing models, if possible
    model_y = joblib.load('models/step1_model_y.joblib')
    model_t = joblib.load('models/step1_model_t.joblib')
except:
    print('No pre-existing models found, fitting aux models for y and t')
    model_y.fit(df_mdl, df_mdl.dLnQ)
    model_t.fit(df_mdl, df_mdl.dLnP)
    
    joblib.dump(model_y, 'models/step1_model_y.joblib', compress=True)
    joblib.dump(model_t, 'models/step1_model_t.joblib', compress=True)

模型残差回归

# 初始ols模型
old_fit = binned_ols(
    df_mdl,
    x='LnP',
    y='LnQ',
    n_bins=15,
)
# 初始去均值化后的ols模型
old_fit = binned_ols(
    df_mdl,
    x='dLnP',
    y='dLnQ',
    n_bins=15,
    plot_ax=plt.gca(),
)
# 残差拟合的ols模型
old_fit = binned_ols(
    df_mdl,
    x='dLnP_res',
    y='dLnQ_res',
    n_bins=15,
    plot_title='Causal regression naively, with item controls, and after DML.',
    plot_ax=plt.gca()
)
plt.gca().set(
    xlabel='log(price)',
    ylabel='log(quantity)',    
)

plt.gca().axvline(0, color='k', linestyle=':')
plt.gca().axhline(0, color='k', linestyle=':')


print(
    f'"Average" elasticity estimated using DML (now supposedly valid estimate!) to be {old_fit.params["dLnP_res"]:.3f}\n'
    'Note that this is close to our econometric contols - some difference comes from the different distribution '
    'assumptions (Poisson vs. log-normal)'
)
"Average" elasticity estimated using DML (now supposedly valid estimate!) to be -1.8

 回归模型

import statsmodels.api as sm # get full stats on regressions

def binned_ols(df, x, y, n_bins, plot=True, plot_title='', plot_ax=None, **plt_kwargs):
    # A visual form of de-noising: bin explanatory variable first, 
    # then take means-per-bin of variable to be explaioned, then regress/plot 
    x_bin = x + '_bin'
    df[x_bin] = pd.qcut(df[x], n_bins)
    
    tmp = df.groupby(x_bin).agg({
        x: 'mean',
        y: 'mean'
    })

    if plot:
        tmp.plot(
            x=x, 
            y=y,
            figsize=(18, 6),
            title=plot_title,
            ax=plot_ax,
            **plt_kwargs
        )
    
    del df[x_bin]
    mdl = sm.OLS(tmp[y], sm.add_constant(tmp[x]))
    res = mdl.fit()
    return res

2.5回归结果

 

参考

  1. DML-因果推断 - 知乎
  2. 因果推断与反事实预测——利用DML进行价格弹性计算(二十四)_悟乙己的博客-CSDN博客_dml算法
  3. 因果推断-DML - 哔哩哔哩
  4. 【因果推断/uplift建模】Double Machine Learning(DML) - 知乎
  5. https://zhuanlan.zhihu.com/p/382218715
  6. AB实验的高端玩法系列1 - AB实验人群定向/个体效果差异/HTE/Uplift Model 论文github收藏 - 风雨中的小七 - 博客园
  7. CausalInference - 标签 - 风雨中的小七 - 博客园
  8. 数据分析三十六计
  9. GitHub - Serena-TT/36-methods-for-data-analysis
  10. 如何用Python建立OLS线性回归模型?(stack,sm.OLS) - 知乎
  11. 机器学习之线性回归——OLS,岭回归,Lasso回归_cpLoners的博客-CSDN博客_lasso与ols

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(强制)类型转换方法

目录 一、C语言中的类型转换 二、C中的强制类型转换 2.1 static_cast 2.2 reinterpret_cast 2.3 const_cast 2.4 dynamic_cast 2.5 总结 一、C语言中的类型转换 在C语言中,若赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或…

[PyTorch笔记]深度学习计算

[PyTorch笔记]深度学习计算1 层和块1.1自定义神经网络块1.2顺序块1.3在前向传播中执行代码2.参数管理2.1 访问参数、用于调试、诊断和可视化2.2 参数初始化2.2.1内置初始化:2.2.2 自定义初始化2.3 在不同模型组件间共享参数3.延后初始化4.自定义层4.1 不带参数的层4…

深入理解数据结构 —— 跳表

什么是跳表 只要是平衡搜索二叉树能实现的功能,跳表都能实现,且时间复杂度都相同 例如: 哈希表的功能:插入,查找,删除有序表的功能:查找大于某值最小的数,小于某值最大的数&#…

干货 | 数据跨境传输合规体系的构建思路

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分:研究背景随着经济活动数字化转型加快,“数据”对生产、流通、分配和消费活动产生重要影响,成为新的生产要素。地区之间数据流通愈发频繁,…

图像频域滤波(理想低通滤波)

图像变换是对图像信息进行变换,是能量保持但重新分配,利于加工处理。这里主要介绍傅里叶变换的图像频域滤波。 图像从空间域变换到频域后,其低频分量对应图像中灰度值变化较为缓慢的区域,高频分量表征图像中物体的边缘和随机噪声等…

基于yolov5的钢材表面缺陷识别(pycharm连接远程服务器,老版本yolov5运行遇到的问题)

时间:2023年1月 1 pycharm远程连接服务器 提示:需要下载pycharm专业版。 参考文献: [1] [2] [3] [4] 设置解释器的界面有一些不同,在此截图记录一下。 (这是已经弄好了之后回头截图的,假设它不存在哈) …

【寒假每日一题】洛谷 P6206 [USACO06OCT] Another Cow Number Game G

题目链接:P6206 [USACO06OCT] Another Cow Number Game G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 奶牛们在玩一种数字游戏,Bessie 想让你帮她预测一下结果。游戏开始时,Bessie 将得到一个正整数 N。此时她的分数为 0。 奶…

C 程序设计教程(07)—— 数据类型转换

C 程序设计教程(07)—— 数据类型转换 该专栏主要介绍 C 语言的基本语法,作为《程序设计语言》课程的课件与参考资料,用于《程序设计语言》课程的教学,供入门级用户阅读。 目录C 程序设计教程(07&#xff…

mysql学习总结(一)

总结一下近期学习的mysql内容:这里主要总结一下mysql的底层数据结构索引的本质是什么?索引的本质就是排好序的一种数据结构,通过索引我们能干什么呢?,快速的去定位到我们想要查找的数据,就像是你看书&#…

Ansible 介绍与实战操作演示

文章目录一、概述二、Ansible 架构三、Ansible 工作原理四、Ansible 安装与基础配置1)开启记录日志2)去掉第一次连接ssh ask确认五、Ansible 的七个命令1)ansible2)ansible-doc3)ansible-playbook4)ansible…

非线性系统辨识:非线性 ARX 和 Hammerstein-Wiener

1. 系统辨识 系统辨识是根据系统的输入输出时间函数来确定描述系统行为的数学模型。现代控制理论中的一个分支。通过辨识建立数学模型的目的是估计表征系统行为的重要参数,建立一个能模仿真实系统行为的模型,用当前可测量的系统的输入和输出预测系统输出…

Js逆向教程25-BOM DOM过检测

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 Js逆向教程25-BOM DOM过检测 一、JS BOM 检测 它是一种浏览器环境,脱离了浏览器在外部不能直接调用的就是BOM 在浏览器中…

SAP工作流对象类

目录 1. 实现IF_WORKFLOW接口 2. 创建流程属性 3. 接口方法参考 4. 定义事件 5. 工作流触发(事件抛出) 业务对象作为工作流的数据内核,也是联系业务流程和工作流的重要核心,体现形式一般为BOR或者业务对象类,用来标识不…

SpringCloud从入门到精通(六)

Hystrix-熔断器 Hystrix-概述 • Hystix 是Netflix 开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败(雪崩)。• 雪崩:一个服务失败,导致整条链路的服务都失败的情形 Hystix 主要功…

【Neo4j构建知识图谱】:cypher操作语言加载 CSV电影人数据集链接文件

这目录 数据链接来源1、创建约束2、从 CSV 文件添加节点3、从 CSV 文件添加关系4、运行cypher查询5、清理数据库参考CSV 文件可以使用LOAD CSV密码条款。出于安全原因,无法加载本地CSV文件,这些文件必须在HTTP或HTTPS服务器(如GitHub,Google Drive和Dropbox)上公开访问。使…

Python 中将列表中的每个元素除以一个数字

Python 中将列表中的每个元素除以一个数字: 使用列表理解来遍历列表。在每次迭代中,将当前列表元素除以数字。新列表将包含除法结果。 my_list [8, 12, 20]# ✅ divide each element in list by number new_list [item / 2 for item in my_list] pri…

雪花算法笔记

SnowFlake 雪花算法 SnowFlake 中文意思为雪花,故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本。 实现原理 雪花算法原理就是生成一个的64位比特位的 long 类型的唯一 id。 最高1位固定值0,因…

React Context 完美替代品 Jotai

1. 前言 React 的属性透传场景 虽然有很多方式可以实现,但能做到代码写的少、re-render 轻松处理的方式并不多。 而状态管理工具 Jotai 却可以很好的解决这些问题。 最近的业务和组件场景里 也在用此方式实现。 2. React Context 的不足 常规解决数据透传通常使…

BUUCTF 之 [ACTF2020 新生赛]Exec(命令执行漏洞)

BUUCTF 之 [ACTF2020 新生赛]Exec(命令执行漏洞)相关观察进攻相关 项目内容难度简单类型WEB靶场BUUCTF坐标Exec观察 这界面和这网页标题结合起来,相信给位都能猜到这个靶场中很有可能存在命令执行漏洞。 进攻 构造如下语句显示当前路径中的…

Learning Monocular Visual Odometry via Self-Supervised Long-Term Modeling

Paper name Learning Monocular Visual Odometry via Self-Supervised Long-Term Modeling Paper Reading Note URL: https://arxiv.org/pdf/2007.10983.pdf TL;DR ECCV 2020 文章,该文章认为在短时间序列上训练无法在长时间序列上良好泛华,所以受到…