数据契约—确保数据网格体系结构的稳健性
在联合架构中,职责分布在域之间,很难监督依赖性并获得数据使用方面的见解。这就是数据契约发挥作用的地方。为什么数据契约很重要?因为它们提供了对谁拥有什么样的数据产品的洞察。他们支持制定标准并满怀信心地管理您的数据管道。它们提供了关于哪些数据产品正在被消费、由谁消费以及消费目的的信息。一句话:数据契约对于健壮的数据管理是必不可少的!
在您继续阅读之前,我鼓励您从两个维度来看待数据产品的分布和使用。首先,存在技术问题,如数据管道处理和对数据稳定性的共同期望。第二,还有业务方面的考虑,比如就数据共享的目的达成一致,这可能包括使用、隐私和目的(包括限制)目标。通常,每个维度都有不同的角色。对于技术问题,您通常依赖于应用程序所有者或数据工程师。对于业务问题,您通常依赖于产品所有者或业务代表。
数据合约
数据契约类似于数据交付契约或服务契约。它们很重要,因为当数据产品变得流行和广泛使用时,您需要实现版本控制和管理兼容性。这是必要的,因为在一个更大的或分布式的架构中,更难监督变更。从其他应用程序访问或使用数据的应用程序总是会受到耦合的影响。耦合意味着高度的相互依赖。例如,对数据结构的任何更改都会对其他应用程序产生直接影响。在许多应用程序相互耦合的情况下,有时会看到级联效应。即使是对单个应用程序的微小更改也可能导致同时对许多应用程序进行调整。因此,许多架构师和软件工程师避免构建耦合架构。
数据契约被定位为这个技术问题的解决方案。数据契约保证接口兼容性,并包括服务条款和服务水平协议(SLA)。服务条款描述了如何使用数据,例如,仅用于开发、测试或生产。SLA 通常还描述数据交付和接口的质量。它还可能包括正常运行时间、错误率和可用性,以及弃用、路线图和版本号。
在许多情况下,数据契约是元数据驱动的摄取框架的一部分。例如,它们作为元数据记录存储在集中管理的 metastore 中,并在数据管道执行、数据类型验证、模式、互操作性标准、协议版本、缺失数据的默认规则等方面发挥重要作用。因此,数据契约包含了大量的技术元数据。

数据契约的元数据架构
对于分布式架构,我的建议是将您的数据管道框架分布在不同的域中。在这种方法中,域遵循一种通用的工作方式。域自己处理数据,这意味着控制和责任属于您的域。然而,框架和元数据仍然在中央治理之下。
当实现联合工作方式时,另一个建议是从小处着手。从基础开始,比如在共享元数据存储库中存储用于模式验证的元数据、企业标识符和对其他数据集的引用。为可视化数据移动添加数据沿袭支持。接下来,使用像远大前程这样的库来验证技术数据质量,引导您的过程并实现控制。使用 Azure Synapse 和权限构建动态数据管道的最佳实践可在此处找到:https://Piet hein . medium . com/modern-data-pipelines-with-Azure-Synapse-analytics-and-Azure-view-Fe 752d 874 c 67
所有的控制都应该是持续集成过程的一部分。您应该捕获所有运行时信息,比如度量和日志记录,并使其成为您的元数据基础的一部分。这种方法提供了对数据管道稳定性的可见性。因此,从您的域到中央管理驾驶舱有一个反馈回路。
当实现所有数据移动的稳定性时,通过捕获哪些数据消费者使用哪些数据属性(如表和列)来继续扩展。您可以对该信息使用相同的 metastore。这种关于使用的输入是检测突破性变化所必需的。是你的机制让你决定对生产者或消费者的影响。如果数据产品数据集没有被任何人消费,您可以允许破坏性的变化发生。控制数据提供者和消费者之间的握手。我见过一些公司使用源代码控制来管理这个过程,比如 Git。
数据共享协议
数据共享协议是数据合同的延伸。它们涵盖了预期用途、隐私和目的(包括限制)。它们独立于接口,让用户深入了解哪些数据用于何种特定目的,并作为数据安全控制的输入。例如,这些协议可以是对什么数据应用什么过滤器或安全保护。
数据共享协议还可以防止数据使用上的误解。在数据共享之前,域应该讨论数据共享和数据使用问题。当他们达成合作共识时,他们应该在数据共享协议中记录这种共识。您的数据共享协议可能还包括功能数据质量、历史化、数据生命周期管理和进一步分发等项目。这种达成共识的方法不仅从法规的角度来看很重要,而且还能为您的组织带来价值。
您还希望对数据应用分类和条件,如敏感度标签或过滤条件。这成为保护数据时的一个问题。在上一节的图表中,您可以看到一个“数据产品边车”。 Zhamak 将此称为注入策略执行的组件或层,如数据访问控制或数据消费的输出方法。在我之前的角色中,我设计了一个类似的模式:数据产品访问层。它是对您的域数据的安全抽象,用于处理您的安全实施。它是从数据契约中生成的安全层,用于安全地访问数据。它可以是 ACL 或无服务器视图,这是在达成共识后从您的数据契约存储库动态创建的。或为特定消费者选择和过滤的重复数据集。您的最终目标必须是以完全自动化的方式从您的数据契约中获得这些安全视图。
最后,我鼓励您在数据契约属性和文档之间建立联系。确保提供了语义上下文,并与您的术语表建立了关系。这使得消费者能够理解从业务需求到实际实现的转换是如何进行的。如果与业务术语的关系对您很重要,请考虑实施策略。例如,只有当所有数据产品属性都链接到业务术语实体时,才能建立合同。相同的策略也可能适用于上下文变化,例如关系和定义调整。
启动时的最佳实践
如何开始使用数据契约?怎么把东西变得实用?我的建议是慢慢开始。这主要是一个组织上的挑战。相互之间不要引入太多的变化。数据契约是一种文化转变。用户需要熟悉并理解数据所有权的重要性。这种转变也是为了在太少和太多的元数据属性之间找到最佳平衡点。关于过渡:
- 首先,创建技术数据管道的稳定性。如果它们是不稳定的,并且容易受到意想不到的和破坏性的变化,那么你的用例将不会进入生产。
- 对于您的数据共享协议,通过建立一个简单实用的流程开始。不要把事情复杂化。例如,您可以从用 Microsoft Forms 设计的简单表单或模板开始。你应该用简明易懂的语言起草。接受手动流程。限制您的初始元数据需求。你的第一阶段是关于文化转变和收集需求。迭代,直到您的元数据需求变得稳定。
- 在您完成第一个流程后,尝试用基于 web 的应用程序、数据库和/或消息队列来替换您的手动表单。在此阶段,您的中央数据治理团队仍将进行监督。数据访问的粒度级别通常是粗粒度的,文件夹或文件也是如此。尝试利用 REST APIs 来自动提供数据访问策略或 ACL。
- 您的下一个阶段是实施更强大的处理批准的工作流程。让您的数据所有者或数据管理者处于领先地位。您的中央数据治理团队将在后座进行监督。该团队定期审查所有数据合同。在这个阶段,您还应该有一个数据目录,显示所有现成的数据产品。提高您的数据安全性和执行能力。允许更细粒度的选择和过滤。考虑像动态数据屏蔽这样的技术来防止数据重复。
- 在您旅程的终点,一切都将是自助服务和全自动的。这包括自动安全执行和预测数据批准的机器学习。例如,安全视图在获得批准后会自动部署。
数据契约是一种相对较新的数据网格方法。它们很重要,因为它们提供了依赖关系和数据使用的透明性。从小处着手,首先关注技术稳定性和标准化。通过使用吸取经验教训的过程进行迭代。数据治理是必不可少的,但是过多会造成开销。慢慢建立和自动化。这些是我学到的教训。
数据契约—从零到英雄
原文:https://towardsdatascience.com/data-contracts-from-zero-to-hero-343717ac4d5e
数据契约的实用方法

书写数据契约——作者图像,稳定扩散生成。
最近,社交媒体上围绕数据合同有很多噪音。一些数据从业者分享了关于利弊的观点,但主要是关于它是什么及其定义。虽然我认为数据契约是一个疯狂的话题,但我想分享我的经验和如何开始的实用技巧。数据契约是真实而有价值的东西,你现在就可以用比你想象的更少的努力开始利用它。但是我们为什么首先需要它们呢?
🔥数据契约有什么模糊之处?
积极主动而不是被动
如果你从事数据工作,你很可能会多次遇到这个问题:数据是错误的,而你不知道为什么。数据上游似乎有问题,但你的内部同事都不知道为什么,那么我们该怎么办?我们应该联系谁?
我们怎么会在那里结束?
随着数据不再是头等公民,数据团队大多开始在服务于其他初始目标的现有基础架构上进行分析。他们将根据现有的操作数据库“插入”他们的管道,将数据卸载到一个仓库,并处理其余的。

作者图片
数据团队被困在锤子(他们无法控制的操作数据库)和大声疾呼其需求的业务之间。
他们可以在某种程度上变一些魔术,但是垃圾进垃圾出。上游的问题越多,对数据团队的挑战就越大。
这就是数据契约可以发挥作用的地方。数据团队有一个明确的方法来询问他们需要什么,并提出一个更严格的过程来处理变更管理。
📎我们如何实现这样的契约?
如果我们能从头开始重新做每件事会怎么样?
起初这似乎不现实,因为你很少有机会从绿地基础设施开始。然而,以今天的云技术,这并不那么遥不可及。
事件驱动的架构有助于支持数据契约,原因有多种:
- 事件可以是强类型的,每个事件都可以与一个模式版本相关联。
- 如果你使用一个无服务器的事件流,并且基础设施是自包含的(每个主题),那么它是便宜的。
- 事件平台(又名发布/订阅)为传统的下游数据消费(对象存储、数据仓库)提供了内置的连接器。
像 AWS Kinesis 或 Kafka(有像 AWS MSK 或 Confluent 这样的托管 Kafka)这样的技术,云发布/订阅是让你开始的好选择。
这个想法是与后端创建一个全新的合同,并就(数据)消费者的最佳需求达成一致。
后端人员通常有分析之外的事件驱动模式的用例。例如,微服务之间的通信。这里有两个选项:
- 对模式做出妥协,使其既适合数据分析又适合他们的用例
- 创建一个专门针对数据分析使用情形的活动
争取 1。避免在源头创建爆炸式的事件类型,但是由于涉及到更多的利益相关者,讨论变更可能会有点困难。

作者图片
定义创建/修改合同的流程
像 Kafka 或 AWS MSK 这样的大多数事件平台都有自己的模式注册中心(在 AWS 中是 AWS 胶合注册中心)。对于创建的每个主题,您都需要注册一个模式。
在数据生产者和数据消费者之间实现这样一个过程的简单方法是重用一个 git 过程。

作者图片
所有模式创建/更改/删除都可以通过 git pull 请求来完成。有了主题的明确的所有权和消费者,您可以很快知道谁可以批准对模式的更改。CI/CD 管道在合并时用相应的模式选择并部署变更。
这一过程的美妙之处在于它迫使讨论在做出任何改变之前发生。
🚀生产清单
当用事件总线实现数据契约时,这里有一些东西值得推荐。
技巧 1:请使用类型化模式
维护 JSON schema 是一件痛苦的事情。太多自由了。类型化事件的通用标准是使用 Avro 。它受到所有模式注册中心的支持,并且与其他处理引擎(Flink、Spark 等)有很多互操作性。)进行进一步改造。
提示 2:不要在筑巢领域疯狂
因为我们通常以列格式分析数据,所以拥有太多嵌套的复杂字段对于模式演化来说是一个挑战,处理起来也很昂贵。如果您有许多嵌套字段,可以考虑将事件分成多个具有特定模式的事件。
技巧 3:但是你可以在嵌套字段上做一些妥协
如果生产者不确定所有模式的定义(例如,他们依赖于第三方 API),您可以在定义中尽可能地深入,将其余的未知部分作为 JSON 字符串。展开/访问这样的字段会在计算上花费更多,但是它在数据生产者方面留下了更多的灵活性。
技巧 4:在事件中设置额外的元数据字段。
类似于owner、domain、team_channel,或者用特定的字段标识 PII 列将有助于以后明确所有权、血统和访问管理。
Schemata 是一个很好的资源,可以用来使用模式事件建模或从中获得灵感。
提示 5:不要改变给定字段的数据类型。
最好用新类型重命名字段。虽然我们可以在下游建立一个机制来检测模式版本,但是允许在没有重命名的情况下对字段进行类型更改总是会导致令人头疼的问题。如果你接受一个案子,你将不得不处理所有其他的。所以如果把一个int改成一个string不伤人;当你把一辆int换成float或者把一辆float换成int会发生什么?
技巧 6:没有事件总线,您仍然可以实现数据契约
如果您在git中为您的操作数据库保存了所有的 DDL 语句,您仍然可以实现上面的大部分内容。例如,在对数据库进行任何更改时,都会有一个 git 流程提醒需要批准的消费者。然而,这有点困难,因为当创建模式时,数据团队没有机会发言。
🪃把所有权还给数据生产者
数据契约只是将所有权还给数据生产者的一种趋势,而不是让数据团队承受我们扔给他们的任何数据。
这很棒。它让下游的一切变得更容易,并且避免了产品和数据之间的孤岛。
最大的挑战是组织。数据团队必须跨越障碍,并与后端讨论新流程,这可能会令人害怕。强调当前的棘手问题并让人们了解数据的使用方式有助于推动讨论。
对于工具本身来说,可以使用事件平台发布/订阅服务、**模式注册表、**和 git 为数据契约流程逐步进行设置。
在你的公司内找到一个合适的项目发起人,并从头到尾实现管道。没有必要进行大爆炸式迁移;从小事件开始,接下来延伸格局!
📚进一步阅读
迈赫迪·瓦扎又名迈赫迪欧·🧢
感谢阅读!🤗 🙌如果你喜欢这个,跟随我上🎥 Youtube ,🔗 LinkedIn 了解更多数据/代码内容!
支持我写作 ✍️通过加盟传媒通过本链接
数据契约:网状粘合剂
原文:https://towardsdatascience.com/data-contracts-the-mesh-glue-c1b533e2a664
实用定义和实施准则
背景和动机
F ar 来自一个独特的整合数据平台——a*datalith——*数据网格的分布式本质提倡一组松散耦合的数据产品,它们可以相互交互。
在本文中,我们将探索数据契约,这是在我们将大数据分割成碎片后保持一致性的工件。
不仅数据本身会中断,一些支持平台的组件也会中断,比如摄取框架、元数据存储库或调度引擎。正如 Zhamak Dehghani 在她的基础“数据网格”书中解释的那样,数据网格“工程思维状态”应该从多年来软件工程学科中积累的知识中学习。例如,从众所周知的 UNIX 设计原则中汲取灵感:
- 写做一件事并把它做好。
- 写一起努力。
把程序换成*“数据产品”你会得到数据网格数据分解哲学,再把它换成数据工程组件*你会得到工程思维方式。
此外,正如我们在“剖析数据网格技术平台:公开多语言数据”中看到的,我们不仅要设计非常模块化的组件来处理粒度任务,还要实现相同模块的不同变体来适应不同的用户需求和期望。例如,不同的数据产品可能使用不同的摄取框架,或数据转换技术,这很好,在某种程度上,甚至是可取的。

数据网格架构的转变旨在打破整合的数据整体——按作者分类的图像
这种方法的缺点是显而易见的:维护成本上升。
我认为数据网格范例中一个关键的未回答的问题是明确定义什么时候提升一个中心平台组件,什么时候给业务域自由来实现它们自己的部分。很明显,有些部分本质上是全球性的,例如在数据产品搜索组件中,但也有一些灰色区域,如元数据存储库或数据质量引擎,其中的决策并不那么简单。
回到数据,通过将分段并将不同数据产品的实现细节嵌入到数据域中,从而将责任转移到业务域,我们满足了第一个 UNIX 原则(…做一件事,并且希望——把它做好…).
但是,我们如何确保各种数据产品能够无缝地协同工作呢?这里不需要重新发明轮子:一个以契约形式明确定义的 API 和期望就是解决方案。
现在,让我们试着理解数据契约的概念,并深入研究不同用户需求所需的多模态技术实现。我们将使用一些我认为完全符合数据网格理念的开源组件。
那么,什么是数据契约呢?
的最终目标是在“其他人的”数据产品上建立信任,数据契约是位于(a) 业务术语表交叉点的工件,提供丰富的语义,(b)元数据目录提供关于结构的信息,©数据质量存储库设置关于不同维度内容的期望。

