机器学习模型中的因果关系:引入单调约束

单调约束是使机器学习模型可行的关键,但它们仍未被广泛使用欢迎来到雲闪世界。

碳ausality 正在迅速成为每个数据科学家工具包中必不可少的组成部分。

这是有充分理由的。

事实上,因果模型在商业中具有很高的价值,因为它们为“假设”情景提供了更可靠的估计,特别是在用于做出影响业务结果的决策时。

在本文中,我将展示如何通过简单的更改(实际上添加一行代码)将传统的 ML 模型(如随机森林、LightGBM、CatBoost 等)转变为回答因果问题的可靠工具。

因果 ML 模型与传统 ML 模型

假设我们在一家房地产公司工作,公司的业务是购买房屋,然后以更高的价格转售。

我们收集了过去交易过的房屋数据。数据集包含 3 个变量:

  • “平方英尺”,房屋的平方英尺数;
  • “整体状况”,对房产整体状况的数字评分,评分范围为 1 至 9(分数越高越好);
  • “房屋售价”,即房屋最终售出的价格。

以下是数据集中的前 5 栋房屋:

[作者图片]

与以相同方式处理所有特征的传统 ML 模型相比,因果 ML 模型区分了两种类型的特征:

  • 协变量特征,仅可观察到的特征;
  • 处理特征,这些特征可能会受到决策者(在本例中为我们的公司)的影响。

在我们的案例中,我们当然无法改变房屋的面积。我们能做的是通过装修改善房产状况,希望这会影响目标变量(即我们能够以更高的价格出售房屋)。

因此“平方英尺”是一个协变量特征,“整体状况”是一个治疗特征。

[作者图片]

因果模型的主要优势是能够回答因果(或“假设”)问题。

例如,假设我们公司刚刚购买了一栋新房,建筑面积为 3,000 平方英尺,当前状况评级为 5。该公司有两种选择:

  • 按原样出售房屋;
  • 花费 30,000 美元翻新房屋,将状况评级从 5 提高到 7,然后出售。

[作者图片]

公司应该做什么?

“我们应该装修这所房子吗?”

我们是数据科学家,所以我们首先想到的就是训练一个机器学习模型来预测房屋在装修前后的最终价格。

假设我们决定为此目的使用决策树。我们首先在训练数据集上拟合模型:

从sklearn.tree导入DecisionTreeRegressor decision_tree = DecisionTreeRegressor( max_depth= 3 , min_samples_leaf= 10) decision_tree.fit(X_train, y_train)

然后,我们使用该模型预测两种情况下(有或无装修)的销售价格。

X = [ [3_000, 5],3_000 , 5 ], [ 3_000 , 7 ] 
]决策树.预测(X)

以下是结果:

[作者图片]

我希望你不要与销售部门分享这些结果——他们可能会禁止你再次说“机器学习”

他们说得对。这个结果显然是荒谬的。通过翻修改善房屋状况怎么会降低其价值,使其从 36 万美元降至 24.7 万美元呢?

我们的模型肯定有问题。

由于该模型仅基于两个特征,我们可以在二维热图中直观地看到预测阈值:

[作者图片]

这个模型中有几件事完全没有意义:

  • 对于面积在 1,150 到 1,500 平方英尺之间的房屋,将其状况从 5 或更低改善到 6 或更高,会使其价值从 174,000 美元降低到 145,000 美元。
  • 同样,对于面积超过 2,300 平方英尺的房屋,将其状况从 5 或更低改善到 6 或更高,会使其价值从 36 万美元降低到 24.7 万美元。

我们不能相信这些预测。我们确信房屋装修后的价值不可能低于装修前的价值,所以我们需要一种方法将这一常识“转移”到我们的模型中。

引入单调约束

我们的 ML 模型的一个理想特性是,在我们改善房屋状况后,模型应该预测一个大于或等于原始值的值。相反,如果房屋状况更糟,则该值应该更小或相等。

