TowardsDataScience 博客中文翻译 2022(四百三十)

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

为什么 ELT 不能解决您的数据问题

原文:https://towardsdatascience.com/why-elt-wont-fix-your-data-problems-11cef8340850

意见

改善您的数据基础设施和数据文化需要的不仅仅是华丽的管道

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由来自 PixabayHatice EROL 提供

历史喜欢重演。

换句话说:我们人类有一种天赋,伪装成新事物,一次又一次地给自己制造同样的问题。

数据栈和数据管道也不例外。

今天的数据基础设施格局由“现代数据栈”(即,一个围绕云数据仓库的数据栈)和 ELT 管道主导。

这种模式无疑是旧模式的一个进步,但它并没有把我们从旧问题中拯救出来。如果我们不小心,现代数据堆栈和 ELT 可能会导致困扰我们多年的问题再次出现。即:

  • 数据生命周期中的工程瓶颈。
  • 工程师和数据消费者之间的脱节。
  • 对数据的普遍不信任。

这些问题都是可以避免的,尤其是有了今天的技术。因此,让我们深入了解它们真正的来源,以及如何才能真正预防它们。

ETL 和 ELT:复习

到目前为止,您可能已经厌倦了阅读 ETL 和 ELT 数据管道的比较。但以防万一,这里还有一个!

在数据能够被操作化,或者投入工作以满足业务目标之前,必须收集和准备数据。数据必须从外部来源提取转换为正确的形状,加载到存储系统。

数据转换可能发生在数据到达存储之前或之后。简单地说,这就是 ETL 和 ELT 管道的区别。虽然在现实中,并不是这么简单的划分

今天,我们倾向于将 ELT 管道作为与 ETL 相比的尖端解决方案来讨论。经常引用的理由是,通过将转换留到以后:

  • 数据可以更快地进入存储。
  • 对于不同的用例,我们可以更灵活地决定如何处理未转换的数据。

这两件事都不一定是真的。我们一会儿会谈到原因。

首先,我想谈一谈为什么 ETL 开始被负面看待。

ETL 的问题是

加载之前进行转换本身并没有什么不好。

术语“ETL”的含义已经不止于此。它让我们想起了遗留的基础设施,在许多情况下,这些基础设施至今仍在引发问题。它意味着一个定制的,手工编码的工程解决方案。

在数据工程的早期,数据用例通常不太多样化,对组织的日常运作也不太重要。在技术层面上,内部数据存储限制了公司可以合理保留的数据量。

鉴于这两个因素,为每个用例手工编写 ETL 管道是有意义的。在加载之前,数据经过了大量的转换和删减。这达到了节省存储和为预期用途准备数据的双重目的。

ETL 管道并不难编码,但事实证明大规模维护它们是有问题的。因为它们经常被嵌入到组织的数据基础中,所以很难被移除。如今,发现企业的数据架构仍然依赖于成千上万个独立的、菊花链状 ETL 作业并不罕见。

数据工程师的工作变成了编写看似永无止境的 ETL 代码,并在出现问题时灭火。对于基于 ETL 的架构,很难有足够大的工程团队来处理这种工作负载,并且随着数据量不可避免地扩大,很容易落后。

ETL 的问题在于它在规模上效率低下,这导致了工程资源的瓶颈。

这个问题以多种方式出现:

  • 需要持续的专门工程来处理各种不断变化的用例
  • 工程倦怠和难以雇用足够的工程师来处理工作量
  • 断开工程师(理解技术问题)和数据消费者(理解业务需求和结果)之间的联系
  • 由于结果不一致,对数据不信任

随着近年来数据量的爆炸式增长,这些问题已经从不便变成了阻碍。

进入现代数据堆栈。

英语教学问题和现代数据堆栈

正如我们之前提到的,现代数据栈的关键是云数据仓库。云数据仓库的兴起从两个主要方面促进了 ELT 管道的发展:

  • 几乎无限制、相对廉价的云中扩展消除了存储限制
  • 数据转换平台(一个流行的例子是 dbt)被设计用来转换仓库中的数据

考虑到对定制 ETL 日益增长的不满,近年来钟摆戏剧性地转向支持 ELT 是有道理的。

乍看之下,不受约束的 ELT 似乎是个好主意。我们可以将所有数据放入仓库,并在需要时出于任何目的对其进行转换!会出什么问题呢?

ELT 与新的工程瓶颈

下面是可能出错的地方:即使有了现代的数据堆栈和先进的 ELT 技术,许多组织仍然发现自己遇到了工程瓶颈。只是处于数据生命周期的不同点。

当可以不加选择地将数据传输到仓库时,不可避免地,人们会这么做。尤其是如果他们不是同一批人,以后还得清理数据。这不是恶意的;这仅仅是因为数据生产者、消费者和工程师都有不同的优先级,并且以不同的方式思考数据。

今天,参与其中的工程师不仅仅是的数据工程师。我们还有的分析工程师。分析工程的概念是 dbt 在他们的分析平台的流行创造了一个新的专业领域后创造的。除了平台,这一新的专业人士浪潮更少关注基础设施本身,而是更多地关注转换和准备消费者可以操作的数据(换句话说,准备数据产品)。因为职称可能会变得令人费解,所以从现在开始我就只说“工程师”了。

看待这个问题的一种方式是:许多工程师致力于促进英语教学中的“T”。然而,源源不断的原始数据会把数据仓库变成一片数据沼泽,工程师们几乎无法幸免。

数据消费者需要转换后的数据来满足他们的业务目标。但是如果没有工程师的帮助,他们无法访问它,因为它在仓库里处于不可用的状态。根据输送到数据仓库的内容,整理数据在各方面都很困难。

这种模式可能会导致以下问题:

  • 需要持续的专门工程来处理各种不断变化的用例
  • 工程倦怠和难以雇用足够的工程师来处理工作量
  • 断开工程师(理解技术问题)和数据消费者(理解业务需求和结果)之间的联系
  • 由于结果不一致,对数据不信任

听起来熟悉吗?

数据治理的重要性

最终,现代数据堆栈不是一颗神奇的子弹。要确定它是否有价值,你必须从业务成果的角度来看。

任何数据基础设施都是如此。

数据进入仓库的速度有多快,或者有多少都不重要。重要的是你能从*可操作化的数据中获得多少商业价值:*也就是说,在数据仓库的另一边已经投入使用的转换数据。

确保运营数据离开仓库的最佳方式是确保进入仓库的数据经过精心策划。这并不意味着应用成熟的、特定于用例的转换,而是在摄取期间执行基本的清理和建模。

这为工程团队的成功奠定了基础。

没有办法避开数据治理和建模。幸运的是,有许多方法可以完成这项任务。

这里有几件事可以帮助你。

遵循新概念指导方针,比如数据网格。

数据网格没有为架构和治理提供脚本。然而,它确实提供了有用的框架,可以在现代数据堆栈的背景下微调您组织的指导方针。Data mesh 非常强调数据如何在组织中移动的人的方面,而不仅仅是基础设施的技术方面。

例如,让领域驱动的团队拥有数据的整个生命周期可以帮助涉众看到更大的图景。数据生产者不太可能不加选择地将数据转储到数据仓库中,工程师将更加了解如何使用数据,消费者可以对他们的数据产品产生更多的信任。

在你的管道中建立质量控制

您的入站数据管道处于把关数据质量的最佳位置—利用这一优势!

对于给定的数据源,您的管道应该监视您的数据的形状;例如,通过遵循一个模式。理想情况下,在将数据放入仓库之前,应该对不符合模式的数据进行基本转换。

如果管道被要求引入它不能自动清理的杂乱数据,它应该停止,或者至少提醒您这个问题。

是的,这可能意味着“真正的 ELT”永远不存在,因为转换发生在数据仓库之前和之后。

在不牺牲速度的情况下,相对容易地实现这一点是可能的。因为预加载转换是基本的,它们不应该限制您能够对数据做什么。相反,从仓库中干净的数据开始提供了更多的灵活性。

所有这一切都要归功于当今市场上数据平台的大量涌现。您可以使用类似 Airflow 的工具来协调和监控您的管道。或者,您可以建立一个观察平台,使您现有的 ELT 管道更加透明。

在河口,我们提供我们的平台 Flow ,作为替代解决方案。

Flow 是一个实时数据操作平台,旨在创建连接堆栈所有组件的可扩展数据管道。它结合了 ELT 平台的功能和数据编排特性。

通过流传输的数据必须遵循一个模式,或者被动态转换。可以进行实时报告和监控,并且该平台的架构可以从故障中恢复。

超越英语教学和现代数据堆栈

管理公司内的数据和利益相关者总是需要战略思维和治理。

新的范式不会改变这一事实,尽管人们很容易这么想。现实是困扰 ELT 和现代数据栈的问题与那些使 ETL 不可持续的问题非常相似。

幸运的是,现在有很多工具可以大规模实现有效的治理和数据建模。有效地使用它们,虽然具有挑战性,但却是非常可能的。

本文原载于 河口博客 。在LinkedInGithub上找到我们的团队。

为什么每个数据科学家都应该学习数学优化

原文:https://towardsdatascience.com/why-every-data-scientist-should-learn-mathematical-optimization-3ac102663456

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

阿曼德·库利在 Unsplash 上拍摄的照片

数据科学课程侧重于数据可视化、特征工程、数据处理、(无)监督学习、聚类、编程、深度学习,有时还包括数据工程。优化不是这些课程的一部分,大部分甚至没有提到!这是一个遗憾,因为它可以在许多业务流程中增加价值。优点是它的灵活性,简易性和牢固性。它拥有机器学习无法完成的能力。通过优化,你可以做出决策,而通过机器学习,你可以做出预测。好奇?继续读!

数据分析的四种类型

如果你熟悉这四种类型的数据分析,你可以跳过这一节。

在下图中,您可以找到四种类型的分析。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四种类型的分析:描述性、诊断性、预测性和规定性分析。图片作者。

  1. 描述性分析
    这种类型侧重于总结过去的数据。它被广泛用于跟踪 KPI。数据显示在仪表盘或报告中,并且每天、每周或每月持续更新。这是最简单的分析。你从数据库中提取数据,你可以开始可视化。
  2. 诊断分析 深入挖掘,找出事情发生的原因,诊断分析就来了。这种类型的分析采用从描述性分析中发现的见解,并深入寻找这些结果的原因。一个例子是根本原因分析。
  3. 预测分析
    预测分析想要告诉你一些关于未来的事情,预测可能会发生的事情。这是使用预测或机器学习技术来完成的。
  4. 规定性分析 关于“下一步最好做的事”的建议属于规定性分析。在当前的情况下,决定采取什么样的行动是很困难的,但是这就是为什么规定性分析有可能为企业增加更多的价值。这里可以使用人工智能或数学优化(除了其他技术)。

最佳化

数学优化属于规定分析部分,这使它成为一种真正有价值的技术。它广泛应用于能源、医疗保健、物流、体育赛事、金融、制造和零售等领域。你可以优化包裹的路线,选择最具成本效益的方式来提供电力,创建工作时间表或以诚实的方式分配任务。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马修·史密斯Unsplash 上拍照

但是到底什么是数学优化呢?它是如何工作的?这一切都始于一个业务问题。想象一下,你是一家快递公司的一员,你发现包裹到达客户手中的时间太晚了。你收到投诉并开始分析。你的送货过程一定有问题。你会发现每个快递员只是随机抽取一定数量的包裹进行递送。在递送一个包裹后,递送者使用谷歌地图来查找如何到达下一个地址。哇,这么多优化的可能性!你开始思考:如果送货车装满了包裹,包裹离得很近,送货人沿着最短的路线走,会怎么样?这将对交付过程产生巨大的影响!交货时间将会改善,这将导致更少的投诉和更满意的客户!递送员可以在更短的时间内递送更多的包裹,并且货车使用更少的燃料。只有赢在这里!🎉

为送货人寻找最佳路线、选择彼此靠近的包裹以及装满货车都是可以使用优化解决的例子。要解决这类问题,您应该采取以下步骤:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

你应该从理解问题开始。这包括定义问题,设定界限,与利益相关者交谈,找出你想要最小化或最大化的价值。

下一步(通常也是最难的一步)是对问题建模。你应该把你在第一步中发现的一切都转化为数学。这意味着定义变量约束目标。你可以把变量想象成你可以影响的值。例如,如果您想选择 x 个彼此相邻的包裹,每个包裹将收到一个组号。与包相关的组号可以是变量。约束是您希望在模型中使用的限制。假设一辆货车最多可以装载 600 公斤的包裹,这是一个限制的例子,一辆货车所选包裹的总重量不能超过 600 公斤。最后但同样重要的是,目标是您想要最大化或最小化的公式。如果我们在讨论一个路径问题,你可以想象你想要最小化总的旅行里程数。使用数学对问题建模后,您可以继续下一步。

如果你正确地做了前面的步骤,并且知道如何编码,解决这个问题并不难。对于求解步骤,你需要一个框架和一个求解器。一些示例框架是 pyomo或 toolspulpscipy 。自由解算器的例子有 cbcglpkipopt 。也有可用的商业解算器,它们要快得多,如果你想解决有许多变量和约束的问题,你应该使用商业解算器。你用 Python 编写你的问题例如,你调用求解器并等待结果。现在可以继续最后一步了。

您可以分析求解器得出的结果,以发现性能的提高。您可以将这些结果与当前的流程进行比较,看看是否值得将该模型投入生产以不时地优化您的流程。

如果你想在简单的现实生活例子中看到这些步骤,你可以在这里找到它们。本文讨论更高级的概念。

结论

优化是如此强大,每个数据科学家都应该能够实现它,或者至少熟悉它解决复杂业务问题的可能性。这是对机器学习的补充,因为你可以做决定,而不是预测。不需要带标签的数据。此外,当数据分布发生变化时,没有必要重新训练模型。

感谢阅读,享受优化!❤

除了上面提到的文章,如果你想开始学习优化的基础知识,我可以推荐这个 Udemy 课程OR 工具示例

有关系的

别忘了 订阅 如果你想在我发表新文章时收到电子邮件。

为什么每个软件工程师都应该学习 SQL

原文:https://towardsdatascience.com/why-every-software-engineer-should-learn-sql-ae3d7192a8d9

通过合理利用数据库来加速你的程序

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

托比亚斯·菲舍尔在 Unsplash 上拍摄的照片

几乎每个软件应用程序都依赖于将数据存储在可访问的地方。对于小的脚本和程序,这通常是在计算机的内存中,或者有时只是作为本地磁盘上的纯文本或二进制文件。

然而,较大的应用程序几乎肯定会使用存在于程序本身外部的数据库,而目前最流行的数据库技术是关系数据库。大多数关系数据库都可以使用结构化查询语言(SQL)进行查询,因此对于软件工程师来说,除了对 SQL 有基本的了解之外,还必须编写与数据库交互的高效代码。

如果你在想“哦,但是我已经知道如何从我的数据库中选择数据,肯定不会比这难太多”,再想想吧!我见过很多代码使用一个for循环来完成一项任务,而使用 SQL JOIN子句可以更快更简单地完成这项任务。

本文将使用一个非常基本的例子来展示正确使用 SQL 的强大功能。本文的代码是用 Python 编写的,使用的是 SQLAlchemy ORM 库,但是我将包括程序打算模拟的原始 SQL,以便更加与语言无关。

虽然示例和测试看起来很简单,但这是根据我在生产中看到的真实代码改编的,所以请注意!

TL;DR:SQLJOIN实现要快得多。

这个例子

我将使用的例子是一个在线商店。该数据库将包含一个users表和一个orders表,其中将存储网站用户的信息以及这些用户下的任何订单。每个表都有一个 ID 列,而orders表包含一个user_id列,该列包含一个引用users表的外键。

计算机编程语言

结构化查询语言

测试设置

如您所见,每个order都有一个payment_status列,其中包含一个布尔值,表示订单是否成功支付。目的是测试一个函数,该函数找到至少有一个失败订单的用户,并返回一组描述这些用户的User对象。

测试将在本地 dockerised MySQL 数据库上运行,该数据库使用以下docker-compose.yml文件创建:

该数据库将预加载一些使用 Python faker库生成的用户和订单。该测试将针对 10、100 和 1000 个用户和订单的每种组合运行,并使用 Python timeit库对 100 多次迭代进行计时。

为了避免数据库缓存使用的不一致性,每个查询都将带有前缀SQL_NO_CACHE标志。

将有两个测试函数。我们将使用一个简单的 Python 实现,包括查询失败的订单,然后遍历结果,并在每次迭代中对users表运行 select 语句,以生成一组至少包含一个失败订单的User对象。第二个实现将使用 SQL JOINDISTINCT在单个查询中生成同一组用户。

函数的代码如下所示。

计算机编程语言

结构化查询语言

从代码中可以清楚地看出,使用 SQL JOIN 的实现将只进行一次数据库查询,而更简单的 Python 实现将进行最少 1 次最多 N 次查询,其中 N 是orders表中的行数。

结果呢

毫不奇怪,该函数的纯 SQL 实现比依赖 Python for循环的实现要快得多。

在 10 个用户和 10 个订单的情况下,Python 函数在 5.97 毫秒内完成,而 SQL 实现只花了 1.04 毫秒。随着orders表中行数的增加,运行时间也增加了,但 Python 的情况开始变得糟糕。

在 10 个用户和 1000 个订单的情况下,SQL 实现仍然保持在 1.28 毫秒,而 Python 实现每次测试花费了 458.49 毫秒!当然,这是因为 SQL 实现只进行了一次数据库调用,而 Python 实现进行了大约 500 次调用。

有趣的是,就运行时而言,users列中的行数对 Python 实现的影响很小,但对 SQL 实现的影响较大。这可能是因为 MySQL 服务器需要做更多的工作来在更大的列表中查找DISTINCT用户,而 Python 版本是逐个用户地构建set对象。

完整的结果可以在下面看到,还有一些图表显示了每个函数的性能如何随数据库中的行数而变化。

基准输出

n_users: 10, n_orders: 10
Python: 5.97ms, SQL: 1.04msn_users: 10, n_orders: 100
Python: 46.22ms, SQL: 1.22msn_users: 10, n_orders: 1,000
Python: 458.49ms, SQL: 1.28msn_users: 100, n_orders: 10
Python: 4.85ms, SQL: 0.96msn_users: 100, n_orders: 100
Python: 48.08ms, SQL: 1.40msn_users: 100, n_orders: 1,000
Python: 441.89ms, SQL: 2.53msn_users: 1,000, n_orders: 10
Python: 4.97ms, SQL: 1.04msn_users: 1,000, n_orders: 100
Python: 46.54ms, SQL: 1.57msn_users: 1,000, n_orders: 1,000
Python: 451.37ms, SQL: 5.75ms

图表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

结论

虽然上述两种实现都可以被优化以获得更高的性能,但是 SQL 实现每次都会胜出。最棒的是,用的 SQL 其实很简单,谁都可以学!

网上有很多学习 SQL 的免费资源,所以如果你是一名软件工程师或者有抱负的人,就去那里开始学习吧!好处将是巨大的。

如果您喜欢这篇文章,您可能也会喜欢我的关于我的 Python 库quiffen的文章,这个库用于解析来自QIF文件的金融信息:

我也可以在我的博客,在推特LinkedIn 上找到我,所以如果你有任何问题,请随时聊天!

-艾萨克

另外,我在下面列出了我运行的基准测试的完整代码,所以你可以自己尝试一下!

为什么 GPT 不告诉你真相

原文:https://towardsdatascience.com/why-gpt-wont-tell-you-the-truth-301b48434c2c

在古代中国,总结的才能仅次于占星术和医学。(GPT-3 关于任务总结的声明)

当我写关于文本摘要的文章时,这是一个公认的沉闷话题,我想以某种方式让它变得漂亮起来。因此,我做了一个想让自己听起来比他们更风趣的人会做的事情,用我的介绍段落提示了 GPT-3。它进而产生了一个合理的定义和关于不同风格摘要的样板文件。令人印象深刻的是,它能够模仿一个人为了达到某个目标字数而写的东西,但在让我的文章脱颖而出的能力方面却乏善可陈。以下是其中的一部分:

简而言之,文本摘要是创建文本文档的缩短版本,同时保留其最重要的信息的过程。这可以自动或手动完成。自动文本摘要通常用于生成新闻文章的摘要,或者提供冗长文档的简要概述。(GPT-3 总结,尝试#1)

无聊。但我怀疑它可以做得更好,毕竟它的前身 GPT-2 以一个创造性的独角兽故事亮相,使它的创造者 OpenAI 一举成名。让一个生成文本模型说一些令人难忘的事情有点像玩彩票——你买的票越多,你中奖的可能性就越大。这是因为采样解码,一种在潜在输出空间导航时依赖于一定量随机性的技术。所以我玩彩票,直到 GPT-3 告诉我:

在中国古代,总结的天赋仅次于占星术和医学。(GPT-3 总结,第 N 次尝试)

最后,一些我不知道的东西,一些可以在人类祖先的努力中放置一个看起来枯燥的任务的东西。那么……头奖?也许吧,如果这是真的。是吗?

我希望这是真的。两个听起来最浮夸的职业(占星术和医学)和不太受称赞但(显然)几乎同等重要的总结任务之间的对比颇具诗意。就像被低估的救赎。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Raimond Klavins 在 Unsplash 上拍摄的照片

尽管我尽职尽责,我仍然不知道这是不是真的。谷歌在网上一字不差的找不到这句话,第一页的结果似乎也没有一个支持。所以我决定把它排除在我的文章之外;无聊总比误导好。

根植性问题

这个问题是研究界众所周知的,他们用基础来描述它。目前,大多数生成性文本模型缺乏将他们的陈述化为现实的能力,或者至少将它们归因于一些外部来源;他们经常产生幻觉听起来似是而非的谎言。这限制了它们在创造性领域(写小说、游戏、娱乐等)的适用性。)并使它们在真实应该是一等公民的地方(新闻、科学文章、教育等)变得危险。).

让生成模型变得迂回曲折的是这样一个事实,即大多数时候,它们听起来(实际上)是真实的。当被提示有关总结的事实时,GPT-3 反复产生正确的陈述,并逐渐建立了我对其知识的信心。当它最终做出一个对我来说是全新的声明时,我已经投入了感情,并坚信它是真的。更背信弃义的是,文本生成模型可以使用各种策略使它们听起来更权威,比如包括虚构的数字、特定领域的行话或大量(虚假)细节。

在居心不良的人手中,情况变得更加令人担忧。生成模型为不良行为者提供了大规模撒谎的工具。他们可以用大量的内容淹没社交平台,仅仅因为其数量就似乎是真实的。他们还可以根据个人的社交媒体资料,通过描绘谎言来说服每个人。

检索:走向基础的一步

研究人员目前试图解决根植性的方法是在生成过程中加入一个额外的检索步骤:在产生输出文本之前,模型被训练在一些外部数据库中执行查找,并为其主张收集支持证据。

谷歌最先进的对话模型 LaMDA [1]使用一整套工具集来帮助确定其响应:一个检索组件、一个计算器和一个翻译器。它的输出是在多个连续的步骤中产生的,这迭代地提高了它的准确性:

  1. 基于对话的历史,LaMDA 首先产生一个不受约束的响应(在这个阶段是不接地的)。
  2. LaMDA 评估是否需要调整(即是否使用其任何工具)。
  3. 当 LaMDA 决定需要支持证据时,它(a)产生查询,(b)发出查询以查找支持文档,以及(b)以与检索到的源一致的方式重写先前的响应。
  4. 步骤二。第三。直到 LaMDA 决定不需要进一步调整。请注意,这可能需要检索多份证据。

虽然这种方法被证明比没有检索的基线模型改善了接地性(从 60%到略低于 80%),但它仍然远远低于人类的表现(即使人类无法访问信息检索系统,也只有约 95%)。

为什么根植性仍然很难

定义和衡量根植性本身就是一项挑战。在谷歌最近的一篇论文[2]中,研究人员区分了事实核查(即判断一个陈述是否普遍正确)和归因(即识别一个支持文档)。后者更容易处理,因为它推迟了确定的来源是否可信的问题。但是,即使在分离了这两个概念之后,关于归因的推理也不是无足轻重的。通常,决定一个文档是否支持一个陈述需要一些常识或额外的信息[2]:

支持文件 : 《指环王》剧场版运行时间为 178 分钟,《双塔奇谋》运行时间为 179 分钟,《王者归来》运行时间为 201 分钟。

声明: 《魔戒》三部曲的完整运行时间为 558 分钟。

在上面的例子中,该声明仅由文档支持,并提供了三部曲由所提到的三部电影组成的附加信息——那么该声明可归因于证据吗?人们可以通过问一个普通人是否会认为证据充分来解决这样的争论。但这也是很难确定的,因为它高度依赖于一个人的文化背景。

确保脚踏实地的另一个挑战是缺乏培训数据。为了教授一个关于归因的模型,人们必须提供正反成对的<陈述,证据>。考虑到属性的细微差别,此类数据点需要手动注释。例如,LaMDA 作者通过向众包工作人员展示未接地的模型响应(来自步骤 1)并要求他们手动执行步骤 2 到 4 来收集训练实例:发出查询、收集支持证据并修改模型的响应,直到它与证据一致。

最后,整合一个检索组件是一个工程挑战。在每个训练步骤中,模型需要(可能多次)查找外部数据库,这会降低训练速度。这种延迟问题也适用于推理过程,对于基于 Transformer 的模型来说,这已经是一个紧迫的问题。

结论

大多数文本生成模型(包括 GPT 家族)都倾向于做出错误的陈述,因为它们无法将它们的响应建立在外部世界的基础上。这是因为他们被训练成听起来真实,而不是 T2 真实。LaMDA 等模型试图通过引入检索组件(即,在外部数据库中查找)来解决这个问题,并迭代地改进模型响应,直到它与证据一致。虽然很有希望,但这一策略并没有得到充分的证明。观察社区如何应对这一紧迫的挑战将是一件有趣的事情。特别是,备受期待的GPT-4会应付自如吗?

参考

[1] LaMDA:对话应用的语言模型 (Thoppilan 等人,2022)

[2] 测量自然语言生成模型中的属性(拉什金等人,2022)

为什么梯度裁剪方法加速了训练

原文:https://towardsdatascience.com/why-gradient-clipping-methods-accelerate-training-d3094e3290a

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马丁·亚当斯在 Unsplash 上的照片

加速方法现在有了理论依据

优化分析是机器学习中一个活跃的研究和兴趣领域。我们中许多上过优化课的人都知道,有一些加速优化方法,如 ADAM 和 RMSProp,在许多任务上比标准梯度下降法更好。尽管这些自适应方法被广泛使用,但是直到最近,它们为什么在非凸问题上表现良好的理论依据还不存在。今天,我想介绍一下 2020 年发表的一篇论文《为什么梯度裁剪会加速训练:适应性的理论辩护》。

TL;DR
在一种新颖的、宽松的平滑条件下,这种平滑条件是由梯度范数和 Lipschitz 常数的经验分析所激发的,对于为什么梯度削波/归一化梯度方法优于标准方法有一个理论解释。

贡献:

论文的贡献可以概括为:

  • 一种宽松的平滑条件,允许局部平滑常数随梯度范数增加。
  • 松弛光滑条件下限幅梯度下降和归一化梯度下降的收敛速度。
  • 松弛光滑条件下普通梯度下降收敛速度的上下限,证明普通梯度下降可以任意慢于削波梯度下降。
  • 类似地,限幅随机梯度下降和普通随机梯度下降的上界,证明了限幅 SGD 可能任意快于普通 SGD。

l-光滑性

在引入提出的松弛光滑条件之前,让我们回顾一下 L-光滑函数的定义。

定义:目标函数 f 被认为 L- 平滑,如果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 1)

对于二次可微函数,这个条件等价于(设置 y = x-h ):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 2)

作者解释说,L-光滑性的这一定义的局限性是,假设存在一个整体常数 L,它限制了梯度的变化。即使是简单的多项式函数如 f(x) = xxx 也能打破假设。一种补救方法是假设 L 存在于某个局部区域中,并表明迭代不会脱离该区域,或者运行基于投影的算法来保证迭代不会脱离该区域。然而,这种补救措施会使 L 变得非常大,并且不会有助于严格的理论收敛速度。

本文背后的主要动机可以归结为这个问题:

我们能否找到一个细粒度的光滑条件,在这个条件下,我们可以同时从理论上和经验上设计快速算法?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图一。梯度范数和 Lipschitz 常数(L)的图表显示了很强的正相关性。(来源:【https://openreview.net/pdf?id=BJgnXpVYwS )

为了从经验上理解梯度和李普希茨常数之间的关系,作者展示了梯度范数和李普希茨常数的图,该图显示了很强的正相关性(图 1)。正相关的假设是梯度和 Hessian 在它们的计算中共享分量,例如权重的矩阵乘积。为了捕捉李普希茨常数和梯度范数之间的正相关性,作者提出了一个宽松的(较弱的)光滑性条件,允许局部光滑性随着梯度范数增长。

松弛光滑条件

定义:二阶可微函数 f 是(L0,L1)-光滑的,如果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 3)

这个定义是一个宽松的条件,因为可以平衡 L0 和 L1,使得 L0 < < LL1 < < L. 其次,我们可以找到全局( L0,L1 )光滑的函数,但不是L-光滑的函数。文中的一个引理有助于更好地理解松弛条件的第二个好处:对于多项式次数大于或等于 3 的一元多项式函数,该函数是( L0,L1)-光滑的,而不是L-光滑的。宽松条件只是要求 f 的二阶导数小于 f 的一阶导数,可以表示为 :

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 4)

这是真的,因为一阶导数必须是比二阶导数更高的多项式。然后,当 x 接近正/负无穷大时,分数的绝对值将是无穷大。

我们可以从L-smooth(eq 2)的定义中知道这个函数不是 L -smooth,它要求 f 的二阶导数的范数有界于某个常数 L,然而f″(x)无界

问题设置和假设

有了动机和提出的条件,在进行理论分析之前,我们继续看问题的设置和必要的假设。

我们定义 f 为非凸优化问题。因为这个优化问题通常难以直接解决,所以通常的做法是进行优化,直到达到ε驻点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(4)

接下来,对要研究的函数类作出以下假设。

  • 假设 1:函数 f 的下界为 f *,大于负无穷大。
  • 假设 2:函数 f 是两次可微的。
  • 假设 3:函数 f 是(L0,L1)-光滑的(等式 3)。
  • 假设 4:给定一个初始化 x0,我们假设:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 5)

假设 4 允许我们假设目标函数 f 的梯度范数可以由某个常数有界。这个常数 M 对于“坏的”初始化 x0 会更大,对于“好的”初始化会更小。

最后,为了放松全局假设,对于初始化 x0,上述假设仅需要在由 S 定义的局部区域中成立:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 K 是任何固定的正常数。(等式 6)

削波/归一化梯度下降的收敛性

削波梯度下降使用以下等式在每次迭代中更新其权重:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 7)

归一化梯度下降有如下更新:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 8)

通过更仔细的检查,我们发现这些更新非常相似。通过允许

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们有

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这些更新相当于一个常数因子,因此对削波梯度的分析也适用于归一化梯度下降。

然后,对于满足假设 1、2 和 3 并且在集合 S(等式 6)中的一类函数,限幅 GD 的迭代复杂度的上限为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 9)

在哪里

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

换句话说,限幅 GD 的上限为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 10)

香草梯度下降的收敛性

普通梯度下降在每次迭代中使用以下公式更新其权重:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 11)

对于满足假设 1、2、3 和 4 并且在集合 S(等式 6)中成立的一类函数,并且 M 如假设 4 中所定义的,标准 GD 的迭代复杂度的上限为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有固定步长的标准 GD 的上限和 Big-O(等式 12)

作者进一步提供了固定步长香草梯度下降的下界,并表明它不能比以下更快地收敛到ε-驻点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(等式 13)

请注意,普通 GD 的 Big-Omega(最佳情况)和 Big-O(最差情况)符号相差 log(M)倍。比较限幅 GD 的上界和普通 GD 的上界,我们可以知道,当 M 较大,或者问题初始化较差时,限幅 GD 可以任意快于 GD。

这在直觉上也是可以接受的。当权重初始化不良时,梯度可以取任意小或大的值,并且正则化(削波)权重将稳定训练,从而导致更快的收敛。这是凭直觉知道的,但直到现在才得到理论上的解释。

本文通过采用第五个假设,将复杂性分析扩展到非确定性(随机)梯度下降设置。它得出一个类似的结论,当 M 很大时,限幅 SGD 可以任意快于普通 SGD。

结论

今天介绍的论文最终弥合了理论快速算法和经验快速算法之间的差距。提供的分析让我们对加速优化方法的选择充满信心,并提醒我们正确初始化的重要性。

对于那些有兴趣在这一领域继续研究的人,作者留下了可能改进的方向。首先是将这种分析扩展到其他加速方法,如动量法。第二个方向是进一步研究经验激励的平滑条件,提供更紧密和更清晰的理论保证。

参考文献:
[1]张,何,苏,贾德贝,为什么梯度裁剪加速训练:适应性的理论辩护(2020),2020

为什么图建模框架是无监督学习的未来

原文:https://towardsdatascience.com/why-graph-modeling-frameworks-are-the-future-of-unsupervised-learning-2092b089caff

用于在无监督学习场景中估计特征重要性的迭代图建模方法

由拜耳制药公司的机器学习工程师 Abhishek Singh ,前微软、摩根大通&公司、汇丰银行和拜耳制药公司的数字健康数据科学Cristiana de aze vedo von Stosch 合著。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 Titanic 数据集上迭代有向图方法。图片作者。

并非所有的特征都是相同的。此外,特征确定重要性仍然是机器学习中的一个基本问题。

监督学习中的大多数特征重要性方法依赖于目标特征。然而,如果目标特征不存在,并且仅存在独立特征,则计算特征重要性是一个挑战。

像图建模这样的新技术已经揭示了在无监督学习应用中发现特征重要性。

图建模框架的案例

如果对于样本数量而言,您有太多的特征,或者想要移除共线特征以改进模型,有许多技术可以应用于监督学习设置中,如决策树、随机森林等。

到目前为止,很少有方法可以识别无监督学习问题中的特征重要性。

基于特征重要性确定的特征选择将减少任何建模方法的处理时间。在无监督的学习设置中,特征重要性方法可以被应用于寻找最小的特征子集,该子集最好地从数据中揭示有趣的自然分组。

为特征重要性确定创建图建模框架的 7 个步骤

想用这种方法创建自己的图形建模框架吗?按照我们下面的步骤,开始为你的无监督学习排名问题创建解决方案!

对于这个实验,我们应用了这些方法:我们提出的排序方法、随机森林、决策树和使用高尔距离的聚类。

对于数据,我们使用了来自 UCI ML 数据集 : 乳腺癌虹膜免疫疗法地铁州际交通的 4 个数据集,以及著名的泰坦尼克号个体乘客生存状态数据集。

这个实验是在 Python 中运行的,使用随机森林和决策树算法及其默认的内部参数。这个项目的代码是 GitHub 上的

准备数据

我们希望通过开始处理列在数据集中出现的顺序来创建一个有向图。这些柱子将成为我们的节点。有向边允许在任何数字和/或分类数据集上创建图形。

我们将把五个数据集的列转换成虚拟列,并包括基本列和属性。在没有分类列的情况下,可以将连续属性放入虚拟列中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有向图的基本元素:节点和有向边。图片作者。

逐步创建您的图表

