数据科学有望通过机器学习的引人注目的能力在所有行业产生巨大的商业价值。然而, Gartner最近的一份报告显示,尽管有足够的数据和意图,但大多数数据科学项目未能在实验之后取得进展。
为了释放数据科学的全部潜力,机器学习模型需要作为可扩展的端到端系统部署在现实世界中,并得到自动管理。将数据科学影响最大化的愿望导致了机器学习运营(MLOps)的兴起,这是一套用于构建、维护和监控机器学习生产系统的最佳实践。
阅读更多
作为MLOps的一部分,数据科学管道构成了有效部署和使用机器学习模型的基础。本文探讨了数据科学管道(专注于机器学习)背后的概念,以及如何利用开源框架Kedro来创建一个管道。
什么是数据科学管道?
顾名思义,数据科学管道涉及各种组件的无缝连接,以促进数据按预期顺利流动。
如果我们在网上搜索一下数据科学管道,我们会看到一系列令人眼花缭乱的管道设计。好消息是,我们可以把这些管道归结为这六个核心要素。
- 1.数据的检索和摄取
- 2数据准备
- 3模型训练
- 4模型评估和调整
- 5模型部署
- 6监控
数据科学管道 | 来源。作者
上图说明了这六个部分是如何连接起来形成一个管道的,在这个管道中,机器学习模型已经准备好在生产环境中提供最佳结果。
也请检查
让我们仔细看看这些组件中的每一个。
(1) 数据检索和摄取
- 数据是所有数据科学项目的命脉,所以第一步是确定来自各种数据源的相关原始数据。
- 这一步比听起来更有挑战性,因为数据往往以不同的格式存储在不同的筒仓中(例如,第三方来源,内部数据库)。
- 一旦所需的数据集被正确识别,它们将被提取并整合到一个中心位置,以便进行下游处理。
(2) 数据准备
- 从数据中获得的洞察力的质量取决于数据质量本身。因此,数据准备占用了最多的时间和精力,这并不奇怪。
- 用于数据准备的技术是基于手头的任务(如分类、回归等),包括数据清洗、数据转换、特征选择和特征工程等步骤。
(3) 模型训练
现在我们已经准备好在准备好的数据的训练数据集上运行机器学习。
- 模型训练是模型在数据中徘徊并学习基本模式。训练后的模型将被表示为一个统计函数,从数据中捕捉模式信息。
- 实施机器学习模型的选择取决于实际任务、数据的性质和业务要求。
(4) 模型评估和调整
- 一旦模型训练完成,评估其性能是至关重要的。评估是通过让模型在一个它以前没有见过的数据集上运行预测的任务来完成的。这可以作为它在真实世界中的表现的一个代表。
- 评估指标有助于指导优化模型性能所需的变化(例如,选择不同的模型,调整超参数配置,等等)。
- 机器学习开发周期是高度迭代的,因为有很多方法可以根据指标和误差分析来调整模型。
使用Neptune.ai的模型管理系统的例子 | 来源
(5) 部署
- 一旦我们确信我们的模型可以提供出色的预测,我们就会通过将模型部署到生产环境中,使其暴露在实际行动中。
- 模型部署(又称服务)是将模型整合到生产环境中的关键步骤,在那里它吸收实际数据并为数据驱动的商业决策生成输出。
您可能感兴趣
(6) 监测
虽然看起来我们已经达到了成功部署模型的终点线,但我们离完成任务还有一段距离。
- 为了维持一个强大的、持续运行的数据科学管道,最重要的是我们要监测它在部署后的表现如何。
- 除了模型性能和数据质量,监测指标还可以包括操作方面,如资源利用率和模型延迟。
- 在一个成熟的MLOps设置中,我们可以根据预测性能或新数据的可用性来触发新的模型训练迭代。
Arize中的漂移监控实例 |来源
需要强调的一点是,数据科学管道是动态的,需要迭代改进以确保持续的稳健性和准确性。
在前面的六个核心管道组件的图中,我们看到了几个连接到管道先前元素的虚线箭头。这些箭头反映了当我们根据监测指标的变化更新组件时需要进行的各种迭代。
例如,假设输入的客户数据的年龄分布在最近几周越来越偏斜。在这种情况下,团队应该考虑审查数据准备步骤或在新数据上重新训练模型。
数据科学管道的重要性
首先,领会数据科学管道的重要性和好处至关重要,因为它们需要努力构建。
这些管道的目标是创建一个系统的工作流程,将原始数据以自动化和可重复的方式转化为可操作的业务洞察力。
它的重要性来自于将数据科学开发周期中的手动步骤自动化,这些步骤是重复的、劳动密集型的、容易出错的,而且很耗时。
这种简化的数据移动使数据科学家能够专注于他们最擅长的事情,即改善数据和模型,而不必担心数据流、算法更新和模型部署等工程方面的问题。
以下是数据科学管道所能带来的商业利益。
- 加快数据驱动的决策,以应对不断变化的业务需求和客户偏好。
- 通过将数据从孤岛整合到一个单一的目的地,释放新的机会和全面的洞察力。
- 确保数据洞察力的一致性、可重复性和质量。
- 简化了将新的业务想法和要求引入机器学习系统的过程。
数据科学管道的使用案例
数据科学管道是不分行业的,所以我们可以期待它们在不同领域潜在地带来巨大的好处。
以下是一些在行业中实施数据科学管道的真实案例。
- 软件行业-- Dropbox建立了一个现代光学字符识别管道,以创建一个移动文档扫描功能。