因此,让我们以数据点(面积为 3,000 平方英尺且状况评级为 5 的房屋)为例,并可视化我们希望模型捕捉到的这个属性。

[作者图片]

这被称为“单调约束”,因为它没有说明关系的类型(线性、二次……),而只说明了关系的方向(非减少与非增加)

这个要求比线性约束(即线性回归施加的约束)弱得多,这是很好的,因为:

自然界中很少有关系是线性的,但自然界中的许多关系都是单调的。

这就是为什么线性回归通常表现不佳的原因:它对模型施加了线性约束,这在大多数实际情况下是一个不切实际的强假设。

薪水会随着经验的增加而增加吗?会,但只是单调增加,而不是线性增加。冰淇淋销量会随着温度的升高而增加吗?会,但只是单调增加,而不是线性增加。你懂的。

对于每个特征,我们可以想象以下三种情况之一:

  • +1:当特征增加时,预测必须大于或等于;
  • 0:没有单调约束(默认);
  • -1:当特征增加时,预测必须更小或相等。

基于我们所说的,我们需要在称为“整体状况”的特征上添加“+1”单调约束,以确保更好的分数始终对应于更高或相同的价格。

但是“平方英尺”又如何呢?

从视觉上看,这是仅对特征“整体条件”应用单调约束与将其应用于两个特征之间的区别:

[作者图片]

让我们看看左边的图。如果我们只对“整体状况”应用单调约束,我们就无法对面积不同的房屋做出任何判断。在这种情况下,我们会得到:

  • (平方英尺:3,000,整体状况:5)-> 价格:x;
  • (平方英尺:3,000,整体状况:7)-> 价格:y ≥ x
  • (平方英尺:4,000,整体状况:7) -> 价格:z,可能高于或低于xy,因为对变量“平方英尺”没有限制。

相反,在右侧的图中,我们对两个特征都应用了正约束,因此:

  • (平方英尺:3,000,整体状况:5)-> 价格:x;
  • (平方英尺:3,000,整体状况:7)-> 价格:y ≥ x
  • (平方英尺:4,000,整体状况:7)-> 价格:z ≥ y ≥ x

我认为第二种情况更符合我们的直觉。

请注意,在这些图中,我们观察了单调约束对坐标为 (3,000, 5) 的单个数据点的影响,但相同的推理也适用于数据集内的任何数据点

让我们看看将这些单调约束应用到我们的预测模型后会发生什么。

在 Python 中强制执行单调约束

好消息是,单调约束得到了最流行的 Python ML 库(如 Scikit-learn、LightGBM 和 CatBoost)的支持,只需添加一行代码即可应用。

就我们的决策树而言:

decision_tree_with_constraints = DecisionTreeRegressor(max_depth=3, 3, min_samples_leaf=10,monotonic_cst=[1,1] # this line of code adds monotonic constraints
)decision_tree_with_constraints.fit(X_train, y_train)

我们现在可以将非约束模型(左图)的预测热图与约束模型(右图)的预测热图进行比较。

[作者图片]

新的预测(右侧图表)更有意义。事实上,它们对于“平方英尺”和“总体状况”而言都是非减少的。

但决策树可能过于简单。所以,现在让我们尝试使用性能更高的模型,例如 CatBoost。