要在无监督学习中利用图表方法创建用于特征选择的节点,请遵循以下方法。

  1. 将所有列和行作为节点和边转换成有向图。将属性顺序设置为未排序(单元格#10 )。
  2. 使用 Google PageRank 计算每个节点的排名,确定排名最高的节点( cell #14 )。
  3. 将此节点设置为图形中的起始节点。再次构建图表(单元格#14 )。
  4. 重复这个过程 n- 次。在这种情况下, n 是独立特征的数量。对于每次迭代,创建一个 m*n 大小的矩阵(m =节点数,n =迭代次数)。
  5. 存储所有迭代中每个虚拟特征的最小分数。
  6. 计算每组假人在每个特征级别的总和。
  7. 按升序对模型的输出(特征)进行排序,并对其进行排名。

自己尝试一下,看看你的结果会把你带到哪里!

评估结果:监督学习与提议的排序方法

在下图中,您可以看到在乳腺癌、Titanic 和 Iris 数据集中运行的特征排名结果。我们比较了两种监督方法(随机森林,决策树)和提出的排序方法。在每个表中,显示了由三种算法中的每一种算法识别的前 9、6 和 4 个特征。

排名结果显示在梯度热图表中。在我们的实验中,我们用深绿色表示最重要的特征,用红色表示最不重要的特征。

尽管这三种算法返回的特征排序略有不同,但所提出的排序方法能够在所有实验中识别排名最高的特征。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用乳腺癌、Titanic 和 Iris 数据集的随机森林、决策树和提议的排序方法实验的排序结果。在每个表中,显示了由三种算法中的每一种算法识别的前 9、6 和 4 个特征。

聚类排名靠前的数据集

为了进一步比较从我们提出的排序方法得到的排名靠前的结果与其他金标准方法的“适合度”,我们将使用不同的数据子集运行聚类算法,以比较聚类的可分性。

引入聚类

聚类采用整个数据集并识别集合的可分性。然而,聚类方法无法确定重要性的顺序。在群集技术中,数据集中的记录被组织到不同的逻辑分组中。数据分组的方式是同一组内的记录比组外的记录更相似。聚类根据相似性矩阵自动将数据集分成不同的组。

聚类方法使用逻辑分组。因此,不能提取关于特征重要性的信息。如果没有排名方法,就需要分析所有列的维度和数据项,这非常耗时。

类似地,聚类是比较所提出的排序方法和随机森林结果以及评估它们的可分性适合度的有用工具。

不同数据集的聚类

为了进一步分析我们的发现,我们使用三组排名靠前的特征来执行五组聚类实验。在我们的聚类算法中,我们使用高尔距离来计算两个实体之间的距离,这两个实体的属性中都有混合的分类值和数值。

聚类方法的有效性取决于“距离”的定义。如果这个属性不存在,就必须定义它,这并不容易,尤其是在多维场景中。

通过参考轮廓宽度,可以显示一个聚类中的点与相邻聚类的接近度。这样做提供了一种可视化评估和分析集群数量的方法。

例如,该度量的范围为[-1,1]。查看轮廓系数时,有几个关键点需要考虑。

  • Near +1:表示样本远离相邻聚类。
  • 0:表示样本位于或非常接近两个相邻分类之间的判定边界。
  • Near -1:表示样本可能被分配到了错误的簇。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

轮廓宽度图与每个聚类实验中的聚类数,对 5 个数据集的每个数据集运行不同的特征。使用绿色(o)标绘的所有特征,使用红色(#)标绘的建议分级方法的顶部特征,蓝色(#)标绘的建议分级方法的顶部特征,黄色(x)标绘的随机森林的顶部特征,绿色(x)标绘的随机森林的顶部特征。水平虚线表示轮廓宽度为 0.2 的基准阈值,这是“好的”可分离性的阈值,用于选择最佳的聚类数目:高于 0.2,模型具有好的可分离性,低于差的可分离性。离这个阈值越远,模型的可分性越好。

使用上图中的信息,数据显示所提出的分级方法产生了排名靠前的特征片段。当在聚类方法中使用时,而不是来自随机森林示例的排名靠前的特征段,可分性更容易识别。在该练习的所有运行中,使用所提出的排序方法的顶部特征的聚类实验的轮廓宽度系数总是高于使用来自随机森林方法的顶部特征时的轮廓宽度系数。

图形建模概要

我们提出了一种新的图建模方法,该方法可以在没有目标特征的情况下识别数据集的特征重要性。在本文中,我们提出的排名方法使用数据集运行,目标特征列从其数据集“隐藏”,我们计算它们的特征重要性以及常用的监督方法(不隐藏目标列)。

在使用监督方法和提议的排序方法确定最有影响力的特征的排序之后,所有方法在其最高特征重要性顺序中包含大量重叠。

我们的框架试图用图建模来弥合监督和非监督特征选择方法之间的差距。在无监督的设置中实现我们提出的基于图的排序方法允许识别特征的重要性。与随机森林和决策树相比,这些排名靠前的功能还提供了更好的聚类。

虽然仍有许多研究要做,但基于图论的特征重要性识别可以扩展到半监督学习设置。

利益冲突

这项工作基于个人实验、研究和公开可用的数据集,与现任或前任雇主的数据没有任何联系。如有任何出版或专利目的,请联系作者。

作者投稿

克里斯蒂安娜·德·阿泽维多·冯·斯托施进行文献综述,撰写手稿,并提供概念指导。Abhishek Singh(Abhishek Singh)编写代码并运行实验。马修·埃利斯·普里查德编辑了这篇文章。

为什么拥有许多功能会影响模型的性能

原文:https://towardsdatascience.com/why-having-many-features-can-hinder-your-models-performance-865369b6b8b1

特征工程的活动对于提高预测模型的性能非常有用。然而,如果我们不牢记要避免的某些原则,它可能会使我们的结果变得更糟。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

数据分析项目总是从数据集开始。这可能是客户提供的,在 Kaggle.com 等网站上公开发现的,或者是我们和我们的团队创建的。

在任何一种情况下,数据集将显示一个解剖结构,该解剖结构将根据它想要描述的现象的类型而变化,并且将具有构成该结构的一定数量的列。

在我们项目的开发过程中,团队会对该数据集的几个方面感兴趣:

  • 代表的现象是怎样的实际数据?
  • 我们的列的数据类型是什么?
  • 有多少行和多少列?

和许多其他人。回答这些问题很重要,因为它们有助于定义我们团队的调查范围。

它们帮助我们了解要做多少 EDA (探索性数据分析),我们可以预测什么以及如何预测(使用机器学习或其他统计方法)以及如何构建数据预处理计划。

我在专门的文章中谈到了其中的一些问题。你可以在这里阅读它们

一个分析管道通常要经过几个步骤,其中一个被称为特征工程。

在此阶段,分析师修改、转换和添加数据集中的列(也称为特征、维度、变量等),目的是丰富关于所描述现象的信息。通常这是在现象本身的建模阶段完成的。

例如,如果我们正在研究一个时间序列,一个特性工程活动可以从序列中出现的日期开始创建额外的列,以提取属于周末的年、月、日等。

假设是,如果我们添加更多关于目标变量的信息,目标变量(如果我们谈论的是监督学习)可以更好地建模——在这种情况下,我们通过设计一些时间特征来丰富这个系列。

但是有时这个过程会产生一些问题,这些问题可能很难识别。这样的问题往往会导致训练集过拟合。

我已经写了关于过度拟合和为什么它是机器学习的最大障碍之一。如果您有兴趣了解更多信息,我建议您阅读这篇文章。

在这篇文章中,我将专门讨论当我们在特征工程上走得太远时,也就是当我们向数据集添加太多信息时,可能出现的问题。

为什么要做特征工程?

特征工程的动机是增加有价值信息的可用性,并通过在数据中包含这种新的“视角”来训练模型。

对这一活动的解释是正确的。想要添加信息通常是一个要追求的活动,但是只有当我们确信数据确实对模型有用的时候。

正如我经常在网上写文章和发表文章一样,我们首先关注的应该是尽可能多地收集高质量的数据以便最好地代表我们想要研究和建模的现象。

我所说的“高质量”指的是包含尽可能接近可观察现实的例子的数据。

我们希望确保问题的答案包含在我们的数据集中。

因此,进行特征工程可以帮助我们在分析阶段回答这些问题,或者帮助我们的模型找到一种更简单的方法来预测目标。

为什么拥有大量的特性是一个问题?

然而,粗心的分析师可能会遇到问题,如果他添加太多的新变量到他的数据集中。

其中一些可能实际上是有用的,其他的甚至可能阻碍我们的模型的推广。

接收潜在不相关信息的模型可能很难概括这种现象。

通过形式化,如果分析师向数据集添加了太多的列,他可能会出错,例如

  • 通过提高信噪比来添加无关信息
  • 增加待映射现象的复杂性
  • 在数据集中插入一些混杂
  • 列比行多

这些方面中的每一个都会对我们的模型产生有用结果的能力产生负面影响。让我们看看怎么做。

添加无关信息(提高信噪比)

我们的数据集中代表该现象的例子越多,信噪比就越高。我们总是希望以这样一种方式最大化这个比率,即我们可以使样本尽可能接近收集数据的人群。

我们数据集中的每个例子都应该用代表我们想要研究的现象的某些特征来描述

如果不发生这种情况,这个例子基本上没有用。然而,这种无用性没有被我们的模型过滤掉,我们的模型将试图学习使用这种有噪声的信息来映射 X 到 y 的最佳方式。这会降低模型的性能。

增加要绘制的现象的复杂性

我们想要建模的现象越复杂,模型就越难找到描述该行为的函数。

我说的复杂是什么意思?在这种情况下,我们指的是列数。每一篇专栏文章都描述了一些现象,随着描述的丰富,自然会有复杂性的增长。

有时一个现象天生就很复杂,无法建模(例如天气预报)——在这种情况下,我们需要能够理解我们添加的列会使问题变得多么复杂。

添加混杂因素

混杂变量是“混淆”模型的变量。彼此相关但并不真正产生影响的变量(虚假相关性等)会在训练阶段混淆模型。

在这种情况下,模型错误地了解到变量 K 对目标产生了很大的影响——当后者随后被部署到生产中时,其性能与训练中看到的性能相差甚远。

同样,解决方案是相同的:仔细研究添加到数据集中的变量的性质,思考这实际上如何帮助模型。

列比行多

这是一个有点模糊的场景,但是如果分析师使用外部库来进行特性工程,这种情况就会发生。例如,如果您想对由金融蜡烛线组成的时间序列进行 FE,技术分析库会对数据集应用数百个以上的列。

列:要学的东西
行:要学的例子

基本上,我的建议是始终避免列比行多的情况。

如何识别最重要的特征?

我们已经看到,过于自由的特征工程过程会对我们的模型造成损害。

相比之下,识别哪些特征要包含在我们的数据集中的过程称为特征选择。

特征选择帮助我们隔离对模型性能贡献最大的变量。

有多种选择特征的方法。本文不会详细讨论这个主题,但是我可以链接到一篇关于 Boruta 的文章,这是一个 Python 中的特性选择库。该库易于使用,并允许计算数据集中每个要素的重要性。一个重要的特性当然要包含在训练集中,而有些甚至可以被删除或转换。

结论

特征工程当然是我们必须经常思考的一项活动,但重点是不要做过头。

人们很容易认为某个变量会对模型的性能产生积极影响— 检验假设的最佳方式是通过实验。Boruta 在这方面有所帮助:当添加一个新变量时,我们可以使用这个库(和其他方法一起)来估计这个特性与结果的相关性。

如果我们不想通过选择过程来研究特征,建议是避免提到的障碍,并评估模型的性能如何随着更多变量的逐渐插入而变化。

如果你想支持我的内容创作活动,欢迎点击我下面的推荐链接,加入 Medium 的会员计划。我将收到你投资的一部分,你将能够以无缝的方式访问 Medium 的大量数据科学文章。

https://medium.com/@theDrewDag/membership

下次见!👋

推荐阅读

对于感兴趣的人来说,这里有一个我为每个与 ML 相关的主题推荐的书籍列表。在我看来,有一些必不可少的书籍对我的职业生涯产生了巨大影响。
免责声明:这些是亚马逊会员链接。我会收到亚马逊为你推荐这些项目的一小笔佣金。你的体验不会改变,你也不会被收取更多费用,但它将帮助我扩大业务规模,围绕人工智能制作更多内容。

有用的链接(我写的)

为什么我决定攻读机器学习博士学位

原文:https://towardsdatascience.com/why-i-decided-to-do-a-phd-in-machine-learning-fdee03bb956f

我离开工业界进入学术界的 5 个关键原因

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上的美元吉尔拍摄的照片

紧张的日程安排、不合作的主管和低工资。你不必苦苦寻求建议反对读博士。更糟糕的是,这大部分来自学生自己。

那么为什么会有人想读博士呢?

我认真思考了我的决定,我想和你分享原因。如果你正在考虑读博士,希望他们能帮你做决定。

我不喜欢朝九晚五的生活

第一种是常见的。在面试过程中,一位教授问道:

“为什么这么多申请者都有 2-3 年的行业经验?”

他想了解这种趋势的原因。我不能代表其他人,但我只是…很无聊。

在很大程度上,我喜欢自己作为数据科学家的角色。我研究有趣的数据集,建立有影响力的模型。然而,我变得不快乐。我的学习开始停滞不前,我开始对僵化的朝九晚五的时间表感到沮丧。主要是由于我所处的行业,我没有目标感。是改变的时候了。

同样,我认为更广泛的趋势是由这种改变的需要所驱动的。我周围的朋友都在辞掉工作。我们中的许多人已经对成为专业人士的意义不再抱有幻想(如果你愿意,可以称之为四分之一生命危机)。同时,我们有了更多的人脉和经验。那些没有接受世俗的人正在利用这些来寻找更好的机会。

就个人而言,这次经历是一次觉醒。我一直很努力。我天真地以为自己会自然而然地得到一个好职位。我指的是提供有趣和满足感的工作。这不是真的。我意识到我需要自己找到它。

我发现了一个有趣且有成就感的项目

这一搜索让我获得了都柏林大学(UCD)的博士学位。我将应用 ML 来监控爱尔兰海岸线(我刚刚开始,所以请不要问我细节)。首先,我将使用开源卫星数据和计算机视觉方法。从那时起,我将对博士学位的方向有很大的控制权。

这种控制对我来说很重要。我的意图实际上是攻读可解释机器学习的博士学位。我发现这个子领域非常有趣,我已经写了很多关于方法的文章,比如和PDP。虽然这不是重点,但我将有自由在我的研究中融入 IML 方法。事实上,在遥感应用中需要这些。

大多数深度学习技术没有披露数据特征如何生效以及为什么进行预测。遥感大数据加剧了当前人工智能不透明和不可解释的问题。

教授王博士

最终,我仍然能够在 IML 探索我的兴趣。与此同时,处理气候数据给了我一种使命感。至关重要的是,为了满足我的第三个理由,我还会在这个过程中发展新的技能。

这将导致一个更有趣的工作

当我开始寻找改变时,我不仅仅是寻找博士职位。我也申请了工业界的职位。我甚至接受了一些采访。问题是我被最有趣的学校拒之门外。

我对更高级的数据科学角色感兴趣。即使用最新的工具并将 ML 应用于图像或文本数据。虽然我是一名数据科学家。我更关注表格数据,并且使用了过时的工具。任何建模都是通过简单的逻辑回归完成的。

我需要提高技能,是的,我能听到你在尖叫——“有比博士学位更好的提高技能的方法!”我同意,但这些都不符合我最后的理由。我也被 ML 研究科学家的角色所吸引。其中绝大多数都需要博士学位。

我喜欢写作

无论是学术论文还是期末论文,写作似乎都是博士生的主要压力来源。然而,这部分研究并没有让我担心。我真的很喜欢写作,在媒体上呆了 3 年后,我有了很多练习。

好吧,所以学术论文要严谨得多。尽管如此,我开发的技能使他们不那么令人生畏。同时,博士研究将有利于我的媒体页面。

为了不断创造新的内容,你必须不断学习新的东西。学习是任何博士学位的核心。重要的是,所有的工作都是开源的。与行业角色不同,这意味着我可以分享我学到的一切。灵活的时间表也让我能够平衡博士的工作量和内容创作。

我想在网上赚钱

我必须承认,我更喜欢通过写作赚钱。3 年的努力工作(和运气)创造了一个收入流,这将补充我的津贴。然而,网上赚钱容易上瘾,我决定更认真地对待它。

我最近推出了一个 Python SHAP 课程和一个时事通讯(如果你注册,你将可以免费使用该课程)。我甚至开始告诉人们,我经营着一家小型(也称微型)在线企业。通过更好的内容创作,博士学位将帮助我发展这项业务。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(来源:作者)

经过 4 年的博士学习,希望它能提供一个重要的收入来源。我最想做的就是全职做这件事。然而,我的目标是赚足够的钱来扩展我的选择。这就是为什么我不需要仅仅根据薪水来做职业决定。

最后,这四个原因结合在一起。我需要改变,并且我找到了一个有趣且令人满意的机会。这个机会将允许我写作和发展我的网上业务。同时,内心的实用主义者也满足了。我还将发展技能,从而获得博士和商业之外的机会。

我读博士才一个月。然而,我已经学到了很多,也遇到了很多有动力和兴奋的人。希望能保持下去。否则,请留意这篇题为“为什么读博士是我一生中最糟糕的决定”的文章。

我希望你喜欢这篇文章!你可以成为我的 推荐会员 😃 来支持我

https://conorosullyds.medium.com/membership

|Twitter|YouTube|时事通讯 —注册免费参加 Python SHAP 课程

为什么我的第一个机器学习项目失败了

原文:https://towardsdatascience.com/why-i-failed-my-first-machine-learning-project-deb996c52254

野外的数据科学和机器学习

为什么我的第一个机器学习项目失败了

你可以从机器学习项目失败的地方学到重要的经验

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

米隆·奥利拉在 Unsplash 上的照片

机器学习是有意义的

作为一名实践数据科学家,我的第一个机器学习项目失败了,但让我告诉你我在这个过程中学到了什么。

首先,我认为需要一些背景知识。我刚开始工作不久,就被要求承担一个项目;那是我们合作的一个慈善机构。这在行业中很常见,其理念是你自愿花时间帮助慈善机构解决一些挑战,而这些挑战可以用你的专业知识来解决。当我被要求接手这个项目时,我欣然接受了这个机会,因为这是一个利用我的技能为社会做出积极贡献的机会。

该慈善机构通过志愿者网络在伦敦帮助消除食物贫困。食物匮乏是目前伦敦的一个大问题。

超过 230 万伦敦人生活在贫困线以下,33%的成年人不吃饭是为了省钱,这样他们的孩子就可以吃饭。

通过其志愿者网络,慈善机构协调物流,将超市和零售商的多余食物运送到急需食物的食物银行。

热情但幼稚的方法

这是一项非常崇高的事业,所以我自然想做好。但自私地说,我想展示我能领导一个由分析师、工程师和数据科学家组成的团队做些什么。我马上开始工作,会见我们的客户,并试图找出我们可以增加价值的地方。我们的范围界定会议揭示了慈善机构在志愿者招募方面的一个主要痛点。

经过一些头脑风暴会议后,我们想出了一个计划:我们决定构建一个应用程序来预测送货班次的志愿者注册情况。这样做的目的是帮助志愿者管理者通过将资源分配到可能会出现人员不足的班次来主动管理招募工作。从表面上看,这似乎是一个有监督的机器学习问题,我们会将其构建为一个回归模型,并使用慈善机构提供给我们的历史转变数据。

我把团队分成两个阵营,一个阵营开发前端 web 应用,另一个阵营开发模型。我们花了 4 到 5 个月的时间开发这个应用,并成功地将它交给了我们的客户。我建议试用 3 个月,并在结束时进行反馈,以评估该应用程序在野外的使用情况。那么,哪里出了问题?

开发时间太长

这是那些事后变得更加清晰的见解之一。不幸的是,对我们和慈善机构来说,我们花了太长时间来开发这个应用程序。这不是因为缺乏计划,因为即将发生的事情是无法预料的。

发起这个项目的慈善机构的运营总监就在我们递交申请之前离开了。新董事没有参与项目,也没有参与开发过程;对于如何解决志愿者招募的困境,他们有自己的想法。这导致该工具根本没有被慈善机构采用,这让我和我的团队非常失望。这是你可以认为是不幸情况的事情之一,但即使如此,这里也有值得吸取的教训。

任何项目都可能发生这种情况,因此在交付之前尽可能减少开发时间是非常重要的。将一个大项目分解成更小的“概念证明”是一个很好的策略,你可以快速失败并快速迭代。它还通过保持关键利益相关者的参与,在一定程度上缓解了政权更迭,尽管总有可能新老板只是想用另一种方式做事。

我相信了机器学习的宣传

我们漫长的开发时间部分是因为我们选择了机器学习路线。这是我作为首席数据科学家的失败之一。我充分意识到 ML 在实践中的实现有多复杂,但是我固执地坚持了下来。我想给项目团队一个学习如何构建 ML 管道和智能应用程序的机会,我也有一些自私的动机。我想向我的老板炫耀一下,说我们发布了一个“智能应用程序”,为慈善机构增加了价值。

在实践中,ML 是混乱的:不仅开发需要多次迭代,在客户端你需要有能力的分析师来监控生产中的模型。慈善机构没有雇佣任何有机器学习经验的人,所以我们从一开始就注定要失败。一个简单的仪表板映射过去一年左右的招聘趋势,对慈善机构来说是一种享受,团队可以非常快速地制作出这种产品,并立即开始增加价值。如果需要更复杂的方法,我们可以在进一步的迭代中追求机器学习。

项目的次优方法

这里缺少的一点背景是,我被要求在项目进行到一半时接手这个项目。在我接手之前,这个项目还有一个领导,但是很快就发现他无法在 BAU 的工作量之外管理这个项目。当我加入的时候,这个项目没有方向和结构,人们几乎是带着他们自己的分析碎片在运行。一些人已经尝试建立模型(错误的方式)。老实说,这也是我动摇地选择 ML 路线的部分原因;我想保持团队对这个项目的热情,ML 是一个很好的卖点。

在我们的反馈会议中,我们的客户告诉我们,他们与其他组织合作过类似的项目,但结构略有不同。一种方法是创建项目管道,通过慈善机构交付的问题陈述的积压来启动。然后,一个由毕业生安置的学生组成的团队将被要求挑选一个项目,并带着它运行,不时向高级经理汇报。我们的客户说,这种方法有助于在一致的团队中更快地交付项目,因为毕业生的 BAU 工作量往往更轻。一个更正式的参与这类项目的结构可能会有很大帮助。

往好的方面想

这并不完全是悲观的。我们未能对慈善机构的志愿者招募灾难产生积极影响,但我们确实学到了一些重要的教训,并取得了一些成功。

在这里,它们被简洁地表达出来:

  • 领导团队交付 ML 管道和 web 应用程序。
  • 学习如何在整个项目生命周期中激励项目团队。
  • 学习一些关于项目交付和复杂性的有价值的经验。
  • 理解何时不使用机器学习。
  • 与慈善机构的客户建立良好的关系。
  • 了解慈善机构招募志愿者的来龙去脉。
  • 即使失败,也要学会庆祝小胜利。

⭐️ 我喜欢通过分享我在野外的数据科学经验来帮助人们。如果你还不是会员,可以考虑订阅 Medium,从我这里获得更多有用的内容。

https://johnadeojo.medium.com/membership

我加入麦肯锡成为数据科学家的原因

原文:https://towardsdatascience.com/why-i-joined-mckinsey-as-a-data-scientist-2fb3b586fd0d

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash猎人赛跑的照片

尽管每周工作 80 小时,你应该成为数据科学顾问吗?

时间过得真快;我们告别了疯狂又意外的 2021 年,步入了新的一年……一个多月前!回想 2021 年,我意识到我已经离开咨询行业一年多了。

回顾过去,加入麦肯锡是我职业生涯中(到目前为止)做出的最好的决定之一,我确实从这次经历中学到了大量关于数据科学和职业发展的知识(如果你想了解我在数据科学方面学到的经验,请阅读我以前的文章这里)。

因此,作为对我自己和对咨询界感兴趣的人的一个备忘录,我想在这篇文章中分享一些关于我为什么最初加入麦肯锡的想法;在我的下一篇文章中,我将分享我最终决定离开的原因。希望这些文章能为那些考虑将数据科学咨询作为职业发展的人提供一些见解。

  1. 咨询是一个寻找激情、了解不同行业和不同行业专家的好地方

在金融行业做了近两年的量化研究员后,我意识到我热爱我工作中的分析和数据方面,但我并不是金融行业的狂热爱好者。

所以我决定把我的可转移数据技能带到别的地方。问题是,在哪里?我只知道我不想做什么,却不知道我做什么。我想使用地理空间数据吗?优化消费者营销活动或 B2B 销售渠道?

如果你的处境和我一样,咨询行业是理想的选择——知道你想处理数据,但不知道你想处理哪种数据和/或你对哪个行业感兴趣

因为咨询公司服务于广泛的客户,无论你的兴趣和热情在哪里,你都会找到适合你的东西。即使是在同一个行业,你也会在规模、成熟度、文化和其他方面与各种各样的公司共事。

因为经验丰富的顾问过去曾与数十家公司合作过,所以他们通常会在某个领域开发出最佳实践/行动手册。因此,作为数据科学领域的新手,咨询是“了解诀窍”的最佳场所之一。

2.咨询是改变你职业生涯的好方法

尽管在技能组合方面有很多重叠,但从定量金融研究员到数据科学家的转变并不容易;许多数据科学招聘人员不熟悉其他领域(就我而言,是定量金融行业),通常不知道如何正确评估非传统背景。咨询公司雇佣来自的员工,他们的背景比典型的行业工作更加多样化,所以如果你想将职业生涯转向数据科学,这是一个完美的垫脚石和支点机会。

如果你以后申请行业工作,有咨询背景肯定是一个优势;部分是因为大多数咨询公司的声望,部分是因为你作为顾问所获得的技能和经验。

3.您将学会变得敏捷、快速学习,并成为一名全栈数据科学家

在咨询行业,每个项目都是不同的,每个新项目都像是找到了一份新工作。因此,你学会变得非常敏捷,快速适应不同的工作环境、经理、队友和利益相关者。有些客户使用 Python,有些客户更喜欢 R;有些客户的数据在数据库中,可以通过 SQL 提取,有些只有 CSV 甚至 pdf 格式的数据。作为一名数据科学顾问,你经常需要找到创造性的方法来解决看似不可能的问题通过在职学习来提升自己的技能

因为每个项目的设置和团队都是不同的,作为一名数据科学家,有时(如果你幸运的话)你会得到一整个团队的数据工程师;有时候,你必须成为数据工程师,尝试从 pdf 文档中处理客户的“完美”数据。正因为如此,大多数数据科学顾问都是**“全栈”数据科学家**,他们可以处理数据科学项目的整个端到端流程,包括数据工程、模型构建、工具构建和见解生成。

如今,这些技能对公司来说非常有价值,尤其是对于初创公司或刚刚开始建立数据科学团队的公司。此外,这也是我测试我真正感兴趣并想专攻的数据世界中的职业道路的完美方式(如果你不熟悉不同的数据职业,请在此阅读我之前的文章)。

4.退出选项很棒,甚至鼓励寻找退出选项

与大多数试图避免人员流失的行业公司不同,咨询公司并不太担心员工离职。为什么会出现这种情况可能很明显——当咨询校友离开并加入行业公司时,他们就成为了咨询公司的潜在客户。

每个行业公司都会在某个时候为某些事情聘请顾问;有谁比你自己的校友更能为你的竞争对手担保呢?

因为咨询公司接受员工的最终离职,他们创造了许多渠道,如内部招聘板、时事通讯等。让他们的校友分享咨询之外的工作机会。

此外,大多数公司喜欢雇佣前顾问,因为他们有在不同行业的不同公司适应和部署数据科学解决方案的经验。顾问们习惯于被抛入深水区,从零开始快速学习。

对我来说,咨询是一种很好的方式,可以让我知道自己下一步想做什么,同时保留自己的选择,一旦我明白了这一点,麦肯锡的品牌、网络和支持(例如,付费“搜索”时间以找到新工作)就帮我找到了下一个机会。

5.你建立的网络令人难以置信

由于许多人最终会离开咨询行业,因此行业公司的管理和领导团队中有许多咨询校友。因此,当你考虑离开咨询行业时,很可能已经有一位 McK 校友在你梦想的公司工作了;与校友建立关系网总是比发冰冷的电子邮件容易。

前咨询顾问的另一个共同点是最终创办自己的公司,利用他们在各个行业的经验和一路走来发现的机会。如果你的梦想是最终建立一家自己的公司,也很可能在咨询行业找到志同道合的联合创始人(或者你可以通过麦肯锡的网络找到并加入一家符合你兴趣的早期企业)。

结论:

我认为你绝对应该加入咨询公司(McK 或其他公司),成为一名数据科学家,如果以下任何一条符合你的话:

  • 作为一名数据科学家,你还不知道自己对哪种数据感兴趣
  • 你不知道哪个行业适合你
  • 你希望将你的职业生涯从另一个领域转向数据科学
  • 你想学习数据科学的可靠的最佳实践(注意最佳实践不一定意味着尖端;事实上,几乎总是相反)

咨询可能不适合你,如果:

  • 你想深入并专注于数据科学的某个领域(例如,你知道你只想专注于构建 ML 模型并成为该领域的专家);这在咨询行业是可能的,但在行业角色中可能更容易实现
  • 你想在数据科学的前沿方法论上工作(我会在我的下一篇文章中解释为什么你很难在咨询业实现这一点,我会解释我为什么离开麦肯锡)

不知道接下来要读什么?我可能有一些推荐给你:

https://medium.com/geekculture/avoid-these-five-behaviors-that-make-you-look-like-a-data-novice-40f01158ae00

我离开麦肯锡成为数据科学家的原因

原文:https://towardsdatascience.com/why-i-left-mckinsey-as-a-data-scientist-30eec01504e5

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由李俊成Unsplash 上拍摄

开始成为数据科学顾问之前应该考虑的事情

在我之前关于麦肯锡的文章中,我谈到了 为什么我决定加入麦肯锡担任数据科学顾问 以及为什么我认为这对有抱负的数据科学家来说是一个伟大的职业之举;我还谈到了我从担任数据科学顾问 中学到的 宝贵经验。

鉴于公司的声望和我在那些文章中提到的伟大成就,两年后我选择离开让很多人感到惊讶。在本文中,我想分享促使我决定离开的原因,以及如果你也在考虑以数据科学家的身份加入咨询行业,你应该知道和考虑的事情。

只是为了抢走每次我在文章中提到麦肯锡时出现的负面声音——我在这里提到的原因完全是出于对个人和职业发展的考虑。至于“公司是否道德”、“顾问对公司是否有用”等争论。每个人都有权发表自己的意见,这些都不在我讨论的范围之内。

好了,现在我们来谈谈我离开的原因:

作为一名 DS,很难感受到你的工作的长期影响

你可能会听到很多咨询师说这是他们离开咨询行业的原因。我曾经认为这只是人们在面试中使用的一个方便的理由,但它最终成为驱使我离开的主要原因之一。

这部分是由咨询的性质决定的。顾问为公司提供特定领域的专业知识和建议。在每个项目结束时,提议的解决方案(通常是数据科学项目的模型或分析)将被打包并交给客户实施、测试和/或维护。想象一下,你作为数据科学顾问为客户建立了一个需求预测模型:在将模型交给客户之前,你可以使用历史数据评估模型的性能,如果合作伙伴成功说服客户延长项目以测试模型,你可能会获得几周的新数据来评估影响。但是最有可能的是,在客户正式部署它之后(或者如果它将被部署和使用),您不会知道它的性能,更不用说它在未来几年的持续影响了。

直到今天,关于实施阶段是否应该成为咨询公司范围的一部分仍有争议。一些人认为,如果顾问开始实施所提出的解决方案,他们就扮演了管理者的角色,而另一些人认为,提出解决方案而不实施是浪费时间和金钱。在我任职期间,麦肯锡开始越来越重视实施;但在行业的当前阶段,有抱负的数据科学顾问不应该抱太大希望,他们将看到他们的模型投入生产,并能够观察到长期影响。

没有太多机会与尖端的 DS 概念合作

公司雇佣顾问是因为他们没有专业知识。因此,自然地,大多数为分析需求而与顾问合作的客户都不是数据科学领域最先进的。作为一名数据科学顾问,你很可能不会为亚马逊或谷歌的搜索优化构建推荐引擎。****

到处都有项目关注相对前沿的技术,如动态定价,但大多数项目将利用更简单的方法。更不用说那些刚刚开始开发他们的分析实践的客户通常对黑盒模型更不信任,并且更喜欢可解释性。作为一名数据科学顾问,您将有更多的机会学习如何向非分析型受众解释分析概念(在我看来,这是一项非常有价值的技能),但实施 DS 领域最新实践的机会较少。

这是一些人比其他人更关心的问题。如果你作为一名数据科学家的兴趣在于机器学习、人工智能和/或其他高级分析领域,那么在决定你想从事咨询行业的哪些项目,或者咨询行业是否适合进入之前,有必要记住这一点。然而,如果你对通过数据和/或建模解决现实世界的商业问题更感兴趣,咨询是开始学习和实践这些技能的最佳地方。

可扩展性并不总是最重要的,很难考虑/采取长期举措

由于咨询服务通常是短期的,甚至有时时间紧迫,客户希望在几周内看到交付成果。由于时间紧迫,而且在大多数情况下,顾问并不对交付后可交付成果的可持续性负责,因此在选择方法时,效率通常优先于可扩展性。许多分析交付品、模型或分析最终更多的是“概念证明”或“原型”,而不是真正成熟的产品。

自从在科技行业工作以来,特别是作为一名经理,我已经知道了长期计划的重要性。这种类型的项目通常由经理和领导者发起,他们将自己从团队的日常工作中提升出来,主动解决差距以实现整个公司的愿景。咨询顾问几乎不需要考虑长期计划,因为他们是被雇来解决一个(或一组)问题的;因此,工作的性质是被动的,而不是主动的,工作的范围通常是预先确定的。想象一下,你被雇来计算如何放置拼图的一部分,但是你对如何移动拼图的其余部分没有发言权;这可能会令人沮丧,你无法理解拼图的其余部分,因此永远无法发展移动这些碎片的技能。

漫长的工作时间是真实的,旅行可能会令人沮丧

最后的原因更多的是个人层面,而不是专业层面。由于工作和行业的性质(就像律师一样,顾问按小时向客户收费),咨询行业并不以工作与生活的平衡而闻名。对大多数工作日来说,直到午夜才完成分析是常态。

除了长时间工作之外,在疫情之前,顾问们需要从周一到周四为大多数项目前往不同的城市。你可能会对自己说,“听起来很令人兴奋,我可以参观不同的城市!”,我一开始也是这么想的。然而,出差的兴奋很快就会消失,特别是因为你探索这座城市的时间有限,而且大多数晚上都在外观相似的商务酒店工作到很晚。

概要:

就像我在以前的文章中提到的为什么我决定加入麦肯锡成为一名数据科学家,尽管咨询是你作为一名有抱负的数据科学家开始职业生涯的好地方,但它可能并不适合所有人。作为咨询行业的数据科学家,需要谨记以下几点:

  • 如果你更像一个“探索者”而不是“建设者”,那么咨询可能更适合你,因为对于大多数项目来说,你将把原型交给客户,而不会看到它成长
  • 一般来说,你将获得更多的数据故事讲述技能,而不是尖端的建模技能
  • 你将有更多的机会通过短期分析项目参与高效解决问题;但为稳健的分析做长期规划的机会较少

有兴趣阅读更多关于数据科学的职业?这里有一些你可能会感兴趣的文章:

</5-lessons-mckinsey-taught-me-that-will-make-you-a-better-data-scientist-66cd9cc16aba> [## 麦肯锡教给我的 5 条经验将使你成为更好的数据科学家

towardsdatascience.com](/5-lessons-mckinsey-taught-me-that-will-make-you-a-better-data-scientist-66cd9cc16aba) </5-mistakes-i-wish-i-had-avoided-in-my-data-science-career-6c22a44304a1>

为什么我更喜欢概率预测——命中时间概率

原文:https://towardsdatascience.com/why-i-prefer-probabilistic-forecasts-hitting-time-probabilities-726667b9c91d

点位预测有利于决策。有了概率预测,你也可以做出正确的预测。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由阿伦视觉Unsplash 拍摄

介绍

在数据科学中,预测通常涉及创建预测未来事件的最佳模型。通常,“最佳”模型是最小化给定误差度量的模型,例如均方误差 (MSE)。最终结果是一系列数值,描述了时间序列的预测轨迹。统计学家或计量经济学家称之为点预测。

更传统的预测模型通常预测给定未来时期的整个概率分布。从现在开始,我们将这些称为概率预测

概率预测的一个好处是能够导出点预测和*区间预测。*将后者视为应用于预测的置信区间的时序模拟。

当然,一个点的预测更容易传达给非技术利益相关者。谁想处理所有可能的结果——给我一个衡量标准来作为我决策的依据!

现在,确实存在着过于复杂的解决方案最终被贵公司搁置的风险。然而,我们也不应该仅仅为了取悦我们的非技术终端用户而过多地降低复杂性。

作为一个例子,让我们看看击中时间的问题。在你的标准数据科学课程中,这是一个相当不常见的话题。尽管如此,它还是很有用的。

击中次数和击中时间概率

为了我们的目的,我们用一个非常直观的定义:一个 击中时间 仅仅是我们的时间序列第一次进入观察空间的某个子集。数学上,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

在哪里

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

并且我们假设时间序列在实数中有实现。后者不是一个必要的要求,但使问题变得更加具体。

我们可以问的一个可能的问题是,当过程第一次超过给定的阈值时。我们感兴趣的子集是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

有了C利益的门槛。现在,当我们谈论击中时间概率时,我们想知道击中时间的概率分布,即

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

对于连续时间的时间序列,p通常是一个概率密度…然而,由于数据科学中的大多数时间序列问题都是离散的,所以让我们也专注于这种情况。因此,p是通常更容易处理的概率质量函数。

不幸的是,击中时间的概率很难分析计算,而且往往难以处理。

幸运的是,概率模型可以通过蒙特卡罗模拟来回答击中时间的问题。我们将在下面进一步研究这种方法。

起初,击中时间概率的想法可能看起来像一个很好的玩具问题,几乎没有实际意义。然而,请考虑一个简单的容量规划问题。由于需求增加,公司可能必须决定何时扩大运营能力。

一方面,这在某种程度上肯定可以用一个点预测来回答。只需选择您预测超过阈值的时间戳作为您的预测命中时间。如果一个分数预测首先就足够了,那么一个击球时间的“分数预测”肯定也能很好地工作。

让我们看一个简单的例子:

在野外击中时间的概率

为了简单起见,我们使用古老的航空乘客数据集。请记住,单个实验远远不足以得出任何概括的结论。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最辉煌的航空乘客数据集。(图片由作者提供)

虽然这些数据已经严重过时,但它足够简单,可以帮助我们快速地阐明观点。

命中时间点预测

首先让我们考虑如何使用标准点预测来解决命中时间问题。最终,我们只能确定我们的预测何时达到某个阈值。

这里我选择了550乘客的任意阈值。对于数据背后的虚构航空公司来说,这可能会为何时增加机队运力提供重要线索。

对于点预测方法,程序现在很简单:

  1. 拟合任意时间序列模型(这里我们将使用 SARIMAX (12,1,1,1)模型来捕捉趋势和年度季节性)。
  2. 在足够长的时间范围内进行预测,以使时间序列超过给定的阈值。
  3. 将预测第一次超过阈值的时间戳标记为您的击中时间。

对于statsmodels.tsa.sarimax.SARIMAX,这看起来如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

C>=550 的点预测和各自的预测击中时间。(图片由作者提供)

事后来看样本集,我们发现我们的击中时间预测晚了一年。在现实世界的应用程序中,迟到一年可能会对您的业务案例造成不利影响。

正如我们将看到的,概率变量给出了一个更完整的图像。不幸的是,我们不能以封闭的形式计算各自的概率质量函数。

命中时间概率的蒙特卡罗估计

幸运的是,statsmodels ’ SARIMAX 提供了均值和标准差预测。由于预测分布是高斯分布,我们可以使用这个知识进行蒙特卡罗模拟。从那里,我们可以估计每个月成为C=550的命中时间的概率:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

击中次数(C>=550)的概率质量函数(蒙特卡罗估计)。(图片由作者提供)

这个看起来好多了。我们的模型预测,时间序列将最有可能在预测点预测前一年超过阈值。事后的数据也更加符合这一预测。

此外,我们还看到,预测击中时间点(红线)也不是概率变量的期望值(紫线)。这是很重要的,因为实际时间序列的点预测实际上是概率预测的平均值。

然而,由于 SARIMAX 的潜在动力,这并不能转化为平均击球时间。

最后,让我们看看我们的质量函数估计的累积分布函数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

击中时间概率的累积分布函数(蒙特卡罗估计)。(图片由作者提供)

在这里,超过阈值的概率在第二年已经超过 60%,而不是第三年。点预报打击时间不合适的另一个原因。

结论

虽然使用点预测通常更方便,但在某些情况下,这种复杂性降低可能会太多。即使在这个相当简单的例子中,“简单”方法也已经落后一年了。

当然,你特殊的击球时间问题可能会让你走上直路。但是,请记住,您只能在事后判断预测的质量。到那时,再转向上面讨论的更复杂但也更全面的方法显然为时已晚。

最终,概率性预测总是可以简化为单点预测。反之亦然,不幸的是事实并非如此。就我个人而言,我非常推荐概率路线,因为它还有许多其他优点。

在以后的文章中,我计划提供更多关于其他优势的见解。如果您感兴趣,请随时订阅,以便在那时收到通知。

参考

**【1】**Bas,Esra。概率和随机过程基础。斯普林格国际出版公司,2019 年。

**【2】**汉密尔顿,詹姆斯·道格拉斯。时间序列分析。普林斯顿大学出版社,2020 年。

Hyndman,Rob J .和 George Athanasopoulos。预测:原理与实践。OTexts,2018。

数据集:https://www.kaggle.com/datasets/rakannimer/air-passengers(在开放数据库许可证(ODbL) 1.0 下许可)

原载于 2022 年 12 月 6 日 https://www.sarem-seitz.com**的

为什么我停止向 CSV 转储数据帧,为什么您也应该这样做

原文:https://towardsdatascience.com/why-i-stopped-dumping-dataframes-to-a-csv-and-why-you-should-too-c0954c410f8f

是时候告别 pd.to_csv()和 pd.read_csv()了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

米卡·鲍梅斯特在 Unsplash 上的照片

构建端到端的数据驱动管道极具挑战性,要求也很高。我自己也经历过,这个过程非常繁琐,最终可能不可避免地会有许多中间文件。虽然这些文件通常用作检查点或帮助管道中的其他模块,但如果没有为这些中间文件选择合适的格式,可能会不知不觉地损害运行时和提升存储要求,因为首选格式总是 CSV。

作为一名数据科学家,我知道 CSV 在数据读取、写入、预览、探索等方面提供了巨大的灵活性。它是你、我和几乎所有使用数据框架的人的首选格式。我过去常常利用 CSV 格式导出数据帧**,直到最近**,我发现了一些节省时间和存储优化的 CSV 替代方案。

幸运的是,Pandas 提供了多种文件格式来保存数据帧,例如:

  1. 战斗支援车
  2. 泡菜
  3. 镶木地板
  4. 羽毛
  5. JSON
  6. HDF5

这促使我根据上述形式在以下参数上的体验表现对其进行排名:

  1. 它们在磁盘上占据的空间。
  2. 对磁盘进行读写操作所需的时间。

实验装置

出于实验的目的,我用 Python 生成了一个包含一百万行三十列的随机数据集——包括字符串、浮点和整数数据类型。

我将下面描述的每个实验重复了十次,以减少随机性,并从观察结果中得出公正的结论。下面的统计数据是十次实验的平均值。

实验

实验 1:保存后利用的磁盘空间

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

文件格式的内存利用率(图片由作者提供)

  • 显然,如果你正在寻找一种内存优化的格式,HDF5 应该而不是成为你的首选。这里,所利用的磁盘空间是上图中最佳格式的两倍多——JSON,它本身的大小接近其他四种格式的两倍。
  • 到目前为止, Parquet、CSV、Feather 和 Pickle 似乎是存储我们的数据帧的合适选项,因为它们都为相同数量的数据阻塞了辅助存储的大致相同的部分。

实验 2:加载和保存花费的时间

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以各自的格式加载和保存数据帧所花费的时间。(图片由作者提供)

这是我们开始注意到使用 CSV 格式的缺点的地方。

  • 现在让我们单独考虑加载时间。读取一个 CSV 文件所用的时间几乎是这里最好的选择——pickle 的三倍(T1)、三倍(T3)。此外,正如我们前面看到的,Pickle 和 CSV 占用的空间相同,为什么要选择较慢的选项呢?
  • 关于节省时间,CSV 是可供选择的最昂贵的选项——消耗接近羽毛的八倍。

显然,在将数据帧存储为特定格式时,加载时必然会再次使用相同的格式。换句话说,一旦您将数据帧存储为 pickle,您就别无选择,只能将其作为 pickle 文件读取。因此,在上面的第三个条形图中,我们查看它们的总效率,即加载时间+保存时间。

  • 遗憾的是,CSV 并不是我们的最佳选择。
  • 与 Feather、Parquet 和 Pickle 相比,CSV 的平均速度是这些格式的 2.5 倍,这是非常高的。

在我看来, ParquetFeather 是我们在这篇文章中探讨的六种文件格式中最好的选择。

结束语

我知道 CSV 很棒。我也爱他们,我是 CSV 的粉丝,原因数不胜数,比如:

  • 如果需要,CSV 允许我只读取列的子集,从而节省 RAM 和读取时间。
  • CSV 本质上是一个文本文件。因此,Pandas 允许我查看 top-n(比如 5、10、15 等。)CSV 中存在的行。
  • Excel 是我最喜欢的工具之一,我可以直接在 Excel 中打开一个 CSV。

然而,CSV 正在扼杀你的管道。事实上是的。仅仅因为到处都有 CSV,您就要花费大量的时间进行读写操作。

除非您需要在非 pythonic 环境(如 Excel)之外查看数据框架,否则根本不需要 CSV。您应该更喜欢 Parquet、Feather 或 Pickle,因为正如我们在上面观察到的,它们提供的读写操作比 CSV 快得多。

所以下次当你准备执行 pd.to_csv() 的时候,想想你是否真的需要一个 csv。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者使用 memegenerator.net 创建的图像

为什么我在机器学习博士研究中使用权重和偏差

原文:https://towardsdatascience.com/why-i-use-weights-biases-for-my-machine-learning-ph-d-research-11ab2fe16956

实验跟踪、超参数优化、私人托管

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由弗雷迪婚姻Unsplash

让机器学习变得更容易的工具的数量正在增长。在典型项目的所有阶段,我们可以利用专用软件来获得洞察力。我们可以监控我们的培训渠道,观察部署过程,自动进行再培训,并跟踪我们的实验。尤其是最后一类,实验跟踪,随着越来越多的专用工具的引入,已经获得了关注。海王星。艾已经收集了一份概述 15(!)不同的 ML 实验管理工具

Neptune 概述中涉及的工具之一是 Weights & Biases,通常缩写为 W&B。如果我没有弄错的话,我想我一直在使用这个工具,当时它还在 0.9 版本中。在开始我的 ML 博士研究后,我开始更加欣赏 W&B 提供的好处,并且我已经在我参与的几乎所有项目中使用了它。该软件是成熟的,与任何 python 兼容,并帮助我理解和比较我的实验结果。在下面,我列出了这个工具对任何一个 ML 研究者都有价值的主要原因。

跨不同框架的实验跟踪

很容易,这是我如此看重 Weights & Biases 框架的首要原因:它允许用户跟踪他们的实验,而不管使用的是什么机器学习框架。与所有主流 ML 框架(TF、PyTorch、sklearn 等)的原生集成。)意味着我们可以在一个地方收集来自 Jupyter 笔记本、TensorFlow 脚本、PyTorch 脚本、基于 Sklearn 的代码和任何其他库的结果。这个特性的有用性很难被夸大:我们有一个单独的空间来收集所有的日志和结果!我们不再需要手动跟踪实验 A 的纯文本日志的存储位置,以及这个位置是否不同于实验 b 的位置,非常方便简单。

wandb 跟踪工具的集成非常简单。我们可以通过在适当的地方添加几行代码来快速更新预先存在的脚本。为了展示这个过程,请看下面的脚本。它显示了测井前的一个(简单)实验,带有权重和偏差:

升级这个脚本以支持使用权重和偏差进行日志记录非常简单。在为 wandb 包(Weights & Biases python 库)添加了一个额外的 import 语句后,我们登录我们的(免费!)账户在第 4 行。然后,在第 21 到 24 行,我们利用集成回调来记录训练进度,并利用 wandb.log 语句来手动记录测试结果:

除了跟踪原始实验结果,如测试分数,W&B 还捕获元数据(即关于数据如何产生的数据)。这一点使我想到了下面的原因。

元数据跟踪和查询

除了跟踪实际数据——度量、预测甚至梯度——权重和偏差库还跟踪使用的计算单位、实验的持续时间和开始命令。乍一看,这些信息似乎只是一个很好的好处,但没有什么真正有用的。但是,我们用户可以通过 python 代码查询 W&B 服务器。

通过一个简短的脚本,我们可以收集关于实验的统计数据,例如我们使用的计算小时数,或者根据用户定义的标准对单次运行进行排名。自动查询这些数据的能力使我能够收集有关我的计算使用情况的统计数据。根据计算使用情况,我可以得出我的实验将花费的金额。在这里,一个小时的花费可能不到一美元,但是一个小时的计算是远远不够的。特别是当我优化 hyperparameter 时(见下面的列表),我很快积累了数百个小时。而且这只是针对一个单一的研究思路。因此,你阅读我的博客帖子有助于我支付任何即将到来的计算账单。谢谢!

透明性、再现性和可理解性

最终,我们希望发表研究成果,部署模型。尤其是对于前者,对整个实验有一个透明的视角可以让其他人理解和验证你所做的是正确的。任何人都可以输入一些好看的数字——比如说,98 %的准确率——但只有当硬结果支持这一点时,它才是可信的。

默认情况下,记录到 Weights & Biases 的实验是私人的,这意味着只有你和你的团队成员可以看到它们。然而,为了增加透明度,实验可以公开,特别是在提交作品发表时。有了这个设置,任何有链接的人都可以访问你的结果并验证它们。

即使我们只为自己记录数据,我们也会从 Weights & Biases 提供的透明度中受益。我们可以看到参数(批量大小、时期、学习率等。)我们解析我们的脚本,可视化它们产生的结果,并在任何时候(以后)从中获得洞察力。最好的是,我们甚至可以使用我们存储的信息来重现结果!

交互式强大的图形用户界面

虽然 W&B 可以通过其 API 进行交互,但我更经常使用基于浏览器的界面。它让我轻松地浏览所有的实验。为了增加清晰度,在开始加权和偏差时,我指定了实验的组和工作类型。第一个特性允许我在 UI 中对实验进行分组;后者进一步将运行划分为更精细的类别。为了给你一个看起来像什么的例子,看下面的截图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在左边,我们看到许多(事实上超过 10k!)实验列举。如果我没有把它们归类到有意义的组中,我很快就会失去这个概述!由于分组功能,我们可以看到运行被放置到子类别中。此外,在每个组中,我们可以通过将运行分成不同的作业类型来增加更多的粒度层。最实际是,这将是“训练”或“评估”在上面的截图中,我在启动脚本时使用了 job_type 参数来区分实际的训练运行和助手实验。如果我把这些助手作为训练的一部分,我会大大减慢它的速度。然而,作为一个独立脚本的一部分,这些额外的信息——实际上是细微之处——可以事后收集,并与已完成的实验联系起来。

值得注意的是,交互式 GUI 使得基于许多标准组织实验变得容易。这个特性让我们获得更多的洞察力:我们可以看到哪些批量有效,找到适当数量的训练时期,或者查看扩充是否改进了度量。除了我在这里介绍的内容,Weights & Biases 还提供了更多有助于提高洞察力的特性。要了解更多信息,我建议浏览这个 ML 研究工具背后的人提供的示例笔记本,以获得实践经验。

它是免费的

这个论点很简短:W&B 是免费使用的,直到你达到一个公平的使用配额。在撰写本文时,您的数据大小可能不会超过 100 GB,但这已经是足够的容量了。超过这些限制,您可以花很少的钱购买额外的存储空间。

通过(免费)团队轻松协作

Weights & Biases 提供团队:不同的用户在一个项目上合作。对于学术研究和开源团体,团队可以免费创建。根据您的订阅级别,您可以创建的协作者和独特团队的数量会有所不同。共同点是团队成员可以将数据记录到单个项目中,使多个实验之间的协作变得轻而易举。

提供自托管服务

对于处理敏感数据的用户来说,有机会自己托管 W&B 应用程序。在撰写本文时,有三种托管软件的方式。首先,使用谷歌云或亚马逊网络服务。该选项导致在选择的云中运行定制的 W&B 版本。第二个选项类似,但使用 Weights & Biases 的云结构。

最后,最后一个选项最适合敏感数据和总体数据控制。尽管如此,它带来了必须提供底层资源和设置运行中的 W&B 实例的开销。最重要的是,必须监控存储容量,因为常规的每用户存储配额约为 100 GB。大量使用,例如在处理大型项目(GPT 风格、Neo 等)时。),可能超过百万兆字节,并可能达到百万兆字节。因此,提前使用可扩展的数据系统。

总而言之,自托管路线非常适合处理敏感数据或需要完全控制记录数据的(学术研究)团队。因此,在研究小组处理企业数据(并利用 ML 工具)的典型情况下,ML 运营商应该考虑私人托管。

内置超参数优化

除了提供数不清的方法来记录所有数据类型,Weights & Biases 还提供了进行参数搜索的工具。请想一想:没有必要设置一个额外的服务(即搜索协调器)。相反,人们可以让 W&B 应用程序处理所有讨厌的东西。在进行了 k-fold 交叉验证的超参数搜索后,我可以向你保证 Weights & Biases 非常适合这种极端情况。如果你已经设置了 Optuna,那么继续使用它。但是如果到目前为止您一直在使用权重和偏差进行日志记录,但是希望扩展,那么可以尝试一下提供的优化工具。

由于参数优化是一项常见的实践——我敢打赌,它甚至可能是许多 ML 研究方向的标准实践——拥有一个结合了日志记录和参数研究的单一工具是一件幸事。此外,由于实验已经通过 W&B 记录,自然也要使用他们的优化框架。

这些是我喜欢使用 W&B 库进行 ML 研究的主要原因。如果你有另一个观点认为使用权重和偏好是一个极好的选择,那么请在评论中与我们分享!

为什么我没有为我的第一份数据科学工作做好准备

原文:https://towardsdatascience.com/why-i-wasnt-prepared-for-my-first-data-science-job-b727d5c8230b

为什么你可能不是呢!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

克里斯蒂安·埃尔富特在 Unsplash 上拍摄的照片

回到 2008 年,金融危机正如火如荼,我急需一份工作。我刚刚从应用数学的研究生院毕业,我不知道我要做什么工作。2009 年,我找到了第一份工作,成为一名数据科学家。第一天,我对自己在研究生院学到的技术和算法充满信心,但很快发现,我的学校教育并没有让我为工作中需要掌握的任何技能做好准备。

十多年过去了,我仍然遇到同样毫无准备的应届毕业生。但是为什么会这样呢?

数据科学生命周期

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:数据科学生命周期。图片作者。

为了回答这个问题,我发现自己在回顾数据科学的生命周期(图 1)。你会注意到生命周期并不是完全线性的。在数据科学行业工作了几年后,我发现随着更多信息的披露或准确性阈值没有完全达到,您可能会从一个阶段回到另一个阶段。然而,在学校里,我学到了一套简单的线性步骤:

特征工程- >建模- >完成!

线性生命周期并没有考虑到您将会发现的信息,这些信息可能会引导您回到生命周期中的前几个步骤。事实上,你甚至会发现你的问题无法用你现有的数据来解决。在行业中,一个新的机器学习产品首先是作为概念验证开始的,因为你不知道它是否会工作。不幸的是,在学术界,教授必须给你的工作打分,所以他们确保问题有解决方案。虽然这使得分级更简单,但对于行业实践来说是不现实的。在您开始概念验证或查看数据之前,您无法知道您的问题是否有解决方案。

这种二分法可能会导致新的数据科学家认为每个问题都有解决方案,而在行业中,您的数据可能无法解决您的问题,解决问题的技术尚不存在,或者有许多其他原因。当你的机器学习项目失败时,你和你的经理可能会开始认为机器学习项目有风险,预算中的美元可能会分配给其他风险较小的工作。如果你习惯了在学校 100%的成功率,这可能会非常令人沮丧。因此,数据科学家和管理者应该考虑失败,即学习机会是成功。

“我没有失败。 我刚刚发现了一万种行不通的方法。”—托马斯·A·爱迪生

商业理解

回顾图 1 中的生命周期,您会注意到生命周期的第一步是业务理解。您应该从了解业务领域、其流程和数据开始每个概念的验证。拥有这些基础知识甚至可以帮助你发现新的问题来解决。不幸的是,在学校里,我只学会了如何解决问题,而没有学会如何识别它。

我经常从新数据科学家那里听到同样的故事:他们的老板希望他们识别机器学习用例,但他们不知道如何识别。如果幸运的话,他们可以直接接触到客户或真正伟大的产品所有者。但是这些人只能告诉他们他们的业务流程。他们可能没有机器学习的知识,所以他们可能无法识别适当的机会。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Towfiqu barbhuiyaUnsplash 上拍摄

我也见过新的数据科学家试图不与客户交谈就完成一个项目。这样做的数据科学家可能会选择从他们的数据集中删除空值,但是如果他们与客户交谈,他们可能会发现用户在某些情况下选择不输入数据。这导致画面不完整,并可能在构建模型时造成偏差。访问客户可以帮助您快速了解各种客户行为甚至业务规则是如何影响数据集的。

从许多方面来说,业务理解是生命周期中最关键的部分,但在当今的数据科学课程中却常常缺乏。

数据采集和理解

在第一轮业务理解之后,下一步可能是获取数据集。在学校里,我可以立即获得多个数据集,但我发现在我的职业生涯中,获取数据可能需要几天、几个月或几年的时间!事实上,解决您的问题的数据可能还不存在。我理解学术界为什么会出现这种情况——你只有有限的时间做家庭作业,所以你不能让你的学生像业内人士那样花整个学期来获取数据。然而,这让学生对现实世界毫无准备。

数据科学项目中经常缺乏的另一个领域是数据理解。当我毕业时,我几乎没有在数据集上执行探索性数据分析的经验。在学校,我主要学习模型和算法,但一旦我开始我的第一份工作,我几乎所有的时间都集中在数据和数据中的偏见上。当你不花时间探索你的数据时,你就增加了放大你的机器学习模型中的偏差的可能性。正确探索数据和使用适当的数据采样技术是关键。

建模

我认为我所受的教育为我做好了充分的准备。不幸的是,我只花了大约 15%的时间在建模上。正如我在上一节中提到的,我其余 85%的时间都花在获取和理解数据上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:数据科学家在学术界和工业界花费的时间。图片作者。Andrej Karpathy 是特斯拉人工智能的高级主管,描述了他在完成博士学位并开始在特斯拉工作后的类似经历。

但是为什么学术界关注的是模型和算法,而工业界关注的是数据?可能是廉价、高质量、真实的数据集很难得到。虽然理解不同算法背后的理论以及如何使用它们很重要,但更重要的是理解数据和数据中的偏差。

举个例子,一个心理学家想要进行一项研究,但是没有足够的资金。为了降低成本,心理学家可能会在他们的研究中使用 18-24 岁的大学生。虽然心理学家可能会发现重要的结果,但他们样本中的个体可能并不代表整个人口。

计算机科学行业也存在同样的问题。大型科技公司花费大量时间来收集和标记数据,这需要很大的代价。最终,课堂数据集并不能让你做好在行业中需要做的所有注释、清理和预处理的准备。

部署

我们尚未讨论的数据科学生命周期的最后一个阶段是部署。你可能足够幸运,在你的第一份工作中,有一个机器学习工程师为你处理这个阶段;然而,我的经验是,我负责部署我在第一份工作中创建的模型——这是我在学校里从未学过的。学术界经常教你如何用你的模型做预测,但是他们通常不会涵盖将你的模型部署到云的最佳架构。

我在工作中学到的另一件事是,当你向真实用户部署一个模型时,你的数据会随着时间而改变,导致你的模型退化或做出完全不正确的预测。我曾经遇到过这种情况,一个企业主没有告诉我他们重命名并重组了文档上的类别。突然,我的模型预测了错误的类别,更新的数据点花了很长时间才出现,以至于模型在生产中几个月都做出不正确的预测。

模型降级和再培训是部署流程不可或缺的组成部分,应包含在数据科学课程中。

结论

如果你开始怀疑自己的第一份工作,只要知道你不是一个人!我接触过的每一个应届毕业生都有类似的感受,要弥合学术界和工业界之间的鸿沟,这个领域还有很长的路要走。

如果你是一名应届毕业生,我鼓励你更深入地研究我们在这篇文章中涉及的领域,以帮助弥合教育中可能存在的巨大差距。我还建议你作为数据科学家的第一份工作是加入一个更有经验的数据科学家团队。这将允许您从团队中的高级数据科学家所犯的错误中学习,而不是自己犯错误。

参考

  1. https://www.datascience-pm.com/tdsp/
  2. https://youtu.be/y57wwucbXR8?t=521

为什么增量 ETL 适合您

原文:https://towardsdatascience.com/why-incremental-etl-is-right-for-you-121b4406bf03

使用 Databricks 自动加载器的增量数据处理教程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

嘶!你在听吗?在 Unsplash 上由 Manja Vitolic 拍摄的照片

企业环境中的数据通常会随着时间无限增长。例如:

  • 网上商店的交易积累速度很快。
  • 服务器上运行的应用程序的日志数据。
  • 数百万在线购物者的点击流数据。
  • 来自数百台互联设备的物联网传感器数据。

在上述所有情况中,共同点是数据会随着时间的推移而积累和扩展,需要明智地处理。

什么是增量数据处理?

在高级别上,增量数据处理是将新的或新鲜的数据从源移动到目的地。

增量 ETL 是数据湖架构中最重要的模式之一。可靠地加载新数据降低了成本,并有助于高效地扩展数据管道。

如今,大多数数据管道都是从云存储的某种形式的文件摄取过程开始的。

从历史上看,在数据湖中接收文件是一个复杂的过程,因为许多系统被配置为处理目录中的所有文件,或者工程师需要实现自定义逻辑来识别新数据。

通常定制逻辑相当复杂,事实上重新处理所有数据的方法相当昂贵。

如果您可以有效地加载新数据,而不必花费大量金钱来读取所有数据或创建自己的处理框架,会怎么样?现在有可能了。

什么是 Databricks 自动加载器?

一个现成的解决方案,允许您从云存储中增量加载新数据文件,而无需任何复杂的设置。

在引擎盖下,Autoloader 使用 Spark 结构化流 API,以便从名为 cloudFiles 的源类型中读取新数据。

如果您熟悉 Spark 读写操作,那么自动加载器的实现非常直观。

仅使用以下 4 个参数,就可以使用自动加载器轻松地配置和设置增量数据处理流水线。

  • 数据源 —源数据的目录。自动加载器将自动接收到达此位置的文件。
  • 源文件格式cloudFiles 应该是自动加载器摄取的默认格式,您也可以指定一个选项 cloudFiles.format 来表示源文件本身的格式。
  • —接收源数据的目的表。可以使用*来指定。表()*自变量
  • 检查点目录 —让自动加载器知道在哪里存储检查点的参数。检查点就像 Spark 流的簿记服务,它跟踪流的进度,也可以用来跟踪数据集的模式。

如何使用自动加载器增量摄取数据?

为了实现以下内容,您只需要一个 Databricks 工作区和一个集群来运行您的笔记本。

让我们熟悉一下我们将在本教程中使用的航班延误 CSV 数据示例。你可以在 GitHub 库中找到 3 个不同日期的航班延误的 CSV 文件,以及一个跟踪笔记本。

数据集具有以下架构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据集的模式:按作者分类的图像

场景

现在让我们想象一下,您是一名数据工程师,负责创建和维护一个存储航班延误的数据湖表。每天,源系统将前一天的集体航班延误上传到云存储目录中。您的任务是每天以最佳方式处理这些数据。

设计

下面的示意图准确地描述了实施过程。正如人们常说的,图片比文字更有说服力,在数据工程中,视觉表现通常比一整页文字更能让人们正确看待事物。

我喜欢把这个叫做数据工程的伪代码!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自动加载器示意图概述:作者图片。

如上图所示,该解决方案可用于表示任何通用的文件接收场景,其中数据随着时间的推移积累在数据湖中以备将来使用。

履行

为了跟随并实现本教程,您需要从 git repo 下载 CSV 文件,因为我们试图模拟源系统的行为。

为了保持示例的简单和易于复制,我们不会在本教程中使用任何类型的云存储解决方案,而是坚持使用内置的 Databricks 文件系统(dbfs)。

理想情况下,在生产设置中,源系统将文件发送到某种登陆/暂存云存储目录。

让我们把伪代码变成实际的实现。

用上面的代码准备一个空的笔记本。ETL 过程的第一步是从源目录中读取数据。语法与传统的 spark read 相同,只是稍有改动。

提取 —我们以流的形式读取数据,因为 Auto Loader 利用了底层的 Spark 流。注意,我们需要指定 cloudFiles 作为格式来暗示我们想要使用自动加载功能。如前所述,我们还需要提供一个检查点目录,作为簿记功能的存储位置。

转换 —没有转换的 ETL 很无聊。Spark 模式推理将我们数据集中的第一列作为timestamp读取。因此,我们可以应用一个简单的转换将时间戳列转换为日期类型。

Load —对于加载阶段,我们只需调用 Spark writeStream 方法,并传递检查点位置和我们希望存储数据的目标表名。目标表是一个增量表。如果不存在,执行将创建一个名为 DailyDelays 的增量表。

现在 ETL 代码已经准备好了,让我们开始展示。为了模拟源系统将文件上传到源目录,让我们使用工作区本身提供的文件上传选项上传我们的第一个 CSV 文件(可以在 git repo 中找到)。您可以在工作区菜单→数据→创建表格选项中找到它。记得在默认路径/FileStore/tables/后面添加一个后缀,如下所示,并上传第一个文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上传 CSV 文件:作者图片

文件上传后,运行带有 ETL 代码的单元,如果一切顺利,您将开始注意到流式查询被激活,如下所示。这意味着第一个 CSV 文件已经在处理中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

流式查询:按作者排序的图像

要确认数据是否被成功接收,请在另一个笔记本中查询如下所示的目标增量表,您应该已经看到了一些奇妙的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

目标表:按作者分类的图像

现在将第二个 CSV 文件上传到同一个目录中,看看魔法是如何展开的。无需调整/更新代码的任何部分,流式查询立即选取这个新文件进行处理,并将其吸收到同一个目标表中。显然,您可以通过查询目标表来确认这一点。如前所述,每个文件只包含某一天的延迟。如果你现在在表格中发现两个不同的日期,自动加载器已经发挥了它的魔力。

如果你仍然不能相信,让我们再做一次检查,上传第三个文件,几秒钟后,我们的目标表应该有 3 个不同日期的数据。

注意:如果您想知道为什么执行代码的单元持续运行并且从不停止,这是因为它运行一个活动的流查询。Spark 流查询有一个默认触发器,每 500 毫秒运行一次,这相当于在数据到达时连续处理数据。当您期望低延迟和接近实时的数据接收时,这非常有用。请注意,这意味着您的集群需要始终在线。

当然,每种情况都是不同的,在我们的示例中,我们确实说过数据每天只到达一次,让这个查询一直运行没有任何意义,最好是每天运行一次,但仍然只处理前一天到达的新文件。

这可以通过对我们现有的 writeStream 逻辑进行简单的更改来实现。通过引入 trigger once 方法,我们仍然可以利用这个强大的功能,以便查询只执行一次,然后自动停止。

自动加载器触发一次:作者图像

结论

增量数据处理不可避免地成为大多数数据管道的首选方法,如果使用得当,自动加载器和 Spark 流可以在数据管道的所有阶段完美地实现这一目的。许多供应商认识到对最佳数据处理方法的内在需求,将其作为内置功能提供,这并不奇怪。

它有几个优点:

  • 处理速度更快,因为数据更少。
  • 一致的性能,因为只处理更改的数据。
  • 不用说,它直接影响处理数据所需的资源成本。

去吧,给自动装载机一个机会,我可以保证你永远不会回头!

CSV 文件以及助手笔记本可以在 git repo 中找到。

为什么自动生成代码很难?

原文:https://towardsdatascience.com/why-is-automatically-generating-code-hard-88d9720ed2bd

用程序合成自动生成代码的挑战

几年前,我迷上了一个叫做 FlashExtract 的工具。这是一个在 Microsoft Excel 中自动生成数据提取代码的工具。在 FlashExtract 中,用户可以突出显示他们想要从 Excel 表中提取的文本。FlashExtract 会自动提取 Excel 表格中的相似文本。

因此,如果您想提取工作表中的所有电话号码,您只需突出显示一个电话号码,工作表中的其余电话号码也会自动提取出来。这几乎就像魔术一样,因为你不必写任何代码或公式。你不必做手工工作,通过表和搜索所有的电话号码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从文档中提取电话号码。不过,FlashExtract 专门用于表格数据。图片作者。

程序合成

FlashExtract 使用一种叫做程序合成的技术来实现这种自动行为。程序合成指的是根据用户对程序行为的说明生成程序的技术。为了了解更多,我编写了自己的程序合成器,从文本文档中提取模式。在本文中,我想讨论我在开发用于数据提取的程序合成器时遇到的挑战。

用于数据提取的程序合成器

下面是我的程序合成器如何工作的基本想法:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

程序合成器生成某种语言的程序,如正则表达式、Python、Java 等。我的合成器用正则表达式(regexe)生成程序,因为 regexe 通常用于查找文本中的子串匹配。

所以,这里有一个正则表达式可以捕获电话号码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

然而,电话号码可能比这复杂得多。可能还有其他符号,如代表国家代码的“+”或表示区号的括号。为了捕捉所有这些可能性,合成器从一组预定义的正则表达式中学习一个正则表达式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

预定义的正则表达式可以有任何指定匹配正则表达式长度的限定符*。以下是合成器学习的量词类型:*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

合成器的目标语言可以描述为预定义的正则表达式和字符串文字的模式。

生成正则表达式的挑战

给定上面的目标语言,程序合成然后将生成程序,具体地说,在这种情况下是正则表达式,它与用户的文本示例(即用户提供的电话号码)一致。如果一个正则表达式捕获了所有用户提供的电话号码,那么它就是一致的

假设用户提供了两个电话号码的例子。程序合成器可以生成许多一致的正则表达式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

以上是程序合成器生成的正则表达式示例。Regex 1、2 和 3 捕获用户提供的所有电话号码示例。注意,一些生成的正则表达式可能过于笼统。Regex 2 捕获电话号码。但是,Regex 2 也可以捕获社会安全号(SSN),例如“049–99–8933”。其他生成的 Regex 可能过于具体,比如 Regex 3,它只捕获区号为“203”的电话号码。虽然 Regex 3 不能捕获诸如 SSN 之类的文本,但是它太具体了,不能按照用户的要求提取文档中所有的电话号码。

注意,即使只有两个电话号码的例子,程序合成器也可以生成许多可能的一致正则表达式。程序合成器如何确定选择哪个正则表达式?这个搜索问题在程序综合中引入了两个常见的挑战:

  1. 我们如何选择一个真正符合用户意图的正则表达式?用户可能实际上想要非常具体的东西,比如区号为“203”的电话号码(参见 Regex 3)。或者用户可能想要所有的电话号码,而不考虑区号(参见 Regex 1)。虽然程序合成能够生成许多有效程序,但挑选一个与用户意图匹配的有效程序是程序合成的一个常见挑战。
  2. 此外,我们必须想出一个策略来导航有效程序的大空间,以及有效地存储可能的程序。可能的程序数量是指数级的。如果我们让 x 成为我们语言中预定义正则表达式的最大数量,那么一个用户提供的 n 个令牌的例子将有最多个 x^n 个可能的正则表达式来捕获它。

更具体地说,程序合成的挑战实际上在于用户意图的多样性和程序空间的难处理性。克服这些挑战的常用技术如下:

  • 消除用户意图的模糊性 : 获得有用的用户反馈,以确定用户的意图。
  • 限制程序空间的棘手问题:一些技术通过以有效的方式表示候选程序的空间来克服棘手问题。其他策略包括使用试探法在搜索空间中导航。

用户意图不明确

作为输入的少量用户示例可能导致用户意图的模糊性。简单的策略有助于减少合成器的意外输出。一个简单的策略是向用户呈现或可视化所学习的程序,并允许他们直接编辑该程序。

此外,向用户呈现合成的程序和程序的提取输出还可以以应该提取什么的更精炼的示例的形式引出用户反馈。显示生成的程序有助于用户理解合成器如何解释他的输入,即生成的程序是太普通还是太具体,或者可能正好合适。

获得更多用户输入的另一个简单方法是间接让用户与合成器的当前输出进行交互。下面是合成器如何引发这种反馈的界面:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

上面的一组问题是从学习过的正则表达式中提取出来的。当用户对 SSN“049–99–9004”回答“否”并对电话号码回答“是”时,这将通知合成器不要生成也捕获 SSN 的正则表达式。它还教导合成器不要创建对特定区号(如“203”)过于具体的正则表达式。

程序空间的难解性

处理指数级大量有效候选节目的一种策略是有效地表示可能的节目。在我们生成的正则表达式的例子中,许多正则表达式共享相同的子表达式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

我们可以通过将可能的正则表达式存储为树来利用这种观察,其中(1)树中的每个节点都是预定义的正则表达式或文字,以及(2)从根节点到任何叶节点的任何路径都形成与用户提供的示例一致的正则表达式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

在上面的图像中,合成器基本上表示了树结构中正则表达式的可能空间,因此具有相同起始子表达式的正则表达式用相同的节点表示。将正则表达式的空间表示为树允许合成器生成大量有效的正则表达式,而不必在内存中枚举它们。

处理可能节目的大空间的另一个策略是设计一些搜索策略,以便能够快速导航该空间。在程序合成中,有几种搜索技术可用,最简单和最天真的是暴力搜索。其他更有效的搜索技术包括使用版本空间代数、机器学习和概率推理。你可以在这里阅读更多关于这些技术

结论

在本文中,我解释了为什么为数据提取自动生成正则表达式具有挑战性。这些挑战在开发程序合成器时很常见。我还讨论了处理这些问题的一些解决方案。要阅读关于程序合成器实现的更多细节,请查看我在这里为 IBM 制作的一个程序合成器,我在一份研究出版物中描述了它:https://dl.acm.org/doi/10.1145/3025453.3025540

截至 2022 年更新: SEER 现采用为 模式归纳 可以在 IBM Cloud 上免费试用:https://Maeda-Han . medium . com/Pattern-Induction-what-is-a-Pattern-part-1-79 ee 1 BD 5 ADC 6

前田花非写的。

为什么交叉熵等于 KL-散度?

原文:https://towardsdatascience.com/why-is-cross-entropy-equal-to-kl-divergence-d4d2ec413864

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:从正态分布中抽取的两个概率分布(图片由作者提供)

尽管最初的概念建议使用 KL-divergence,但在构建生成性对抗网络[1]时,通常在损失函数中使用交叉熵。这经常给这个领域的新手造成困惑。在本文中,我们将介绍熵、交叉熵和 Kullback-Leibler 散度[2]的概念,并了解如何使它们近似相等。

当我们有一个以上的概率分布时,熵和 KL-散度的概念就起作用了,我们想比较它们彼此之间的公平程度。我们希望有一些基础来决定为什么最小化交叉熵而不是 KL 散度会产生相同的输出。让我们从正态分布中抽取两个概率分布 pq 。如图 1 所示,这两种分布是不同的,但是它们都是从正态分布中采样的。

1。

熵是系统不确定性的度量。直观地说,它是从系统中消除不确定性所需的信息量。系统各种状态的概率分布 p 的熵可以计算如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2。 交叉熵

术语交叉熵指的是存在于两个概率分布之间的信息量。在这种情况下,分布 pq 的交叉熵可以表述如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3。 KL-Divergence

两个概率分布之间的散度是它们之间存在的距离的度量。概率分布 pq 的 KL 散度可以通过以下等式来测量:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中等式右侧的第一项是分布***【p】***的熵,第二项是根据 p 的分布 q 的期望。在大多数实际应用中, p 是实际数据/测量值,而 q 是假设分布。对于 GANs, p 是真实图像的概率分布,而 q 是伪图像的概率分布。

4。 验证

现在让我们验证 KL-divergence 确实与使用交叉熵进行分布 pq 相同。我们在 python 中分别计算了熵、交叉熵和 KL 散度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后我们如下比较这两个量:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

右手边的第二项,即分布 p 的熵,可以被认为是一个常数,因此,我们可以得出结论,最小化交叉熵代替 KL-散度导致相同的输出,因此可以近似等于它。

换句话说,我们的目标是在优化终止时达到分布 p 的不确定性水平,并且由于所有机器学习优化都是在受控数据集上执行的,该数据集在实验期间预计不会改变,因此,我们期望 p 的熵保持恒定。

5。 结论

在本文中,我们学习了熵、交叉熵和 kl 散度的概念。然后我们回答了为什么这两个术语在深度学习应用中经常互换使用。我们还用 python 实现并验证了这些概念。完整代码请参考 github 资源库。https://github.com/azad-academy/kl_cross_entropy.git

参考资料:

[1] Goodfellow,I .等人,生成对抗网。神经信息处理系统进展。第 2672-2680 页,2014 年

[2]https://en . Wikipedia . org/wiki/kull back % E2 % 80% 93 lei bler _ divergence

为什么调试数据流很难?

原文:https://towardsdatascience.com/why-is-debugging-data-flows-hard-78aa0f1e095

用户研究观察人类如何调试大数据流中的错误

“我输出中的这些错误来自哪里?!"在大型数据流的输出中发现错误是一个常见的问题。大型数据流接收多个数据集,这些数据集通过许多代码模块进行处理,这些代码模块可能由多个开发人员编写。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

然而,在数据流中追踪错误的来源是困难的:

  • 它通常是通过反复试验来完成的。
  • 必须分析每个中间输出,因为错误会在整个数据流中传播。
  • 不是错误源但传播错误的代码模块可能被误识别为错误源。

考虑到这些挑战,我们构建了一个名为 WhyFlow 的可视化交互式工具,帮助用户识别数据流中传播错误的模块。在建立 WhyFlow 之后,我们进行了一项用户研究,我们要求用户识别小玩具数据流中的错误。

虽然给用户提供了小的玩具数据流,但我们发现非常有趣的是,即使使用可视化工具处理带有简单错误的小玩具数据流,用户(都是计算机科学专业的高材生)也发现完成这些调试任务非常耗时。

在本文中,我们希望深入研究我们给用户的具体任务,检查它们,并展示为什么我们认为即使在今天,调试数据流仍然是一件具有挑战性的事情。

什么是数据流?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

连接客户和商店表的迷你数据流示例。对于每个模块,显示了中间输出数据点。图片作者作者

数据流包含处理、转换和联接数据的代码模块。输入数据源从左到右流经数据流。该数据流连接两个数据库表, CustomerStore ,然后在数据流的末尾,它计算每个位置的人数。

客户模块读取客户表中的位置等个人信息,而商店模块读取包含特定商店信息的商店表。数据流使用 ValidateLocation 模块清理客户表中的位置细节,然后innerjoinolocation模块通过当前位置字段连接两个表。最后,工作流使用 GroupbyLocationCount 模块计算某个位置内存在多少个匹配。

错误如何传播到数据流中

将数据流的最终输出用于其他目的的用户可能会捕捉到错误的输出。由于以下原因,错误会传播到数据流

  1. 故障代码模块或
  2. 由于上游故障代码模块导致的不正确输入。

假设一个商店经理注意到有一个错误的记录,记录中的商店位置不正确。管理器通知开发人员,以便修复传播错误的模块。在此示例中,数据流在联接模块中有一个错误,该模块中出现了左联接,而不是内联接。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中一个模块中出现错误的数据流,导致错误向下游传播到最终输出。用户在输出端捕捉到错误。图片由作者提供。

虽然这种数据流有点小,总共只有 5 个代码模块和不到 50 个数据点,但我们希望用户能够轻松地调试这种数据流中出现的错误。

然而,当我们将这些数据流的调试任务交给人类时,我们发现这是一项耗时的任务。我们甚至为他们提供了自动生成的错误数据点解释和易于理解的数据点可视化,以帮助用户进行调试。

在下文中,我将描述我们进行的用户研究,我们要求用户扮演开发人员的角色,他们需要识别通过数据流传播的错误的来源。我们从观察中发现,即使在很小的数据流中调试错误也是非常耗时和具有挑战性的。

用户研究:实验设置

我们招募了 10 名参与者。在实验中,我们让用户扮演一个调试器的角色,这个调试器必须找出数据流中的错误。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实验前给用户的一些教学指南。图片作者。

数据流

我们的用户看到了两个数据流。这两个数据流是从TPC-决策支持(TPC-DS) 基准查询和数据集复制的。TPC-DS 基准测试广泛应用于系统研究和行业,用于评估通用决策支持系统和大数据系统。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

在实验开始时,我们向参与者提供了没有任何错误的数据流 W1 和 W2,并要求他们描述每个代码模块的预期操作,并识别它所操作的列。这一练习有助于参与者熟悉数据流。

所有可能的代码模块

所有的用户都上过数据库应用入门课程。虽然参与者熟悉标准的关系操作符,但是他们不熟悉它们是如何在数据流中实现的。在教程中,我们预先向用户提供了所有可能的代码模块的空间知识。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

我们发现这是必要的,因为当我们在没有告诉他们可能的代码模块的空间的情况下运行初始试点用户研究时,一些用户花了 4 个多小时试图完成一个调试任务。大多数用户研究对一个人的限制通常建议不要超过 2 小时。

错误类别和可能的错误

此外,我们还提供了可能引入错误的空间。这也帮助我们将每个用户的时间限制在 2 小时。

错误的示例包括重复错误、不正确的筛选器谓词、不正确的空值处理、不正确的字符串操作或不正确的字符串常量操作数,或者用左连接替换了内部连接。具体地说,以下是引入数据流 W1 和 W2 的可能误差:

1.过滤器错误:这些错误会修改过滤器操作,使其在输出中选择正确和不正确的值。

2.联接类型错误:这些错误会修改联接类型,用完整的外部联接替换内部联接。

3.连接列错误:这些错误会修改连接操作的参数,导致连接操作在不正确的列上进行。

我们没有涵盖的错误是分组和聚合代码模块中的错误,或者是涉及丢弃数据的错误(因为我们局限于数据流的特定类型的历史数据血统,称为数据流的why-出处,它不维护关于被丢弃的数据点的信息)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

当一个代码模块中出现错误时,该错误会传播到下游的其他代码模块。然后,错误在每个下游代码模块中有不同的表现。我们称之为标签传播

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们在教程中向用户解释标签传播是如何工作的。图片作者。

为了简化实验,并让用户专注于调试而不是标记,我们预先标记了数据点,并向用户解释“数据流中的所有数据点都已经由识别出不正确数据点的领域专家进行了标记。”

将传统的手动调试与借助错误解释的调试进行比较

为了理解人类如何调试数据流中的错误,我们将该实验设置为用户对比研究。我们比较了用户在错误解释的帮助下进行调试(我们称之为 WhyFlow 的工具)和用户手动调试(基线工具)。在基线工具中,用户只限于单击简单数据流可视化中的模块,以表格格式查看每个代码模块的输出数据点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

手动调试数据流的接口(我们的基线)。图片作者。

WhyFlow 与基线的不同之处在于,它使用户能够直观地检查数据流。它的核心特性是在不同的代码模块中由不正确的数据点产生的错误解释。错误的解释是谓词,它捕获导致最终输出错误的数据点。WhyFlow 为每个代码模块生成解释。解释有助于用户快速识别错误数据点的共有特征。例如,如果一个代码模块有一个错误,其中发生了左连接而不是内连接,那么错误数据点将包含不相等的列值,而内连接应该发生在该处。要了解更多解释是如何产生的,你可以在这里阅读。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

WhyFlow 界面截图。联接模块中有一个错误,所有错误数据点的值都不相等,而内部联接应该出现在该处。图片作者。

我们假设,与基线相比,WhyFlow 用户可以在更短的时间内更准确地识别错误并选择合适的解释。

用户任务

在实验的开始,我们用一个快速教程和一些模拟调试任务对每个参与者进行了工具培训。然后,我们向参与者展示 WhyFlow 中数据流 W1 和 W2 的正确执行,并要求他们描述每个代码模块的预期操作,并识别它所操作的列。

然后,我们在这些数据流 W1 和 W2 中引入错误,并要求用户调试错误并确定错误的来源。如果他们使用的是 WhyFlow,我们会问他们,“在描述错误出现的数据的列中选择一个解释。”如果他们使用基线,我们会问他们,“对观察到的误差给出一个解释。描述出现错误的数据,例如,包括错误列和不正确数据共有的特征。”换句话说,要完成一个调试任务,用户必须要么选择一个对 WhyFlow 错误的解释,要么提供一个对基线的解释。

对于每个条件,为什么流和基线,每个参与者都有三个针对不同错误类别的调试任务。我们随机排列了他们开始时的条件顺序和每个条件下的任务顺序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用户研究中使用的 6 种不同的错误场景。错误以粗体和斜体显示。图片作者。

我们还要求用户在他们认为他们已经识别出有问题的模块、确定了错误类别,或者可以对错误的性质表达一些直觉时,大声思考并说出他们的想法。我们记录了这些事件发生的时间,以及用户在实验过程中所说的话。

对用户如何调试数据流错误的观察

在实验过程中,我们观察了用户在使用 WhyFlow 时如何调试数据流中的错误。他们的工作流程分为以下步骤:

  1. 高层数据流分析:用户首先选择一个可疑模块。WhyFlow 显示代码模块的错误和正确数据点。
  2. 代码模块分析:用户接着分析数据面板中的数据点。
  3. 假设并识别错误类别:用户通过分析数据点来识别错误类别,例如“看起来像是一个不正确的过滤谓词导致值等于 CT ”。
  4. 错误解释:用户通过查看错误数据点上生成的解释来确认他们假设的错误类别。在这种情况下,用户试图找到一个解释谓词,其本质上是说,例如“所有的错误数据点都有值 CT ”。

在每一步,我们记录下用户完成时的时间戳。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用户如何使用 WhyFlow 来调试错误:(1)高级数据流分析,(2)和(3)代码模块分析以及假设和识别错误类,以及(4)通过选择与错误类相关的错误解释来进行错误解释。图片作者。

大多数用户花了太多时间来完成调试任务(步骤 3 和 4)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于每个用户,我们给出了完成调试任务的时间。我们标记每个错误类和工具的平均时间(B 代表基线,W 代表 WhyFlow)。错误识别错误类别或解释的用户用“x”字形而不是圆圈来区分。图片由作者提供(同样取自此处)。

我们对用户完成调试任务的总时间进行了双向重复测量 ANOVA。我们没有发现显著的交互作用,也没有发现所用工具的显著主效应(为什么流与基线)。换句话说,WhyFlow 中自动生成的错误解释在帮助用户快速完成调试任务方面并没有显著的不同。

但是 WhyFlow 中的用户能够快速识别错误类别(步骤 3)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于每个用户,我们给出识别错误类别的时间。图片由作者提供(同样取自此处)。

我们对用户描述错误类别的持续时间进行了双向重复测量方差分析,将错误类别和使用的工具(WhyFlow vs Baseline)作为独立因素。错误类别既没有显著交互效应,也没有显著的主效应。我们确实发现了工具使用的显著主效应(F1,9 = 10.15,p = 0.01)。换句话说,用户用 WhyFlow 识别错误类花费的时间更少。除了连接类型错误,他们对错误的最初直觉比基线更准确。

完成调试任务的剩余大部分时间主要用于选择错误解释的任务(步骤 4)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于每个用户,我们用 WhyFlow (W)来估计选择一个解释的时间,或者在基线(B)中提供一个解释,作为完成调试任务和描述错误类之间的时间差。不正确的解释用“x”字形标记,而不是用圆圈。图片作者(同样取自此处)。

换句话说,大多数用户花了很多时间在 WhyFlow 中选择一个解释。具体来说,我们观察到用户花在 WhyFlow 中选择解释的时间与识别错误类别的时间一样多。三名用户评论说,“有很多解释。”一位用户说,“看到 1000 个解释,就好像是 1000 种不同类型的错误。”一些模块生成了多达 60 个解释。四个用户发现很难辨别建议的解释的质量,因为它们中的许多似乎彼此相似。

最终,WhyFlow 在帮助用户快速确定错误类别方面所提供的任何收益都会因为花费时间来搜索和选择适当的解释而丢失。我们估算了在 WhyFlow 中选择一个解释或在基线中提供一个解释的时间,作为完成调试任务(步骤 3 和 4)的总时间与描述错误类(步骤 3)的时间之差。

上图显示了每个用户的大概解释时间。这次我们再次进行了双向重复测量方差分析,我们发现了工具使用的显著主效应(F1,9 = 6.790,p = 0.028)。

大多数用户在 WhyFlow 生成的解释的帮助下选择了正确的解释(步骤 4)

我们发现用户使用 WhyFlow 比使用 Baseline 更频繁地选择正确的解释。有五个用户最初错误地识别了连接类型错误类,例如,认为错误类型是除连接错误类型之外的其他错误类型。但是这五个用户从 WhyFlow 生成的解释中选择了正确的解释,例如“错误的数据点具有不相等的 storeID ”,尽管该模块是对 storeID 执行连接的连接模块,因此它们应该相等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按语言化错误类别的正确性和最终解释的正确性细分的用户百分比。图片作者(同样取自此处)。

总的来说,我们的定量结果表明 WhyFlow 可以是一个有效的数据流调试工具,因为用户可以使用 WhyFlow 选择更准确的解释。

结论:为什么调试数据流中的错误具有挑战性

WhyFlow 面向调试数据流并试图确定最终输出中错误数据点原因的最终用户。WhyFlow 用谓词解释错误,并可视化数据流、输出的出处以及错误和正确数据点之间的差异。我们的结果表明,WhyFlow 使大多数用户能够准确地定位和交流故障。

但是为什么调试数据流中的错误仍然具有挑战性呢?一方面,我们发现提供自动生成的错误解释有助于用户识别错误类别的任务,尽管不一定有助于解释和选择错误的解释。调试数据流是一项耗时的任务,即使解释小数据流上的错误也是如此。用户研究中的数据流量很小,超过不超过 40 个代码模块,引入的错误有些简单。但是用户仍然花了很长时间来调试错误。

此外,我们的用户研究是有限的。现实世界的部署往往有我们的研究没有涵盖的其他方面:

  • **调试多个错误。**在我们的评估中,WhyFlow 针对数据流进行了测试,只引入了一个错误。然而,即使数据流中只引入了一个错误,我们的用户研究表明,这仍然是一个非常耗时的过程,因为 WhyFlow 用户平均总共需要大约一个小时来调试三个数据流中相当简单的错误。虽然调试数据流中的一个错误仍然具有挑战性,但实际上,数据流可能有多个错误。
  • 支持可解释的错误。 WhyFlow 的当前语言无法捕捉聚合错误。但是,在执行聚合的模块中可能会出现错误。此外,还存在可能丢失所需数据点的误差。在 WhyFlow 的帮助下,无法调试输出中缺失的数据点。

改进人工调试数据流中错误的方式肯定有很多机会。

详细论文:https://openreview.net/forum?id=uO07BC54cW

为什么每个人都停在我的车旁边?

原文:https://towardsdatascience.com/why-is-everybody-parking-near-my-car-and-other-adventures-in-discrete-event-simulation-6d4c350f4bc3

…以及离散事件模拟中的其他冒险

我离开企业界已经一年多了。从那以后,我通过我的咨询公司 Data Driven Supply Chain LLC,将我的时间和才能投入到改善客户的供应链上。创业的一个好处是,虽然我的工作时间很长,但我在工作时有相当大的灵活性。如果我刚刚从早上 7 点到下午 2 点为一个客户编写了一个优化模型,我需要休息一下(我的计算机需要时间来运行这个模型)。是时候去健身房或者为今晚的晚餐买些杂货了。

我住在郊区,所以当我进行这些短途旅行时,我会开车。不久前,我开始注意到一些奇怪的事情,在下午安静的时间去健身房。我会坐在我的车里,收拾我的运动包。我抬头环顾四周,有*那么多人围着我,*进出他们自己的车。这是为什么呢?我在一个能轻松停放 200 辆车的停车场,停车场里可能还有十个人。那么为什么这十个中有五个在我附近呢?

这种情况并不是每次我在健身房都会发生,但发生的次数足够让我注意到它。有段时间,我以为是巴德尔-迈因霍夫现象;我只是注意到它,因为它在我的脑海里。但我在健身房看到过这种事。在药房。到达目标。在杂货店。在麦当劳。(为了平衡健身房。)发生了什么事?

数学建模(包括供应链建模)的关键技能之一是能够观察复杂的现实世界,识别系统的核心组件,并进行简化。为了弄清楚发生了什么,我简化了系统,并为一家企业设计了一个“模型停车场”。在这个模型中:

  • 停车场有 25 个车位,大小相同,排成一排。商业入口在一端。空间被指定为空间 1(最靠近企业)、空间 2(第二靠近企业)、…空间 25(离企业最远)。
  • 从整点(例如,上午 8:00、8:06、8:12、…上午 8:42、8:48、8:54、9:00、9:06…)开始,每六分钟有一辆车到达停车场。因此,每小时有十辆车到达。
  • 汽车在停车场停留整整三十分钟:上午 8:12 到达的汽车将在上午 8:42 离开。
  • 汽车在到达停车场后立即进入和离开停车点——不需要等待有人退出,不需要在车道上等着。因此,上午 8:42 空出的停车位可立即用于上午 8:42 到达停车场的汽车。
  • 所有的汽车都可以占据任何一个停车位——没有预留停车位,没有对汽车来说太小的停车位,没有明显不知道在线间停车意味着什么的笨蛋,等等。
  • 当汽车到达停车场时,它会立即占据离商店最近的空地。

下图显示的是早上 7:59 的停车场,里面没有任何汽车。假设该建筑位于空间#1 的左侧。空间#1 离建筑最近;25 号空间离大楼最远。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(请注意,本文所有图片均为我创作。)

现在,任何人都可以立即在这个简单的模型中找出漏洞。汽车不会到达尼斯,即使是六分钟的增量;顾客在一个企业中花费的时间也不尽相同。你可以立即腾出或占用一个停车位的想法是可笑的。但是可笑的简单才是重点。我们从简单模型开始,并以此为基础进行构建。

离散事件模拟:是什么?

现在是介绍本文中使用的关键分析方法的好时机:离散事件模拟。离散事件仿真(DES)是对在不确定性下运行的系统进行建模的一种强有力的方法。

在离散事件模拟中,你(用计算机代码)建立一个系统模型。从广义上讲,DES 中的系统是一组协同工作以服务于某一目的的物理和人力资源。系统可以包括工厂、仓库、港口以及供应链和物流中的其他设施;餐馆和商店;网站;呼叫中心;医疗设施……这个清单几乎是无止境的。

在 DES 中构建了一个系统之后,您就要让它经受日常生活中的不确定性。“来者”从外部进入系统( deus ex machina )并使用资源。

  • 顾客来到你的商店
  • 卡车到达你的装货码头装货或卸货
  • 顾客来到收银台结账
  • 汽车到达你餐馆的免下车餐馆
  • 病人到达急诊室

借助 DES,您可以跟踪一段时间内的资源利用情况(例如,装货码头、x 光机、收银员),并据此做出业务决策。(更准确地说,软件跟踪利用率,您查看结果。)因为资源使用的时间和持续时间是高度可变的,所以使用模拟允许我们对这种不确定性建模。

对于离散事件仿真,有许多好的软件选项,包括开源软件和商业软件。对于这篇文章,以及我的咨询工作,我使用了https://r-simmer.org/,一个用于离散事件模拟的优秀 R 包。我使用 tidyverse 包进行数据管理和可视化。如果你有兴趣学习如何使用煨*,它的网站有很棒的教程;但是从现在开始,我将以一种与软件无关的方式来谈论模拟。*

在我们简化的停车场例子中,我们让事情变得简单:没有不确定性。每隔 6 分钟就有一批人到达,到达后 30 分钟就有一批人离开。现实世界并不那么美好,但同样,我们开始时故意简单化。

在 DES 中,您(或您的软件)维护一个事件列表*。名称是描述性的—事件列表只是一种跟踪系统变化(“事件”)并将时间戳与它们相关联的方法。在研究生院学习 DES 的时候,我不得不手写事件列表。为了演示,我们将在这里做同样的事情。使用上面列出的简化假设,并假设第一辆车在早上 8:00 准时到达,我们将在一个多小时内跟踪到达、离开和当前占用的空间。*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下图显示了停车场在事件列表中的进程。假设建筑在左侧,空间#1 是最左侧(最近的)空间;25 号空格是最右边(最远)的空格。绿色空间是开放的;红色空间被占用。时间从上到下进行,与我们刚刚描述的事件列表相对应。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意到什么了吗?一旦第五辆车在上午 8:24 到达,就有五个被占用的空间——这五个空间离商店最近。即使每六分钟就有一辆车来,三十分钟后就有一辆车离开, 占用的停车位不会改变 。我们可以继续写几个小时的事件列表——我们会得到相同的结果。这涉及到利特尔法则*,这是排队论中的一个重要概念,是对排队等候的人或事物的分析研究。(Queue 是 line 的另一个名称,在美国不常使用)。*

利特尔定律, L = Lambda * W ,描述简单,但应用强大。它适用于任何 排队系统:几乎任何人或事物到达、等待一段时间、然后离开的地方。(想象一个停车场、装卸码头、餐馆、商店、健身房、医院、填空……)

  • l:系统中的平均项目数。在我们的例子中,停车场里平均有多少辆车
  • λ:系统的平均到达率。在我们的例子中,在指定的时间段内有多少辆车进入停车场:每小时到达 10 辆车,或者作为一个表达式:(10 辆车/ 60 分钟)
  • w:在系统中的平均时间。在我们的例子中,30 分钟

l =λ W =(10 辆车/ 60 分钟)* (30 分钟)= 5 辆车*

等等!利特尔法则说,平均来说,我们在停车场会有 5 辆车。在允许前五辆汽车进入系统后,在模拟研究中称为“热身期”,这是我们手工计算时看到的汽车(和占用的空间)数量。虽然我们遵循的规则是到达的汽车占用最近的可用空间,但利特尔法则告诉我们,无论选择什么样的空间,都会出现 5 辆汽车的结果。

利特尔定律的不足之处在于,输入是平均利率——不考虑这些利率的可变性。

忽视可变性,后果自负

任何在零售店或快餐店的前台工作过的人都可以理解,这些是非常不同的:

  • 下午 2 点到 3 点之间,5 个进来的顾客平均分布,分别是下午 2 点,2 点 12 分,2 点 24 分,2 点 36 分,2 点 48 分。每个都需要五分钟注意力。
  • 在下午 2 点到 3 点之间,5 个顾客在下午 2 点 10 分同时进来。每一个都需要五分钟的注意力。下午三点前不会有其他顾客进来。

在这两种情况下,你在一个小时内为五位顾客服务——利特尔法则对餐馆中的平均顾客数量给出了相同的结果。但是对运营、客户满意度和员工压力水平的影响会非常不同!

(大学时,我在一家连锁三明治店工作,出于法律原因,我称之为地铁。客观地说,我不擅长做“三明治设计师”的工作。地铁,谢谢你给我上了现实世界中的排队论课。)

组织忽视可变性是危险的。仅查看平均输入(每小时的客户数、每天到达的卡车数、每小时的生产率)可能会隐藏这些输入中有影响的可变性。这就是离散事件模拟如此强大的原因之一。

因为这个世界不像我们最初的停车场模型那样可预测,我们现在要在输入中加入一些可变性,看看会发生什么。此表代表原始输入和假设,以及我们对它们所做的任何更改。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关于泊松过程的更多细节请点击这里

你可以看到随着时间的推移,这将如何改变我们停车场的面貌。到达时间不可预测;汽车在停车场停留多长时间是不可预测的;他们在哪里停车是不可预测的。令人欣慰的是,离散事件模拟允许我们相对快速地模拟这种不确定性下的停车场。DES 软件根据我们设置的参数,随机生成汽车的到达时间和在停车场停留的时间。然后,DES 软件会随着时间的推移跟踪每个停车位(以及整个停车场)的状态。下面,我们在一个模拟中看到停车场的状态,平均每小时有 10 个到达,平均停车 30 分钟。在这个画面中,我们每 20 分钟查看一次停车场,从早上 8:00 到中午 12:00。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不是那么容易预测的,是吗!根据利特尔定律,在一整天的时间里,停车场中汽车的平均数量仍然(非常接近)为 5 辆。(在这一点上暂时相信我)。但是可变性是显著的。上午 8 点 20 分,停车场只有三辆车。上午 11 点 20 分,9 辆车在。

如果我们要在 24 小时内跟踪停车场中的汽车数量,它可能看起来像下面的图。x 轴是模拟开始后的小时数(因此 x=0 表示上午 8:00,x=2.5 表示上午 10:30,依此类推)。y 轴表示停放的汽车数量(绿线)和等待停放的汽车数量(红线,整个模拟过程中为零)。您可以看到,虽然停放的汽车数量大致平衡在 5 辆左右,但正如利特尔定律所表明的那样,一天中有很大的变化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此时你可能会想,“但是等等!如果汽车的到达时间不再是可预测的,并且汽车在停车位上花费的时间不再是可预测的,那么跟踪停车场中的汽车数量有多大用处呢?它不会是可变的吗,就像输入是可变的一样?"

如果你在想:答案是肯定的!(此外,你可能对模拟有所了解。)在离散事件模拟中,您有硬币的两面:您可以包含现实生活中的随机性,但是您的结果取决于您包含的特定随机性!

这种随机性的影响可以通过多次复制模拟并汇总结果进行分析来减轻。如果我们将停车场模拟复制 12 次,并绘制每次复制的停车场中汽车数量的时间序列,它可能如下图所示。您可以检查每个时间序列,并查看复制之间的差异。但是在每次复制中,停车场(随着时间的推移)的平均汽车数量非常接近 5 辆,正如利特尔法则所暗示的那样。(请注意,上面的时间序列没有出现在下面的复制中)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果运行模拟的多个副本,可以跟踪一段时间内资源(整个停车场或单个空间)的利用率。您还可以找到资源在复制过程中的总利用率,然后创建一个箱线图,汇总各复制中每个资源的利用率。

下图就是这样一个箱线图,显示了生成上述时间序列图的 12 个重复的总利用率。箱线图表示利用率的最小值、最大值、中间值和四分位数间距(IQR)。红点表示平均利用率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 x 轴的最左侧,我们可以看到整个停车场的利用率。其跨复制的利用率非常相似,平均利用率略高于 20%。根据利特尔定律,拥有 25 个停车位,利用率为 20%的停车场平均容纳(25 * 20%) = 5 辆汽车。(副标题表明实际平均值为 5.1 辆——模拟结果并不总是与理论完全相符。)

在 x 轴上,在整个停车场之后,该轴从左到右利用各个空间。记住,space1 表示离大楼最近的停车位;space2 表示下一个最近的停车位;空间 25 表示离建筑物最远的空间。

因为司机通常喜欢把车停在离大楼更近的地方,所以 1 号车位(离大楼最近的车位)的利用率一直很高,平均在 71%左右。离建筑越远,利用率就越低,14 到 25 号空间很少被使用,如果有的话。(下次当你在一家大卖场,发现车位没有满的时候,看看最后面的车位有多少被利用了。我猜不是很多。)

我开发了一个闪亮的应用程序,可以让你试验输入参数,看看它如何改变停车场的利用率(应用程序的输出与前两张图片非常相似)。您还可以看到当每个开放的停车位具有相等的选择概率时会发生什么,以及根据利特尔定律,当系统中的预期汽车数量大于停车位数量时会发生什么。(提示:漫长的等待,越来越多的汽车徒劳地在停车场盘旋。)

请注意,在应用程序中运行模拟可能需要一些时间。当输出可供查看时,您将收到一个弹出通知。

结论…那么为什么这么多人在我的车附近?

现在,是时候回答当初促使这篇帖子的问题了。当我进入或离开停车场的某个位置时,为什么我周围似乎有很多活动发生?

为了回答这个问题,我们首先再次建立一个简单的模型。假设一个停车场一排有 25 个车位,我们可以求出每对车位之间的距离。例如,空间#1 到空间#3 之间的距离是两个空间;空间#16 和空间#25 之间的距离是九个空间。然后,我们可以制作所有空间之间成对距离的直方图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最不常见的距离是…24 个空格。当你停下来想一想,这是有意义的。只有一对正好相隔 24 个空格的空格:#1 和#25。下一个最不常见的距离是 23 个空格。只有两对相距 23 个空格的空格:#1 & #24,以及#2 和#25。你可以在图表上从右到左继续这个逻辑,直到我们得到一对空格之间最常见的距离:一个空格。(#1 & #2,#2 & #3,等等,直到我们到达#24 & #25。总共 24 次。)

这是一个有趣的起点,因为它表明,如果我们随机选取两个空间,它们之间最常见的距离是 1,有 8%的概率。有 37%的概率它们之间相隔 5 个或更少的空间,平均距离为 8.667 个空间。

您可以在 R 中使用一个简单的脚本使用 sample 函数来测试这一点。或者更类似的,你可以用乒乓球或者标有#1 到#25 的纸条来做实验。

这种影响在我们的停车场模拟中可能会更加明显。记住,人们倾向于尽可能把车停在离大楼近的地方,而较远的车位很少被使用,至少在交通流量较少的时候。在上面的利用率方框图中,查看空间#12 到#25 的利用率:最低。这表明,同时到达/离开更有可能发生在彼此靠近的空间,因为我们都试图把车停在停车场的前面

在停车场模拟中测量这种效应稍微复杂一点,但只是一点点。R 中的包以数据帧的形式提供详细的模拟输出,包括每辆车的到达和离开时间以及停车位。由此,您可以确定:

  • 当到达/离开发生在彼此指定的时间窗口内时。在这个例子中,我把任何一对在 5 分钟内到达或离开的人称为“几乎同时”
  • 有多少对到达或离开是“几乎同时”的
  • 在这些几乎同时发生的停车对中,它们之间相隔多少个停车位?

下图显示了结果。在模拟的所有到达/离开配对中,不到 1%的配对在 5 分钟内发生。(鉴于这些模拟代表了 24 小时的模拟时间,这并不太令人惊讶。)但是在“几乎同时”的到达和离开中,超过 20% 在相邻的空间中(x 轴上的距离= 1)。超过一半的人相距三个或更少的车位——就停车场而言,非常接近。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么为什么健身房里有那么多人把车停在我身边?统计和概率,伙计们。这就是原因。此外,因为我不想走比绝对必要的更远的路去跑步机。

(请注意,如果我们将“几乎同时”定义为相互之间在 5 分钟、10 分钟或 12 小时内发生……相对频率百分比将非常稳定,那么这个柱状图看起来会非常相似。)

真实结论

我希望你已经发现这篇关于离散事件模拟(DES)的能力的文章既有趣又有知识性。唉,我只是触及了 DES 力量的皮毛。使用 DES,您可以对复杂的多阶段流程进行建模,如制造工厂、仓库和物流中心。使用 DES,您可以了解在参与昂贵且难以纠正的资本项目之前业务流程重大变化的影响。使用 DES,您可以了解如何为业务中的极端波动制定计划,例如,如果您的制造工厂不得不在一夜之间将产量提高 25%,或者如果您的商店的每周客流量从本周到下周翻了一番。**

数据驱动供应链有限责任公司提供数据科学和供应链交叉领域的咨询服务和培训。请随时联系我,ralph@datadrivensupplychain.com,了解更多关于如何使用模拟和其他数据科学技术来评估、改进和设计供应链的信息。

既然你已经读到这里,如果你觉得这很有价值,你会考虑捐赠吗?

感谢您的阅读,并祝模拟愉快!

为什么 ggplot2 对数据可视化这么好?

原文:https://towardsdatascience.com/why-is-ggplot2-so-good-for-data-visualization-b38705f43f85

探索 ggplot2 中的图形语法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

巴德·赫利松在 Unsplash 上的照片

ggplot2 是在 r 中使用的一个众所周知的数据可视化包。由于 ggplot2 从一开始就开发得很好,工程师可以花更多的时间专注于理解带有图形的数据,并添加额外的功能来丰富 ggplot2。Python 端有很多选项可供选择,例如 Matplotlib、Seaborn、Plotly、Altair,还有很多其他的包。但是没有一个包像 ggplot2 一样在 R 中占主导地位,并且是数据可视化的首选。

**为什么 ggplot2 对数据可视化这么好?**答案是 ggplot2 在创建基于 图形语法的数据可视化方面是声明性的和高效的。 分层的语法使得开发的图表有结构性和丰富性。生成 ggplot2 感觉就像玩乐高积木。核心概念和语法对新用户来说很优雅,社区支持高级用例。ggplot2 中各种漂亮的主题和调色板使可视化看起来专业,并吸引最终用户。

30 秒内的 ggplot2 示例

大多数数据可视化工具从选择一个可消费格式的数据集开始。ggplot2 在这里也不例外。r 有一个内置的虹膜数据集,可以很容易地用作数据框。

data(“iris”)
summary(iris)
head(iris)# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa

一旦装载了虹膜数据帧。我们可以初始化一个ggplot对象,用来声明共享的数据输入,建立美观(映射)。由于用户可以用不同的图层来表示同一幅图上的相同数据,这就节省了复制输入和美观的时间。

ggplot(data=iris, mapping=aes(x=Sepal.Length, y=Sepal.Width, color=Species)) + 
  geom_point() + 
  geom_line()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

在上面的例子中,我们用萼片的长度作为 x 轴,萼片的宽度作为 y 轴来定义美学。此外,还提供了颜色参数来用相同的颜色标记相同的物种。注意,我们不必引用美学。这是由于aes()是一个报价功能。这意味着它的输入 x、y 和颜色在这里被提到在虹膜数据的上下文中被评估。

使用geom_功能创建层。根据 ggplot 参考,有超过 50 种不同类型的geom_功能。使用geom_pointgeom_line时无需指定输入数据和美学,因为它们已经在ggplot对象中定义。您也可以用不同的数据框和外观覆盖已经定义的ggplot

ggplot2 采用类似管道的语法使用 “+” 来连接层,这一点超级简洁,类似于 R 中的**">% "**或者 bash 脚本中的 “|” 。它使你的代码非常容易跟踪和调试。

如果你想有 3 个不同的图显示物种而不是颜色,只需将物种从颜色移动到面。

🎉tada,非常简单!

ggplot(data=iris, mapping=aes(x=Sepal.Length, y=Sepal.Width)) +
  geom_point() +
  geom_line() + 
  facet_wrap(~Species)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

ggplot2 是初学者友好的

当初学者选择数据可视化库时,一个关键的事情是它需要简单,并且反馈循环短,这意味着用户可以快速看到他们创建的图。通过上面的几行代码,我们可以生成一个好看的图形。ggplot2 利用了图形的语法,这使得开发一个情节就像构建乐高积木一样。使用 ggplot2 用图层构建图形的整个过程很容易理解,对初学者来说非常友好

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由哈维·卡夫雷拉Unsplash 拍摄

对于初学者选择qplot (R 内置)还是ggplot2也有一些讨论。有几个原因让我更喜欢ggplot2:

  • ggplot2 比 qplot 应用更广泛。如果在 StackOverflow 上搜索 ggplot2 vs.qplot,结果是96k vs . 3k(2021 年 12 月)。这意味着作为一个初学者,你在 ggplot2 上找到答案的机会比 qplot 高。或者如果你最后问了一个问题,它能被回答的几率更高。
  • ggplot2 看起来更好,主题丰富。它鼓励我去探索更多的选择,让我的情节看起来更好。ggplot2 附带了大量的主题和许多第三方添加的主题。你可以参考 ggtheme 来看看众多的选项来很好地增强你的剧情。引人注目的图形可以从心理上说服初学者,学习 ggplot2 是值得的。

图形的语法:ggplot2 背后的大思想

图形需要一个作为层的结构来描述它是如何构造的。就像画画一样,我们从一个简单的草图开始,为一个初步的绘画准备草图,引入画面的阴影,最后有细化。各种步骤(层)最终有一个最终的情节定义图形的语法。

Hadley Wickham(《ggplot2》的作者)在他的论文《图形的分层语法》中解释说,ggplot 2 是用图形的语法思维开发的他重新映射了图形的初始语法的核心思想,如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自 Hadley Wickham 论文《图形的分层语法》

分层语法定义了以下组件:

  • 形成美学的默认数据集和映射集:我们用数据和 **aes 在 ggplot 函数调用中定义的数据集和映射集。**如果图层不使用其他数据集,我们可以假设使用相同的数据框和美学。
  • 图层:图层可以分为四个部分:数据和美学映射、统计变换、几何对象和位置调整。图层定义了最终图形的构建模块。根据您在图上显示数据的方式,几何对象只能显示特定的美感。
  • Scale :处理数据到美学属性的映射。
  • 坐标系:将物体的位置映射到绘图平面上
  • Facet :使用特定维度上的子图显示数据。

有了 ggplot2 中的分层语法,在创建情节时就可以很容易地采用这种结构。对于开发人员来说,由于该层可以轻松地独立运行,因此调试起来也不费力。通过使用管道(ggolot2 中的“+”)添加带有隔离层逻辑的附加层,在现有的 ggplot2 图表上进行扩展也变得非常简单。

超越 R

“图形语法”的概念因数据可视化而闻名。相比其他数据可视化工具,很多人真的很喜欢 R 中的 ggplot2。比如这个 Reddit 线程提到 ggplot2 的体验比 Matplotlib 好很多。

一个叫做 plotnine 的 Python 包是为采用 Python 中图形语法的概念而设计的。在 Python 环境中,用户可以编写类似 ggplot2 的代码,与其他 Python 代码混合使用。plotnine 目前在 Github 上获得 2.9k+颗星;你可以看到这个概念在其他语言中是多么有价值。当不同的语言开始从一个人那里借用库,这就证明了它有多好。

在 ggplot2 中创建地块是结构化和有组织的。它以ggplot为切入点开始。然后在geom_上展开以添加层。此外,各种规模和主题也将适用。更复杂的情节遵循这种模式,给用户一致的体验。另一方面,在 Matplotlib 这样的框架中,代码可以与其他 Python 代码分散在一起。代码的顺序不太重要,但是很难阅读;Matplotlib 比 ggplot2 写更多的代码也很麻烦。

最后的想法

我以前只用 Python 处理数据。然而,当涉及到数据可视化时,人们使用的库非常多,并且越来越难以整合。当我碰巧学习 ggplot2 和图形的语法时,我开始学习 R 并使用 R 进行数据分析。对于数据分析任务,使用 Python 还是 R 仍然是一个争论,但在使用 ggplot2 多年后,这是我执行任何数据可视化任务的首选工具。我强烈推荐如果你对 ggplot2 不熟悉,即使不写一行 R 代码,也要虚心一试。很快你就会发现为什么 ggplot2 对你的推荐这么好。

如果你想了解更多关于 R 和 ggplot2 的知识,我也强烈推荐 Hadley Wickham 的《数据科学的书 R:导入、整理、转换、可视化和建模数据

希望这个故事对你有帮助。本文是我的工程&数据科学系列的部分,目前包括以下内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

赵承志

数据工程和数据科学故事

View list47 stories外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你也可以 订阅我的新文章 或者成为 推荐媒介会员 也可以在媒介上获得所有的故事。

如果有问题/评论,请不要犹豫,写下这个故事的评论或通过 LinkedinTwitter 直接联系我。

为什么企业采用一个框架来解决人工智能相关的问题至关重要?

原文:https://towardsdatascience.com/why-is-it-crucial-for-businesses-to-adopt-a-framework-to-address-ai-related-concerns-90bc058b5e64

负责任的人工智能框架就足够了吗,或者我们需要通过政策来规范这个行业吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

信用:大三毒害元素

考虑你的周围环境:几乎可以保证某种形式的人工智能已经存在。你可能已经和 AI 有了日常的互动,却没有意识到。人工智能目前处于高度发达的状态,以我们无法想象的方式彻底改变了我们的生活和商业实践。

随着全球人工智能市场预计到 2028 年将达到 6483 亿美元,可以肯定地说,人工智能正在迅速扰乱我们的生活。人工智能的扩展也表明,这项技术正在获得广泛接受,几乎每个行业都在采用它。

对一些人来说,人工智能的适应与生产率密切相关,并能激发兴奋感。然而,许多人把这个缩写与恐惧联系在一起。人工智能通常被定义为能够执行人脑可以执行(甚至更好)的任务的任何机器,其他几个越来越令人担忧的问题正在出现。AI 的主流实现试图解决各种合法的问题,包括劳动力的替代、安全问题和缺乏隐私。

虽然不可避免的是,所有组织最终都会增加对人工智能的使用,但组织领导人需要注意他们的方法,以确保合规。为了设计和开发人工智能,以公平地影响客户和社会的方式授权业务和工作场所,需要一个负责任的人工智能框架。

什么是 AI?

在了解什么是负责任的 AI 之前,我们先快速回顾一下“人工智能”。AI 是一个广义的术语,指任何模仿人类行为的计算机软件,包括学习、批判性思维和规划。

但是人工智能是一个广泛的主题;一个学期不可能涵盖全部课程。机器学习——人工智能的一个子集——是目前业务流程中最普遍的实现类型。机器学习是自主处理大量数据的能力。这种类型的人工智能由无限学习轨迹上的算法组成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

信用:Besjunioronenva to Elements

今天,机器学习是最流行的人工智能应用之一。从制造业到零售业,从银行业到面包店,企业正在扩大机器学习的优势范围。根据德勤在 2020 年进行的一项调查,67%的企业目前正在利用机器学习,97%的企业计划在未来几年这样做。

你可能也与机器学习互动过:键盘上的预测文本、网飞推荐、亚马逊购物建议以及你订阅的社交媒体帖子的排列都是机器学习的例子。

在业务方面,机器学习可以快速分析数据,识别模式和异常。以这种方式,如果生产输出中存在差异,算法可以通知负责维护系统的授权机构。

责任人艾案

机器学习的能力是无限的。如果人类每天的生产力不超过五个小时,机器学习可以在二十四个小时内达到并保持同样的生产力水平。与我们见过的其他技术相比,人工智能有能力自动决定向谁推荐什么,甚至根据数据对客户进行优先排序。

凭借这一水平的能力,人工智能可以用固定成本的软件迅速取代依赖于人的可变成本。

作为首席执行官,我们有义务将损失降至最低,并以股东的最大利益行事。但这种结构是否暗示我们会用 AI 驱动的算法取代人类?

随着人工智能对我们生活的影响不断增长,企业领导人有更大的责任来管理人工智能可能产生的潜在道德和技术影响。这最终会导致潜在的问题,因此企业必须概述一个直截了当的人工智能战略。这就是有责任的人工智能发挥作用的地方。

R 负责任的人工智能是一个强调需要设计、开发和部署具有道德、有效和值得信赖的标准和协议的认知方法的过程。负责任的人工智能必须整合到人工智能开发和部署过程的每个方面,这必须包含每一个步骤。

随着人工智能对企业和社会产生巨大影响,现在首席执行官们有责任确保人工智能在各自的组织内得到负责任和合乎道德的实施。数百篇关于人工智能偏见、侵犯隐私、数据泄露和歧视的新闻文章在互联网上流传,在人工智能的部署方面,商业领袖陷入了困境。

负责任的人工智能由三个主要支柱支持:

问责

  • 这是向与系统互动的合作伙伴和其他利益相关者解释和证明决策和行动的需要。人工智能中的问责制只有在结论可以由决策算法推导和解释时才能实现。

责任

  • 这是指人的角色和人工智能系统的能力,以回答一个人的决定,并确定错误或不合理的结果。随着责任链的增长,需要将人工智能系统的决策与系统决策中数据的公平使用和利益相关者的行动联系起来。

透明度

  • 这指的是描述、检查和再现机制的要求,通过这些机制,AI 系统做出决策,并学习适应它们的环境和管理所使用的数据。当前的人工智能算法通常被称为黑盒——需要有方法来检查这些算法和随后的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

信用:MegiasDonenva to Elements

为了确保公平收集和管理用于训练算法和指导决策的数据,还需要透明的数据治理。这样做是为了减少偏见,确保隐私和安全。

责任 AI 的优势?

由于人工智能对人们的生活有着精确的影响,实施的伦理方面应该是最优先考虑的。

以下是负责任的人工智能带来的五个关键优势(基于埃森哲人工智能的研究)。

最小化无意偏差

  • 当你在你的人工智能中建立责任时,你确保你的算法和支持它们的数据是无偏见的,并代表整个观众,而不是挑出一个。

确保 AI 透明

  • 建立信任的支柱之一是让人工智能实践变得清晰。可解释 AI 的存在将帮助员工和客户更好地理解和感知系统。

为员工提供新的机会

  • 让你的组织中的个人能够提出他们对人工智能系统的关注,这些系统最终将在不阻碍创新的情况下改善发展。

保护隐私,确保数据安全

  • 在数据安全和隐私受到优先考虑的时候,负责任的人工智能实践将确保敏感数据不会被不道德地使用

为客户和市场带来更多好处

  • 通过创建道德的人工智能实践,您可以降低风险因素,并建立有利于与业务互动的每个利益相关者的系统。

负责任的人工智能不是打勾!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

信用: kenishirotieEnvato elements

负责任的人工智能不仅仅是通过打勾来遵守规则。此外,这不是一个单一用户的旅程,而是一个需要所有利益相关者参与的旅程。

研究人员和开发人员必须接受教育,了解他们在创建具有直接社会影响的人工智能系统时的责任。监管者必须理解如何管理责任。一个很好的例子是,当自动驾驶汽车意外撞上行人时,确定谁是错的。

是硬件的制造商(传感器和摄像头制造商)吗?
软件程序员?还是给汽车开绿灯的监管者?

所有这些问题以及更多的问题必须告知社会为负责任地使用人工智能系统而制定的法规,这些法规都需要参与。

公司现在被期望自我监管他们的人工智能,这需要开发和实施他们自己的指导方针和负责任的人工智能实践。

谷歌、IBM 和微软等公司都有文档化的过程指南。然而,这方面的主要问题是,负责任的人工智能原则可能不一致;一个组织应用的东西对另一个组织来说可能完全不同。较小的企业甚至缺乏制定自己政策的手段。

为负责任的人工智能引入一个通用的指导方针是一个变通方法。目前,欧盟委员会关于可靠人工智能伦理指南的出版物可以作为一个合适的起点。正如指南中所概述的,人工智能应用程序必须满足七个基本要求才能可信。

然而,这些规则只存在于欧洲。尽管谷歌、脸书和微软等科技巨头正在推动额外的监管,但这方面的进展甚微。时间会证明一切。

样本责任 AI 框架调查

谷歌 | 微软|IBM|欧盟委员会

负责任的人工智能不仅对企业至关重要,对国家和全球社会也是如此。埃隆讨论了人工智能及其监管框架——以下是引文。

“我通常不支持监管和监督……我认为人们通常应该尽量减少这些事情……但这是一个对公众构成严重威胁的案例。”——埃隆·马斯克

责任人工智能课程

有许多关于人工智能的在线课程,但关于其负责任的应用的课程较少,包括应用人工智能中的伦理和偏见等主题。

我强烈推荐苏格兰爱丁堡大学通过 edX 举办的短期课程**“数据伦理、人工智能和负责任的创新”**。这个中级课程主要面向在相关领域工作的专业人员。

短期在线课程(ed.ac.uk)

资源

如果你有兴趣了解更多关于公司和组织在人工智能的道德和责任方面所做的事情,我为你收集了一些资源。

负责任地使用技术:IBM 案例研究|世界经济论坛(weforum.org)

人工智能高级专家组|塑造欧洲数字未来(europa.eu)

技术伦理实验室|圣母大学(nd.edu)

CODAIT —开源(ibm.com)

呼叫|罗马呼叫

人工智能伦理| IBM

为什么生产后不断监控机器学习和深度学习模型很重要?

原文:https://towardsdatascience.com/why-is-it-important-to-constantly-monitor-machine-learning-and-deep-learning-models-after-4136f6067547

理解生产后监控 ML 和深度学习模型的重要性可以对这些模型给业务组织带来重大影响。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马库斯·斯皮斯克在 Unsplash 上的照片

作为一个主要参与数据相关活动(如数据处理、数据操作和模型预测)的人,你还被赋予了作为数据科学家或机器学习工程师的额外任务,以实时部署产品。在完成了了解各种模型的正确参数并最终提出最佳模型的繁重工作后,实时部署模型可以在给业务留下深刻印象和创造货币影响的方式上产生重大影响。

最后,模型被部署,它能够根据训练它的历史数据进行预测并给出它的决策。此时,大多数人认为他们已经完成了很大一部分机器学习任务。虽然确实已经做了大量的工作,因此模型已经生产化,但是在机器学习生命周期中还有一个经常被忽略的步骤,那就是监控模型,并检查它们是否对未来数据或模型以前没有见过的数据执行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由马修·施瓦茨Unsplash 上拍摄

尽管在训练 ML 模型和考虑我们任务的最佳评估度量上花费了大量时间,但是总会有测试数据分布可能与训练数据分布完全不同的情况。这听起来有点复杂,但是让我花点时间来进一步简化它。给你一个背景,假设你在 2005 年训练了一个健壮的推荐系统**,向不同的用户推荐书籍。在那个年代,哈利波特系列曾经相当火爆,大多会被推荐。如果一个用户实际上寻找的书大多与儿童小说有关,他们很可能会被推荐《哈利·波特》。然而,在当今时代,如果只推荐《哈利·波特》系列,那就没有意义了,因为那里有很多其他作家的畅销书。这并不是要诋毁 JK 罗琳(哈利波特系列的作者)的作品,而是要展示在训练期间根据完全不同的数据训练的推荐系统模型可能并不总是在生产阶段可用的测试数据上表现最佳。因此,在对一组特定的数据训练模型,并期望它在分布与训练数据完全不同的数据上表现良好时,可能会出现问题。现在让我们来看看如果我们在生产后不监控我们的 ML 和深度学习模型,我们可能会面临的潜在问题。**

数据漂移

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由杨奇煜·巴赞内格Unsplash 上拍摄

我们测试了大量模型,以根据评估指标(如均方误差或许多其他取决于业务需求的指标)获得最佳结果。此外,我们还进一步将数据分为训练测试集**,以便监控模型如何实时运行。我们在使用测试集时所做的一个基本假设是,该分布与我们实时查找数据的方式非常相似。如果生产时间中的数据反映了测试数据,那么模型也可以像对测试数据那样执行。尽管如此,总会有这样的情况,在生产时间中可用的数据与测试数据的分布非常不同。这种现象也被称为数据漂移**,如果不加以控制,会导致公司损失大量利润。因此,在生产之后不断地监控模型以查看行为是否与测试阶段的实际预期相似是至关重要的。****

概念漂移

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由尼克·费因斯Unsplash 上拍摄

当考虑包含输入数据‘X’和底层目标变量‘y’的受监督机器学习问题时,有许多 ML 模型试图理解 X 和 y 之间的关系。换句话说,它们试图基于一组不同的参数将输入‘X’与目标变量‘y’进行映射,这些参数取决于它们在幕后使用的算法。然而,由于我们无法控制的情况,也可能存在输入和输出之间的关系随时间变化的情况。这可能导致 ML 模型在实时部署时性能不佳。这也被称为概念漂移,即输入和输出之间的关系在几天或几个月的时间里发生了变化。因此,持续监控当前正在流向生产中的 ML 模型的数据,以确保它在没有概念漂移现象的情况下表现最佳,这可能会很方便。

图书馆的贬值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Hadassah CarlsonUnsplash 拍摄

在模型训练和特征工程阶段,为了获得最佳预测,实际使用了各种库。为了执行这些任务,使用了各种库,这些库通常使得训练模型的任务更容易遵循和简单使用。然而,随着时间的推移,这些库有时会被弃用**,它们的一些特性也会发生变化。在这种情况下,当我们处理数据并执行预测时,执行最优的库现在不一定执行得很好。正是在这种情况下,持续的模型监控非常方便,最新的库和环境可以用来进一步改进模型及其预测。**

管道问题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由昆腾·德格拉夫Unsplash 上拍摄

为了执行恒定流的操作,通常要考虑流水线,在这种方法中,大量的操作可以轻松执行。特征标准化降维等操作都是在流水线中完成的,使得操作变得更加容易,并且易于部署。然而,当我们不能持续地监控模型时,管道中可能会出现问题。当我们试图不断加载数据并从我们的模型中获得预测时,这些管道可能会出现问题。当我们监控我们的模型时,我们有更大的机会检测到这些管道问题,并确保预测是实时生成的,而不会延迟它们的操作。

结论

在实时执行了模型部署任务之后,现在是时候持续监控模型的性能了。如果不定期进行监控,可能会出现数据漂移、概念漂移、管道问题以及各种库的废弃等问题。当我们不监控我们的模型时,也可能有其他问题。感谢您花时间阅读这篇文章。请随时让我知道你的想法和意见。

以下是您联系我或查看我作品的方式。谢了。

GitHub: 苏哈斯·马达利(Suhas Maddali)(github.com)

LinkedIn: (1)苏哈斯·马达利,东北大学,数据科学| LinkedIn

中等: 苏哈斯·马达利——中等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值