使用计算机视觉和深度学习创建一个现代OCR管道。
-
运输业-- Lyft利用内部管道框架来加速机器学习和数据协调,以实现定价、位置和到达时间估计等核心乘车功能。
-
保险业-- 美国保险协会利用机器学习管道,通过创建一个服务来改善汽车索赔处理,该服务可以映射出应该维修或更换的受损车辆部件的照片。
-
医疗行业--英国 国家卫生系统(NHS)开发并部署了一套机器学习管道,作为COVID-19国家医院容量规划系统的一部分。
什么是Kedro?
在看到数据科学管道能够带来的巨大价值之后,让我们来探讨如何实施它们,并将这些理论上的好处变成系统的现实。
对管道重要性的认识促使人们开发了一些框架来有效地构建和管理管道。Kedro就是这样一个框架,它是本文的重点。
Kedro 是一个开源的Python框架,用于创建可重复、可维护和模块化的 数据科学代码。这个框架有助于加速数据管道化,增强数据科学的原型设计,并促进管道的可重复性。
Kedro将软件工程概念用于开发生产就绪的机器学习代码,以减少成功部署模型所需的时间和精力。
其影响是通过消除低质量代码的重新设计工作和项目模板的标准化 来实现无缝协作。
让我们来看看Kedro内部的应用概念。
-
可重复性。有能力在不同的管道运行和环境中准确和一致地重新创建工作流程的步骤。
-
模块化。将大块的代码分解成较小的、独立的、可理解的单元,便于测试和修改。
-
可维护性。使用标准的代码模板,使团队成员能够随时理解和维护任何项目的设置,从而促进合作开发的标准化方法。
-
版本管理。精确跟踪每个项目的每个管道运行中使用的数据、配置和机器学习模型。
-
文档。清晰和结构化的代码信息,便于阅读和理解。
-
无缝包装。允许数据科学项目被记录下来并有效地运送到生产中(使用Airflow或Docker等工具)。
为什么是Kedro?
将数据科学项目从试验性开发推向生产的道路充满了挑战。
其中一些重大的困难包括。
- 需要为生产环境重写的代码,导致项目的重大延误。
- 项目结构可能杂乱无章且不连贯,对合作构成挑战。
- 数据流难以追踪。
- 函数过于冗长,难以测试或重复使用。
- 功能之间的关系难以理解。
QuantumBlack团队开发了Kedro来解决上述挑战。它诞生于一个集体的信念,即数据科学代码应该从一开始就为生产做好准备,因为它是成功的管道部署的一个规范的起点。
Kedro在现实世界中的应用
与所有的项目一样,证据就在布丁中。以下是Kedro在现实世界中成功应用的一些例子。
-
NASA利用Kedro作为他们基于云的预测引擎的一部分,预测在空域内受阻和无阻的滑行时间。
-
JungleScout在Kedro的帮助下,将其销售估算模型的训练和审查速度提高了18倍。
-
Telkomsel使用Kedro在其生产环境中运行数百个特征工程任务,并为数十个机器学习模型提供服务。
-
ElementAI通过在他们的调度软件中利用Kedro来测量历史性能和创建重放场景,提高了他们的工作效率。
构建一个用于异常检测的数据科学管道
现在我们了解了Kedro,让我们进入激动人心的部分,我们通过一个实际的实践案例来工作。
该项目用例围绕着金融欺诈检测。 我们将建立一个异常 检测管道,使用隔离森林作为我们的机器学习模型来识别信用卡交易中的异常情况。
信用卡交易数据是由Worldline和 机器学习集团合作获得的。它是对现实世界信用卡交易的真实模拟,并被设计为包括复杂的欺诈检测问题。
下面的可视化图显示了我们最终的异常检测管道的样子,并作为我们在以下章节中建立的蓝图。
异常检测管道 | 来源。作者
请随时查看这个项目的 GitHub repo来跟上这个演练的步伐。
参见
使用Kedro的管线
步骤1:安装Kedro和Kedro-Viz
建议创建一个虚拟环境,这样每个项目都有其独立的环境和相关的依赖性。
为了与Kedro一起工作,Kedro的官方文档建议用户 下载并安装Anaconda。
因为我的Python版本大于3.10,Anaconda使得在一个与Kedro要求兼容的版本上(即写作时的Python 3.6 - 3.8)创建一个环境(使用conda 而不是venv)变得很容易。
特别是,这是生成我们Kedro环境的命令(在Anaconda Powershell Prompt中)。
conda create --name kedro-env python=
一旦虚拟环境建立起来,并且用conda activate kedro-env激活,我们就可以用pip来安装Kedro和Kedro-Viz插件。
pip install kedro kedro-viz
我们可以通过改变目录到我们的项目文件夹,然后输入kedro info来检查Kedro是否被正确安装。如果安装正确,我们应该看到以下输出。
在这一点上,我们可以安装我们项目所需的其他软件包。
pip install scikit-learn matplotlib
如果我们想把这个项目初始化为一个Git仓库,我们可以这样做。
git init
第2步:项目设置
Kedro的主要特点之一是创建标准的、可修改的、易于使用的项目模板。我们可以通过以下方式轻松地初始化一个新的Kedro项目。
kedro new
在向一系列的提示提供相关的名称后,我们最终将得到一个高度组织化的项目目录,我们可以在此基础上建立。
项目结构可以分为六个 主要文件夹。
-
/conf**。**包含指定重要细节的配置文件,如数据源(即数据目录)、模型参数、凭证和日志信息。
-
/data**。**包含输入、中间和输出数据。它被组织成一个八层的数据工程惯例,以清楚地分类和组织数据的处理方式。
-
/docs**。**包含与项目文件有关的文件。
-
/logs**。**包含在进行管道运行时产生的日志文件。
-
/notebooks**。** 包含项目中使用的Jupyter笔记本,例如,用于实验或初始探索性数据分析。
-
/src**。** 包含项目的源代码,如用于管道步骤、数据处理和模型训练的Python脚本。
第3步:数据设置
数据先于科学,所以让我们从数据设置开始。在这个项目中,原始数据(70个每日信用卡交易的CSV文件)首先被放置在 data/01_raw文件夹中。
根据我们前面描述的项目蓝图,我们已经知道哪些数据将沿着管道产生和利用了。因此,我们可以将这些信息转换为 数据目录,这是该项目可用的数据源的注册表。
数据目录提供了一种一致的方式来定义如何存储和解析数据,使得数据集可以很容易地从管道的任何地方加载和保存。
我们可以在*.yml文件中找到数据目录,即 conf/base/catalog.yml.*
上面的图片是数据目录中定义的数据源的一个片段。例如,我们首先期望我们的原始CSV文件被读取并合并成一个叫做merged_data.csv的中间CSV数据集。
Kedro带有许多 内置的数据连接器(例如,pandas.CSVDataSet,matplotlib.MatplotlibWriter),以适应不同的数据类型。
第4步:创建管线
一旦我们的数据目录被适当地定义,我们就可以建立我们的管道。首先,有两个关键概念需要理解。 节点 和 管线.
-
节点是管线的构建块。它们本质上是Python函数,表示要进行的数据转换,例如,数据预处理、建模。
-
管道 是节点的序列,它们被连接起来以提供一个工作流程。它组织了节点的依赖关系和执行顺序,并连接输入和输出,同时保持代码的模块化。
异常检测的完整管道可以分为三个较小的模块化管道, 我们最终将把它们连接起来。
-
1数据工程管线
-
2数据科学管线
-
3模型评估管道
我们可以根据我们指定的名称,用以下命令将这些模块化管道实例化。
kedro pipeline create data_engineering
kedro pipeline create data_science
kedro pipeline create model_evaluation
虽然管道在这个阶段是空的,但它们的结构已经很好地生成在 /src文件夹里。
每个管道文件夹都有相同的文件,包括nodes.py (节点的代码) 和pipeline.py (管道的代码)。
第5步:建立一个数据工程管道
让我们先来看看数据工程管道,在这里我们对数据进行处理,使其适合下游的机器学习。更具体地说,有三个预处理任务要执行。
- 1将原始数据集合并成一个中间的合并数据集。
- 2处理合并后的数据集,只保留预测列,并创建一个新的日期列用于后续的训练-测试分割。
- 3按时间顺序进行80:20的训练-测试分割,删除不必要的列。
我们首先将这些任务作为nodes.py 中三个独立的 节点函数 进行脚本编写,如下图所示。
然后我们将这些节点函数导入pipeline.py,以正确的顺序将它们连接起来。
请注意,在上面的每个节点包装中 node(...) 中,我们指定了节点名称、函数(从node.py导入)以及数据目录中定义的输入和输出数据集。
节点包装器中的参数应该与数据目录中的数据集名称和节点函数的参数相匹配。
对于节点node_process_data,预测器列的列表被存储在参数文件中,该文件在 conf/base/parameters.yml.
我们的数据工程管道设置已经完成,但还没有 准备好,因为它还没有注册。我们将在后面的步骤8中探讨这个问题,所以让我们继续构建剩下的两个管道。
第6步:建立一个数据科学管道
我们的数据科学管道的异常检测模型是一个 隔离森林。隔离森林是一种无监督的算法,使用决策树构建。
它通过随机选择一个特征,然后在其最大值和最小值之间选择一个分割值来 "隔离 "观察。由于异常现象很少,而且不同,所以预计它们比正常的观察结果更容易被隔离。
我们将使用scikit-learn 隔离森林的实现来进行建模。有两个任务(和节点)需要创建--**(i)模型训练和(ii)**模型预测(又称推理)。
隔离森林模型的 污染值被设定为0.009,反映了在原始数据集中观察到的欺诈案件的比例(即0.9%)。
像以前一样,我们在pipeline.py的一个管道函数中把节点连接在一起。
正如前面在数据目录中看到的,我们将把我们训练好的隔离森林模型保存为一个pickle 文件,在 data/06_models.
第7步:建立一个模型评估管道
虽然隔离森林是一个无监督的模型,但如果我们有地面真实标签,我们仍然可以评估其性能。
在原始数据集中,有一个TX_FRAUD变量,作为欺诈性交易的一个指标。
有了地面真实标签和来自模型预测的异常分数,我们可以很容易地得到评估指标,这些指标将以 AUC和AUCPR图的形式呈现。
下面是运行模型评估节点的pipeline.py脚本。
from
这个模型评估步骤与步骤6中的数据科学管道是分开的。这种分离是因为我们使用的是一种无监督的 异常检测算法,我们并不期望总是有地面真实数据。
第8步:在管线注册表中注册所有管线
在这一点上,管道创建的所有艰苦工作都已经完成了。我们现在需要在管道注册表中导入并注册所有三个模块化管道,以此作为结束。
from
返回语句中的__default__行表示运行模块化管道的默认顺序,在我们的例子中是所有三个模块化管道 - data_engineering, data_science, and model_evaluation。
Kedro的美妙之处在于它的模块化结构给了我们构建管道的灵活性。例如,如果我们没有地面真相标签,我们可以从默认的管道运行中排除model_evaluation。
第9步:可视化管线
在运行管道之前,检查一下我们到目前为止所建立的东西是个好主意。奇妙的Kedro-Viz插件使我们能够很容易地将整个管道结构和依赖关系可视化。
鉴于它的易用性、清晰度和美学显示,许多QuantumBlack客户对这一功能 表示满意,这并不奇怪。
我们可以通过这个命令轻松地生成可视化的内容。
kedro viz
在我们的浏览器中会打开一个新的标签,迎接我们的是一个漂亮的可视化工具来探索我们的管道结构。这个可视化也可以很容易地导出为一个.png 的图像文件。
第十步。运行管道
我们终于可以运行我们的管道了。下面的命令将执行我们之前注册的默认管道。
kedro run
运行后,管道将用生成的数据填充各个目录,包括异常预测和模型评估图。
我们还可以运行我们在管道注册表中注册的特定管道。例如,如果我们只想运行数据工程模块管道(de),我们可以在命令中添加*-管道*。
kedro run --pipeline de
第11步:评估管线输出
最后,是时候评估我们的异常检测管道的输出了。特别是,让我们回顾一下matplotlib评估图(保存在 数据/08_报告)来看看这个模型的性能如何。
评估管线输出 | 来源:北京大学作者
从图中,我们可以看到隔离森林模型的AUC是0.8486,这是一个相当不错的机器学习模型的基础性能。
附加功能
恭喜你走到这一步,并成功地用Kedro创建了一个异常检测管道
除了前面详述的基本功能外,Kedro还具有管理数据科学项目的其他有用功能。这里有几个值得一提的功能。
(1) 实验跟踪
Kedro可以很容易地设置实验跟踪,并从每个管道运行中访问记录的指标。除了其 内部的实验跟踪功能,Kedro还能与其他MLOps服务很好地整合。
例如,图中的 Kedro-Neptune插件让用户享受到一个组织良好的管道和一个为元数据管理而建立的强大的Neptune用户界面的好处。
Neptune UI中自定义仪表盘中的Kedro管道元数据||||。 来源
(2) 管线切片
Kedro的管道切片 功能使我们能够按照我们的愿望执行管道的特定部分。例如,我们可以定义我们希望运行的管道切片中的开始和结束节点。
kedro run --
(3) 项目文件、包装和部署
我们可以通过在项目的根目录下运行这个命令来生成项目特定的文档(建立在Sphinx框架上)。
kedro build-docs
接下来,为了启动将项目 打包成Python库,我们运行以下命令。
kedro package
最后,我们可以通过 Docker和 Airflow等第一方插件 部署这些打包的数据科学管道。
(4) 通过Jupyter笔记本访问Kedro
我们还可以使用Jupyter笔记本来探索项目数据,或者实验代码来为管道创建新的节点。这些任务可以通过启动一个 Kedro Jupyter会话来完成。
kedro jupyter notebook
结论
以下是我们在这篇文章中所经历的。
- 数据科学管道的概念、好处和用例是什么。
- 什么是Kedro,以及如何使用它来构建和管理数据科学管道。
- 如何使用隔离森林模型和Kedro框架为信用卡交易数据创建一个异常检测管道。
还有许多其他有趣的功能和教程,所以请查看 Kedro的官方文档以进一步探索。此外,请随时探索包含本项目所有代码的GitHub repo。
参考资料
数据科学家、技术作家、开发人员、药剂师。我是一个狂热的学习者和有动力的行动者,喜欢用技术和数据寻找并解决有意义的问题。
阅读下一页
最好的MLOps工具以及如何评估它们
12分钟阅读 | Jakub Czakon | 2021年8月25日更新
在我们的一篇文章--《机器学习团队实际使用的最佳工具、库、框架和方法论--我们从41家ML初创公司学到的东西》中,Acerta公司的CTO Jean-Christophe Petkovich解释了他们的ML团队如何处理MLOps。
据他说,一个完整的MLOps系统有几个要素。
- 你需要能够建立模型工件,包含预处理数据和生成结果所需的所有信息。
- 一旦你能够建立模型工件,你必须能够跟踪建立它们的代码,以及它们被训练和测试的数据。
- 你需要跟踪所有这三样东西,模型、它们的代码和它们的数据,是如何关联的。
- 一旦你能跟踪所有这些东西,你也可以将它们标记为准备就绪的阶段,和生产,并通过CI/CD过程运行它们。
- 最后,为了在该过程结束时实际部署它们,你需要一些方法来启动基于该模型工件的服务。
这是对如何在公司成功实施MLOps的一个伟大的高层次总结。 但是,理解高层次的需求只是难题的一部分。另一个部分是采用或创建适当的工具来完成工作。
这就是为什么我们编制了一份最佳MLOps工具的清单。我们把它们分为六个类别,以便你可以为你的团队和你的企业选择合适的工具。让我们深入了解一下