catboost = CatBoostRegressor(silent=TrueTrue
)catboost_with_constraints = CatBoostRegressor(silent=True, monotone_constraints={"square feet": 1, "overall condition": 1}

我们可以使用 CatBoost 来模拟假设情景。例如:如果我们改变面积分别为 500、1,000、2,000 或 3,000 平方英尺的房屋的“整体状况”,会发生什么?

这也被称为敏感性分析,因为它根据输入变量(房屋的整体状况)的变化来测量结果(我们的模型预测的销售价格)的敏感性。

[作者图片]

受约束的版本比不受约束的版本好得多。

事实上,在约束模型中,面积较小的房屋(500 至 1,000 平方英尺)的预测价格会平稳上升。与此同时,面积较大的房屋(2,000 至 3,000 平方英尺)的状况评分提高会导致价格大幅上涨。

这给出了一个非常直接的商业见解:如果一栋房子面积很大,但状况很差(评分为 4 分或更低),那么对其进行翻新以高得多的价格出售是合理的。但是,将房屋状况改善到 5 分以上是没有意义的,因为这不会带来实质性的额外价值。

受约束模型的预测比不受约束模型的预测更容易解释。但它们的表现如何呢?例如 R 平方?

[作者图片]

不仅约束模型的样本外性能要好得多(57% 对 53%),而且约束模型的 R 平方也明显低于无约束模型的 R 平方(55% 对 72%)。

这意味着,与不受约束的模型相比,具有单调约束的模型过度拟合的程度要小得多

这很有道理:通过施加单调约束,我们将一些关于世界的知识“转移”到模型中。这基本上就像是免费数据!

结论

在本文中,我们已经看到,向 ML 模型添加单调约束可能是一个好主意,原因如下:

  • 提高回答影响商业决策的“假设”问题的可靠性;
  • 在您选择的指标(例如 R 平方)方面表现更佳;
  • 更少的过度拟合,因为我们直接将我们对世界的一些知识(或常识)转移到模型中。

换句话说,单调约束似乎是两个相反极端之间的最佳点:允许模型完全自由(传统的“让数据说话”方法)与强加不切实际的强烈假设(例如线性回归)。

感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)

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

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

相关文章

【详解 Java 注解】

前言: 注解(Annotation)是Java中的一种特殊符号,用来为代码提供额外的信息。它不会改变程序的逻辑,只是用来给编译器或工具提供指示。例如,Override 表示一个方法是重写了父类的方法,Deprecated…

# AI企业是否会被国有化?——基于SB 1047法案的讨论与Anthropic创始人Dario Amodei访谈分析

随着人工智能(AI)技术的快速发展,政府、企业和公众逐渐认识到AI的潜在影响力,尤其是在国家安全、经济竞争力以及社会变革等方面。近日,Anthropic创始人Dario Amodei在一档访谈中深入探讨了AI产业的未来发展&#xff0c…

python 中使用tkinter构建一个图片的剪切器-附源码

由于项目需要,需要构建一个间的软件,方便查看图片的剪切的位置,并对其中的图像进行分析,实现如下的功能 简单的UI加载图片剪切图片显示剪切后的图片 针对图片的内容进行识别 图片质量分析 前端的具体代码如下, 有需…

频谱分析仪和人工电源网络

安泰小课堂里面有详细的频谱分析仪的教程,可以学习: 【快速上手实操秘籍|频谱分析仪超详细基础操作|建议收藏】https://www.bilibili.com/video/BV1Wu4y197LW?vd_source3cc3c07b09206097d0d8b0aefdf07958 、、、、、、、、、、、、、、、、、、、、、…

Java 面试题:通过JProfile排查OOM问题 内存溢出与内存泄漏问题 --xunznux

文章目录 如何通过JProfile排查OOM或内存泄漏问题1、启动工具观测程序执行状态2、使用默认设置采样3、查看memory,Run GC无效4、查看 Live Memory发现两个byte大数组存在5、通过快照查看堆中的内存使用情况6、找到Full GC无法清除的对象通过大对象列表定位内存泄漏问…

Linux-【组管理、权限管理、定时任务调度】

目录 前言 Linux组基本介绍 文件/目录 所有者 查看文件 所有者 修改文件所有者 文件/目录 所在组 修改文件/目录 所在组 其它组 改变用户所在组 权限的基本介绍 rwx权限 rwx作用到文件 rwx作用到目录 修改权限 第一种方式:、-、变更权限 第二种方式…

openwrt的旁路模式无法访问国内网站

防火墙: 常规设置-> 区域: lan-> wan :编辑 IP 动态伪装:勾选

关于 QImage原始数据格式与cv::Mat原始数据进行手码数据转换 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141996117 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

久久公益节||“携手万顺叫车一起做公益”