数据契约从业务术语表、元数据目录和数据质量指标存储库中拖出碎片—按作者排序的图像
无法给出一个规范的定义,我宁愿尝试*“duck type”*一个数据契约(例如描述它的属性)。
因此,数据契约…
旨在简化和促进数据共享— 数据契约在某种程度上是数据产品的外部和可观察的视图,它应该被设计为“引诱🥰*”*潜在的数据消费者清楚地传达数据产品的底层业务语义。
数据契约不是一堆不相交的表的技术元数据。
以面向对象编程为代表,我设想数据契约类似于类接口(例如,公共类方法的列表),而不是私有类属性的列表。作为一个例子,我们应该公开一个类似*top _ January _ 2022 _ customers _ by _ CLV _ EMEA*的接口,而不是公开类似 full_customer_list 和` historical_orders 的表。我相信这一特性与数据产品的“自身有价值”原则是一致的。
自然,契约不仅需要有商业意义,还需要在技术上提供关于其基础结构的丰富元数据:表、事件、图…、数据模式或支持的消费格式。

使用版本控制来保证界面稳定性的数据契约示例—图片由作者提供
保证消费稳定性— 数据产品远非静态的,因此数据契约的一个关键用例是通过接口版本化提供回溯兼容性。正如我们对编程 API 所做的那样,数据契约是有版本的——维护和支持数据产品的旧版本是数据产品所有者的责任。
设定预期— 数据契约传达数据产品的全球和本地政策执行结果,显示 KPI 的 SLOs 值,如数据停机时间或空字段百分比等。
是可消费的和可丰富的 —合同应该是下游流程可消费的,合同可以作为数据转换管道等软件流程的输入。

数据契约可以由作者组合和丰富—图片
最后,绑定和维护数据产品内部的合同是数据产品所有者的责任。
现在,从技术角度来看,数据契约归根结底是需要管理的表元数据。实现可以像共享存储库中的 MS Excel 文件一样简单,一直到 noSQL 数据库(文档存储),一个大趋势是用数据产品源存储库下版本化的 YAML/JSON 文件来表达数据契约。
需要不同的合同验证执行策略
数据契约生命周期中的一个关键方面是实际的契约验证过程,到目前为止,我们已经将**数据契约描述为声明性对象。**提供关于其描述的数据产品的可信信息的对象。
但是在某些时候,我们需要*【填充契约】*,并确保我们的数据资产验证契约预期。这意味着根据合同描述的数据来评估合同,并确保结果不会超出预期。例如,如果合同规定某些列值最多有 10%可以为空,那么我们需要实际执行,并在每次数据产品获得新数据或修改数据时计算表中的空行数。结果应该存储在本地或全球合同信息库中。

全球和本地商店之间数据契约的潜在分离——按作者分类的图片
那么,平台如何验证合同呢?
正如我们在简介中看到的,数据网格的美妙之处在于承认不同的角色/旅程在涉及到合同评估时会有不同的需求。然后我们应该让用户选择不同的实现来满足他们的特定需求。为了说明这一点并希望能启发读者,我们将把重点放在两组相反需求的实现上。在现实生活中,这些“极端”的场景之间会有非常不同的灰色阴影。
- 场景# 1——自动化转换管道:这可能是最经典的场景,我们每天加载一个大表,并且需要确保新的表状态符合数据契约。在这种情况下,需求可能是以自动化方式高吞吐量处理大型数据集的能力。记住这一点,并以使业务领域的开发人员能够自动化合同验证为目标,我们可以设计一个如下所示的软件组件。

大规模评估数据契约的架构示例—图片由作者提供
想法是同意一个合同 YAML 格式,可以自动馈入大期望+ SPARK 组合来执行大规模验证。 Great expectations 是一个执行数据期望的神奇工具,它基于定义关于你的数据的断言。这些断言是以简单的、人类可读的 Python 方法的形式在声明性语言中表达的,因此在解析带有契约的简单 YAML 文件后生成预期是很简单的。
下面的代码片段是使用这种方法执行列验证的 SPARK 作业(使用*expect _ column _ to _ exists*断言):
- **场景# 2——交互式开发:**在第二个场景中,数据产品是通过像 Jupyter Notebooks 这样的 ide 以交互式方式生成的,这与数据科学家的个人工作更加一致。由于开发往往是迭代式的,所以需要快速地反复评估合同,而不需要让大型集群提交批处理作业。这种情况的一个具体考虑是数据往往适合内存。考虑到所有这些,如下所示的组件将会很有用:

用于快速和本地合同评估的示例架构—图片由作者提供
想法是在本地嵌入每个组件。感谢 Apache Arrow 和 duckdb 这样的技术,我们可以使用进程内 OLAP 数据库高效地查询内存中的分析数据。特别感谢 duckDQ ,这是一个奇妙的 python 库,它提供了一个流畅的 API 来定义和执行数据检查,遵循 scikit 的估计器/转换器范式,在像 pandas dataframe 或 Arrow tables 这样的结构中学习。
以下代码片段说明了这一过程:
注意:在撰写本文时,冰山表的 python 接口( pyIceberg )正处于非常早期的开发阶段,因此在代码片段中,我们直接加载底层的 parquet 文件。
结论
在本文中,我们探讨了“数据契约”的概念,这是确保跨不同数据产品传播的信息可以被共享和重用的关键构件。信任是在数据网格范式下将不同数据资产结合在一起的粘合剂,数据契约是克服消费非来自中央实体的数据资产的恐惧的精髓。
我们还分析了一些使用开源组件的技术实现,用于数据契约生命周期中的一个基本过程:它的评估。
数据去神秘化:神经网络——它们是如何工作的?
原文:https://towardsdatascience.com/data-demystified-neural-networks-how-do-they-work-45bad6a92327
没有术语和复杂数学的神经网络如何工作的执行官指南

神经网络、深度学习、强化学习——所有这些看起来都很复杂,理解这些东西如何工作的门槛似乎太高了。在本文中,我将使用一个工作实例,以直观的方式解释神经网络的机制。
许多解释试图将大脑中的神经元如何工作与人工神经网络(ANN)联系起来。然而,除非你的学位是生物学、医学或神经科学,否则你可能不知道神经元在大脑中是如何工作的,所以这对你没有帮助。我攻读了神经科学专业的医学学位,我发现对神经元识别直线和环路的解释完全令人困惑,所以不要感到沮丧。对我来说,只有当我能够理解网络正在完成的基本计算时,这才有意义。
我将使用两个示例,一个用于预测航班的价格(回归问题),一个用于确定某人是否会拖欠下一次信用卡付款(分类问题)。
回归示例——预测航班价格
第一步:收集输入信息
首先,我们要考虑我们可以使用哪些数据来帮助我们预测航班的价格。对于我们的例子,我们将使用 2 个输入;以英里为单位的飞行距离和该航线上预订座位的典型比例(即利用率)。
我们将从伦敦和东京之间的航班开始,这个航班的实际价格是 900 英镑。伦敦和东京之间的英里距离是 5,936 英里,通常这条航线上 90%的座位都被预订了。

作者图片
第二步:分配权重
我们需要对这些投入做些什么来达到 900 的价格。为此我们引入了权重。网络将从随机分配权重给每个输入开始。现在,我们将从距离 0.2 开始,航班利用率 6。然后,我们将输入乘以权重,并将它们相加。


作者图片
初步猜测,这并不可怕,但我们可以做得更好。
步骤 3:引入最小阈值
当我们更多地考虑它时,因为固定成本,运营一个航班有一个最低价格。无论航班是飞往爱丁堡还是东京,希思罗机场都会向航空公司收取固定的着陆费、着陆税以及行李搬运工/候机楼的费用(暂时忽略短途和长途英国航空税的细微差别!).这意味着,虽然里程和价格之间的关系应该大致是一条直线,但它不会在 y 轴上穿过 0。


作者图片
我们把这个加入到我们的神经网络中,这叫做偏见。现在的计算是:
第四步:计算误差
我们知道从伦敦到东京的航班花费 900 英镑,但是我们的网络目前预测它花费 1393 英镑。这意味着 493 太高了。我们越接近 900,模型的表现越好。
第五步:调整重量。
现在模型将调整权重。让我们看看,如果我们使用 0.1 的距离并保持 6 的利用率,会发生什么。

更好,但仍不完美。该模型将继续调整权重,直到它尽可能接近 900。
为了保持简单易懂,我在这个例子中省略了一些东西。在这个模型中,航班的距离比利用率有更大的影响,因为数量更大。通常情况下,您会缩放这些数据,因此所有的输入都是相同的范围。我也没有谈到如何调整权重——因为这方面的数学计算确实很复杂。
一个分类例子——预测某人是否会拖欠信用卡付款
上面的例子本质上是一个线性回归问题。神经网络用于回归问题,但更常见的是用于分类问题。这意味着我们要识别图像/客户/卡交易等属于哪个类别。
我们希望预测客户是否会拖欠下一次信用卡付款。
第一步:收集输入信息
我们首先确定可以帮助我们预测客户是否会违约的数据。对于这个例子,我们将使用 3 个输入;客户的信用评分、错过付款的历史以及他们的收入。
有 2 个客户;一个直觉上看起来有风险,另一个没有。

我们从顾客 A 开始。他们直觉上看起来有风险,他们的信用评分相当低,收入低于平均水平,并且他们之前有 5 次错过付款。
步骤 2:分配权重和偏差
接下来,我们像以前一样给每个输入随机分配权重。我们将输入乘以权重,然后将它们相加。
客户甲

作者图片
这导致了 340 分。
接下来让我们看看客户 b 的情况。这个客户直观上看起来风险更小;他们的信用评分为 600 分,没有拖欠还款,收入为 5 万英镑。
客户 B

作者图片
这导致分数为-370。
第三步;激活
在回归解决方案中,输出像元中的数字是一个有意义的数字,即航班的价格。在这个例子中,340 代表什么?他们有可能拖欠下一笔付款吗?
为了回答这个问题,我们使用一个 sigmoid 激活函数。这听起来很复杂,但它所做的只是接受给它的数字,并确保输出在 0 和 1 之间。这意味着我们可以用它作为一个概率,所以数字越大,客户越有可能错过他们的下一次付款。

当我们为顾客 A 计算时。我们可以看到输出是 1。该模型预测客户可能会拖欠下一次付款。

作者图片
相反,客户 B 的输出为 0,这意味着模型预测他们不太可能在下次付款时违约。

作者图片
第四步;计算损失并调整权重
接下来,我们需要计算出预测的准确性。对于客户 B,我们是正确的,客户没有拖欠他们的下一次付款。对于客户 A,尽管有信号,客户也没有拖欠他们的下一次付款。现在,让我们简单地计算一下我们正确预测的客户数量。

我们只正确预测了一半的客户,这不是很好。该模型将自动调整权重,直到正确识别的客户数量最大化。这种方法非常复杂,所以我暂时不在本文中讨论。
与回归示例类似,这个分类示例在某些方面过于简单。我们的两个培训案例都没有拖欠下一次付款。神经网络需要您想要预测的所有输出的示例,并且要从中学习的训练示例明显多于 2 个。我们给模型的所有输入都是数字的。然而,在现实世界中,数据是分类的,例如城市、头发颜色、性别。分类数据必须转换成可以应用权重的形式,即转换成数字。有几种不同的方法来确定模型的性能,正确的度量标准取决于数据类型和模型类型。在将输入传递给模型之前,我们也没有横向扩展输入,这意味着其中一些输入对模型有更大的影响。
参考文献
Purkait,N. (2019) 使用 Keras 设计和创建使用深度学习和人工智能原理的神经网络。可从以下网址获取:https://portal . ig publish . com/iglibrary/obj/packt 0005217 . html(访问时间:2022 年 8 月 19 日)。
我喜欢为商业用户写关于数据科学的文章,我热衷于使用数据来提供切实的商业利益。
您可以通过 LinkedIn 与我联系,并通过 Medium 关注我,了解我的最新文章。
用于目标检测的数据提取
原文:https://towardsdatascience.com/data-distillation-for-object-detection-92a89fe5d996
从不同的角度学习

Robina Weermeijer 在 Unsplash 上的照片
知识的升华
知识提取(KD),也称为模型提取(MD),是深度学习之父杰弗里·辛顿(Geoffrey Hinton)提出的一种令人印象深刻的神经网络训练方法,以获得神经网络的性能。如果你从未听说过 KD,你可以通过这个链接到达我的帖子。
简而言之,知识发现的核心思想是从大型模型(教师)或神经网络模型集合中提取知识,并使用这些知识作为软标签来指导(训练)较小的神经网络(学生),以便学生可以更有效地学习,从而提高其性能,这是通过从头开始训练学生无法实现的。
尽管 KD 很有潜力,但它在训练阶段有局限性,因为它需要大量的硬件资源和长时间来训练大型教师模型或笨重的模型集合,以实现生成用于指导学生模型的良好伪标签(软标签)的目标。为此,来自 AI Research (FAIR)的 Ilija Radosavovic,He 等人提出了数据提取,该方法应用半监督学习,通过利用有限数量的标记数据和互联网规模数量的未标记数据来提高 CNN 在对象检测中的性能。你可以在 arXiv 上轻松找到整篇论文。
数据提炼
数据提炼与知识提炼

来自纸张的数字
上图比较了数据提取和模型提取(知识蒸馏)的区别。模型提取利用模型 A、B、C 的集合来生成软标签,该软标签随后用于训练学生模型。集合中的每个模型可以大于或等于学生模型。部署模型提取的一种流行方式是独立地训练每个模型,这是耗时且计算效率低的。
或者,数据提取仅训练一个教师模型 A,然后应用多变换推理来合成伪标签。多变换推理可以被认为有点类似于测试时间增加过程,并且它可以被应用于改善神经网络的性能。多变换推理也是一种简单的方式,既不需要修改损失函数,也不需要改变模型结构。此外,根据单次变换图像上的预测重新训练模型通常不会带来太多的性能改进价值。因此,输入的多个几何变换可以帮助生成用于训练学生模型的良好伪标签。

来自纸张的数字
如何进行数据提炼
数据提炼包括 4 个主要步骤:
- 根据标记数据训练模型(如监督学习)
- 使用训练好的模型对未标记数据的多次转换进行预测
- 集合预测以生成未标记数据的伪标记
- 在真实标签和伪标签的并集上重新训练模型,直到收敛
为了澄清,我给出了一个例子,说明如何使用 YOLOv4 为对象检测部署数据提取。
- 首先,像常规的监督学习一样,在一组标签数据上训练 YOLOv4。
- 之后,使用经过训练的 YOLOv4 对未标记数据的多个几何变换进行预测,如下图所示,我应用了一个原始图像、一个翻转版本和一个升级版本,就像测试时增强过程一样。
- 然后,输出将采用加权盒融合(WBF)方法进行处理,您可以在这里应用任何包围盒后处理方法,例如非最大值抑制。我们都知道输出总是包括真阳性、假阳性和假阴性;我们必须为伪标签选择“好的”预测。一种简单但有效的方式是挑选置信度得分高于某个阈值的预测。以及如何选择一个门槛?在这篇论文中,作者利用了一个阈值,使无标签图像中的平均对象数量等于真实标签图像中的平均对象数量。这可能不是在所有情况下都有效,但至少是有效的!
- 最后,结合真实标记数据和生成的伪标记数据来重新训练(或微调)YOLOv4 模型。

按作者分列的数字
物体检测的结果
文中给出了在基准数据集 COCO 上的数据提取性能。我想总结如下:

来自纸张的数字

来自纸张的数字

来自纸张的数字

来自纸张的数字

来自纸张的数字
详细内容可以看全文。
结论
在这篇文章中,我简要回顾了数据提取,这是一种提高 CNN 性能的半监督学习方法。通过利用未标记数据的多重几何变换,该方法生成可以与人工标记数据相结合的高质量伪标记,以提高神经网络模型的学习效率。数据提取的能力已经在人类关键点检测和物体检测任务的基准数据集上得到验证。
欢迎读者访问我的脸书粉丝页面,分享关于机器学习的事情:深入机器学习。更多值得注意的帖子可以在这里找到:
感谢您抽出时间!
数据记录最佳实践
原文:https://towardsdatascience.com/data-documentation-best-practices-3e1a97cfeda6
节省时间,提高透明度,并提供高质量的数据

在 Unsplash 上由 Luisa Brimble 拍摄的照片
作为一名分析工程师,我一直在追踪我在旧数据模型中看到的各种数据集的所有者。有大量的谷歌表单四处流动,被用于复杂的数据模型,然而没有人真正知道它们是如何被使用的。我通常必须向来自每个业务领域的多个团队成员发送消息,以便最终找到了解旧数据集的人。即使这样,他们也可能不知道最初为什么要创建它,或者它是否仍在使用。这是一个永无止境的循环,试图记录公司内部使用的所有数据。
这个问题的解决方案不必很复杂。事实上,这相当简单。从开发的一开始,您就需要记录所有的数据源和数据模型。许多团队认为文档是在数据被完美地结构化和组织后做的事情。但是,您的数据会是最佳的吗?
如果我们等到一切都“完美”了才实施最佳实践,那么我们就是在给企业造成巨大的伤害。在构建数据栈时记录数据源和模型将有助于实现最佳的数据文化。数据文档是的解决方案,而不是从解决方案中产生的东西。
为什么数据文档很重要
数据文档为您的业务提供了其他方式无法获得的好处。它培养了更好的数据文化,节省了您的数据团队的宝贵时间,并增加了业务的透明度。
节省时间
预先记录你的数据集可以减少未来的技术债务。不用在构建堆栈后回顾过去并试图记住所有数据的意义,您可以随时记录。你正在做的事情背后的为什么仍然历历在目。每当我等到完成构建某个东西来记录它时,我就会忘记数据的复杂细节。在构建数据模型的过程中,您学到了如此多的部落知识,值得尽一切努力去记住它们。
增加透明度
当您记录所有数据集时,业务中的每个人都有一个了解他们可用数据的窗口。利益相关者很少会问哪些事情可以做,哪些事情不能做,哪些事情不能做。这还意味着,分析工程师和数据分析师不必每次去使用不同数据集时都去寻找它们的所有者。一旦数据集被记录下来,所需的信息就随时可供参考。
确保高质量数据
作为数据从业者,没有什么比数据质量更重要的了。记录您的数据可确保数据始终以正确的方式使用。KPI 将跨模型保持一致,相同的时区将用于不同的日期字段,并且可以跟踪代码更改(或者至少这是目标)。文档有助于跟踪数据集的新鲜度、潜在的错误以及模型之间的依赖性——所有这些都是数据质量的关键因素
数据记录最佳实践
既然我们知道数据文档是游戏规则的改变者,那么让我们来讨论一些现在就可以在数据栈中实现的技巧和诀窍。
为您的数据模型创建 dbt 风格指南。
在阅读了 dbt 网站上的大量博客文章后,我发现了创建风格指南的最佳实践。即使不使用 dbt 编写数据模型,也应该创建一个风格指南,详细说明您希望遵循的不同代码和命名约定。
这是我做的第一件事,甚至在建立任何数据模型之前。我很感激我这样做了,因为它给了我一个可以严格遵循的标准。你可以想把所有的事情都记在脑子里,但是在记到某个地方之前,很容易忘记。每当我在编写我的数据模型时遇到问题,我都能够查看指南并回答它,而不必查看其他数据模型并猜测我想要什么标准。
你的风格指南中应包含哪些内容:
- 命名约定(列名的大小写和时态)
- SQL 最佳实践(注释代码、cte、子查询等。)
- 模型的文档标准
- 日期、时间戳和货币列的数据类型
- 所有日期的时区标准
下面是我的风格指南中的几个部分的例子,你会想要模仿你的风格:
dbt 约定
Only base_ models should select from sources.All other models should only select from other models.
测试
At a minimum, unique and not_null tests should be applied to the primary key of each model.Run the drop_old_relations script after completing a model in order to delete old views/tables
命名和字段约定
Schema, table and column names should be in snake_case.Each model should have a primary key.The primary key of a model should be named <object>_id, e.g. account_id – this makes it easier to know what id is being referenced in downstream joined models.
建立模型时记录列定义。
我们已经谈到了在构建数据模型时记录数据将如何节省您的时间。但是,这也有助于提高数据的质量。为列创建定义时,您希望确保它们是一致和准确的。当你正在处理数据时,而不是在事后,你通常对数据有最深刻的理解。这是因为在编写数据模型时,您已经了解了数据中的细微差别。
我强烈推荐直接在 dbt 中进行文档化。如果您不熟悉 dbt 中的源文件,这是您记录模型及其列的地方。dbt 允许您直接在这些文件中定义表、模型和列描述。直接在代码旁边编写和存储文档可以确保分析工程师和数据分析师的工作流程顺畅。
像 Castor 这样的数据目录工具允许您跨不同数据集自动填充 dbt 中定义的这些定义,从而将文档化向前推进了一步。这样,如果在多个数据集中有相同的列名,就不必一直定义它。Castor 只需点击一个按钮就可以完成这项工作,节省了您的宝贵时间,让您可以专注于数据模型的编码。
对您的数据模型和数据管道使用版本控制。
版本控制是一项重要的软件工程最佳实践,也可以引入到您的分析工作流程中。大多数团队使用 Github 来跟踪任何代码的变更。然而,我也喜欢在像 dbt 和perfect这样的工具中直接记录不同的版本。这些工具使得在代码旁边显示文档变得容易。
dbt
在 dbt 中,每个源文件都有一个“版本”块。在这里,您可以在每次进行更改时更改版本。它是如此简单,但在记录数据随时间的变化方面却非常重要。

src_marketing.yml(图片作者)
长官
Prefect 是我自动化和部署数据管道的首选工具。这是一个基于 Python 的工具,有一个非常干净的用户界面,易于使用。使用 UI 部署管道时,可以在管道运行代码旁边添加一个自述文件。我利用这个自述文件记录我所有不同的管道版本,包括它们同步的数据和它们运行的模型。
这是一个非常权宜的解决方案,但它并没有淡化它的重要性。有时文档可以简单到保存一个包含一堆关键信息的文档!用你能得到的来凑合没有错。

作者图片
如您所见,我记录了版本号以及该版本中所做的更改、正在同步的数据源和计划运行的数据模型。
将数据目录工具集成到您的堆栈中。
虽然我的其他数据文档最佳实践更多的是使用您已经使用的工具,但是您也可以在您的堆栈中实现一个专门关注数据文档的工具。数据目录集成在您的数据堆栈中,将来自不同工具(如【雪花】、dbt 和 Looker)的文档跨您的堆栈同步到一个位置。我们很幸运,市场上有很好的解决我到目前为止提到的具体痛点的产品。
数据目录允许您为数据集和标签资源分配所有者。这确保了当你对数据或数据质量状况有疑问时,你知道该找谁帮忙,消除了不必要的来回奔波。标记资源还允许您基于数据集的业务领域来分离数据集。当业务团队只想查看其领域中的数据集时,这很有帮助。当用于限制谁可以查看某些数据集时,标记也是一种数据治理形式。
虽然这些是数据目录的核心功能,但不同工具之间还有一些强大的文档功能。我觉得非常有趣的一点是 Castor 的“部落知识”自动化。有多少次你发现自己在一个团队松弛渠道发帖,询问某个数据集?对该数据集了解最多的人会回复一个松散的线程,告诉你所有你需要知道的。

作者图片
Castor 实际上是在一个松散的线程上提取评论,并将它们存储在目录中数据集的一个部分中。这样,“部落知识”就永远不会丢失!它将永远与您其他有价值的文档保存在一起。
结论
实话实说吧。记录我们的数据一点也不“迷人”。对于分析工程师或数据分析师来说,这不是最有趣的事情。但是,我认为这是最重要的。这是改变公司内部数据文化的最佳方式。
当您专注于文档时,利益相关者可以更快地做出决策,数据团队在试图完成工作时会经历更少的摩擦,并且每个人都有可以依赖的数据。不要仅仅为了在将来为你自己和你的团队创造更多的工作而推掉文档。现在优先考虑它,你会很高兴你做了。
关于分析工程、现代数据堆栈和最佳实践的更多信息,订阅我的免费每周简讯。
数据不会说话?开始提问!
原文:https://towardsdatascience.com/data-does-not-speak-for-itself-start-asking-questions-4e152274d605
通过 R 中的可视化快速探索数据的实用工具

杰森·罗斯韦尔在 Unsplash 上的照片
当开始一个新项目,设计新的数据分析方法,甚至准备一个新的出版物时,数据可视化对于探索新的假设,验证和交流我们的发现是必不可少的。
一年前,我在巴塞罗纳(CRG)的基因调控中心做了一次速成演讲——我目前正在那里攻读博士学位——题目是“R中快速数据可视化的实用工具”,目的是宣传一系列软件包的存在,这些软件包使我在探索性数据分析(EDA)方面的生活变得更加容易。
在本文中,我将简要地向您介绍我接近 EDA 的方法。演讲的所有材料都可以在这个网页上免费找到,源代码在相应的资源库中。我想强调开源包在促进数据科学生活中的重要性。特别是,我个人认为由 Alboukadel Kassambara 开发的 R 库gg pubr——一个 ggplot 包装器——提供了从一行程序到完全定制的情节所需的所有功能。
开始前
我强烈建议安装以下软件包:
前段时间,我写了一篇关于如何构建数据科学项目的文章。作为一个经验法则,我保存那些每次都很难得到的文件,从这些文件中我可以问很多问题。tidyverse 是一个允许你问这些问题的包,而 T2 ggpubr T3 允许你以一种最少的工作量来实现出版质量。最后, here 包让你确保可以在任何设备上自动找到你的项目的根。
想象你的问题的答案
我们的玩具数据集:palmerpenguins

为了开始使用这些包中的函数,我们将使用 palmerpenguins 数据集。这个简单的数据集既有连续变量又有分类变量,非常适合展示不同函数的工作原理。
require(tidyverse)penguins_url = 'https://raw.githubusercontent.com/allisonhorst/palmerpenguins/master/inst/extdata/penguins.csv'dat = read.csv(url(penguins_url), stringsAsFactors = TRUE)dat = dat %>% drop_na()head(dat)## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g## 1 Adelie Torgersen 39.1 18.7 181 3750## 2 Adelie Torgersen 39.5 17.4 186 3800## 3 Adelie Torgersen 40.3 18.0 195 3250## 4 Adelie Torgersen 36.7 19.3 193 3450## 5 Adelie Torgersen 39.3 20.6 190 3650## 6 Adelie Torgersen 38.9 17.8 181 3625## sex year## 1 male 2007## 2 female 2007## 3 female 2007## 4 female 2007## 5 male 2007## 6 female 2007
ggpubr 由于建立在 ggplot2 之上,允许快速制作有洞察力的情节,并有很大的定制空间。在策划的时候,我总是问自己“我想要看到什么类型的关系?”以及“我希望它如何呈现给我?”。
分类与分类
例如,我们可能有兴趣知道“每个物种总共观察到多少只企鹅?”。这转化为计算每个物种的企鹅数量,这是一个分类变量。为此,我们可以使用饼图:
ggpie(dat %>% count(species), x = 'n', fill = 'species')

图片作者作者。
或者我们可以更深入一点,结合多个分类变量,问“在不同的岛屿上,我们观察到了多少种不同性别的企鹅?”通过条形图:
ggbarplot(dat %>% count(species, sex, island), x = 'species', y = 'n', fill = 'sex', label = TRUE, position = position_dodge(0.7), facet.by = 'island', palette = 'lancet')

图片由作者提供。
关于 ggpubr 最酷的事情之一是它使用了来自软件包 ggsci 的科学期刊的调色板。在这种情况下,我使用柳叶刀的调色板,只需设置调色板= “柳叶刀”。还要注意,结合 x、方面,人们可以很容易地获得对多变量问题的深刻答案。通过和填充论点。
分类与连续
现在,我们可以继续问一个连续变量在多个类别中是如何变化的,比如“企鹅种类、性别和原产地的鳍状肢长度分布是怎样的?”。在这种情况下,我们可以通过直方图可视化分布,但是我们需要为每个类别生成一个直方图。下面是如何在一行中使用多个方面来实现:
gghistogram(dat, x = 'flipper_length_mm', fill = 'sex', facet.by = c('species','island'))

图片由作者提供。
或者,如果我们不想得出这么大的数字,我们可以使用抖动图或带状图。此外,我们可以可视化分布设置 add=‘median_iqr’ 的中位数和四分位数范围,并通过 add.params 指定其参数。
ggstripchart(dat, x = 'island', y = 'flipper_length_mm', color = 'sex', facet.by = 'species', alpha = 0.5, position = position_jitterdodge(), add = 'median_iqr', add.params = list(color='black', group='sex', size=0.2))

图片由作者提供。
事实上,不管是哪一种企鹅和哪一个岛屿,雄性企鹅的鳍状肢长度似乎总是比雌性企鹅长。但是,这些差异在体重上有统计学意义吗?幸运的是,我们只需要另一小段代码,即 stat_compare_means 函数来执行和可视化期望的统计测试的结果:
ggstripchart(dat, x = 'island', y = 'body_mass_g', color = 'sex', facet.by = 'species', alpha = 0.5, position = position_jitterdodge(), add = 'median_iqr', add.params = list(color='black', group='sex', size=0.2)) + stat_compare_means(aes(color = sex), label = "p.signif", method = 'wilcox.test')

图片由作者提供。
请注意,如果我们没有被起源岛和物种分开,比较雄性和雌性企鹅的体重可能是不公平的,因为巴布亚企鹅的平均体重大大高于其他企鹅。
连续与连续(与分类)
上面,你可能已经注意到企鹅的体重和鳍状肢长度的分布非常相似。但是,“多少钱?”以及“它们与钞票长度相比如何?”。这是一种连续与连续的问题,散点图在这种情况下非常方便:
ggscatter(dat, x = 'flipper_length_mm', y = 'body_mass_g', color = 'bill_length_mm', alpha = 0.5)

图片由作者提供。
通过设置 color=‘bill_length_mm’ ,该变量被绘制为颜色渐变,并允许我们看到,除了鳍状肢长度和体重之间明显的线性关系之外,喙的长度也倾向于随着其他两者的增加而增加。
现在,就像以前发生的一样,你可能想知道是否有其他变量,也称为混杂因素,产生了一种虚假的关系:“我们能看到数据收集年份的抽样偏差或批量效应吗?”。我们可以很容易地使用颜色参数来检查:
ggscatter(dat %>% mutate(year=factor(year)), x = 'flipper_length_mm', y = 'body_mass_g', alpha = 0.5, color = 'year', ellipse = TRUE)

图片来自作者。
幸运的是,情况似乎并非如此。我们可以确认科学家在每个时间点收集了分布中的样本。
此时,你一定在想,“鳍状肢长度和身体质量之间有什么关联?”。我们可以通过 cor.coef 和cor . coef . args参数非常容易地添加它。
ggscatter(dat %>% mutate(year=factor(year)), x='flipper_length_mm', y = 'body_mass_g', alpha = 0.5, color = 'year', add = 'reg.line', conf.int = TRUE, cor.coef = TRUE, cor.coeff.args = list(method = 'spearman', label.sep = '\n')) + theme(aspect.ratio = 1)

图片由作者提供。
将图合并成一个图形
最后,当我们想在报告中包含不同的数字时,我们可以将它们保存为。pdf 文件和 edit 在像 Inkscape 这样的程序中组合它们。或者,我们也可以使用 ggarrange 对它们进行编程!这里有一个例子:
fontsize = 6labsize = 2# overview number of observations of every sex across islands and speciesp1 = ggbarplot(dat %>% count(species, sex, island), x = 'species', y = 'n', fill = 'sex', label = TRUE, lab.size = labsize, position = position_dodge(0.7), facet.by = 'island', palette = 'lancet') + ylim(NA, 68)# sex-related body mass distributions across islands and speciesp2 = ggstripchart(dat, x = 'island', y = 'body_mass_g', color = 'sex', facet.by = 'species', alpha = 0.5, position = position_jitterdodge(), add = 'median_iqr', add.params = list(color='black', group='sex', size=0.2), palette = 'lancet') + stat_compare_means(aes(color = sex), label = "p.signif", method = 'wilcox.test', size = labsize)# association of flipper length and body massp3 = ggscatter(dat %>% mutate(year=factor(year)), x = 'flipper_length_mm', y = 'body_mass_g', alpha = 0.5, color = 'year', add = 'reg.line', conf.int = TRUE, cor.coef = TRUE, cor.coeff.args = list(method = 'spearman', label.sep = '\n', size = labsize)) + theme(aspect.ratio = 1)p1p2 = ggarrange(p1 + theme_pubr(base_size = fontsize), p2 + theme_pubr(base_size = fontsize), ncol = 1, common.legend = TRUE)fig = ggarrange(p1p2, p3 + theme_pubr(base_size = fontsize), widths = c(2,1), heights = c(2, 1), labels = 'AUTO')# saveggsave('images/myfig.png', fig, width = 15, height = 10, unit = 'cm')

图片由作者提供。
结论
由于有了像 ggpubr 这样的开源包(以及它们所基于的框架),访问和探索数据来回答我们的问题从未如此简单。对我来说,EDA 是数据科学中最重要的部分,因为它允许产生新的假设,更重要的是,发现并纠正不必要的混杂因素。这篇文章是一个更彻底的速成班的一个小尝试,在这个速成班中,我展示了探索基因组数据集的方法(这里有免费的)。如果你喜欢这篇文章,也许你有兴趣阅读其他文章:
如果你想知道更多或者有什么不清楚的地方,请不要犹豫!
数据漂移的可解释性:用 NannyML 进行可解释的移位检测
提醒有意义的多元漂移并确保数据质量

模型监控正在成为机器学习的热门趋势。随着关于 MLOps 的活动越来越多,我们记录了关于该主题的工具和研究的兴起。
其中最有趣的肯定是由【NannyML】开发的https://nannyml.readthedocs.io/en/main/how_it_works/performance_estimation.html****【CBPE】基于置信度的性能估计算法。他们实施了一个新的程序来评估未来模型在缺乏基础事实的情况下的性能下降**。它在检测性能下降方面具有很大的优势,因为在实际应用中,收集标签的成本可能很高,并且可能会延迟。**
CBPE 算法可在 NannyML 包 中找到,同时还有一些有趣的移位检测策略。从标准的单变量漂移检测方法到更先进的多变量特征漂移方法,我们拥有强大的武器库来自动检测无声模型故障。
在这篇文章中,我们主要关注多元移位检测策略。我们想研究如何检测多元特征转移**。我们与单变量情况进行了比较,以说明为什么后者在某些情况下不足以警告数据漂移。最后,我们更进一步,引入了 一种混合方法来提供可解释的多元漂移检测。**
单变量对多变量 D 裂缝
****单变量漂移发生在变量在分布中出现显著差异时。实际上,我们独立地监控每个特性,并检查其分布是否随时间而变化。这可以通过比较新观测值和过去观测值之间的统计数据来直接实现。由于这些原因,单变量检测易于交流,完全可以理解。

单变量数据漂移(图片由作者提供)
****多变量漂移发生在输入数据之间的关系改变时。检测多变量变化可能更难解释,但通常需要克服单变量检测的缺陷。

多元数据漂移(图片由作者提供)
单变量和多变量漂移背后的原因可能因使用情形而异。无论何种应用,单变量特征漂移的结果可能会产生误导。我们来调查一下原因。
单变量漂移检测的局限性
假设我们有四个系列的数据(通过模拟获得):两个相关的正弦曲线和两个随机噪声特征。我们还考虑了两个数据子集(时段)来进行我们的实验。在“参考时期,我们指的是我们所掌握的历史数据。在“分析期间,我们指的是我们想要分析的新样本。

模拟特征(图片由作者提供)
在我们的参考时期,数据遵循相同的模式,保持它们的关系不变。在“分析期间,我们观察到蓝色正弦曲线和红色正弦曲线之间关系的变化。更准确地说,这两个特征在“参考周期中是正相关的,而在“分析周期结束时它们变成负相关的。

X1 与 X2 的相关性(图片由作者提供)

X1 与 X2 的相关性(图片由作者提供)
关系发生变化,但单变量分布保持不变。我们的单变量漂移检测能有效吗?

X1 随时间的单变量分布(图片由作者提供)

X2 随时间的单变量分布(图片由作者提供)

X3 随时间的单变量分布(图片由作者提供)

X4 随时间的单变量分布(图片由作者提供)
正如预期的那样,单变量数据漂移检测算法不会显示所有分析要素的任何漂移。从上面的图中,我们可以看到,单变量分布不随时间变化,因此 Kolmogorov-Smirnov 测试不能提醒变化。我们需要更有效的方法。
基于主成分分析的多元特征漂移
上过基础机器学习课程的大家,都已经遇到过主成分分析(PCA)** 。这是一种对表格数据集进行降维以保留最显著的交互的技术。同时,我们可以使用主成分分析将压缩后的数据还原为原始形状。这种重建过程可以仅保留数据中有意义的模式,同时消除噪声。**

PCA 重构能力。左边是有噪声的原始数据。右图为降维后 PCA 重构的数据(图片由作者提供)
NannyML 利用 PCA 的重构能力,开发了一种简单有效的多变量漂移检测方法。
一组数据首先被压缩到一个较低的维度空间,然后被解压缩以返回到原始的特征维度。这个转换过程是重建我们的数据的关键,只保留相关的相互作用。此时,可以计算原始数据和变换后的对应数据之间的一系列重构误差(简单的欧几里德距离)。来自一系列重建误差的任何有意义的尖峰可以被视为数据关系的变化,也称为多变量漂移。
让我们看看这种方法在我们的数据上的应用。

(图片由作者提供)
我们在我们的“参考”数据集上拟合 PCA,并计算重建误差。这有助于建立用于检测未来"分析数据变化的上限和下限。当新数据变得可用时,我们只需使用拟合的 PCA 来压缩和重建它们。如果重建误差落在预期阈值之外,我们应该记录特征关系的变化。这正是我们的数据所发生的情况。
PCA 方法为多元漂移检测提供了有用的见解。通过单一 KPI,我们可以控制整个系统的状态。同时,分离每个特征的贡献可能是增值的。
可解释的多元特征漂移
使用 PCA,我们的目标是在单一的学习步骤中学习模式。这很好,并且显示出在大多数情况下和一些应用中是有效的。如果我们的目标是发现特性之间的未知关系,我们可以用一种简单的方式来做同样的事情。
****我们可以把关系发现想象成一项受监督的任务。换句话说,给定一组特征,我们可以使用它们来预测彼此,并使用生成的残差作为漂移的度量。如果残差随着时间的推移而变化,我们通知一个转变。

残留特征(图片由作者提供)
回到我们的模拟场景,我们根据“参考”数据为我们所能支配的每个特性拟合一个模型。每个模型都适合使用所有其他特征作为预测器来预测期望的特征。然后我们在“参考”和“分析数据上生成残差。有了可处理的残差序列,我们就可以用单变量方法来检测漂移。

X1 随时间的单变量残差分布(图片由作者提供)

X2 随时间的单变量残差分布(图片由作者提供)

X3 随时间的单变量残差分布(图片由作者提供)

X4 随时间的单变量残差分布(图片由作者提供)
**使用单变量方法检测漂移现在更加有效。在“分析”周期结束时,我们记录了 X1 和 X2 的高错误。更准确地说,我们没有证据表明 X1 和 X2 在同一时期存在单变量分布漂移。由于这个原因,高误差可以指示 X1 和输入数据的其余部分之间的关系的变化(对于 X2 也是如此)。换句话说,单变量重建误差分布的变化可以揭示所涉及的特征已经改变了它们的相互作用。
摘要
在这篇文章中,我们介绍了一些有效监控数据漂移的最新技术。我们也明白为什么只有单变量方法会受到影响。我们发现了多元特征转移的重要性,并试图提供一种可解释的方法来识别可能的多元漂移的来源。
参考
要发现检测无声模型故障的的尖端技术,请查看 NannyML 项目:https://github.com/NannyML/nannyml****
内容是我自己的,自己写的,按本人意愿发表(一如既往)。感谢 NannyML 团队收到的反馈
保持联系: Linkedin
数据漂移:它可能从任何地方向你袭来
原文:https://towardsdatascience.com/data-drift-it-can-come-at-you-from-anywhere-b78eb186855
数据漂移的概念以各种形状和形式直观地展示出来。

图片来源:作者创作
数据漂移简介
机器学习(ML)模型,至少在其目前的化身中,只不过是 强大的归纳机器 。他们的崇高目标是从一个小例子集合到一个更广泛的归纳概括。
自然,为了成功(和可靠)的运行,它们需要依赖于关键的假设— 输入数据分布不会随时间漂移太多。
因为,如果发生这种情况,那么一个成功的模型只在单个时间点成功。随着时间的推移,该模型将根据与其训练时不完全相同的分布进行归纳概括,性能将会下降。
因此,我们需要监控和(及时)检测 MLOps 或 ModelOps 管道中的任何数据漂移,以确保任何(持续)成功的 ML 模型部署。除了常规的 MLops,数据漂移的概念对于 ML 可解释或 可解释 AI (xAI) 领域也很重要。
数据漂移监控模块在端到端 MLops 周期中的确切位置在以下文章中有很好的描述。
关于这个主题的许多文章讨论了输入分布的形状和统计特性。在本文中,我们将以(一个或多个)数据流为例,这些数据流以时间序列的形式进入 ML 模型,并可视化这些变化以清楚地理解这个概念。此外,我们还将讨论工业环境中一些不太明显的数据漂移来源。
数据漂移就像一盒巧克力…
你永远不知道你会得到什么!让我们看看一些明显和不那么明显的例子…
电平转换?明显地
这是一个明显的数据漂移。在许多无监督的模型设置中,这也将被称为’ 异常值 ‘或’ 异常值 '。还要注意,漂移可能不是永久的,而是短暂的。漂移的起点和终点都应该很快确定。

图片来源:作者创作
方差转移?微妙的
这比电平转换稍难检测。请参见下图。

图片来源:作者创作
方差减少?那也是一种漂移
在高层次上,业务/流程人员(或您的客户)会告诉您,高方差是不好的。是的,他们几乎总是对的。但是从数据漂移的角度来看,你必须注意任何机会——甚至是方差的突然减少。从统计上看,这也是分布特性的变化。

图片来源:作者创作
一段时间内的峰值移动
这个更微妙,难以察觉。我试图用附加注释来说明这种漂移,比如峰值和 T2 期。你看到这里到底发生了什么吗?数据以周期性的方式出现,每个周期内都有一个峰值。那个峰值的相对位置(在一段时间内)移动了一段时间,然后才恢复正常。

图片来源:作者创作
你看出问题了吗?简单的统计特性可能无法捕捉这种漂移。均值和方差(其他矩也是)可能看起来相似。那你是怎么抓住它的?有趣的是,一些简单的光谱分析会显示出一个转变。因此,你必须引入一些信号处理知识来捕捉这种数据漂移。
上下文数据——捕捉趋势的另一种方式
如果您还在监视具有固定时间指示器的日志记录流,如轮班开始或机器重置,这有时有助于以直观的方式捕捉这些临时轮班。当然,数据监控必须确保良好的时间同步。在下图中,锚点事件和峰值与这些锚点的相对距离将指示漂移。

图片来源:作者创作
相移/延迟
这是一个真正意义上的杀手。对于对时间序列数据进行训练和推理的 ML 模型,轻微的相位延迟就可能产生完全错误的预测。基本上,模型被训练成“如果 X 1 和 X 2 相似,则预测 Y 0,否则预测 Y 1”。
现在,看看下面的情况,意识到异相数据流会发生什么。上面的数据流很好,下面的有点漂移。有可能数据流是正常的,只是采集被延迟,失去了同步。

图片来源:作者创作
有些是漂移,有些不是
在工业或制造业场景中,工艺配方和设置一直在变化。也可能有一个预定的变更日志。需要监控这种上下文数据,以识别正确的数据漂移。这是直观的插图,

图片来源:作者创作
测量/传感器漂移
这也是最难检测和管理的问题之一。输入数据流和生成过程可能是好的,但是传感器上可能有漂移(即测量输入数据并馈送到 ML 模型或监控系统)。
监控系统(由 ML 模型和警报生成模块组成)可能检测到漂移,并认为基本过程已经偏移,向核心过程层发送错误的推荐信号。这将是一个错误的判断和糟糕的建议。
这也是一个将概念漂移(传感器本身的模型或物理动态)误认为数据漂移的例子。这是一个无论如何都要避免的错误。

图片来源:作者创作
摘要
我们通过展示一些可视化的例子,讨论了时间序列意义上的数据漂移的概念。很明显,即使在最简单的一维设置中,捕捉和分析数据漂移也不是一个微不足道的问题。可能需要信号处理或与上下文数据合并等其他技术来正确识别数据漂移的开始和性质。
缓解措施是什么?没有一个答案,这完全取决于行业和具体的应用领域。本文系统地介绍了其中的一些。读一读。
* *
喜欢这篇文章吗?成为 中等成员 继续 无限制学习 。如果你使用下面的链接,我会收到你的一部分会员费, 而不需要你额外付费 。
*https://medium.com/@tirthajyoti/membership *
数据驱动(基于强化学习)控制
原文:https://towardsdatascience.com/data-driven-control-d516ca28047c
为什么强化学习是控制系统优化问题的热门话题

图:强化学习(基于来自像素的安德里亚·皮亚卡迪奥的图片)
介绍
数据驱动控制。那些基于强化学习(RL)的控制策略,是工业工程的新术语。RL 似乎是所有控制问题的最佳范例,从控制内燃机,到切割金属的机械臂,再到建筑中的空调系统。(这在这些公司发布的与 RL 相关的招聘广告的数量上也很明显。)我们看到了深度学习模型如何破坏图像识别和分割的传统计算机视觉技术的类似破坏。
我们将数据驱动控制定义为应用于控制系统的简单机器学习(ML)技术。
为了理解这一趋势背后的驱动因素,我们首先需要理解现实系统控制理论的局限性。
控制理论的局限性
在非常基础的层次(和高层次),控制系统实际上由系统和控制器组成:
- 系统来控制
- 控制器应用控制策略以最佳方式控制系统。
在这种情况下,我们还需要考虑另外两件事情:控制器可以应用的任何策略都受到
- 它对系统状态的了解——在大多数情况下,由系统传感器提供;
- 以及它可以控制的系统参数,也称为系统执行器。例如,发动机只能在一定的速度范围内以一定的加速度驱动汽车。
外部/环境因素在控制策略中也起着关键作用,但是这种作用更多的是作为一种“输入”参数,而不是一种约束。例如,室外温度在决定空调制冷多少时起着关键作用;然而,空调的功能不受它的限制。
下图说明了一个控制系统,其中 x_t 是非线性函数 f 的时间导数。

图:(简化)控制系统设计(图片由作者提供)
设计控制策略包括求解表征系统行为的方程——通常以线性方程的形式建模。大多数控制理论的目标是解决线性方程。
不幸的是,现实世界的系统(大部分)是非线性的。例如,甚至捕捉钟摆运动的方程也是非线性的。关于线性化方法已经有了很多研究,基本上是将非线性方程转换成线性方程,然后尝试使用线性状态空间控制理论来解决它们的技术。不幸的是,这种线性化方法非常局限于特定类别的非线性方程,并且不容易推广。
除了求解非线性方程的困难之外,我们当然首先需要知道如何对一个系统(其相应的方程)建模。这就是传统控制策略(也称为模型驱动控制)仍然排除大量我们不知道如何建模的系统(其系统方程未知)的原因。而且,这种系统的复杂性与日俱增,我们希望解决超大规模的问题,例如气候控制、疾病控制、自动车辆、金融市场等。
总结传统控制理论/模型驱动控制的局限性:
- 系统模型/方程未知
- 不适用于大规模非线性领域
- 考虑到这些系统的高维数,模拟它们也是非常困难的
关于这个主题的详细讨论,请参考史蒂夫·伯顿关于控制系统的优秀教程[1]。
曼梯·里来营救了
鉴于传统控制理论面临的上述挑战,现在让我们试着理解为什么基于 ML/Data 的方法在这种情况下显示出很大的前景。
这里的潜在逻辑是,即使对于我们无法建模的非常高维的系统,也存在表征系统行为的主导模式——机器学习(深度学习)非常擅长学习这些模式。
这(很可能)是一个近似值,虽然我们仍然不能完全理解该系统,但除了一些例外情况,对于大多数现实生活中的用例(包括预测)来说,这已经足够好了。
在这篇文章中,我们关注的是基于控制系统的强化学习方法。我们也将触及监督 ML 和非/半监督 RL 之间的关键区别,以及这如何使 RL 成为潜在的任何控制优化问题的良好选择。
强化学习
RL 能够通过实时最大化奖励函数来实现复杂的目标。奖励功能的工作原理类似于用糖果和打屁股来激励孩子,这样算法在做出错误决定时会受到惩罚,在做出正确决定时会受到奖励——这就是强化。强化方面还允许它更快地适应用户情绪的实时变化。有关 RL 框架的详细介绍,感兴趣的读者可以参考[2]。

图:强化学习(RL)公式(作者图片[3])
一些关于 RL 的有趣观察,不涉及太多技术细节:
- 奖励和策略不一样:奖励功能和 RL 代理策略的角色和职责没有很好地定义,并且在不同的架构之间可能有所不同。一个天真的理解是,给定每个国家行动对的相关回报/成本,政策总是试图最小化总成本。显然,似乎有时保持生态系统处于稳定状态比最小化成本更重要(例如,在气候控制用例中)。同样地,RL 代理策略目标不需要总是与奖励函数一致,这就是为什么需要两个独立的函数。
- 与机器学习/深度学习中的监督方法类似,最适合企业采用的 RL 方法是“基于模型的 RL”。在基于模型的 RL 中,可以开发问题场景的模型,并基于模型模拟值引导初始 RL 训练。例如,对于能源优化用例,建筑物供暖、通风和空调(HVAC)系统的蓝图用作模型,其模拟值可用于训练 RL 模型。对于复杂的场景(如游戏、机器人任务),不可能建立问题场景的模型,但仍有可能基于历史值引导 RL 模型。
这被称为‘线下培训’,在没有模型的情况下被认为是一个很好的起点。这也是为什么 RL 经常被认为是监督和非监督学习的混合,而不是纯粹的非监督学习范式的原因。
- 在线和无模型的 RL 仍然是最具挑战性的,其中 RL 代理试图在没有任何监督的情况下实时学习和反应。这方面的研究现阶段似乎缺乏理论基础。研究人员正在尝试不同的方法,通过简单地投入更多的数据和计算能力来解决问题。因此,这仍然是 RL 最“有趣”的部分,当前的研究主要集中在高效的启发式和分布式计算上,以加速的方式覆盖搜索空间。将 DL(神经网络)应用于不同的 RL 方面,例如政策、奖励,也仍然是一个热门话题——称为深度强化学习[4]。
- 鉴于 RL 的基本性质,似乎有许多有趣的概念可以从决策科学和人类心理学的现有研究中借鉴。例如,Tom Griffiths 在他的演讲“人类和机器中认知资源的合理使用”中引用了一段有趣的话[5]:
虽然模仿人脑似乎是 AI/RL 研究的圣杯;在心理学研究中,人类一直被认为是本质上有缺陷的角色。所以我们真正想做的当然是模仿人脑的“理性行为”。
总结当然是,如果我们想要机器达到真正人类智能的水平,我们需要将这两个领域结合在一起。
案例研究:基于 RL 的暖通空调优化
D.比斯瓦斯。基于强化学习的工厂能源优化。(迈向数据科学— 链接),也发表在 2020 年 6 月第 11 届 ACM e-Energy 会议论文集上。
在我们当前讨论的背景下,上述文章是一个有趣的案例研究。它展示了过去 10 多年来由传统 PID 控制器运行的工业控制系统向更高效的基于 RL 的控制器的成功过渡。
在这种情况下,工业控制系统是指负责维持工厂(一般建筑物)中温度和湿度设置的加热、通风和空调(HVAC)单元。传感器对应于室内(和室外)温度和湿度传感器;并且致动器对应于 HVAC 单元的冷却、加热、再加热和加湿器阀。部署的 RL 模型如下图所示:

图:暖通空调强化学习公式(图片由作者提供)
这是一个复杂的问题,因为它需要计算考虑多个可变因素的最佳状态,例如,占用、制造进度、运行机器的温度要求、建筑物内的气流动态、外部天气条件、节能等。
初始状态:当我们最初开始探索基于 RL 的方法优化 HVAC 控制器的可行性时,HVAC 单元由 PID 控制器控制。PID(比例积分微分)[8]是一种用于优化问题的流行控制技术,它使用控制回路反馈机制来控制过程变量。
这种情况已经持续了 10 多年,HVAC 装置以非常稳定和稳健的方式将工厂的温度和湿度保持在理想的设定值。因此,基于 RL 的探索主要是受其降低能耗和二氧化碳排放的潜力的推动。(研究表明,暖通空调几乎占建筑能耗的 50%,占全球用电量的 10%。)
解决方案:考虑到建模此类系统的难度,我们从随机 RL 模型的初始部署开始(在某种意义上,它只取决于最后的状态)。在下一阶段,我们扩展了 RL 模型以适应“长期回报”,用 RL 术语中的 Q 值来量化。假设在状态 s 采取动作 a ,状态-动作对 (s,a) 的 q 值被定义为从当前状态 s 开始的所有未来步骤的期望回报值的加权和。这个 RL 模型在一个连续的空间环境中运行。该设置中的每个事件对应于室内温度和(或)湿度开始偏离其各自设定值的时间,以及室内条件返回其各自设定值的时间——这是打开相关阀门的结果。
目标状态(进行中):在为期 6 个月的试点中,我们能够开发并实施基于 RL 的 HVAC 控制器,该控制器能够学习并适应真实的工厂设置,无需任何离线培训。基准测试结果显示,在能效方面有可能节省高达 25 %(与 PID 控制器运行时相比)。
结论
总之,RL 到目前为止经历了一段有趣的旅程。从无人监管的 RL 代理击败 AlphaGo 棋手产生的炒作,到努力在企业世界中找到一席之地/效用。在研究方面也有类似的起伏旅程,随着深度学习模型的进展饱和,对 RL 模型的兴趣在过去几年达到顶峰;到现在,重点再次转移到自我监督系统。
说到这里,RL 似乎找到了工控系统的甜蜜点。在将 RL 技术应用于推荐器[3]、聊天机器人[9]方面已经有了一些进展;然而,控制优化是他们“最适合”的地方。在本文中,我们强调了传统控制理论的挑战,并指出基于 RL 的控制器有可能解决/改善该领域的许多复杂问题。这是一个参与这一旅程的激动人心的时刻,希望您也有同样的感受——期待您的反馈!
参考
[1]史蒂夫·伯顿:控制训练营,https://www.youtube.com/watch?v=Pi7l8mMjYVE&list = plmrjakhiennr 20 mz-vpzgfqs 5 zryi 085m
[2] A .巴尔托,R.S .萨顿:强化学习:导论。麻省理工学院出版社,麻省剑桥,2018,http://incompleteideas.net/book/RLbook2018.pdf
[3]比斯瓦斯。基于强化学习的推荐系统。 ( 中链 —走向数据科学),也发表在 2020 年 9 月第 24 届欧洲人工智能大会(ECAI)的“‘医疗保健人工智能进展’专题讲座”上。
[4]w·达布尼:分布式强化学习的进展及其与规划的联系, 2020,https://www.youtube.com/watch?v=iqIGHSgYtbs
[5] T. L .格里菲斯,f .利德,N. D .古德曼。认知资源的合理使用:计算和算法之间的分析层次。https://cocolab . Stanford . edu/papers/griffithsetal 2015-tics . pdf
[6] F. Oldewurtel 等人使用随机模型预测控制和天气预测进行节能建筑气候控制。事故赔偿委员会,2010 年。
[7] Y. Ma 等建筑制冷系统运行的模型预测控制。IEEE 控制系统技术汇刊,20(3):796–803,2012。
[8] F .皮科克。PID 算法的白痴指南。https://www.pidcontrol.net/index.html
[9] Ricciardelli,e .,Biswas,D.: 基于强化学习的自我改进聊天机器人。(中环节 —走向数据科学)In:第四届强化学习与决策多学科会议(2019)。
有经理参与的数据驱动型组织
一种协调数据科学家和管理层共同目标的可能方法

数据团队面临的一个常见挑战是弥合将组织转变为数据驱动的实体的需求与成功将其传达给管理层之间的差距。我阅读了许多关于这个主题的论文,经历了不同的框架,并且参与了许多数据项目。对于非技术受众来说,这些模型或框架通常过于复杂,不能总是按原样呈现。我在这里的目的是提出一个共同点的方法,一个对双方都适用的故事,并希望能引起一些读者的共鸣。
整体情况
当谈到交流项目信息时,保持简单是最好的。与管理层交谈时尤其如此,他们不需要理解错综复杂的发动机来驾驶汽车。他们只需要知道,如果他们加满油箱,遵守速度限制,并做定期的技术修改,他们会走得很远!根据同样的类比,我认为数据计划只能用三个维度来描述和解释:数据、技术和人(“3D 数据故事”)。这是非技术观众很容易掌握的大局。以我的经验,这三个维度同等重要。
下面的文氏图总结了每个维度的作用:

3D 数据故事|图片由 Alexandre Allouin 提供
一旦理解了这种简化,就可以建立对当前情况的概述/评估:数据、技术和人员。在这一点上,两个受众都将看到需要改进什么以达到数据驱动的目标。自然,管理团队会明白,每个维度对于成为数据驱动的组织都至关重要。他们还会明白,随着文氏图中圆圈大小的增加,出现绿点(代表您想要评估的数据驱动型组织或数据计划)的可能性也会增加。因此,他们会看到哪里需要更多的努力。

图片作者:Alexandre Allouin
这是你的电梯推销!虽然这对于需要全局的高级经理来说可能足够了,但对于需要确保汽车能够被他们的经理实际驾驶的中级经理来说可能还不够。相同的简化方法将应用于每个维度:它们将通过三个轴进行评估,每个轴将得到一个分数,它们的总和将代表圆的大小。
维度评估
如何定义每个轴应该根据您组织的需求来定制。下面是一个可能对你有用的方法。
- 数据
数据维度旨在从数据的角度理解组织的背景。它包括对战略和治理(正式和/或非正式)的评估。它还应涵盖整个数据生态系统的状态:缺失的数据源、分析功能、数据目录、问题和挑战。

作者图片
2.科技
技术维度应被视为数据维度的促成因素。必须包括对数据管道、基础设施、分析和人工智能平台以及数据访问的评估。

作者图片
3.人
人的因素很容易被忽视。然而,正如许多研究表明的那样,这通常是开发数据驱动型组织的障碍。必须考虑到许多因素,从高级别宣传/领导到工作人员技能和赋权。

作者图片
每个维度的得分是其关联轴得分总和的结果。每个维度的总和必须达到 33(或人员维度的 34…因为人员很重要!)然后,评估可以在全球范围内传达:三个维度的总和(100),或者如果您想提出特定的挑战,可以通过特定的维度传达。例如: D30 | T31 | P15 显然,必须关注人的方面。另一种方法是对所有维度应用百分比: D91% | T94% | P44% 。
虽然本文的格式不适合详尽地回顾用于评估每个轴的变量,并且值得深入分析,但我在下面提供了一些提示,您可以在分配分数时考虑。需要注意的是成熟度水平(没有标准模型,已知的有戴尔数据成熟度模型、 Gartner 成熟度模型、 Snowplow 数据成熟度模型等。)取决于你组织的战略目标;你想要达到的目标必须相应地调整。
数据
数据策略&治理
- 与战略目标一致:战略是否解决了特定的业务需求?
- 业务需求、角色和职责是否明确?
- 支持上述内容的数据源是否已经确定?
- 是否设计了灵活的数据架构?
- 是否确定了文化变革和人员技能/培训要求?
- 是否有实施战略的路线图?
- 是否定义了数据沿袭?
流程
- 是否解释了将数据转化为见解的流程?(例如分析平台)
- 是否指定了确保数据完整性的流程?
- 合适的人能够访问合适的数据吗?
- 数据管理流程如何与业务流程保持一致并集成在一起?
数据成熟度
- 是否仍然缺少数据源?
- 数据架构是否满足所有需求?
- 新的见解支持组织目标吗?
- 人们在数据使用方面改变了习惯吗?
- 有可用的数据目录吗?
- 是否定义了主数据管理?
- 数据是否用于预测?
虽然前两个轴更关心项目的计划方面和它将被治理的方式,但是数据成熟度轴旨在评估它们的实现状态。基于你想要达到的目标,你可能会更倾向于给最后一个轴更多的权重。
技术
数据管理
- 技术是否满足策略中指定的要求?特别是,技术是否与支持数据的不同阶段相关:提取、收集、转换、存储等。?
- 基础设施是否足够敏捷以支持该策略?
- 是否实施了主数据管理?
数据使用
- 工具和平台在分析和可视化方面满足业务需求了吗?
- 现有系统是否允许用户轻松分享见解?
- 有没有一些流程已经自动化了?或者有什么流程需要自动化?
数据访问
- 是否存在访问数据的 API?
- 该技术允许轻松嵌入图表吗?
- 是否存在孤立或难以访问的数据源?
- 是否存在这样一种文化,即任何人都可以访问所有数据源,除非它们包含个人或其他数据保护理由?
人
领导和沟通
- 管理层是否定期推广数据文化?
- 管理层是否在会议、报告或决策中使用数据?
- 是否为建立数据团队分配了相关资源?
- 管理层是否鼓励并授权员工采用数据驱动的思维和运营方式?
- 是否有时事通讯或其他内部通信来宣传成功案例、数据计划等。?
数据扫盲和赋权
- 员工的数据技能是否经过评估?
- 是否有评估员工技能的问卷?
- 员工有机会接受培训吗?
- 是否确定了任何数据冠军?
- 员工有机会参加论坛、导师、诊所等吗?在他们需要的时候得到帮助?
- 是否鼓励员工使用数据?
- 数据文化问题是否包含在招聘流程中?
制度化和决策成熟
- 有多少员工访问公司仪表盘,访问频率如何(每天/每周/每月)?
- 有多少员工创建仪表板,创建的频率如何(每周/每月)?
- 在过去的六个月/一年中,有多少团队接触过数据团队以开始新的数据项目)?
- 管理层有多少次利用数据做出明智的决策,并与员工进行沟通?
- 来自企业的数据相关查询(运营/支持)是否有所减少?
- 部署新的数据产品是否会节省成本?
最后一个轴可能很难监控,必须在流程的早期进行考虑,以确定收集正确信息的正确策略。
关键要点
- 简化您想要讲述的故事,以便组织中的每个人都能理解并掌握这个概念。一个数据驱动的组织可以从三个维度来衡量:数据、技术和人员。
- 评估每个维度的成熟度。为此,可以通过将它们分解为三个轴来进一步简化。中层管理人员可能需要这种级别的细节。
- 确定将用于评估每个轴的指标。这应该与您的组织目标和您想要达到的数据成熟度级别相一致(您可以使用现有的许多模型来支持您的策略,或者从中受到启发)。
- 使用 3D 维恩图,向你的利益相关者传达组织的当前状态,你想要达到的目标,以及达到目标需要什么:这是你的故事。
在项目的整个开发过程中,尽可能多地参考文氏图。组织中的每个人都应该熟悉它:所有员工都能够理解、采纳和推广的大图,以使您的组织转型成功。最后,为了以身作则地领导这个项目(鞋匠不应该是最差的),不断地监控和评估你的进展是至关重要的:这将使你更加可信,并有助于你想要发展的数据驱动的文化。
数据驱动的制造:4 个关键的组织支柱
原文:https://towardsdatascience.com/data-driven-manufacturing-4-key-organizational-pillars-f6d08d3da9ff

卢克·切瑟在 Unsplash 上的照片
随着技术的快速发展,今天我们生活在一个数字化转型的时代,企业,尤其是制造企业,能够从产品生命周期的不同来源收集大量数据。它由许多新兴技术支持,包括信息物理系统、数字双胞胎和工业物联网。因此,制造生命周期可能从许多来源产生数据,包括客户、利益相关者、生产线设备、产品和信息系统。
制造企业可以从这些数据中受益,以改进和优化其生产流程和资产利用率,并超越竞争对手。为此,制造企业需要在组织内外纵向和横向整合数据科学能力,并转向数据驱动的制造。垂直整合对应于组织内从生产车间到车间的联合,而水平整合旨在整合多个生产设施、供应链合作伙伴和业务合作伙伴。
对这种数据采用的数据科学可以向制造商提供描述、诊断、预测和规定的分析能力,并且可以创造机会来改进其生产计划、过程优化、材料跟踪、设备维护、质量控制,甚至新产品设计过程。它还允许组织通过授权企业支持战略决策来产生商业价值。
因此,数据科学为数据驱动的制造范式铺平了道路,这种范式将从数据中获得的可操作的洞察力提取到制造智能中,从而实现更明智的决策。数据驱动制造旨在提高运营效率和产品质量,同时降低成本和风险。尽管数据驱动的制造能够将资本密集度降低达 30% 并将生产生命周期缩短达 40 % 。制造企业在管理他们的数据科学努力以获得这些潜在利益时面临困难。
虽然数据科学被从业者和学者视为突破性的技术突破,但制造企业在该领域的投资回报普遍低于预期。据 Gartner [1]称,80 %的数据科学项目到 2020 年都不太可能产生任何商业价值,因为这些项目没有用标准化和系统化的方法进行管理和扩展。
制造企业需要关注数据科学和组织能力,以有效地利用数据作为其关键的战略资产,并实现有希望的潜力。然而,由于缺乏组织管理、协调和文化,只有一小部分组织能够成功地从他们的投资中获得商业价值[2]。成为一个数据驱动的组织需要从整体的多学科角度管理和促进组织变革。因此,这篇文章从组织管理的角度研究了数据驱动的制造,有四个关键支柱,(1)变革管理,(2)技能管理,(3)战略联盟,(4)赞助和投资组合管理,以促进向数据驱动的组织过渡。

马克·弗莱彻·布朗在 Unsplash 上的照片
变革管理
变革管理是不断调整组织的结构、文化和管理能力,以适应成为数据驱动型组织的需求。最高管理层的支持在启动组织转型以在整个组织内创建数据驱动的文化方面发挥着至关重要的作用。为此,最高管理层应该通过重新定义组织结构、领导和业务流程来领导变革管理过程。变更管理的一个主要问题是,参与这个转换生命周期的人们通常不共享相同的技能和术语来作为沟通的基线。因此,组织应该进行重组,以共享共同的数据驱动文化,并在数据科学家、软件开发人员、分析师、现场工作人员、利益相关者和高层管理人员之间定义高效和有效的沟通渠道,以支持运营数据科学的协作和互动。
总之,变革管理流程包括评估如何建立和维护组织政策和指令,以重组和调整组织向数据驱动型文化的过渡。作为成功实施变革管理过程的结果,组织应了解变革的范围和愿望,评估利益相关者和员工对变革的准备和意愿,确定和部署行动计划以激励利益相关者和员工,并增加他们对变革管理的参与,以及监测和维持组织变革。
技能管理
技能管理在获取、培训和整合技能和人才方面所做的努力,旨在为数据科学建立合适的多学科团队,并提高整个组织的数据素养。制造组织需要根据快速变化的业务环境和技术解决方案来重新配置和培训人力资源,以保持其市场竞争优势。为此,他们需要制定统一的人力资源管理战略,以确定如何确定、发展或获得所需的人员技能和能力,并根据既定的绩效标准评估候选人和员工的绩效,以满足组织需求。
技能管理中的另一个关键问题是对组织中的员工进行有关基本数据科学原则和方法的培训,以将他们纳入分析决策流程,并提高组织中的数据素养。
战略联盟
战略一致性定义了如何建立战略方向,并确保对组织目标和战略业务方向的共同理解。制造组织通过首先建立其数据科学战略和愿景,开始其成为数据驱动型制造组织的旅程。为此,他们需要调整他们的组织和数据科学战略,以促进他们向数据驱动型制造组织的转变,并提高他们的盈利能力和降低投资风险。这也允许组织将数据科学作为其核心能力和技能。该流程使组织能够了解其业务环境和方向,根据组织愿景确定其目标数据科学能力,并建立和维护战略计划和路线图,以推动业务、数据科学和 IT 部门之间的协调。
赞助和投资组合管理
赞助和投资组合管理流程旨在确保有效和高效地使用财务资源、项目和资产,以实现组织战略、目标和业务方向,成为数据驱动的制造组织。此外,赞助和投资组合管理使组织能够以可承受的成本,在已知和可接受的风险水平下,从战略上一致的投资中获得最佳收益。此流程评估组织中的财务规划和控制是否得到管理,以利用财务资源高效地为项目提供资金,从而支持成为数据驱动的制造组织。这还包括开发一个模型,评估和监控正在进行的资助项目,以决定是否继续或终止资助和资源。作为成功实施该流程的结果,组织根据组织愿景执行为其投资设定的战略方向,考虑和评估不同的赞助和融资模式和选项以支持和维护其投资组合,并监控、优化和评估其正在进行的投资组合中的项目,以根据其不断变化的业务环境和优先事项进行调整。
数据科学能够提高业务部门的运营绩效和数据驱动的决策能力,并在其业务中获得竞争优势。由于数据科学是一个多学科领域,除了从技术角度管理和协调整个组织的数据科学工作之外,还应该从组织管理的角度对其进行管理。
参考文献
[1]高德纳。我们的顶级数据和分析预测 2019 年。2019(2020 年 11 月 19 日访问),https://blogs . Gartner . com/Andrew _ white/2019/01/03/our-top-data-a nd-analytics-predicts-for-2019/。
[2]g kalp,M. O .,g kalp,e .,Kayabay,k .,koyi it,a .,& Eren,P. E. (2021)。数据驱动制造:数据科学成熟度评估模型。制造系统杂志, 60 ,527–546
[3]g kalp,M. O .,Kayabay,k .,g kalp,e .,koyi it,a .,& Eren,P. E. (2021)。评估向数据驱动型组织转变的过程能力:多学科方法。 IET 软件, 15 (6),376–390。
复杂系统的数据驱动建模:油藏计算教程
原文:https://towardsdatascience.com/data-driven-modeling-of-complex-systems-8a96dc92abf9

由 Lenstravelier 在 Unsplash 上拍摄的照片
确定性混沌这个几乎似是而非的概念描述了对初始条件如此敏感的系统,以至于不可能进行长期预测。因此,尽管动力学方程中没有随机性,但即使是计算中最微小的误差——例如计算机中的数值精度误差——也会导致未来的预测完全错误。
混沌系统的应用范围从天气预报,流体湍流,等离子体动力学,化学反应,人口动力学,天体运动,股票市场,等等。虽然当前的技术倾向于使用噪声和部分测量信息来约束物理模型(【https://en.wikipedia.org/wiki/Kalman_filter】),但是控制这些系统的方程通常是未知的。因此,能够使用机器学习(ML)等数据驱动方法来预测此类系统非常重要。
洛伦兹“蝴蝶”吸引子
爱德华·洛伦茨在 1963 年开创了理解和洞察混沌动力学的新时代。洛伦茨对地球低层大气中对流的简化将确定性的非周期行为以及“蝴蝶效应”的概念引入了流行文化,蝴蝶扇动翅膀可以改变天气。他的典型例子被称为“洛伦兹吸引子”该系统是三维的(3D ),并且涉及从下面均匀加热和上面冷却的薄流体的特性。下面绘制的是与对流速度和垂直温度变化相关的两个变量。Lorenz 吸引子是动力系统预测中的一个标准问题。

这里的几何对象称为具有分数维的“奇怪吸引子”。准确地说,吸引子的维数是 2.06。图片作者。
这里我们的 3D 数据 u (t)来自一组常微分方程,一个动力系统。为了在这里深入一点动力系统理论,“蝴蝶效应”可以用一组称为李亚普诺夫指数(le)的量来表征。LEs 是描述动力系统中扰动平均增长率的基本特征
LEs 描述了两个点 x₁和 x₂,最初相隔δx₀ = |x₁− x₂|的距离,如何相对于彼此在时间上演变。更具体地说,

λ₁是最大的 LE。因此,如果λ₁是正的,随着时间的推移,两个初始条件,起初只有很小的差异,将在线性化的范围内以指数速度彼此远离——混沌的定义和预测困难的原因。

由正李亚普诺夫指数引起的扰动增长的图解。作者:亚帕丽娜——自己的作品,CC0,https://commons.wikimedia.org/w/index.php?curid=42399467
LEs 可以与吸引子的维度和几何形状直接相关,吸引子是数据驻留在变量空间(称为相空间)中的几何对象。λ₁也是误差指数增长的逆时间常数,因此李雅普诺夫时间λ₁*t 给出了一个无量纲时间,可用于判断预测的质量。
油藏计算
在最大似然法中有许多预测复杂系统的方法,但最近有一种方法在性能、理解和训练的简单性以及潜在动力学的再现方面脱颖而出;这种方法就是储层计算(RC)。RC 是递归神经网络(RNN)的简化形式,这是一种具有反馈连接的网络,能够实现自激励。RNN 的内部状态明确地取决于先前的内部或“隐藏”状态和外部驱动信号。因此,数据有一个自然的顺序——称之为时间——这明确地允许将 RNN 视为一个动力系统。相比之下,其他形式的人工神经网络,如多层感知器,不对数据进行排序,因此它们的自然数学描述是一个函数。
RC 的优点是我们避免了直接在容器内训练权重。它们是根据控制连通性图的属性的少量参数来设置的。这些总体参数是 RC 方法的美妙之处。设置这些参数可以被视为指定类似于气体的整体温度或压力的东西,不需要跟踪每个单独粒子的位置和速度,从而大大降低了问题的复杂性。因此,训练仅限于解决输出的线性回归问题,大大减少了训练时间。

RC 中的信息流。我们有一个输入 u(t ),它通过输入层输入,输入层将信号投射到高维储层中,使我们能够用线性读出层近似非线性动力学。然后读数预测 u(t+1)。我们将 u(t+1)反馈到输入中,给出我们的预测。图片作者。
钢筋混凝土结构
RC 的结构由一个固定的(未训练的)高维“库”和一个训练过的输出层组成。储层的固定性质减少了训练参数空间的大小,以设置控制全局属性的少数参数,然后求解线性回归问题。可搜索参数空间大小的这种减小允许人们容易地绕过由于使用反向传播方案而出现的爆炸/消失梯度问题,并且将 RNN 的训练时间加快了几个数量级。

表 1:控制储层整体特性的参数以及 RNN 方程的更新。
RC 由三层组成:输入层 Win ,储层本身,以及输出层 Wout 。储层由 N 个节点组成,这些节点通常由简单的非线性元件作用,例如,tanh 激活函数。网络中的节点通过 N × N 邻接矩阵 A 连接,随机选择具有连接密度ρA 和在[1,1]之间均匀选择的非零元素,缩放使得 A 的最大特征值是表示为谱半径(ρSR)的数。
让我们看看如何在 Julia 中初始化一个 RC,实现为一个对象,并将表 1 中的输入参数作为初始化参数。函数“get_connection_matrix”创建 N×N 储层并缩放最大特征值。
rc 接受表 1 所示的参数。我们看到 RC 邻接矩阵 A 被实现为稀疏矩阵,因为已经表明非常低连通性的储层实际上在预测方面是最好的(ρA ~ 0.02)。此外,稀疏矩阵向量乘法非常有效。然后,a 按其最大特征值重新调整。Win 在[-,σ]之间随机产生。Wout 的存储器在初始化时被分配,但是 rc 还没有被训练。
输入层 Win 是一个 N × D 维矩阵,将输入信号 u (t)从 D 维映射到 N 维储层空间。 Win 的元素在[-,σ]之间均匀选择。
培训 RC
调用 RNN/水库的隐藏状态 r (t)。更新规则是

其中我们看到下一个 RC 隐藏状态 r (t+1)取决于前一个状态 r (t)和输入数据 u (t)。α是“泄漏率”,它决定了在下一个状态中有多少来自前一个状态的直接混合。节点处的非线性元素由双曲正切函数给出,该函数在这种情况下工作良好,因为它以 0 为中心。
现在的训练包括用数据 u (t)驱动 RC,并生成一系列与数据匹配的储层状态 r (t)。然后我们通过优化损失来确定 u (t)和 r (t)之间的线性映射 Wout

其中 r 是包含 r (t)的矩阵, u 是包含训练数据集中所有 t 的 u (t)的矩阵,β是 Tikhonov-Miller 正则化超参数。这也称为岭回归。解决方法是

其中 I 是 N × N 单位矩阵。因此,训练是一个简单的矩阵乘法问题。我们可以在代码中看到这一点。
训练 rc 需要输入数据序列 u(t)。我们生成对应于输入 u(t)的隐藏状态 r(t)。从那里我们可以计算出输出矩阵。
RC 还需要一些步骤来与数据同步。我们称之为旋转。
预测
现在来预测一下。我们将 u (t)替换为 Wout * r (t),将从动 RC 变成一个自主(仅取决于 r (t))系统

这给了我们“预测机器”,因为只要我们愿意,我们可以简单地向前迭代。代码如下所示,注意“auto_rc”功能与“driven_rc”相同,但带有u->Wout*r。
预测可以由一小部分数据 uspin 或储层状态 r(0)开始。然后这个函数预测 nsteps ahead。
洛伦兹吸引子示例
在这里,我们从 Lorenz 系统创建一些训练和测试数据。BasicReservoirComputing 就是上面 RC 代码的模块。系统的大小是 D=3,而水库有 N=200 个节点。参数如下σ= 0.084;α=0.6;SR = 0.8ρA = 0.02;β= 8.5e-8;σb=1.6,这是通过下一节所述的优化程序得到的。我没有定义 make_lor63 和 plot_prediction,但它们可以在 github repo 中找到。整个过程只需要几秒钟。
在下面的例子中,我们看到了 RC 的主要优势之一。不仅预测结果非常棒,这里高达约 9 次李亚普诺夫时间,而且当预测最终发散时(由于“蝴蝶效应”必然会发散),RC 停留在吸引子上,给出“物理预测”——预测具有与实际数据相同的统计特征。
可以计算 RC 的 D 个最大 LEs,并将其与输入数据的 LEs 进行比较。当两者相匹配时,我们得到了未来预测与数据“气候学上相似”的特征。这意味着预测具有相同的统计特性(平均值、标准差、相关性、误差增长,…)作为输入数据。
再现正确的误差增长统计(LEs)的特性不仅对于预测的稳定性很重要,而且对于将 RNNs 结合到当前技术水平的预测方法中也很重要,例如集合卡尔曼滤波器或其他形式的数据同化。这些方法使用贝叶斯推理将稀疏和有噪声的观察结果合并到系统的模型中(数据驱动的或物理的)。推论要求模式的扰动系综再现物理上真实的扰动预报,因此这个性质是重要的。

从 t=0 预测 X、Y 和 Z。请注意良好的短期预测以及长期统计数据的再现。图片作者。
测试 RC
时间序列预测的常见 ML 基准是一步预测均方误差。事实上,这正是我们训练 Wout 获得从u(t)→r(t)→u(t+1)的线性地图的方法。然而,作为一种测试方法,一步预测并不是一个合适的度量;它过分强调数据中的高频模式,而牺牲了 RC 预测的长期稳定性。
我们预测时间的标准度量是有效预测时间(VPT)。VPT 是预测的准确度超过给定阈值的时间 t。举个例子,

其中 d 是系统维数,σ是时间序列的长期标准差,ε是任意阈值,uᶠ是 RC 预测。
通过下面的直方图,我们可以看出在不同初始条件下观察预测的统计集合的重要性。这个集合是通过训练 RC,然后在 Lorenz 吸引子上的不同点测试大量初始条件而生成的。预测时间的变化部分是由于动力系统运动不稳定性的变化。Lorenz 吸引子在中间有一个不稳定的鞍点,在这个鞍点上很难预测状态将在哪个波瓣上结束,而两个波瓣的中心是相当稳定的。

测试 RC 进行预测的初始条件。这些预测的有效预测时间显示在下面的直方图中。当从吸引子的中心开始而不是在波瓣中开始时,预测未来的行为要困难得多。图片作者。

直方图显示了上述 100 个初始条件下的预测时间分布。图片作者。
如何找到正确的参数
找到 RC 的正确参数是使用该技术的主要挑战之一。正如我们在下面看到的,预测能力对我们选择的参数值非常敏感,使得这成为一个有点困难的多维非线性优化问题。谢天谢地,有许多算法专门研究这类问题,例如 CMAEShttps://en.wikipedia.org/wiki/CMA-ES,但是任何全局优化算法都可以。

预测对 RC 参数变化的敏感性。红色表示高平均 VPT 的区域,而蓝色表示低 VPT 的区域。搜索整个参数空间是一个不小的问题。图片作者。
我将采用三步优化方法。程序是:
- 修正参数
- 通过线性回归训练 Wout
- 通过一系列长期预测评估损失函数
我们将用于评估数据拟合度的损失函数为

其中 M 是用于比较的预测数量。uᶠ是预测,u 是数据。指数项是为了抵消误差在时间上的预期指数增长。
增加 M 使损失函数变得平滑,并且能够更好地收敛到全局最小值。然而,折衷是必要的,因为增加 M 将显著增加计算复杂度。我们根据经验发现,对于简单的模型来说,使用 15-20 个左右的预测通常就足够了,前提是这些预测是在统计上独立的点上做出的(彼此相距几个李亚普诺夫时间尺度以上)。理想情况下,数据将很好地采样输入系统吸引子,但实际上不可能总是这样。
下面我们将看到最小化的目标函数的定义和单一未来预测的损失函数。代码依赖于包含非优化参数以及训练数据的对象 f(这里未示出)。然后,我们使用全局优化程序来优化不同的参数。
结论
我们已经简要介绍了 RC 以及训练、预测和优化 RC 以预测复杂系统所需的代码。讨论了优化以找到正确参数的重要性,以及 RC 再现输入数据的长期统计数据的能力。虽然我们仅使用 Lorenz 系统作为例子,但是 RC 还有许多更复杂的应用。
代码和例子可以在 https://github.com/japlatt/BasicReservoirComputing 的找到。
有关 RC 背后的理论的更多信息以及对设计选择的更深入的讨论可以在以下论文中找到。如果您发现这些信息有用,请引用它们。
- Jason A. Platt 等人,“在油藏计算中使用预测广义同步进行稳健预测”。载:*(2021 年)第 31 期,第 123118 页。网址:【https://doi.org/10.1063/5.0066013 *
- 普拉特、J. A .、彭妮、S. G .、史密斯、T. A .、陈、t-c .、&h . d . I .(2022)。预测复杂时空动态的储层计算的系统探索。arXivhttp://arxiv.org/abs/2201.08910
还可以找到关于将 RNNs 集成到数据同化算法中以处理稀疏/噪声/不完整数据的信息
彭妮,S. G .,史密斯,T. A .,陈,t-c .,普拉特,j . A .。林海燕,古德利夫,硕士,大学博士(2021)。结合递归神经网络和数据同化进行可扩展的数据驱动状态估计。arXiv【cs。LG] 。运货车http://arxiv.org/abs/2109.12269
本作品的原始灵感来自陆等人,2018:
陆志新、布莱恩·亨特和爱德华·奥特。“机器学习的吸引子重构”。载于:混沌:一个
跨学科的非线性科学杂志 28.6 (2018),第 061104 页。一美元兑换:.
数据工程师的工具
原文:https://towardsdatascience.com/data-engineer-tools-c7e68eed28ad
数据工程工具箱的基础

朱莉·莫里弗在 Unsplash 上的照片
介绍
在过去的十年里,各种组织试图雇佣大量的数据和机器学习科学家,以便从他们的数据中提取有价值的信息,最终帮助他们做出明智的决策,并构建数据驱动的产品。不幸的是,这种策略对于这些公司中的大多数都失败了,因为在许多情况下,预测模型由于数据质量低而受到影响。数据是分散的,有时甚至不适合分析。
此外,即使当模型运行良好时,由于缺乏可扩展的架构、自动化和最佳实践的应用,它们在生产中的实现和部署也将是一场噩梦。这就是数据工程发挥作用的地方。
数据工程领域包含一套技术和原则,允许工程师通过配置所需的过程从各种不同的来源收集数据。此外,数据工程师有责任确保消除任何损坏的数据,以便使用这些数据的业务用户能够访问干净、准确的信息。
与此同时,数据工程师是现代数据驱动组织中最有价值的人之一,这些组织旨在通过利用他们最有价值的资产来构建或增强产品,即…数据!
为了以高效、可扩展和经济高效的方式实现这一点,数据工程师必须确保他们使用正确的工具,最终帮助他们构建组织所需的工具。
数据库
数据工程师应该能够处理和执行包括 SQL 和 NoSQL 数据库在内的数据库系统的某些操作。数据库是存放大量数据的地方,不同的用户可以在其中查询和提取信息,甚至可以使用数据库作为存储手段或甚至查找某些记录的其他应用程序。
对于大规模系统,数据工程师通常必须建立和维护数据仓库和数据湖。我不打算深入讨论这些概念以及它们与传统数据库的不同之处,但是如果您有兴趣了解关于这个主题的更多信息,请务必阅读我最近在下面分享的一篇文章。
(大)数据处理工具
如前所述,数据工程师应该设置所有必要的流程,以便清理和聚合来自多个来源的数据。因此,利用工具以可扩展、高效和容错的方式实现此类流程至关重要。
Apache Spark 是几乎每个行业都普遍使用的这种技术的一个例子。它是最广泛使用的可扩展计算引擎之一,可以执行批量处理、ML 模型训练和大规模数据分析等数据工程任务。此外,它支持多种语言,包括 Python、Scala、Java 甚至 r。
(近)实时数据流
除了对历史数据进行传统的批处理,许多组织还需要实时和大规模地处理数据**。例如,考虑当特定事件发生时应该执行特定动作的用例。数据工程师应该能够构建事件流架构,从而实现这些特性。**
在我看来,实时数据流之王是阿帕奇卡夫卡**。这项技术最初是作为 LinkedIn 中的消息队列实现的,并迅速发展成为一个开源的实时数据流平台。简而言之,Kafka 可以用来从事件流中产生和消费数据,也可以作为一个临时的消息存储库。此外,它可用于实时处理事件流,甚至追溯处理。**
在上一节中,我们讨论了 Apache Spark 以及它如何大规模处理批处理。除了批处理之外,Spark 本身还可以通过使用本地支持批处理和流工作负载的 Spark 流处理系统进行数据流处理。
这个 Spark API 扩展允许数据工程师执行来自多个来源的实时数据处理,包括 Apache Kafka 和 Amazon Kinesis。
调度工具
对数据工程师非常有用的其他重要工具是调度机制,它允许在特定的时间间隔执行特定的管道或动作。
此外,当执行多个相互依赖的操作时,这些工具还可以让您的生活变得更加轻松。例如,在加载所需的特定数据之前,不能运行分析操作。因此,调度工具可以帮助您确保一旦动作 A 也成功执行和完成,就执行动作 B。
调度工具的一个例子是 Apache Airflow ,它是设置、调度、执行和监控数据工作流时最常用的平台之一。
监控工具和警报
最后,数据工程师工具箱的另一个重要方面是监控**。在今天的文章中,我们讨论了许多需要启动和运行的概念和工具,以便能够以可伸缩和及时的方式执行某些流程。**
因此,重要的是要有适当的机制,使我们能够在各种系统上执行运行状况检查,此外,在发现异常情况时通知特定的目标组(例如,特定的开发人员或开发团队),比如某个 Spark 节点,甚至整个集群都出现故障。
大多数现代数据工程工具都可以配置为高度可用,但这并不意味着集群在任何给定时间都 100%健康。高可用性仅仅意味着系统应该不间断地工作,即使发生了不寻常的事情。但是,我们应该能够对我们的系统健康状况进行 360⁰,以便在问题出现时让需要调查问题的团队参与进来。
最后的想法
数据工程是组织的核心,旨在利用他们的数据来发布新产品,更新现有产品,并根据从一段时间甚至实时收集的数据得出的结论来改进他们的整体决策。
因此,招募合适的人来组建团队并帮助组织将其产品和决策提升到一个新的水平是非常重要的。
在今天的文章中,我们讨论了数据工程师应该使用的一些最重要的工具,以便以高效、优雅的方式执行日常任务,实现可扩展且经济高效的解决方案。
成为会员 阅读介质上的每一个故事。你的会员费直接支持我和你看的其他作家。你也可以在媒体上看到所有的故事。
**https://gmyrianthous.medium.com/membership **
相关文章你可能也喜欢
** ** ** ** ** **
数据工程最佳实践—将可靠性和完整性嵌入您的数据管道
构建高度可靠和值得信赖的数据管道,为下游数据消费者提供高质量的数据和信息
数据质量和数据可靠性的重要性
不言而喻,数据对于当今许多组织的运营和应用程序来说绝对至关重要。对于数据工程师来说,这不仅仅是通过提取、转换和加载(ETL)管道来交付数据,更重要的是交付可靠的数据,以便企业可以做出有效和明智的数据驱动型决策,数据科学家可以开发值得信赖的机器学习(ML)模型,数据密集型应用程序可以运行,而不必担心数据损坏。
我不得不说,管理和维护数据质量需要多个团队的共同努力,但数据工程师在这方面肯定要发挥作用。因此,本文的重点是在实践中,数据工程师如何在数据管道中嵌入数据质量控制和验证。
以下是今天文章的提纲:
- 数据质量管理的关键组成部分以及每个关键组成部分的范围;
- medallion 设计模式——端到端管道流设计模式,具有适当的数据质量控制;
- 将数据质量检查嵌入数据管道的实施指南。我将深入探讨 3 个框架— great_expectations 、 deequ 和 pydeequ 以及 Databrick 的 Delta Live Table (DLT) —对于每个框架,我将解释每个框架的工作原理,并分享每个框架的实现指南和编程模型。

乔恩·泰森在 Unsplash 上的照片
数据质量管理的关键组成部分
- 为了通过数据概要分析和数据探索性分析来理解数据,数据工程师有必要真正理解他们的管道正在处理什么数据。对数据的理解有两个层次。第一个层次是从技术和统计的角度去理解数据,比如每批数据的平均大小(记录数),最小值,最大值,平均值,唯一性,完整性。另一个层次是从业务角度理解数据,比如理解数据是如何被使用的,哪些列是关键的,以及对数据所需的任何计算。
- 定义数据质量规则、检查和期望。数据工程师可以从您从前面的点中获得的数据剖析和分析结果中进行开发。他们还需要与业务所有者和他们使用的数据集的最终用户交谈,以了解他们对数据质量的要求。
- 基于上述定义的数据质量约束,通过数据管道以自动方式实施检查和验证,以确保每批新到达的数据在到达数据存储位置之前都经过所需的检查和验证。
- 与主要利益相关方达成一致,如果数据管道检测到任何违反数据质量规则的行为,应采取何种措施。例如,如果您的管道正在处理的数据集是非常关键的业务,并且不应该有任何数据质量问题,任何数据质量违规都应该保证管道故障,并向关键人员发送严重警报,以便可以立即修复这些数据质量问题。然而,如果您所支持的用例能够容忍一些数据质量问题,而不是让管道失败,那么您可以丢弃那些坏记录,或者将它们放在不同的位置,以后再处理它们。
- 向监控解决方案报告和记录数据质量检查结果。围绕数据质量定义和监控关键性能指标(KPI),如通过记录的数量和失败记录的数量,不仅可以提供更好的可见性和可观察性,更重要的是,监控数据质量可以让人们清楚常见的数据质量问题在哪里,以便可以采取相应的措施来解决坏数据的根本原因。从长远来看,总体数据质量应该有上升趋势。
数据质量控制到位的端到端管道流
下图显示了数据管道将经历的典型端到端数据流,包括接收原始数据、数据转换和数据聚合。

将可靠性和完整性嵌入您的数据管道|作者图片
关键信息是,在将数据保存到存储层(青铜级、白银级、黄金级)之前,数据必须通过数据质量检查,对于未通过数据质量检查的损坏数据记录,在将它们写入存储层之前,需要单独处理。在本文的下一部分,我将分别使用 great_expectations 、 deequ 和 pydeequ 以及 Databrick 的 Delta Live Table (DLT) 来演示如何实现 a 管道。然而,在我进入实施部分之前,您可能想知道“铜、银、金”在这里是什么意思。
“青铜= >白银= >黄金”模式是一种数据流设计,也称为奖章式架构。medallion 架构的设计是为了在数据流经架构的每一层时,逐步提高数据的结构和质量。这就是为什么它与今天关于数据质量和可靠性的文章相关。
下面总结了每一层——青铜色、银色和金色——在圆形建筑下的内容:
- 青铜(原始数据)-青铜层也称为原始数据层,是数据工程师接收和保存来自外部数据源的所有原始数据的地方。这一层中的表结构与源系统表结构“原样”相对应,还有任何捕获加载日期/时间、流程 ID 等的附加元数据列。
- 银层(清理和符合的数据)—在银层中,来自铜层的数据被匹配、合并、符合和清理,以便银层可以提供其所有关键业务实体、概念和交易的全局视图。(例如,主客户、商店、非重复交易和交叉引用表)。通常,银层中的数据结构与原始层保持相同
- 黄金层(策划的业务级表)—黄金层中的数据通常组织在消费就绪的“特定于项目/产品/用例”数据库中。黄金层用于报告,使用更多非规范化和读取优化的数据模型,连接更少。这里应用了数据转换和数据质量规则的最后一层。例如,商业智能(BI)报告和仪表板通常直接使用黄金层的数据。
一般来说,随着数据从原始到青铜到白银再到黄金的流动,数据质量要求变得越来越严格,因为黄金层直接服务于业务。到目前为止,您应该已经对什么是 medallion 数据设计模式以及它为什么与数据质量讨论相关有了较高的理解。如果你想了解更多关于梅达莲建筑模式的细节,你可以访问这里。
从下一部分开始,我将解释如何利用不同的数据质量框架在端到端数据管道中实现数据质量检查。
先说远大前程。
殷切期望实施指导
Great Expectations 是一个开源的 Python 库,它通过数据测试、文档和概要分析提供数据质量管理功能。《远大前程》的三个关键组成部分如下:
- 期望——期望是关于数据的声明性陈述。预期具体来说是计算机可以计算的数据质量规则,但人类也可以理解,例如……expect _ column _ values _ to _ not _ be _ null。《远大前程》自带预定义的期望库,支持包括 Pandas、Spark、MySQL、MSSQL、SQLite、PostgreSQL、Trino、Redshift、BigQuery、Snowflake 等多种数据源。另一点值得一提的是,伟大的期望允许用户创建自己的定制期望。
- 数据源——Great Expectations 提供了一个 Datasource 类来与底层数据系统进行交互。Datasource 类为数据连接器和执行引擎协同工作提供了一个接口。被远大前程支持的执行引擎有熊猫、Spark、SqlAlchemy。有 3 种类型的数据连接器用于大期望。第一个是 InferredAssetDataConnector,它通过使用 regex 来推断 data_asset_name,该 regex 利用了文件名或文件夹结构中存在的模式。第二个是 ConfiguredAssetDataConnector,它允许用户进行最大程度的微调,并且需要您想要连接的每个数据资产的明确列表。第三个是 RuntimeDataConnector,它是一种特殊的数据连接器,使您能够使用 RuntimeBatchRequest 在运行时直接提供批处理数据。RuntimeBatchRequest 可以包装内存中的数据帧、文件路径或 SQL 查询,并且必须包含唯一标识数据的批处理标识符,例如工作流编制器调度的作业的 run_id。
- 验证和检查点—当您第一次验证数据时,会为您创建一个检查点,对此我们寄予厚望。检查站是可重复使用的。一旦您创建了检查点,根据您的规范对其进行了配置,并根据验证结果指定了您希望它执行的任何操作,您今后需要做的就是通知检查点运行。
以下是远大前程的编程模型:
- 第一步是启动数据上下文。您可以将数据上下文视为 YAML 文件或 python 字典,其中包含运行 Great Expectations 验证作业所需的所有配置。这些配置包括数据源、元数据存储(预期存储、验证存储、评估参数存储、检查点存储、配置文件存储)和数据文档站点。满怀期望,您可以使用 CLI 初始化新的数据上下文,或者可以在笔记本或工作流工具中实例化数据上下文,而无需 YAML 文件。数据上下文是《远大前程》的核心。没有它,您无法运行任何作业。
- 第二步是根据您在数据上下文文件中定义的数据源配置连接到数据。你的数据可以是内存中的 Pandas 或 Spark data frame,也可以来自文件系统、数据库(MySQL、PostgreSQL、MSSQL、Redshift、BigQuery 等),或者云存储位置(AWS S3、Google 云存储(GCS)、Azure Blob 存储)。
- 第三步是开发期望,并将配置的期望添加到数据上下文文件中定义的期望存储中。有多种方法可以创建数据质量预期。例如,您可以从领域知识中创建这些期望。您还可以使用 onboarding data assistant 来分析您的数据,并自动生成期望套件,然后您可以对其进行调整以适合您的特定需求。
- 第四步(也是最后一步)是验证您的数据。在运行数据验证过程之前,您需要首先创建一个检查点文档。配置检查点时,您可以添加额外的验证数据,或者设置检查点,以便必须在运行时指定验证数据。您可以添加额外的期望套件,并且可以添加检查点在完成数据验证时将执行的操作。常见操作包括更新数据文档、发送电子邮件、发布时差通知或发送其他自定义通知。
PyDeequ 实施指南
Deequ 是一个构建在 Apache Spark 之上的库,用于定义“数据的单元测试”,测量大型数据集中的数据质量。Deequ 的目的是在数据进入消费系统或机器学习算法之前,对数据进行“单元测试”,以尽早发现错误。Deequ 处理表格数据,例如 CSV 文件、数据库表、日志、扁平的 json 文件,基本上是任何可以放入 Spark 数据框架的东西。
在这里,您会注意到 Deequ 和 Great Expectations 之间的一个主要区别是,Deequ 仅适用于 Spark 数据框架,而 Great Expectations 同时支持 Spark 和 Pandas 计算引擎。这未必是一件坏事。原因是,Deequ 构建于 Apache Spark 之上,旨在处理通常位于分布式文件系统或数据仓库中的非常大的数据集(想想几十亿行)。
Deequ 有一个名为 PyDeequ 的 Python 接口,编写这个接口是为了支持 Deequ 在 Python 中的使用。以下是 PyDeequ 的主要组成部分:
- 分析器和配置文件—分析器和配置文件模块都有助于探索大规模的大数据,计算制定数据质量约束所需的指标。例如,您可以使用 analyzer 来计算列的近似计数清晰度、列的近似分位数以及计算出的完整性值。Analyzer 还可以用来进行符合性检查,测量符合给定的
列约束的行的比例。 - 约束建议 PyDeequ 提供预定义的规则和约束,以便对您的数据提出建议。这些预定义的规则包括建议列的分类范围约束、非空约束、数据类型约束和唯一约束。
- 约束验证—一旦定义了约束,就可以对新数据运行验证测试。验证结果、成功指标以及检查状态可以保存为数据帧或 JSON 文件。
- 指标存储库——PyDeequ 允许用户将 spark 数据帧上计算的指标和验证结果以 JSON 格式保存在一个中央指标存储库中。PyDeequ 支持两种类型的度量存储库,一种是 InMemoryMetricsRepository,另一种是 FileSystemMetricsRepository。FileSystemMetricsRepository 还支持 HDFS 和 S3。计算的每组指标都需要由 ResultKey 索引,result key 包含一个时间戳,并支持键值对形式的任意标签。有了度量存储库,用户以后可以用不同的方式从存储库中检索度量。
PyDeequ 非常容易启动,并支持 Spark 作为计算引擎,但是 Great Expectations 是一个更全面的数据质量管理框架。
δ现场表实施指导
Delta Live Table (DLT)是 Databrick 的内部 ETL 框架,它可以轻松构建和管理可靠的数据管道,在三角洲湖上提供高质量的数据。DLT 的重点之一是数据质量管理。它提供了通过验证和完整性检查来防止坏数据流入表中的机制,并通过预定义的错误策略来避免数据质量错误。它还提供了一个控制面板来监控数据质量随时间的变化趋势,以深入了解您的数据是如何演变的,以及哪里可能需要进行更改。
与远大期望类似,您可以使用期望来定义数据集的数据质量约束。期望由一个描述、一个不变量和一个当记录不符合不变量时要采取的行动组成。当记录违反预期预定义的预期时,DLT 提供 3 种类型的策略:
- expect——当您想要保留违反预期的记录时,可以使用 expect 操作符。违反预期的记录将与有效记录一起添加到目标数据集中。
- expect 或 drop——您可以使用 expect 或 drop 操作符来防止处理无效记录。违反预期的记录将从目标数据集中删除。
- 期待或失败—当无效记录不可接受时,使用期待或失败操作符在记录验证失败时立即暂停执行。如果操作是表更新,系统自动回滚事务。
摘要
如今,越来越多的业务应用程序和操作系统使用数据,并对数据进行隐式假设,例如,一些列必须具有特定的数据类型,一些列不应包含任何缺失值。如果违反了这些假设,应用程序可能会崩溃,ML 驱动的系统的性能可能会下降,或者,基于数据的业务决策可能会有偏差,甚至是错误的。
因此,无论您最终选择哪种数据质量框架(或者如果适合您组织的需求,您甚至可以构建自己的数据管理解决方案),最重要的事情是将数据可靠性和完整性检查构建到您的数据管道中,以确保您为数据消费者提供高质量的数据。
我希望你喜欢阅读这篇博客。如果你想在有新博客发表时得到通知,请随时关注我。我一般每周都会发表 1-2 篇关于数据和 AI 的文章。
如果想看到更多围绕现代高效数据+AI 栈的指南、深度潜水、见解,请订阅我的免费简讯— 高效数据+AI 栈 ,谢谢!
参考
- https://www.databricks.com/glossary/medallion-architecture
- https://docs.greatexpectations.io/docs/
- https://github.com/awslabs/deequ
- https://github.com/awslabs/python-deequ
- https://docs . databricks . com/workflows/delta-live-tables/index . html
注:以防万一你还没有成为媒体会员,并希望获得无限制的媒体访问权限,你可以使用我的推荐链接注册!我可以免费给你一点佣金。非常感谢你的支持!
Julia 中的数据工程
原文:https://towardsdatascience.com/data-engineering-in-julia-3fd37eaa618a
开始创建数据管道所需的一切🪠🧑🔧

作者图片
朱莉娅是数据科学和机器学习的自然选择?但是数据工程呢?在这篇文章中,我们将介绍如何使用 Julia 完成各种数据工程任务,从基础到创建管道。正如您将看到的,Julia 的性能和易用性可以轻松地跨整个 ML 和 DS 堆栈使用。
接下来,我们将探讨以下主题,并了解如何使用 Julia:
- 阅读🤓在茱莉亚写✍️的文件
- 使用数据库💽
- 其他工具概述
如果您想了解 Julia 为什么非常适合数据科学,请查看这篇文章:
https://betterprogramming.pub/why-you-should-invest-in-julia-now-as-a-data-scientist-30dc346d62e4
如果你对为什么 Julia 是机器学习的未来感兴趣,请查看:
什么是数据工程?🧐
在我们深入细节之前,有必要回顾一下数据工程到底是什么。如果你已经知道这些东西,并且想深入了解 Julia,请随意跳过这一部分。在尽可能高的水平上,数据工程是将数据从一个源移动到另一个源。举例来说,您有一个在生产环境中运行的网站,有多台服务器,每台服务器都存储特定产品销售的数据。检查总销售额的一种方法是在生产数据库上运行查询,并聚合结果以获得总销售额。但是如果你想做一个更复杂的分析呢?
在这种情况下,数据工程师可能会将所有生产数据库连接到一个专门用于分析目的的不同数据库。到目前为止,我们已经介绍了数据工程的提取和加载功能。然而,在许多情况下,我们可能希望数据采用不同于原始格式的格式。也许您正在记录总交易,但现在想要逐行的项目成本。这是数据工程师执行数据转换的地方,这是数据工程的第三个主要功能。

斯蒂芬·道森在 Unsplash 上拍摄的照片
那么从数据工程的角度来看,我们在这个例子中实际上做了什么呢?嗯,我们定义了一个管道!为了让这个例子发挥作用,我们有一个数据源(原始生产服务器),我们在那里进行提取,然后扩充/转换数据,接着将数据加载到数据仓库(存储),数据科学团队现在可以在那里做进一步的分析。
现在,您已经对数据工程流程有了大致的了解,可能会更清楚为什么让数据科学团队和数据工程团队使用相同的工具(即 Julia)对每个人都有好处。
编辑:我和我的合著者很高兴地告诉大家,我们的新书《朱丽亚速成教程》已经开始预售了:
https://logankilpatrick.gumroad.com/l/juliacrashcourse
阅读🤓在茱莉亚写✍️的文件
一种常见的数据存储技术是将信息保存为逗号分隔值(CSV)。让我们来探索如何用 Julia 加载、修改和写入 CSV 格式的数据。为此,我们将使用 DataFrames.jl 和 CSV.jl 包。我们从添加包开始:
**(@v1.7) pkg>** add DataFrames # type "]" to enter pkg mode**(@v1.7) pkg>** add CSV # type "]" to enter pkg mode
如果您从未使用过 Julia 中的包管理器,并且需要一个快速概览,请查看这篇文章:
现在我们已经安装了数据帧和 CSV,我们将加载它们:
**julia>** using DataFrames, CSV
接下来,让我们将 CSV 文件加载到 DataFrames.jl 中:
julia> df = DataFrame(CSV.File("/Users/logankilpatrick/Desktop/QS World University Rankings combined.csv"))
在这个例子中,我们将在 Kaggle 数据集上使用 QS 世界大学排名 2017–2022,该数据集在
公共域中。我们可以看到如下结果:

作者捕获的图像
如果您想选择一个特定的列,您可以这样做:
**julia>** df.university 6482-element Vector{String}:"Massachusetts Institute of Technology (MIT) ""Stanford University""Harvard University""University of Cambridge"⋮
要获得所有的列名,我们可以使用names或propertynames函数:
**julia>** names(df)9-element Vector{String}:"year""rank_display""university""score""link""country""city""region""logo"
如果我们想逐一遍历所有的行,我们会这样做:
for row in eachrow(df) print(row)end
好了,现在我们知道了如何进行一些基本操作,接下来让我们看看如何修改数据帧,然后将其写回 CSV 文件。在 DFs.jl 中,我们可以通过执行df[index, columns]来访问特定的行,所以在这种情况下,如果我们想要访问第二行以及属于它的所有列,我们应该执行df[2, :]。现在让我们创建一个新变量:
**julia>** new_row = df[2, :]**julia>** new_row.university = "Julia Academy""Julia Academy"**julia>** new_row.city = "Remote""Remote"**julia>** new_row.link = "juliaacademy.com""juliaacademy.com"
然后要将新行添加回数据框,我们可以使用push!函数:
**julia>** push!(df, new_row)
现在我们有了更新的数据帧,我们可以通过执行以下操作将其写入 CSV:
**julia>** CSV.write("/Users/logankilpatrick/Desktop/QS World University Rankings combined and Edited.csv", df)
您可以在本地确认这创建了一个新的 CSV 文件,并在最后更新了值。这应该能让你很好地处理 CSV 格式的数据。当然,还有很多我们无法在这篇文章中涵盖的内容,但是我希望这个例子能让你相信在 DataFrames.jl 中使用 CSV 是非常容易的。如果您想了解更多信息,请查看 DataFrames.jl 文档或观看来自 JuliaCon 2021 的研讨会教程:
使用数据库💽在朱莉娅
让我们从在 Julia 中使用 MySQL 开始这个数据库部分。就像我们对其他包所做的那样,要添加 MySQL.jl,我们只需输入] add MySQL。然后,运行using MySQL来加载包。
请注意,本节假设您已经在计算机上创建并运行了一个 MySQL 数据库。我们可以通过以下方式连接到该数据库:
**julia>** con = DBInterface.connect(MySQL.Connection, "localhost","root", "my_password", db = "teacher_sample")MySQL.Connection(host="localhost", user="root", port="3306", db="teacher_sample")
在上面的代码中,我们使用用户名“root”、密码“my_password”和模式名“teacher_sample”连接到目的地“localhost”的数据库。同样,其中一些属性是我在创建 MySQL 数据库时预先设置的。
为了正确地查看我们可以从 SQL 命令返回的结果,我们还需要通过以下方式加载 DataFrames.jl 包:
using DataFrames
然后,我们可以尝试执行一个简单的命令,比如SELECT *:
**julia>** DataFrame(DBInterface.execute(con, "SELECT * FROM teacher_sample.teachers;"))
这会产生以下数据帧:

DBInterface.execute()功能有两个输入:
- 光标,它是指向我们最初定义的要使用的数据库的指针
- 字符串格式的 SQL 命令(就像 Python 中的 MySQL 一样)
从这里开始,您可以通过对不同的 SQL 字符串使用相同的execute函数来执行几乎任何您想要的 SQL 命令。这包含了您将从数据库包中获得的核心功能。
Julia 中的其他数据库
除了 MySQL,还有很多其他用 Julia 写的数据库绑定。你可能想看看 TypeDB.jl:
或者 JuliaDB(纯 Julia 数据库):
还有很多其他的!我建议查看一下 https://github.com/JuliaData 的和 https://github.com/JuliaDatabases 的以获得 Julia 中所有可用数据库的完整列表。
其他数据工程工具⚒️
你用什么进行数据工程实际上取决于你在做什么。让我们简单回顾一下如何在 Julia 中使用一些最常见的数据工程工具:
Julia 中的红移
如果想在 Julia 中连接 AWS 红移,可以使用 LibPQ.jl
Julia 中的 BigQuery
Google 的 BigQuery 可以通过 GCP.jl 访问。
朱莉娅中的画面
虽然不完全支持,但您可以通过以下扩展在 Julia 中连接 Tableau:
朱莉娅的阿帕奇火花
Apache Spark 的 Julia 绑定存在于 Spark.jl
《朱丽亚》中的阿帕奇·卡夫卡
在 RDKafka.jl 中可以找到librdkafka的包装器
朱莉娅的达斯克
虽然不完全相同,Dagger.jl 提供了并行性,这很受 Dask 的启发:https://github.com/JuliaParallel/Dagger.jl
朱莉娅的阿帕奇蜂房
Hive 通过 Hive.jl 可用
Julia 会是数据工程的未来吗?🧐
这篇文章的主要目的是强调,你需要的很多工具,如果不是全部的话,都以这样或那样的形式存在。虽然这里或那里可能会有尖锐的边缘,但许多构建块现在已经就位,因此学习 Julia 并希望使用它的人们拥有了他们高效工作所需的东西。
我认为 Julia 在数据工程领域的优势在于模糊了那些想从事软件工程、数据工程和数据科学的人之间的界限。现在,因为许多工具是特定于上下文的,没有多少人在这个领域工作。但是我看到了一个未来,即“全栈数据工程师”使用 Julia 作为帮助他们的单一工具,跨所有三个学科工作。
虽然我已经完成了相当多的高级数据工程,但在这篇文章中,我仍然有很多不知道的东西,并且可能已经错过了。您可能也有兴趣阅读关于使用 Lathe.jl 的 ML 管道。
欢迎在 Twitter 上联系我,分享你的想法:https://twitter.com/OfficialLoganK
数据、工程师和设计师:美国与欧洲的比较
原文:https://towardsdatascience.com/data-engineers-and-designers-how-us-compares-to-europe-e1ce6f0a8908
早些时候,我声称随着公司加倍招聘数据,数据与工程师的比率接近 1:2,一些欧洲顶级科技公司,数据正迎来它的时刻。
它和池塘那边相比怎么样?🇺🇸
**我观察的美国公司的数据与工程师比率的中位数是 1:7,而欧洲公司是 1:4。**两组的设计与工程师比例均为 1:9。
这篇文章给出了为什么会这样的一些答案,但也留下了一些没有答案的问题。
让我们开始吧!

作者图片
这是处于不同等级的公司之间的巨大差距。
分析公司实际上并不擅长分析。令人失望的是,像 Amplitude、Pendo、Snowflake 和 Fullstory 这样的分析公司并不擅长分析。上述所有公司只有约 2%的员工从事数据工作,超过一半的员工根本不从事技术工作。
开发工具公司确实是为开发人员服务的。当谈到每个工程师的数据人员和设计师数量时,HashiCorp、Sentry 和 Gitlab 都在名单上垫底。这是有道理的,他们都有大型的工程团队——有些超过了员工总数的 50%。
数据是德州的秘密辣酱
给工程师绘制一个设计和数据的矩阵告诉我们一个有趣的故事,公司关注哪里。

作者图片
这与它对欧洲公司的看法有什么不同吗?相当多!
只有 50%的美国公司的数据人员多于设计师,相比之下,我观察的欧洲公司有 80%的数据人员多于设计师。
这并不意味着欧洲人对设计的投资减少;他们只是在数据上投入更多。对于美国和欧洲的公司来说,设计与开发者的比例中位数是 1:9。这与 Nielsen Norman Group 在对 500 家公司的研究中发现的相差不远,该研究显示 50%的公司的目标是设计与开发者的比例至少为 1:10。
美国公司通常是工程第一。与 19 家欧洲公司相比,36 家美国公司属于这个象限。
这是巧合还是有什么结构性的东西在这里发生?让我们深入🇺🇸🤺 🇪🇺.
曲奇还是饼干?美国公司与欧洲公司相比如何
从上周的分析中,我们知道商业模式是数据与工程师比率的最佳指标之一;例如,与 B2B 相比,市场中每个工程师的数据人员数量是 B2B 的 2-3 倍。我只是从美国的低数据比率商业模式中挑选了更多的公司吗?或许如此,但即使在相同的商业模式下,美国和欧洲公司的数据工程师比率也有很大不同。

作者图片
画面清晰。在所有商业模式中,欧洲公司的每位工程师拥有的数据人员明显多于美国公司。
美国是一个更大的市场,拥有更大的工程团队。Doordash & Deliveroo。 deliver oo(🇪🇺)的数据与工程师比率为 0.42,是 Doordash (🇺🇸)的两倍多,为 0.18。这并不意味着 Doordash 更少数据驱动;事实上,从绝对意义上讲,他们的数据人员比 Deliveroo 多,而且他们的团队中不乏出色的数据工作人员。他们的工程团队比 Deliveroo 大得多。
在我的分析中,纵观所有 100 家公司,美国公司的工程师占总劳动力的比例是 21%,而欧洲是 17%。
欧洲有更多的深度技术,美国有更多的开发工具。哈希公司& Onfido。
Onfido (🇪🇺)的数据工程师比率为 0.16,相比之下,HashiCorp (🇺🇸).)的数据工程师比率为 0.02 如果你是瘾君子,那就说得通了。机器学习是你的产品的核心部分,对数据进行更多投资是一个好主意。欧洲有很多类似的深度科技创业公司。相比之下,开发工具与工程师的数据比率非常低,美国目前拥有 DevOps 工具市场的最大份额。
如果我们将数据与工程师的比率并排放在一起,对比是鲜明的,某些垂直行业的差距超过 2 倍。

作者图片
虽然美国更大的工程团队和欧洲对深度技术的关注有助于解释这一点,但还有其他因素在起作用。以下是我的一些(推测的)假设
1)美国市场更大,竞争更激烈,有更多经验丰富的销售主管。因此,美国的 B2B 公司拥有相对较大的销售队伍。
2)欧洲的创业公司通常从一开始就分散在许多市场。这带来了独特的数据挑战,需要更大的数据团队。
3)越来越多的美国公司由工程创始人领导,他们创造了一种更加注重工程的文化。
为了保持良好的秩序,我还研究了公司规模与数据工程师比率之间是否存在关联,因为我的样本中的美国公司略大一些(美国公司的平均规模为 2100 家,而欧洲公司为 1500 家)。我没有发现显著的相关性。
让我知道你的想法。
关于数据
我查看了 LinkedIn 上的关键词,包括了所有匹配项(例如,产品工程师将与工程师项匹配)
- 数据:数据分析师、数据科学家、机器学习、数据工程师、数据经理、分析工程师、产品分析师、商业智能、数据主管/经理/总监/副总裁
- **工程:**工程师(不含数据工程师),技术/技术负责人
- **设计:**设计(er),用户体验,UX,用户研究
我故意没有包括所有分析师角色,这意味着诸如财务分析师、销售分析师和策略分析师等角色不被算作数据角色,尽管您可以将他们的一些工作归类为数据工作。
魔法数据插补
原文:https://towardsdatascience.com/data-imputation-with-magic-85263d09a43f
凯西-卡达布拉-阿拉卡赞!像变魔术一样消除数据中的噪音!

佩吉·科迪在 Unsplash 上拍摄的照片
在单细胞 RNA 测序数据(scRNA-seq)中,记录了单个细胞基因组中 mRNA 分子的数量,我们经常遇到这些分子的低计数或零计数。这是因为测序机器对更稀疏表达的基因的检测效率较低,导致它们被错误地标记为 0。这给 scRNA-seq 数据增加了许多噪声,这可能使下游分析如维度减少、差异基因表达和轨迹推断潜在可疑。具体来说,这种噪音可以掩盖感兴趣的基因的已知生物关系。
消除这些数据的噪声并绕过这个障碍不是很好吗?这就是归罪的由来。插补是一种填充或估算缺失数据(即零计数)的方法,通过对这些缺失数据条目的真实值进行有根据的猜测。去噪是一种插补模式,在这种模式下,您可以估计噪声并相应地移除噪声。实现这一点的一个简单而有效的方法是来自 Krishnaswamy 实验室的算法(该实验室开发了 PHATE ,一种与更常用的 UMAP 具有竞争力的降维算法),称为 MAGIC 。MAGIC 代表MarkovAf 基于 G 图 I 计算的 C 单元。这种方法在单个单元格数据的图形表示上使用数据扩散来消除噪声。
如果您已经阅读了我的文章,下面的步骤将会非常熟悉,但简单地说,该算法从一个单细胞数据的矩阵开始(但您可以很容易地在您自己的数据集中替换这种矩阵格式),并计算细胞之间的欧几里德距离,创建一个细胞到细胞的距离矩阵(根据数据的维度,我们通常在 PCA 空间中用大约 10-100 个主成分来确定这些距离)。这个矩阵然后从距离转换成亲和力。这度量相似性并且与距离成反比,例如两个细胞在欧几里得空间中越接近(即,它们的距离越小),它们的亲和力越大。该计算使用指数内核实现:

作者图片
其中 x 和 y 各自对应于 PCA 空间中的细胞坐标, d(x,y) 是 x 和 y 之间的欧几里德距离, σ 是带宽参数,并且测量由该核捕获的邻域的“扩散”或半径。这是捕捉邻域单元内局部变化的关键。 σ 的选择因每组单元格而异,以校正单个单元格图中的密度差异。例如,一些细胞可能占据具有很少相邻细胞的稀疏区域,而其他细胞则挤满了一堆细胞。因此,我们希望稀疏区域的带宽“更宽”,而密集区域的带宽更短,以校正这种邻域变化。因此,我们将 σ 设为 x 与其第 k 个最近邻居之间的距离:

作者图片
其中 xₖ 是单元 x 的第 k 个最近邻。MAGIC 的作者建议这个 k 应该很小,以确保整个图的连通性。然而,因为 σ 是细胞特定的,我们的亲和矩阵不再是对称的(即,可能存在一对 x,y 使得 A(x,y) ≠ A(y,x) )。这可以很容易地通过将我们的亲和矩阵的转置添加到原始矩阵 A 中来纠正。

作者图片
在我们计算了我们的亲和矩阵之后,我们通过行标准化将这些值转换成概率,在一个步骤中为所有单元获得从单元 x 到单元 y 的马尔可夫转移概率。

作者图片
因为退出效应呈现出一种形式的技术变异,这种变异通常与生物变异难以区分,随机采样特征(在这种情况下,每个基因的 mRNA 分子计数)可能导致已知先验相同的细胞(例如,干细胞或红细胞)之间的可疑变异。但是,将这些数据想象成一个图,其中节点表示单元,边表示相似单元之间的连接,您可以假设相似单元共享许多邻居,而不同单元具有较少的共同邻居。有没有一种方法可以让我们利用这些信息,让计数稀少的细胞可以从它们噪音较小的朋友那里学习?这就是数据扩散的用武之地,它为我们的马尔可夫概率矩阵求幂 t 。这可以直观地认为是在随机行走的 t 步内从单元格 x 转换到单元格 y 的概率。这个 t 被称为扩散时间。因此,在确定其基因表达谱时,细胞有更多的邻居可以遍历和学习。矩阵的这种动力增加了相似细胞的亲和力,同时消除了更嘈杂的连接。在图形信号的上下文中,您可以将它视为一个低通滤波器,当我们增加 t 时,我们不仅通过亲和力加强相关单元之间的连接,还通过降低稀疏性中出现的错误连接的权重来消除噪声。
这个乘方矩阵然后直接乘以 scRNA-seq 数据的原始矩阵,以获得滤除噪声的估算矩阵。

作者图片
其中 M ᵗ 为扩散时间驱动的概率矩阵, t , X 为 m 细胞和 n 基因的原始单细胞矩阵, X _impute 为估算的基因表达矩阵。
概括地说,我们首先从预处理的原始数据计算细胞到细胞的距离矩阵,将距离转换为亲和力,将亲和力归一化为概率,然后对得到的概率矩阵求幂并乘以原始数据矩阵。很简单,对吧?我非常欣赏这个算法的一点是,从数学的角度来看,它是多么的简单和优雅。但是足够的数学,让我们看看这个算法在行动!
为了测试 MAGIC,我们将使用 pip 安装 Python 版本:
pip install --user magic-impute
我们还将安装一些用于预处理数据的单细胞分析包,以及用于可视化的 PHATE:
conda install -c bioconda scvelo
conda install -c conda-forge scanpy
pip install scprep phate
我们将使用神经元分化的 scRNA-seq 数据集来说明神奇之处。如果你感兴趣的话,你可以阅读我的 RNA velocity 文章,了解更多关于生物学的细节。

原始数据的摘录,其中列对应于基因,行是单个细胞;注意零的大量存在。作者图片

将 MAGIC 应用于神经元分化的 scRNA-seq 数据集的结果。(左)插补前的像元散点图。(右)用魔法插补后的细胞散点图。作者图片
让我们看一下这些图,x 轴是神经元中表达的基因的 mRNA 丰度,称为 VSNL1y 轴是一个叫做 RUNX1T1 的基因的 mRNA 丰度,它出现在前体细胞类型中。每个点都是一个单独的细胞,由另一种叫做 RBFOX1 的神经元标记的表达来着色。我们预计随着细胞沿 x 轴转化为神经元,RUNX1T1 的表达会有明显的下降趋势,RBFOX1 的表达证实了这一点。左图太吵了,无法欣赏这一趋势,但右图用魔法插补成功地再现了这一生物现象。
我们还可以使用 PHATE 可视化原始数据和估算数据,如下所示:

原始(左)和估算(右)数据集之间的 PHATE 比较。作者图片
在这里,细胞根据 RBFOX1 mRNA 的表达被着色,我们可以在右边的图中看到一个清晰的梯度,因为细胞变成了神经元。
结论
在本文中,我们学习了 MAGIC,这是一种简单而有效的去噪方法。虽然在设计时考虑了生物数据,但这种方法也可以应用于其他类型的数据,其中缺失值和噪声也可能是常见的。值得注意的是,在选择幂马尔可夫矩阵的指数 t 时应该小心。指数过高会导致过度平滑,这会消除现有的生物变异,导致下游分析得出错误的结论。为此,对它的常见批评强调了它如何不区分真正的生物零和假阳性,而是转换整个矩阵,而不仅仅是丢失的值。然而,我欣赏这个算法的一点是,从数学的角度来看,它是多么的简单和优雅。单细胞生物学中的插补领域是一个非常受欢迎的分支学科,在过去的几年里,它催生了大量的算法(下面的参考文献中列出了一些例子),MAGIC 是开创性的方法之一,至今仍被广泛应用于该领域。
感谢您阅读这篇文章。如果您还不是中级会员,请考虑在此注册,以便充分使用该平台提供的所有功能:
参考资料:
[1] D. van Dijk,R. Sharma,j . nay ns,K. Yim,P. Kathail,A. J. Carr,C. Burdziak,K. R. Moon,C. L. Chaffer,D. Pattabiraman,B. Bierie,L. Mazutis,G. Wolf,S. Krishnaswamy,D. Pe’er,利用数据扩散从单细胞数据中恢复基因相互作用 (2018),细胞
[2] 以及 S. Krishnaswamy,将高维生物数据中的结构和跃迁可视化 (2019),Nature Biotechnology
【3】m . Huang,J. Wang,E. Torre,H. Dueck,S. Shaffer,R. Bonasio,J. I. Murray,A. Raj,M. Li 和 N. R. Zhang, SAVER:用于单细胞 RNA 测序的基因表达恢复(2018) , Nature 单细胞 RNA-seq 数据的精确稳健插补方法 sci compute(2018)Nature communication s
【5】g . La Manno、R. Soldatov、A. Zeisel、E. Braun、H. Hochgerner、V. Petukhov、K. Lidschreiber、M. E. Kastriti、p . lnnerberg、a .、J. Fan、L. E. Borm、Z. Liu
数据叠衣服是一个有风险的游戏
原文:https://towardsdatascience.com/data-jenga-is-a-risky-game-911f3426602d
为什么可持续的数据基础是任何人工智能计划的关键

用 DALL-E 2 生成的图像。
将人工智能引入制造业有巨大的潜力。企业正在向智能制造和工业 4.0 计划投入大量资金,但在预期和实际成功之间仍存在巨大差距。
这有不同的原因,但本文将关注最基本的原因之一——数据基础不适用于目的。你可以称之为数据叠木,因为就像在游戏叠木中一样,你可以通过在顶部开始构建来创建越来越不稳定的结构。
速赢困境
人工智能计划通常作为创新项目启动,与公司的核心有些脱节。为了展示成功并获得更多的接受和支持,项目团队通常使用务实的方法,追求快速成功——围绕具有一些(但不是大量)商业价值的可用数据的机会。
虽然这种方法是可以理解的(通常也是管理层所期望的),但它有一个很大的问题:
重点在于利用当前数据和现有(元)数据管理的可能性,而不是利用正确的数据基础的可能性。
价值创造可能既不可扩展也不可持续,因为必要的数据基础尚未到位。就像在激动人心的叠树游戏的最后阶段一样——你可能仍然可以移走一块积木并把它放在上面——但是塔可能会为下一个玩家而倒塌。
数据基础是否符合目的?
制造业中人工智能计划的成功(以及最终的业务影响)最初取决于三个支持支柱,数据团队需要确定数据驱动的价值创造途径:
- 清晰的商业价值主张
- 领域专业知识(过程、工业自动化)
- 足够数量的相关且管理良好的数据(数据基础)
由于公认的高质量数据在既定业务流程中的影响,来自 ERP 系统的数据一般都有良好的数据管理实践[1]。
然而,在制造业的人工智能等新兴领域,数据管理可能仍处于早期阶段,数据来自主要为过程控制设计的系统,其次才是数据收集。虽然在工业自动化系统中数据收集可能很简单,但大量的数据不应被误认为是提取有用知识的实际能力。
此外,吴恩达呼吁一种更加以数据为中心的方法:“不要仅仅关注你收集的数据的数量,还要考虑质量,确保它清楚地说明了我们需要人工智能学习的概念。”[2]
如果没有管理良好的相关数据,人工智能计划的变革性影响的概率可能会从一开始就大大降低。
解决战略差距,释放人工智能的全部潜力
当规划人工智能计划时,缺乏坚实的数据基础很快就会显现出来。然而,存在这样一种风险,即核心项目团队之外的相关利益相关者可能没有认识到这一战略差距。
由于期望在短时间内交付有影响力的结果,沟通可能会变得偏向于成功,专注于速赢。修复数据基础中的战略缺口可能看起来不那么有吸引力,因为这需要付出巨大的努力,并且只能在中长期内获得回报。
持续关注速赢可能会导致一种误解,即简单地建立一些数据分析能力就足以掌握人工智能转型。这甚至可能导致组织没有意识到真正的潜在数据和人工智能对他们的影响。在最坏的情况下,他们甚至可能会完全错过这个机会。
用坚固的金字塔取代摇摇欲坠的塔楼
最终,组织的任务是将计算机科学最基本的概念之一——信息或数据金字塔https://en.wikipedia.org/wiki/DIKW_pyramid【3】——落实到位。它实现了从原始数据(信息)到托管数据(信息)的旅程,通过分析信息构建知识,一直到顶层,再到具有可衡量影响的数据驱动的行动。

数据金字塔及其两个战略方向。图片作者。
制造业中的一个真实例子是现场维护数据(信息)的集合,以识别统计上最重要的设备故障根本原因条件(知识)。
例如,获得的知识可以反馈给 R&D 团队,他们创造了新的和改进的设备设计(智慧)(非人工智能的例子)。也有可能将这种知识与工业自动化数据相结合,以提供实时决策支持系统,例如,避免设备的计划外停机时间(人工智能示例)。
金字塔的结构底部比顶部宽。因此,信息金字塔强调需要一个坚如磐石的数据基础。提取洞察力需要大量的(管理的)数据,这在很大程度上取决于统计法则。
但是如果金字塔还不在那里,如何建造它呢?为了促进这一过程,一些组织现在已经开始创建数据产品的概念和数据产品经理的角色[4]。
自上而下和自下而上:从两个方向构建金字塔
虽然可能存在从挖掘容易获得的数据中发现(意想不到的)知识的情况,但在战略环境中,信息金字塔的定义应该更多地被认为是自上而下的过程,带有自下而上的验证。
基于其战略,一个组织将能够形成可操作的洞察力(智慧),这将使其在市场中具有竞争优势。它可以形成需要构建的知识,这将使组织能够以有效的方式保持竞争优势(=目标知识)。
但是可行吗?引入数据、业务和领域专家将自下而上地验证该方法。目标知识可以基于可行性考虑进行提炼,最终,业务策略将被完美地嵌入到数据结构和架构中。
与多学科团队一起完成这一分析将照亮前进的道路,并突出差距和障碍。它将有助于为一个组织构建人工智能的全部潜力,并弥合技术、领域专业知识和商业战略之间的差距。
结论
构建组织的未来信息金字塔需要大量的时间、精力和投资。但要真正踏上人工智能之旅并释放其全部商业潜力,没有其他办法。
不要把未来的成功建立在摇摇欲坠的叠罗汉塔上,而是依靠坚如磐石的金字塔。
参考资料:
[1]、杨·w·李、利奥·l·皮皮诺和黛安·m·斯特朗(1998 年)。将您的信息作为产品进行管理。麻省理工学院斯隆管理评论,1998 年夏季:95–105
[2]吴恩达。对你的业务来说,人工智能不必太复杂或太昂贵。哈佛商业评论,2021 年 7 月 29 日。
[3]阿科夫,R. L. (1989 年)。从数据到智慧。应用系统分析杂志 15:3–9。
[4]托马斯·h·达文波特、兰迪·比恩和谢尔·贾恩(2022 年)。为什么贵公司需要数据产品经理。哈佛商业评论,2022 年 10 月 13 日
数据湖架构:如何将您的业务提升到数据驱动的世界
迟做比不做好
在当今世界,所有现代企业都有数字化的一面。也许一些小型手工业企业仍然没有受到数字的影响,但这是例外。每个组织都经历了数字化的几个阶段,从现金流的基本会计到高级分析、预测建模和基于数据的数字服务的开发。
今天,让我分享我的一个客户案例,在这个案例中,我和我的团队致力于数据湖实施,以实现自动化分析来帮助加快决策过程。
显然,这一切都是从 Excel 工作簿开始的。但是,企业中的数据源数量会随着企业的发展而增加。通常,许多业务应用程序都在使用中,如 CRM、ERP 和 WMS。但是,用 Excel 做报表和分析数据的习惯从来没有消失过!

迟早会出现这样的情况:从过多的系统中导出的数据图表过多。每天都需要花费时间来手动准备报告数据,而且从不同系统汇集信息也是一项挑战。如果你需要更新过去时期的信息,那真的是一场噩梦。如果手动处理用于报告和分析的数据,发现错误几乎是不可能的。重新开始可能更容易!
简而言之就是所谓的“Excel 地狱”😃

幸运的是,我们的客户,一家重型建筑机械和设备的主要经销商,在为时已晚之前看到了这些趋势,并要求我们提供帮助。任务是让他们的员工摆脱手动数据准备,并为他们提供一个选项,用于对来自所有系统的数据进行多功能分析,而不需要额外的开发人员。如果可能的话,我们还将为公司的客户提供一种访问数据的方法。时间刚刚好!
即使是 Excel 也比没有好
似乎我们必须自动化部分数据准备过程,并从头开始创建其余部分。这需要对现状进行分析。
首先,我们采访了所有报告系统的用户,并收到了报告的样本。令我们惊讶的是,我们发现员工使用工作簿的一部分作为在 Power BI 中创建的报告的来源。他们只是将手动准备的工作簿作为一个源,并将数据可视化!
这无疑是次优的,因为在大多数情况下,有可能直接连接到业务系统数据,并在报告编辑器中设置限制、添加计算和链接。考虑到 Power BI 对于操作来说是多么简单,因此责怪分析师是没有用的。

在收到当前报告的概述后,我们将其与来源进行了比较。原来,这些不仅仅是应用程序,还有其他 Excel 文件——包含来自外部云 SaaS 的规划数据和报告的文件。甚至还使用了从 GPS 跟踪提供商那里导出的 PDF 文件,其中包含他们自己车队的活动报告。出乎意料的是,我们知道一种为这种系统安排数据收集过程的方法。
因此,我们有一个相当大的 Excel 文件,其中指定了所有源及其属性(访问方法、粒度、刷新率、更改历史等。).这些实际上是元数据,为此开发了一种独特的软件——数据目录。然而,要在业务中灌输数据文化,我们必须从小处着手。Excel 文件是未来目录的第一步。

体系结构
因此,所有这些数据都必须定期从其来源中提取出来并保持更新。数据还必须在最详细的级别上可供分析师使用,他们永远不会提前知道他们想要创建什么样的报告,或者他们想要分析什么样的新指标和业务属性。
根据我们到目前为止所学到的一切,我们故意拒绝了开发企业数据仓库的经典方法。我们选择不创建包含事实、测量和预定义公式的统一数据模型来计算显示。在这种情况下,最合适的架构类型是“数据湖”。
当然,数据湖架构也有其优点和缺点,但是我们将在另一个时间讨论这种方法的适用性。可以说,数据以最详细和“原始”的形式存储,用户可以访问它们或预先安排的数据集市。没有它们也是可能的,尽管有时在复杂计算的情况下使用它们来提高报告的响应速度是值得的。

数据湖架构可以在各种软件的帮助下实现,比如使用 Apache 组件的开源栈。然而,我们的客户已经订阅了微软 Azure,并且部分业务应用程序通过云服务使用,如 MS Dynamix 365。应该注意的是,在过去的几年里,Azure 女士经历了一些重大的改进,现在包括了开发企业分析和大数据系统的所有必要工具。所以,我们决定和 Azure 女士一起建立这个系统。

我们使用无服务器 SQL 池来存储详细数据,专用 SQL 池用于数据集市,Synapse 管道被用作提取、转换和加载数据(ETL)的工具。Power BI 可以在数据导入模式和实时查询模式下连接到数据存储层,这意味着用户在进一步的数据处理中不会受到限制,例如,通过使用 DAX。
一点一点地吃蛋糕
没有人喜欢撰写冗长的技术需求。当然,每个人都想要快速的结果!
因此,在与我们的客户协商之后,我们决定不走冗长的批准和任务评审的道路,而是使用敏捷开发风格在短时间内实现项目。
有几种方法可以在短时间内完成构建 BI 系统的项目。您可以从处理所有数据源开始,并在每次迭代中添加一个新的处理阶段。例如,一个 sprint 用于初始加载到操作数据存储中,一个 sprint 用于加载到数据仓库中,并且可以分配更多的 sprint 来准备数据集市中的报告。

在我们的例子中,我们使用了数据湖架构。实际上只有两层,但是有几十个数据源。这意味着将工作分成 sprint 是合乎逻辑的,将几个源放入每个 sprint 中,并为它们执行整个开发过程——从组装到现成的数据集市。
此外,这对于用户来说非常方便,因为通常情况下,2-3 个源包含一个报告的数据。因此,每次迭代的结果为分析师提供了数据,他们可以用这些数据将一个或多个现有的报告转移到数据湖中。这允许逐渐转变到使用数据仓库,并避免由于在短时间内验证大量数据而分散他们的工作注意力!

最后,每次迭代包括:
- 开发用于数据提取的适配器
- 初始装载
- 配置数据更新流程
- 计算数据集市
- 由用户(分析师)验证数据集市中的数据
- 将报告从 Excel 切换到 Azure Synapse
我们总共连接了 37 个数据源系统!在这里一一列举是没有用的,因为每个公司都有自己独特的系统。只要说有 Excel 图表、关系数据库、API 外部服务等等就够了。
从错误中学习
自然,没有一个敏捷开发过程没有错误、失误和稳定性。我们选择了深度分析而不是直接结果。
很明显,将数据湖中的所有数据放入专用的 SQL 池是一件成本高昂的事情。此外,池本身在一天中所做的一切就是等待新的连接并响应偶尔的用户查询。
我们建议将 Power BI 报告转换为数据导入模式,而不是直接查询模式,以节省我们客户的资金。然后,预先准备好的数据将存储在 Power BI 数据集中,不会消耗任何存储资源,并且无论池是否可用,这些数据都是可用的。

除此之外,我们还配置了更新所有报告数据集的设置,包括数据刷新(在 Synapse 管道的帮助下)。剩下的工作就是按照计划设置专用 SQL 服务的激活和停用,以更新数据和数据集。服务成本几乎降低了四倍!
第二个错误是使用外部 SaaS 来提取公司自己车队的移动数据。通常情况下,该服务通过 JSON 中的 API 提供数据。只是这个 JSON 的形式不完全规范,并且不包含逻辑迭代数据处理所必需的父容器。在微不足道的量,这不是一个问题。但是当我们的客户要求为每次旅行加载详细的 GPS 坐标时,我们明白 Azure Pipelines 的标准工具不能用于处理格式不正确的 JSON。变通的解决方案是一个很好的旧 SQL 和 JSON 文本的批量加载。我们花了几个小时集思广益,编写了一个非常复杂的脚本,快速分析来自服务的文本响应,并将其转换为无服务器数据存储中的文件。没有人保证这将是一个无代码开发!😃

我们遇到的另一个问题是另一个外部服务。由于某种内部原因,它已经撤销了所有的授权密钥,当然,我们的 ETL 过程开始接收错误消息(HTTP 403-Forbidden ),而不是通常的数据。这没什么大不了的,但是考虑到一些 API 的不稳定性,我们遵循了常见的配置实践——每隔一分钟重复几次数据请求。重试次数设置为 30 次。
不幸的是,就在圣诞节假期之前,这些密钥被撤销了,所以在接下来的几天里,这个错误又出现了很多次。令我们非常惊讶的是,我们发现根据 MS Azure 的费率,在下一次尝试接收数据之前的超时也是要收费的。当然,应该由微软来定义哪些功能需要付费以及为什么要付费,但是从客户的角度来看(我们同意这一点),为空闲时间付费是没有意义的。我们收到了一个新的授权密钥,但紧接着,当数据请求尝试失败三次时,我们为开发团队和客户的网络管理员设置了一个通知程序。安全总比后悔好!
结论
让我们从技术实现细节回到项目目标和它的预期任务。
这个系统最明显的好处是从手工数据处理中节省了人工月甚至人工年的劳动成本。当然,对企业来说,这可能会花费一大笔钱,但主要的好处是别的东西。
从业主或上级经理提出数据分析请求到分析员提交报告之间的时间大大减少。现在,几乎可以在一个工作日内满足任何分析需求!很难低估这种加速对公司决策的好处。

当然,当数据湖中没有足够的数据来响应分析请求或准备报告时,也会有例外。幸运的是,Power BI 提供了一个机会,只需点击几下鼠标就可以将新的数据源直接连接到报告编辑器。然后,在确定其价值之后,将这个数据源连接到数据湖比传统的 BI 系统要便宜得多,也快得多。
因此,数据湖分析系统已经成为数字化的一个新的步骤。现在,分析师通过在工作中更接近自助服务的原则来履行职责,上层管理人员总是能够获得最新信息,以便快速准确地做出决策!
除非另有说明,所有图片均为作者所有。
数据湖与数据仓库
原文:https://towardsdatascience.com/data-lake-vs-data-warehouse-2e3df551b800
了解数据存储架构中的两种不同方法

数据湖和数据仓库被广泛用于存储大量数据。然而,它们不是可互换的术语。您会惊讶地发现,这两种方法是相辅相成的。下面分段让我们深入了解这两个术语。
数据湖简介

众所周知,数据湖是一个集中的存储库。它使你能够积累所有已知的和未成形的数据。最好的事情之一是,它可以在任何规模下做到这一点。它允许您存储非结构化的数据,并构思各种类型的分析。从可视化和仪表板到大型游行,机器学习引导你做出更好的决定。
数据湖的结构化程度较低,更像是一个先转储所有数据,然后再发现用途的湖
为什么企业需要数据湖?
成功从数据中获取商业价值的组织和公司,会积极地超越他们的同行。在各种调查中,人们注意到许多实施了数据湖的组织比熟悉的公司高出 10%(大约。)的真实收入增加。这些公司设法进行独特的分析,如来自点击流、社交媒体、日志文件和存放在数据湖中的互联网对应设备的数据。
最终,它通过保留和吸引客户、提高生产力和做出明智的决策,帮助他们认识到并抓住机会,实现业务的快速增长。
数据湖在企业中有什么价值?
在最短的时间内存储来自大量来源的大量数据的能力,以及让用户能够以各种方式联合和检查数据的能力,通常有助于更好、更快地做出决策。以下是一些实例,将使你清楚:
数据湖能够通过 CRM 平台组合所有的客户数据。社交媒体分析恰好就是如此。然后,它创建一个由购买历史和“发生”门票组成的营销平台,以便委托企业认可最有价值和最有前途的客户群、客户流失背后的原因以及将提高客户忠诚度的奖励和其他促销活动。
数据湖使你的 R&D 小队能够检查他们的论文,提炼推论并相应地分析结果。它可以包括在你的产品创造中选择合适的材料,使性能更快,基因组研究最终导致药物的改进。
在云端定位数据湖
从本质上讲,数据湖是一种示例性的工作负载,恰好部署在云上,因为云引入了实施、可靠性、可伸缩性、可用性以及一组独特的分类分析引擎。
此外,客户认为云是数据湖的优势的主要原因。这是由于更好的安全性、更快的可用性、部署、经常的功能更新、地理覆盖范围、弹性以及与现有利用率相关的成本。
数据湖的一个很好的例子是谷歌云存储或亚马逊 S3
数据仓库简介

数据仓库是一个中央信息库,可以对其进行分析以做出明智的决策。通常,数据从事务系统和其他来源流入数据仓库。
数据仓库更加结构化,更像一个水箱,你首先定义用途,然后放入数据
数据仓库是如何工作的?
您可能会在一个数据仓库中发现多个数据库。每个数据库都有自己的数据,这些数据被组织成表和列。和每一列,数据的描述能够被相应地定义。另一方面,表可以组织在模式中,这就是所谓的文件夹。最后,当数据被接收时,它被简单地存储在不同的表中。
数据仓库为什么重要?
当涉及到像数据湖这样的明智决策时,数据仓库具有巨大的价值。不仅如此,它还设法整合大量来源的数据。除此之外,历史数据分析、数据质量、准确性和一致性是数据仓库附带的一些元素。此外,将分析处理从跨国数据库中分离出来最终会增强两个给定系统的性能
数据仓库的一个很好的例子是谷歌的大查询或者亚马逊的红移
数据湖和数据仓库有两种不同的方法——下面是方法

奥利弗·鲁斯在 Unsplash 上的照片
根据不同的需求,组织需要有一个数据仓库和数据湖,因为它们提供了不同的需求和用例。
数据仓库与数据湖截然不同。数据仓库是为了分析来自事务系统和企业应用程序线的关系数据而优化的数据库。
另一方面,数据湖有不同的用途,因为它存储来自一系列企业应用程序的关系数据。不同之处在于,它还存储来自移动应用程序、社交媒体和物联网设备的数据。也就是说,它存储了所有给定的数据,没有任何精心的设计。
此外,数据仓库主要用于批量报告、可视化和结构化数据的 BI 分析。而数据湖可以潜在地用于解决机器学习、数据发现、预测分析和用大量数据进行剖析的问题
拥有数据仓库的组织碰巧看到了数据湖的好处。为了最大化他们的利益,他们正在发展他们的仓库,使其也包括数据湖。它不仅保证了多样化的查询能力,还保证了发现新信息模型的高级能力
数据湖和数据仓库是如何协同工作的?

由 Pawan Kawan 在 Unsplash 上拍摄的照片
这些方法是相辅相成的。数据仓库通过显著增加的并发性来管理结构化和打包数据的质量、一致性和性能。另一方面,data lake 确保专注于原始原始数据承诺和永久存储。它以合理的成本做到了这一点,同时提供了新的分析灵活性。
这两种不同但互补的解决方案被推荐为任何
如果你对更多细节感兴趣,请查看我的 youtube 视频
数据湖 vs 数据仓库 Anuj Syal
最初发表于T5【https://anujsyal.com】。
数据湖与数据仓库
原文:https://towardsdatascience.com/data-lakes-vs-data-warehouses-47444228604c
数据湖和仓库有什么区别?

弗兰克·麦肯纳在 Unsplash 上拍摄的照片
介绍
当涉及到永久存储数据时,数据湖和数据仓库可能是使用最广泛的两种存储类型。在本文中,我们将探讨这两者,展示它们的主要区别,并讨论它们在组织环境中的用法。
简而言之,数据仓库和数据湖
一个数据仓库被用作大量结构化数据的中央存储,这些数据可能来自不同的来源。这种商店对公司非常重要,因为它们可以用来提供整个组织的洞察力,以支持决策。
另一方面,数据湖是一种灵活的存储,用于存储非结构化、半结构化或结构化的原始数据。存储的数据未经处理,通常在检索时应用该结构。但是请注意,数据湖不是数据仓库的替代品。
主要差异
在选择如何在组织中存储数据以及是否需要将来自特定来源的数据存储到数据湖或数据仓库之前,考虑所有相关因素非常重要。通常,这些考虑归结为本节中讨论的 4 个主题。
数据类型和处理
正如我们已经讨论过的,数据湖可以用来存储任何形式的数据,包括非结构化和半结构化数据,而数据仓库只能存储结构化数据。
由于数据仓库只能处理结构化数据,这意味着它们还需要提取-转换-加载(ETL)过程,在将原始数据存储到仓库之前,将它们转换为目标结构(写时模式)。换句话说,数据仓库存储经过预处理的历史数据,以适应关系模式。
数据湖更加灵活,因为它们能够存储原始数据,包括提取数据时要应用的元数据或模式。这是数据仓库和数据湖之间最根本的区别。
目标用户群
不同的用户可能需要访问不同的存储类型。通常,业务或数据分析师需要提取用于报告目的的见解,因此数据仓库更适合他们。
另一方面,数据科学家可能需要访问非结构化数据来检测模式或构建深度学习模型,这意味着数据湖是一个完美的选择。
生态系统
在选择数据仓库或湖泊时,另一个需要考虑的重要因素是您组织的现有技术生态系统。由于开源软件 Hadoop 的出现,数据湖变得非常流行。
这意味着,如果您的组织不喜欢开源软件,那么将数据转移到数据湖将是一个挑战。
预算
数据管理计划总是考虑我们打算使用或构建的技术和架构的成本。数据湖的成本要低得多,因为数据是以原始格式存储的,而数据仓库则需要处理数据并准备好供分析,因此会占用更多的存储空间。
选择哪一个
数据仓库和湖泊都被组织用作集中式数据存储,使不同的用户和组织单位能够访问和使用数据来提取见解并执行任何类型的分析。通常一个组织需要一个数据湖和一个数据仓库来支持所有需要的用例和最终用户。
数据湖能够容纳任何形式的所有数据;从结构化到非结构化。此外,在存储数据之前,它不需要任何类型的预处理,因为一旦将数据存储在数据湖中,就可能发生这种情况。数据湖主要对数据科学家和工程师有用,他们需要访问甚至是非结构化的数据,这将帮助他们建立人工智能或机器学习模型。与数据仓库相比,数据湖也更具成本效益,因为它们不要求数据具有任何特定的格式,比如模式。
现在,数据仓库只能存储结构化数据,这些数据可以由特定的组织单位进行分析,以揭示业务洞察力。因此,ETL 过程通常需要围绕数据仓库来构建。ETL 功能使数据能够以预期的格式存储、提取或转换,以便用户可以对其执行特定的任务。因此,数据仓库对于业务或运营分析师来说是非常强大的,他们需要使用模式来访问关系数据,这将使他们能够创建报告并通过发现洞察力来支持决策制定。
最后一句话
在本文中,我们讨论了数据湖和数据仓库之间的主要区别。请注意,这不是苹果之间的比较。两者都支持不同的用例,服务于不同的用户,通常组织需要两者来有效地运行。
数据湖是更加灵活的无模式存储,能够存储非结构化、半结构化或结构化数据。它们通常对更多的技术用户有用,例如数据科学家或工程师。另一方面,数据仓库只能接受关系数据,而关系数据反过来对需要访问现成数据以供分析的非技术人员更有用。
成为会员 阅读介质上的每一个故事。你的会员费直接支持我和你看的其他作家。你也可以在媒体上看到所有的故事。
https://gmyrianthous.medium.com/membership
你可能也会喜欢
https://pub.towardsai.net/object-storage-521d5454d2d https://pub.towardsai.net/data-versioning-for-efficient-workflows-with-mlflow-and-lakefs-892df1f8e7d8 </16-must-know-bash-commands-for-data-scientists-d8263e990e0e>
896

被折叠的 条评论
为什么被折叠?