99公益日是由腾讯公益联合多家公益组织、企业及社会各界爱心人士共同举办的年度大型公益活动。随着99公益日的到来,同悦社工诚挚地邀请了万顺叫车一起参与今年的公益活动,共同为社会公益事业贡献力量。 在本次公益倡导活动中,万顺叫车将发挥其…

无人机飞控之光流知识小结

要完成飞行器的定位,则必须要有位置的反馈数据。在户外,我们一般使用GPS作为位置传感器,然而,在室内,GPS无法使用,要完成定位功能,可以选用光流传感器。 本讲主要介绍如何通过下视摄像头估计飞…

AtCoder ABC 359 F 题解

本题要看出性质并进行验证,程序难度低。(官方 Editorial 似乎没有写证明过程?难道是过于显而易见了吗…) 题意 给你一个数组 a a a,对于一棵 n n n 个节点的树 T T T, d i d_i di​ 为每个节点的度&am…

Gitness 基础安装

文章目录 Docker 安装注册账户创建项目导入已有仓库配置 Github Token同步源代码仓库 官方链接 Gitness was the next step in the evolution of Drone, from continuous integration to source code hosting, bringing code management and pipelines closer together. Gitnes…

八、Maven总结

1.为什么要学习Maven? 2.Maven 也可以配华为云和腾讯云等。 3.IDEA整合Maven 4.IDEA基于Maven进行工程的构建 5.基于Maven进行依赖管理(重点) 6. Maven的依赖传递和依赖冲突 7. Maven工程继承和聚合 8.仓库及查找顺序

解决面板安装Node.js和npm后无法使用的问题

使用面板(BT)安装Node.js和npm后,可能会遇到如下问题:即使成功安装了Node.js和npm,服务器仍提示“未安装”,在命令行中使用 node -v 或 npm -v 也没有任何响应。这种问题通常是由于环境变量配置错误或路径问…

【Hot100】LeetCode—215. 数组中的第K个最大元素

目录 1- 思路快速选择 2- 实现⭐215. 数组中的第K个最大元素——题解思路 3- ACM实现 原题连接:215. 数组中的第K个最大元素 1- 思路 快速选择 第 k 大的元素的数组下标: int target nums.length - k 1- 根据 partition 分割的区间来判断当前处理方式…

使用Node-API进行线程安全开发

一、Node-API线程安全机制概述 Node-API线程安全开发主要用于异步多线程之间共享和调用场景中使用,以避免出现竞争条件或死锁。 1、适用场景 异步计算:如果需要进行耗时的计算或IO操作,可以创建一个线程安全函数,将计算或IO操作放…

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本,有图有真相: 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动:zram,我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑,完整梳理完这个逻辑将对Linux块设备驱…

旅拍景区收银系统+押金原路退回+服装租赁-SAAS本地化及未来之窗行业应用跨平台架构

一、景区旅拍一体化系统 序号系统说明1提成系统用于给照相馆介绍照相拉客的人自动计算提成2押金系统用于服装租赁(汉服租赁),设备租赁 ,支持押金原路退回3收银系统计算每天收银汇总,月度收银汇总,支出4提成…

云原生之高性能web服务器学习(持续更新中)

高性能web服务器 1 Web服务器的基础介绍1.1 Web服务介绍1.1.1 Apache介绍1.1.2 Nginx-高性能的 Web 服务端 2 Nginx架构与安装2.1 Nginx概述2.1.1 Nginx 功能介绍2.1.2 基础特性2.1.3 Web 服务相关的功能 2.2 Nginx 架构和进程2.2.1 架构2.2.2 Ngnix进程结构 2.3 Nginx 模块介绍…

PyInstaller问题解决 onnxruntime-gpu 使用GPU和CUDA加速模型推理

前言 在模型推理时,需要使用GPU加速,相关的CUDA和CUDNN安装好后,通过onnxruntime-gpu实现。 直接运行python程序是正常使用GPU的,如果使用PyInstaller将.py文件打包为.exe,发现只能使用CPU推理了。 本文分析这个问题…