DataRobot 敏捷机器学习(一)
DataRobot 使数据科学团队能够更加高效和富有生产力。本书帮助您利用 DataRobot 的企业平台解决机器学习ML)挑战,让您能够从数据中提取商业价值,并为您的组织快速产生商业影响。您将从学习如何使用 DataRobot 的功能来自动执行数据准备和清洗任务开始。本书涵盖了构建和部署机器学习模型的最佳实践,以及将它们扩展以处理复杂业务问题时所面临的挑战。接下来,您将执行探索性数据分析EDA)
原文:
annas-archive.org/md5/8aa4ac5f12c22ddd6b021468c51f10f7译者:飞龙
前言
DataRobot 使数据科学团队能够更加高效和富有生产力。本书帮助您利用 DataRobot 的企业平台解决机器学习(ML)挑战,让您能够从数据中提取商业价值,并为您的组织快速产生商业影响。
您将从学习如何使用 DataRobot 的功能来自动执行数据准备和清洗任务开始。本书涵盖了构建和部署机器学习模型的最佳实践,以及将它们扩展以处理复杂业务问题时所面临的挑战。接下来,您将执行探索性数据分析(EDA)任务,为构建机器学习模型做准备,并了解如何解释结果。您还将发现如何分析模型的预测,并将它们转化为面向业务用户的可操作见解。之后,您将为内部和合规目的创建模型文档,并学习模型如何作为 API 部署。此外,您还将了解如何使模型运行并监控其性能。最后,您将使用 DataRobot 的高级功能处理时间序列预测、自然语言处理、图像处理、MLOps 等示例。
在本书结束时,您将学会如何使用 DataRobot 提供的某些 AutoML 和 MLOps 功能,通过避免重复性任务和常见错误来扩展机器学习模型构建。
本书面向对象
本书面向寻找使用 DataRobot 构建和部署稳健机器学习模型实用指南的数据科学家、数据分析师和数据爱好者。经验丰富的数据科学家也会发现本书对快速探索、构建和部署更广泛的模型有所帮助。本书假设您对机器学习有基本了解。
本书涵盖内容
第一章,什么是 DataRobot 以及为什么您需要它,描述了构建和部署机器学习模型的当前实践和流程,以及这种方法在扩展时的一些挑战。然后,本章将描述 DataRobot 是什么,以及它是如何解决许多这些挑战的,从而让分析师和数据科学家能够快速为他们的组织增加价值。这也有助于高管了解他们如何使用 DataRobot 来高效地扩展他们的数据科学实践,而无需雇佣一支拥有难以找到的技能的大规模团队。本章还描述了 DataRobot 的各种组件,其架构方式,如何与其他工具集成,以及在不同地点或云中设置的不同选项。它还从高层次上描述了各种用户界面组件及其含义。
第二章,机器学习基础,涵盖了本书中将使用和引用的一些机器学习基本概念。这是您使用 DataRobot 有效所需的最基本知识。本章的意图不是让您全面了解机器学习,而是对一些关键思想进行复习。
第三章,理解和定义商业问题,将向您展示如何找到问题的根源并将其设定为一个机器学习项目。一个商业问题需要被仔细定义并转化为机器学习问题,以便使用 DataRobot 解决。这是一个经常被忽视的关键步骤,可能导致下游的问题和失败。请仔细阅读本章,以防止大量辛勤工作的浪费。本章不涉及工具和机器学习方法。
第四章,为 DataRobot 准备数据,涵盖了如何从多个不同的来源在高级别上拼接数据。根据数据,DataRobot 可能会自动执行数据准备和清洗任务,或者您可能需要自己执行其中的一些任务。本章涵盖了概念和示例,说明如何清洗和准备您的数据以及 DataRobot 提供的帮助这些任务的特性。
第五章,使用 DataRobot 进行数据探索性分析,将向您展示如何使用 DataRobot 进行各种数据分析,并将数据准备好以开始构建模型。我们提供了详细的示例,说明应该进行哪些分析以及需要注意哪些事项,以防止下游出现问题。如果做得正确,这种分析可以帮助发现数据问题,并产生有用的业务洞察。
第六章,使用 DataRobot 构建模型,展示了使用 DataRobot 构建不同类型模型的逐步示例。我们涵盖了在不同情况下应使用哪些设置、如何选择特定的模型类型、设置交叉验证、构建集成模型以及跟踪排行榜上表现最好的模型等细节。
第七章,模型理解和可解释性,将向您展示 DataRobot 提供的各种函数和输出示例,以帮助您理解模型并选择最佳解决商业问题的模型。在本章中,我们将通过示例介绍您需要注意的方面以及在模型选择中必须做出的权衡。
第八章,模型评分和部署,涵盖了如何使用模型对输入数据集进行评分、创建用于预期应用的预测、在生产中部署模型以及监控模型。
第九章, 预测和时间序列建模,介绍了如何构建时间序列模型。这类模型通常用于预测应用。本章展示了如何使用 DataRobot 处理不同的时间序列问题。我们涵盖了单序列和多序列问题。
第十章, 推荐系统,涵盖了如何使用 DataRobot 构建推荐系统的示例。这类模型通常用于向用户推荐产品或服务。本章涵盖了使用 DataRobot 处理推荐问题的策略和功能差异。我们讨论了构建不同推荐模型相关的权衡。
第十一章, 处理地理空间数据、NLP 和图像处理,涵盖了与 DataRobot 相关的各种可视化和分析地理空间、文本和图像特征的功能,以及构建包含这些特征的人工智能模型。本章描述了 DataRobot 自动将文本和图像数据纳入人工智能模型的能力,从而提高这些模型的表现。
第十二章, DataRobot Python API,描述了何时以及如何使用 DataRobot Python API。虽然 DataRobot 自动化了许多模型构建的方面,但在许多场景中,您需要使用 Python 等编程语言来高效和可扩展地执行人工智能任务。DataRobot 提供了一个方便的 API,允许经验丰富的数据科学家以编程方式执行 DataRobot 功能。
第十三章, 模型治理和 MLOps,涵盖了开始受到广泛关注的一些最新话题。一旦模型被开发和部署,就需要在一段时间内对其进行治理和维护。虽然这在许多方面与 IT 系统相似,但也有一些关键差异需要理解和实施。本章涵盖了 DataRobot 提供的几个特性和功能,以协助治理和维护人工智能模型。
第十四章, 结论,涵盖了获取额外信息和本书范围之外的其他主题的地方。我们还描述了我们对自动化人工智能和 DataRobot 未来发展的看法。
为了充分利用这本书
为了充分利用本书,您将需要访问 DataRobot 软件。商业版本具有所有功能。如果您没有访问商业版本,您可以获取一个有限时间内有效且不具备所有讨论功能的评估版本。对于一些高级功能和 API 的正常工作,您需要了解一些 Python,并有权访问开源 Python 环境(例如 Anaconda 或 Jupyter Notebooks)。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Preface_Table.jpg
尽管本书中描述的大部分内容可以在不知道 Python 的情况下完成,但我们强烈建议您学习 Python 作为下一步。了解像 Python 这样的编程语言将为您打开更多可能性,并使您能够更好地利用 DataRobot 等工具。
代码在行动
本书的相关“代码在行动”视频可以在bit.ly/3cj2qp1查看。
下载彩色图像
我们还提供了一份包含本书中使用的截图和图表彩色图像的 PDF 文件。您可以从这里下载:static.packt-cdn.com/downloads/9781801076807_ColorImages.pdf(_ColorImages.pdf)。
使用的约定
本书中使用了多种文本约定。
文本中的代码: 表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个例子:“为了我们的目的,我们简单地复制了我们的imports-85-data.xlsx数据集文件,并将其命名为imports-85-data-score.xlsx。”
代码块设置如下:
deployment = dr.Deployment.create_from_learning_model(
MODEL_ID, label='DEPLOYMENT_LABEL',
description='DEPLOYMENT_DESCRIPTION',
default_prediction_server_id=PREDICTION_SERVER_ID)
deployment
粗体: 表示新术语、重要单词或屏幕上显示的单词。例如,菜单或对话框中的单词会以粗体显示。以下是一个例子:“在选择选项后,我们可以点击计算并下载预测按钮。”
提示或重要注意事项
看起来像这样。
取得联系
我们始终欢迎读者的反馈。
一般反馈: 如果您对本书的任何方面有疑问,请通过 customercare@packtpub.com 给我们发邮件,并在邮件主题中提及书名。
勘误表: 尽管我们已经尽一切努力确保内容的准确性,但错误仍然可能发生。如果您在这本书中发现了错误,我们将不胜感激,如果您能向我们报告这一点。请访问www.packtpub.com/support/errata并填写表格。
盗版: 如果你在互联网上以任何形式遇到我们作品的非法副本,如果你能提供位置地址或网站名称,我们将不胜感激。请通过版权@packt.com 与我们联系,并提供材料的链接。
如果您有兴趣成为作者:如果您在某个领域有专业知识,并且您有兴趣撰写或为书籍做出贡献,请访问authors.packtpub.com。
分享您的想法
一旦您阅读了《使用 DataRobot 的敏捷机器学习》,我们非常期待听到您的想法!请点击此处直接访问亚马逊评论页面并分享您的反馈。
您的评论对我们和科技社区都非常重要,它将帮助我们确保我们提供高质量的内容。
第一部分:基础
本节将涵盖一些对于机器学习项目成功至关重要的基础但关键事项。无论你是刚开始还是经验丰富的数据科学家,你都会发现一些你可能不熟悉或过去曾跳过的主题。
本节包括以下章节:
-
第一章,什么是 DataRobot 以及为什么你需要它
-
第二章,机器学习基础
-
第三章,理解和定义业务问题
第一章:什么是 DataRobot 以及为什么你需要它?
机器学习(ML)和人工智能现在是热门话题,很明显,这些技术将在大多数组织的成功和竞争力中发挥关键作用。这将产生对具有数据科学技能的人的巨大需求。
本章描述了构建和部署机器学习模型当前的做法和流程,以及将这些方法扩展以满足预期需求的一些挑战。然后,本章描述了DataRobot是什么以及DataRobot如何解决许多这些挑战,从而使得分析师和数据科学家能够快速为他们的组织增加价值。本章还帮助高管了解他们如何使用 DataRobot 高效地扩展他们的数据科学实践,而无需雇佣大量难以找到技能的员工,以及如何利用 DataRobot 提高现有数据科学团队的有效性。本章涵盖了 DataRobot 的各个组成部分、其架构、如何与其他工具集成以及不同选项在本地或云中设置。它还从高层次上描述了各种用户界面组件及其含义。
到本章结束时,您将了解 DataRobot 的核心功能和架构,以及为什么它是数据分析师以及经验丰富的数据科学家解决组织在从数据中提取价值时面临的最关键挑战的强大推动者。
在本章中,我们将涵盖以下主题:
-
数据科学实践和流程
-
与数据科学相关联的挑战
-
DataRobot 架构
-
DataRobot 功能和如何使用它们
-
DataRobot 如何解决数据科学挑战
技术要求
本书要求您能够访问 DataRobot。DataRobot 是一款商业软件,您需要为其购买许可证。很可能是您的组织已经购买了 DataRobot 许可证,您的管理员可以在 DataRobot 实例上为您设置账户,并提供访问 DataRobot 的适当 URL。
在本书编写时,DataRobot 网站上提供了一个试用版,您可以从www.datarobot.com/trial/访问。请注意,试用版并不提供商业版的所有功能,并且它提供的内容可能会随时间变化。
生成商业价值的数据科学流程
数据科学是一种新兴实践,已经引起了大量的炒作。其中很多含义仍在争论中,实践也在快速发展。尽管存在这些争论,但毫无疑问,如果使用得当,数据科学方法可以为企业带来好处。遵循流程并不能保证成功,但它确实可以提高成功的几率,并允许进行改进。数据科学流程本质上是迭代的,因此不要在一个特定步骤上停留太久是很重要的。寻找可预测和预定时间表和结果的人注定会失望。无论如何,制定一个计划,但也要准备好在前进过程中保持灵活和敏捷。数据科学项目也是一个发现项目:你永远不知道你会发现什么。你的期望或假设可能最终是错误的,你也可能从意想不到的来源发现有趣的见解。
数据科学有许多已知的应用,每天都有新的应用被发现。以下是一些示例应用:
-
预测哪位客户最有可能购买产品
-
预测哪位客户会回来
-
预测客户接下来会想要什么
-
预测哪位客户可能会违约
-
预测哪位客户可能发生事故
-
预测机器的哪个部件可能会故障
-
预测商店将卖出多少商品
-
预测呼叫中心明天将接收多少个电话
-
预测下个月将消耗多少能源
图 1.1 展示了一个高层次的过程,描述了数据科学项目可能从概念到价值生成的过程:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_01_new_2.jpg
图 1.1 – 每个步骤的典型流程及其详细信息
遵循这些步骤对于成功进行机器学习项目至关重要。有时,由于截止日期或开发调试过程中不可避免地出现的问题,这些步骤会被跳过。我们将展示如何使用 DataRobot 帮助您避免一些问题,并确保您的团队能够遵循最佳实践。这些步骤将在本书的其他章节中详细阐述,并附有示例,但让我们先从高层次上熟悉它们。
问题理解
这可能是最重要的步骤,同时也是最不受重视的步骤。大多数数据科学项目失败是因为这一步骤被仓促完成。这也是数据科学学科中可用的方法和工具最少的任务。这一步骤包括以下内容:
-
从系统角度理解业务问题
-
理解最终用户或模型结果消费者期望的是什么
-
理解利益相关者将如何使用这些结果
-
理解潜在的数据来源以及数据在到达你之前是如何被捕获和修改的
-
评估使用数据和数据源是否存在任何法律问题
-
深入理解数据集的各种特征含义
数据准备
在数据科学社区中,此步骤广为人知,因为数据科学团队通常将大部分时间花在这一步骤上。这是一个 DataRobot 能力开始发挥作用但并非完全发挥的任务。数据科学或数据工程团队仍需使用 SQL、Python 或 R 完成大量工作。此步骤中也有许多任务需要数据科学家的技能和经验(例如,特征工程),尽管 DataRobot 开始在这一领域提供能力。例如,DataRobot 提供了大量有用的数据可视化和关于数据质量的通知,但分析师需要从中理解并采取适当的行动。
此步骤还涉及定义模型的预期结果(例如预测下周将售出多少商品或确定贷款违约的概率)以及如何在模型开发、验证和测试阶段衡量结果的质量。
模型开发
此步骤涉及使用不同的算法开发多个模型,并优化或调整算法的超参数。然后评估模型产生的结果,以缩小模型列表,可能删除一些特征,并微调超参数。
通常还会查看特征效应、特征重要性和部分依赖图来构建额外的特征。一旦对结果满意,您就开始思考如何将预测和解释转化为可用和可操作的信息。
模型部署
模型开发完成后,与用户和利益相关者审查模型结果。这是您应该仔细评估结果将如何转化为行动的时候。这些行动的后果是什么,是否存在可能出现的意外后果?这也是评估模型产生的任何公平性或偏差问题的时机。务必与用户和业务领导者讨论任何担忧。
DataRobot 提供几种机制,可以快速将模型作为 REST API 或可执行的 Java 对象部署到组织的任何基础设施或云中。一旦模型作为 API 运行,变更管理的困难部分就开始了。您必须确保组织为与新的业务方式相关的变化做好准备。这对习惯于以某种方式做事的人来说通常很困难。沟通为什么这是必要的,为什么它更好,以及如何执行新功能是经常被忽视的重要方面。
模型维护
一旦模型成功部署并运行,重点就转向管理模型的操作和维护。这包括确定数据差距和其他建议,以随着时间的推移改进模型,以及根据需要改进和重新训练模型。监控包括评估传入的数据以查看数据是否发生了漂移以及漂移是否需要采取行动,监控预测服务的健康状况,以及监控模型输出的结果和准确性。定期与用户会面,了解模型做得好的地方以及可以改进的地方也很重要。有时也常见到使用冠军模型和挑战者模型来查看是否有一个不同的模型能够在生产环境中表现更好。
如我们之前概述的,尽管这些步骤以线性方式呈现,但在实践中,这些步骤并不按照这种精确的顺序发生,通常在得到最终结果之前会有大量的迭代。机器学习模型开发是一个具有挑战性的过程,我们现在将讨论一些挑战以及如何应对它们。
与数据科学相关的挑战
从数据科学项目中获得价值并不容易,许多项目以失败告终。虽然一些原因与任何类型的项目都普遍存在,但数据科学项目有一些独特的挑战。数据科学仍然是一个相对年轻和不成熟的学科,因此会遭遇任何新兴学科都会遇到的问题。数据科学从业者可以从其他成熟的学科中学习,以避免一些别人已经学会避免的错误。让我们回顾一下使数据科学项目具有挑战性的关键问题:
-
缺乏高质量的数据:这是一个常见的说法,但这个问题不太可能在不久的将来消失。关键原因在于,大多数组织习惯于收集数据用于报告。这通常是汇总的、以成功为导向的信息。而用于构建模型所需的数据则需要详细,并且应该捕捉到所有结果。许多组织为了满足数据需求,在数据和数据仓库上投入了大量资金;他们犯的错误是从报告的角度而不是从模型的角度收集数据。因此,尽管花费了大量的时间和成本,他们最终发现自己处于一个可用数据不足的地方。这导致高层领导对为什么他们的团队能够利用这些花费巨大的大型数据仓库感到沮丧。花一些时间在发展对业务的系统性理解上可以帮助缓解这个问题,正如以下章节所讨论的。
-
数据爆炸:数据正在以指数级规模生成和收集。随着收集到的数据越来越多,数据的规模使得通过传统的报告方法进行分析和理解变得更加困难。新的数据也催生了之前不可能实现的新用例。数据的扩展也增加了噪声。这使得使用传统方法提取有意义的见解变得越来越困难。
-
经验丰富的数据科学家短缺:这也是一个受到很多关注的主题。短缺的原因是这是一个相对较新的领域,技术和方法仍在迅速发展。另一个因素是数据科学是一个多学科领域,需要多个领域的专业知识,如统计学、计算机科学和商业,以及对其应用领域的了解。今天的大多数人才库相对缺乏经验,因此大多数数据科学家还没有机会使用广泛的方法和数据类型在各种用例上工作。最佳实践仍在不断发展,并未得到广泛应用。随着越来越多的工作变得数据驱动,对于广泛的员工来说,具备数据意识也将变得重要。
-
工具和环境不成熟:目前使用的工具和环境相对不成熟,这使得高效构建和部署模型变得困难。数据科学家的大部分时间都花在与数据和基础设施问题作斗争上,这限制了他们理解业务问题和评估模型商业和伦理影响的时间。这反过来又增加了无法产生持久商业价值的风险。
-
黑盒模型:随着模型复杂性的增加,我们理解它们所做事情的能力下降。这种缺乏透明度造成了许多问题,可能导致模型产生无意义的或最糟糕的情况下的危险结果。更糟糕的是,这些模型在训练和验证数据集上往往具有更好的准确性。黑盒模型往往难以向利益相关者解释,因此不太可能被用户采用。
-
偏差和公平性:机器学习模型存在偏差和不公平的问题最近被提出,并且对于任何希望开发和部署机器学习模型的人来说,这是一个关键的关注点。偏差可以通过有偏差的数据、有偏差的过程,甚至使用模型结果进行有偏差的决策而渗透到模型中。使用黑盒模型使得这个问题更加难以追踪和管理。偏差和公平性难以检测,但将越来越重要,不仅对组织的声誉至关重要,而且与它们可能引发的监管或法律问题也密切相关。
在我们讨论如何解决这些挑战之前,我们需要向您介绍 DataRobot,因为正如您可能已经猜到的,DataRobot 有助于解决许多这些挑战。
DataRobot 架构
DataRobot 是自动化机器学习(AutoML)最知名的商业工具之一。似乎只有让旨在自动化的技术本身也受益于自动化才是合适的。随着您通过数据科学过程,您将意识到有许多任务在性质上是重复的,并且标准化到足以值得自动化的程度。DataRobot 在捕捉此类任务以增加构建和部署机器学习模型的速度、规模和效率方面做得非常出色。我们将在本书中详细讨论这些方面。话虽如此,仍有许多任务和此过程中的方面仍需要数据科学家和数据分析师做出决策、采取行动和权衡。我们也将突出这些内容。以下图显示了 DataRobot 架构的高级视图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_02.jpg
图 1.2 – DataRobot 架构的关键组件
该图显示了架构的五个关键层及其相应的组件。在接下来的章节中,我们将描述每一层以及它是如何使数据科学项目得以实现的。
托管平台
数据机器人环境可以通过网页浏览器访问。该环境本身可以托管在组织的服务器上,或者托管在云平台(如 AWS 或 DataRobot 的云)上的组织服务器实例中。每种托管选项都有其优缺点,您应该选择的选项取决于您组织的需要。其中一些在表 1.1中进行了高层次讨论:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_03_new.jpg
图 1.3 – 各种托管选项的优缺点
如您从这张表中可以看出,DataRobot 为您提供了很多选择,您可以选择最适合您环境的选项。重要的是让您的 IT、信息安全和法律团队参与这次对话。现在让我们看看数据是如何进入 DataRobot 的。
数据来源
数据集可以通过本地文件(csv、xlsx等)、连接到关系数据库、从 URL 或从Hadoop 分布式文件系统(HDFS)(如果为您的环境设置了)导入到 DataRobot 中。数据集可以直接导入到项目中,也可以放入 AI 目录中。目录中的数据集可以在多个项目中共享。DataRobot 与多个数据管理系统提供商建立了集成和技术联盟。
核心功能
DataRobot 提供了一套相当全面的特性来支持整个机器学习过程,无论是通过核心产品还是通过附加组件,如 Paxata,它提供了易于使用的数据准备和探索性数据分析(EDA)功能。关于 Paxata 的讨论超出了本书的范围,因此我们将提供核心产品功能的详细信息。DataRobot 自动执行几个 EDA 分析,并将这些分析展示给用户,以帮助他们深入了解数据集并捕捉任何可能需要修复的数据质量问题。
自动建模功能是 DataRobot 提供的关键功能。这包括确定要在选定的问题上尝试的算法、执行基本特征工程、自动构建模型、调整超参数、构建集成模型,以及展示结果。必须注意的是,DataRobot 主要支持监督机器学习算法和时间序列算法。尽管有执行自然语言处理(NLP)和图像处理的功能,但这些功能并不全面。DataRobot 最近还通过提供快速将模型作为 REST API 部署、监控数据漂移和服务健康以及跟踪模型性能的功能,增加了 MLOps 功能。DataRobot 还在继续增加功能,例如支持地理空间数据和偏差检测。
这些任务通常需要使用 R 和 Python 等编程语言来完成,可能会相当耗时。用于编写数据分析、模型构建、输出分析和部署的代码所花费的时间可能非常可观。通常,大量的时间也会用于调试和修复错误,以及使代码更加健壮。根据模型的大小和复杂性,这个过程可能需要从几周到几个月不等。DataRobot 可以将这个时间缩短到几天。这些时间可以反过来用于更快地交付项目、构建更健壮的模型,以及更好地理解要解决的问题。
外部交互
DataRobot 的功能可以通过一个全面的用户界面(我们将在下一节中描述)访问,也可以通过一个客户端库在 Python 或 R 框架中使用,以编程方式通过 API 访问 DataRobot 的功能,以及一个用于外部应用程序的 REST API。DataRobot 还提供了创建应用程序的能力,这些应用程序可供商业用户使用,使他们能够做出数据驱动的决策。
用户
虽然大多数人认为数据机器人是为不喜欢编码的数据分析师和数据科学家而设计的,但它为能够编码的数据科学家提供了显著的能力,并且可以显著提高任何数据科学团队的效率。对于某些特定用例,它也提供了一些对商业用户的支持。其他系统可以通过 API 与数据机器人模型集成,这可以用于向外部系统添加智能或在外部数据库中存储预测。他们通过合作伙伴计划存在几个工具集成。
导航和使用数据机器人功能
现在您已经对核心功能有所了解,让我们快速浏览一下数据机器人看起来如何以及如何导航各种功能。本节将从高层次介绍数据机器人,但请放心:我们将在随后的章节中深入细节。本节仅旨在让您熟悉数据机器人的功能。
您的数据机器人管理员将为您提供适当的 URL 以及用于访问您的数据机器人实例的用户名和密码。根据我的经验,谷歌 Chrome 似乎与数据机器人配合得最好,但您当然可以根据需要尝试其他浏览器。
注意
请注意,您看到的屏幕和选项取决于您拥有的产品许可证以及管理员授予您的权限。在大多数情况下,这不会影响本书的流程。由于我们将专注于数据机器人的 ML 开发核心,您应该能够跟上。
因此,让我们启动浏览器并访问您的数据机器人 URL。您将看到一个登录界面,如图下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_04.jpg
图 1.4 – 数据机器人登录界面
使用您的凭证登录。登录后,您将看到一个欢迎界面(图 1.4),提示您选择下一步要做什么。根据您的设置,您也可能直接进入数据输入界面(图 1.5):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_05.jpg
图 1.5 – 欢迎界面
在此阶段,我们将选择ML 开发选项并点击继续按钮。这将提示您提供您希望用于构建模型的数据库(图 1.5):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_06.jpg
图 1.6 – 新项目/拖拽数据集界面
在此阶段,您可以从您的本地机器将数据集文件拖拽到屏幕上(或选择其他选项之一),数据机器人将开始分析您的数据。您可以通过点击查看数据集要求链接来查看可用的文件格式选项(图 1.6)。您的实例的文件大小要求可能与这里看到的不同:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_07.jpg
图 1.7 – 数据集要求
在这一点上,您可以从您的本地驱动器上传任何测试数据集。DataRobot 将立即开始评估您的数据(图 1.7):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_08.jpg
图 1.8 – EDA
我们将在后面的章节中介绍构建项目和关联模型的过程;现在,让我们来看看我们还有哪些其他选项。如果您点击右上角的**?图标,您将看到文档**下拉菜单(图 1.8):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_09.jpg
图 1.9 – 文档下拉菜单
在这里,您可以看到各种选项,了解更多关于不同功能的信息,联系客户支持,或与 DataRobot 社区互动。我强烈建议加入社区,与其他社区成员互动和学习。您可以通过community.datarobot.com访问社区。如果您从下拉菜单中选择平台文档,您将看到关于 DataRobot 函数的详尽文档(图 1.9):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_10.jpg
图 1.10 – DataRobot 平台文档
您可以随意查看各种主题,或者根据您正在处理的任务需要,回到特定的主题。让我们再次点击右上角的**?图标,这次从下拉菜单中选择API 文档**。现在,您将看到 DataRobot API 的文档(图 1.10):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_11.jpg
图 1.11 – DataRobot API 文档
我们将在后面的章节中介绍 API。如果您不熟悉编程或相对较新手,您可以现在忽略这部分内容。如果您是一位在 Python 或 R 方面有专长的经验丰富的数据科学家,您可以从现在开始审查您可用的各种函数,以进一步自动化您的模型构建任务。
让我们回到主 DataRobot 页面,这次选择页面右上角的文件夹图标(图 1.11):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_12.jpg
图 1.12 – 项目下拉菜单
如果您看不到文件夹图标,这仅仅意味着您还没有定义任何项目。我们将在稍后更详细地描述创建项目。现在,只需熟悉不同的选项及其外观。在这里,您将看到创建新项目或管理现有项目的选项。在这里,您还可以看到有关当前活动项目的详细信息以及最近项目的列表。
创建新项目选项将带您回到之前在图 1.5中看到的新的项目页面。如果您选择管理项目菜单,它将按创建日期列出您所有的项目(图 1.12)。在这里,您可以选择一个项目以查看更多详细信息,克隆项目,与其他用户共享项目,或根据需要删除项目,如图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_13.jpg
图 1.13 – 管理项目页面
如果您点击页面右上角看起来像一个人的最后一个菜单项,您将看到一个下拉菜单(图 1.13):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_14.jpg
图 1.14 – 用户账户管理下拉菜单
从这里您可以管理您的个人资料并调整您的账户设置。如果您有管理员权限,您可以查看和管理其他用户和组。如果需要,您还可以从 DataRobot 注销。
如果您选择个人资料菜单,您将看到您的账户详细信息(图 1.14):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_15.jpg
图 1.15 – 用户资料页面
在这里,您可以更新一些您的信息。您还会在顶部的第二行菜单中看到一些新的菜单选项。这允许您更改设置或访问一些开发者选项等。如果您选择设置菜单,您将看到以下内容(图 1.15):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_16.jpg
图 1.16 – 用户设置
在此页面,您可以更改密码,设置双因素认证,更改主题,并设置通知(您将看到基于管理员如何设置您的账户的不同选项)。
如果您选择开发者工具,您将看到以下内容(图 1.16):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_17.jpg
图 1.17 – 开发者工具屏幕
在这里,您可以创建与您的账户关联的 API 密钥。如果您将使用 DataRobot API,此密钥非常有用。您还可以下载 API 包以在组织的基础设施内部署模型设置可携带的预测服务器。
如果您点击顶部的人工智能目录菜单,您将看到 DataRobot 内可共享的数据集目录(图 1.17):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_18.jpg
图 1.18 – 人工智能目录
此页面显示可用的数据集列表。如果您看不到任何数据集,您可以点击添加新数据按钮(图 1.18)上传测试数据集。您还可以点击数据集来探索可用的数据。您可以按来源、用户定义的标签或所有者/创建者进行搜索和排序:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_19.jpg
图 1.19 – 数据集信息页面
通常,数据集仅限于项目内部使用。如果你想在不同项目或项目的迭代中共享数据集,你可以在本目录中创建数据集。这允许你在项目和用户之间共享这些数据集。数据集可以是静态的,也可以根据需要动态创建 SQL 查询。如果你需要从多个表或来源为项目获取数据,也可以通过 Spark SQL 修改或混合数据集。
如果你点击配置文件按钮,你将看到数据集的配置文件级别信息(图 1.19)。这些信息会自动为你编译。我们将在稍后更详细地描述这些功能及其使用方法:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_20.jpg
图 1.20 – 数据集信息页面
此页面显示了当时活动项目中数据集的详细信息。此页面是 DataRobot 能力的关键组成部分之一。页面显示了摘要信息以及 DataRobot 检测到的任何数据质量问题。下面,它显示了数据特征的摘要以及相对于目标特征的特征重要性。我们将在后续章节中更详细地介绍这些功能。
现在点击页面左上角的数据菜单。此页面(图 1.20)显示了当前活动项目的数据集的详细分析:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_21.jpg
图 1.21 – 项目数据页面
此页面显示了你的数据集分析结果,提供了任何警告,特征的相关重要性,以及用于项目的特征列表。我们将在后续章节中详细审查此页面的功能。
现在点击页面顶部的模型菜单项。这显示了活动项目的模型排行榜(图 1.21):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_22.jpg
图 1.22 – 模型排行榜
这是建模过程中你将花费大量时间的另一个关键页面。在这里,你可以看到 DataRobot 构建的顶级模型及其验证、交叉验证和保留样本的性能指标。你可以深入了解任何选定的模型的详细信息。需要注意的是,DataRobot 主要处理监督学习问题;目前,它不支持无监督学习(除了某些异常检测)或强化学习。此外,对 NLP 和图像处理问题的支持有限。同样,在某些情况下,由于数据限制或极端规模,你会发现自动化增加了一层开销,使得使用 DataRobot 变得不切实际。如果你的项目需要这些领域的先进功能,你将需要直接在 Python 或 R 中工作。后续章节将有更多介绍。
现在我们转到下一个菜单项,MLOps。当你点击MLOps时,你会看到图 1.22所示的屏幕:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_23.jpg
图 1.23 – MLOps 页面
MLOps页面显示了你的活动部署及其健康状况。你可以根据你的用例设置有关数据漂移或模型准确性的警报。
下一个菜单项是模型注册。现在,模型注册是你将外部开发模型引入 DataRobot 的机制。这种功能是一个可选的附加组件,你的组织可能已经购买或尚未购买。这个方面是一个超出本书范围的高级主题。
让我们点击下一个菜单项,应用程序。你现在将看到图 1.23中显示的内容:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/b17159_01_24.jpg
图 1.24 – 应用程序页面
应用程序是 DataRobot 中相对较新的功能,旨在允许业务用户轻松访问模型结果,而无需获取 DataRobot 用户许可证。
这就结束了我们对 DataRobot 是什么以及它看起来像什么的快速浏览。我们将详细回顾许多这些组件,并看到这些组件是如何从项目开始到结束被使用的例子。
使用 DataRobot 解决数据科学挑战
现在你已经了解了 DataRobot 提供的内容,让我们重新审视数据科学流程和挑战,看看 DataRobot 是如何帮助解决这些挑战的,以及为什么它是你工具箱中一个有价值的工具。
缺乏高质量的数据
虽然 DataRobot 无法在很大程度上解决这个挑战,但它确实提供了一些处理质量问题的数据的能力:
-
自动突出显示数据质量问题。
-
自动化的 EDA 和数据可视化揭示了可能被忽视的问题。
-
处理和填补缺失值。
-
数据漂移检测。
数据爆炸
虽然数据量和种类的增加不太可能很快放缓,但 DataRobot 提供了几种能力来解决这些挑战:
-
支持 SparkSQL,能够高效地预处理大数据集。
-
自动处理分类数据的编码并选择合适的模型蓝图。
-
自动处理地理空间特征、文本特征和图像特征。
经验丰富的数据科学家短缺
这是对大多数组织和数据科学团队的一个关键挑战,DataRobot 处于解决这个挑战的有利位置:
-
提供覆盖大多数数据科学流程步骤的能力。
-
通过提供预构建的、编码了最佳实践的蓝图,显著自动化了多个常规任务。
-
经验丰富的数据科学家可以更快地构建和部署模型。
-
对于不太擅长编码的数据分析师或数据科学家,可以利用 DataRobot 的能力,而无需编写大量代码。
-
对于习惯于编码的经验丰富的数据科学家来说,可以利用 API 自动构建和部署比其他数据工程或 IT 人员支持情况下更大量的模型。
-
即使是经验丰富的数据科学家也不知道所有可能的算法,通常也没有时间尝试许多组合,并为所有模型构建分析可视化解释。DataRobot 为他们处理了许多这些任务,使他们能够有更多时间专注于理解问题和分析结果。
不成熟的工具和环境
这是对任何数据科学组织生产力和有效性的一个关键障碍。DataRobot 通过提供以下解决方案明确地解决了这一关键挑战:
-
将任何模型作为 REST API 部署的简便性。
-
在开发多个竞争模型并选择最佳模型时,使用简便,无需担心底层基础设施、兼容版本安装,以及无需编码和调试。这些任务可能会占用大量时间,而这些时间本可以更好地用于理解和解决业务问题。
-
DataRobot 将许多最佳实践编码到其开发过程中,以防止错误。DataRobot 自动处理许多即使是经验丰富的数据科学家也可能忽略的小细节,从而避免出现有缺陷的模型或返工。
-
DataRobot 为模型和建模步骤提供自动化文档,否则可能会被忽略或遗忘。在数据科学家需要回顾他们或他人构建的旧模型时,这变得非常有价值。
黑盒模型
这是一项 DataRobot 已进行了大量工作以提供帮助模型更具可解释性的关键挑战,以下是一些方法:
-
自动生成模型的特征重要性(使用 Shapley 值和其他方法)和部分依赖图
-
自动生成特定预测的解释
-
自动生成可用于解释复杂模型的简单模型
-
能够创建本质上更具可解释性的模型,例如广义加性模型(GAMs)
偏差和公平
最近,DataRobot 增加了帮助检测模型中偏差和公平性问题的新功能。这并不能保证完全没有偏差,但它是确保向积极方向迈出良好一步的好起点。以下列出了一些新增的功能:
-
指定需要检查偏差的受保护特征。
-
指定您想要用于检查公平性的偏差指标。
-
使用受保护特征的指标来评估您的模型。
-
使用模型解释来调查是否存在不公平的潜在可能性。
虽然许多人认为有了这些自动化工具,您就不再需要数据科学家,但这与事实相去甚远。然而,很明显,这样的工具将通过更快地释放更多价值并使这些组织更具竞争力,使数据科学团队对其组织更有价值。因此,工具如 DataRobot 可能会越来越普遍,并得到广泛的应用。
摘要
大多数数据科学家今天都陷入了实现细节的泥潭,或者正在实施次优算法。这让他们在理解问题和搜索最优算法或其超参数方面的时间更少。这本书将向您展示如何将您的游戏提升到下一个层次,并让软件完成重复性工作。
在本章中,我们介绍了典型数据科学流程是什么以及 DataRobot 如何支持这一流程。我们讨论了在流程中 DataRobot 提供了很多能力的步骤,我们还强调了数据科学家专业知识和对领域理解至关重要的领域(如问题理解和分析部署模型对整体系统的影响)。这突出了一个重要观点,即成功来自于熟练的数据科学家和分析师以及适当的工具(如 DataRobot)的结合。仅凭他们本身,并不能像结合那样有效。DataRobot 使相对较新的数据科学家能够快速开发和部署稳健的模型。同时,经验丰富的数据科学家可以使用 DataRobot 快速探索和构建比他们自己能够构建的更广泛的模型。
我们介绍了一些关键的数据科学挑战以及 DataRobot 如何帮助您克服一些具体挑战。这应该有助于指导领导者如何制定合适的数据科学家、工具和所需基础设施的组合。我们还介绍了 DataRobot 架构、其组件以及 DataRobot 的外观。您已经尝到了开始使用它时将看到的内容,以及如何找到特定的功能和帮助。
希望这一章已经向您展示了为什么无论您的经验如何或您对编码的舒适度如何,DataRobot 都可能是您工具箱中的重要工具。在接下来的章节中,我们将通过实际案例来展示如何详细使用 DataRobot,以及如何将您的项目提升到更高的水平。但在我们这样做之前,我们需要在下一章中介绍一些机器学习的基础知识。
第二章:机器学习基础
本章介绍了本书中将使用和引用的一些机器学习基本概念。这是使用 DataRobot 有效所需的最基本知识。经验丰富的数据科学家可以安全地跳过本章。本章的目的不是让你对统计学或机器学习有一个全面的理解,而是对一些关键思想和概念进行复习。此外,重点是了解你需要了解的实践方面,以便理解核心思想,而不深入细节。你可能想跳进去,让 DataRobot 自动构建模型,但如果没有基本理解,这样做可能会适得其反。如果你是数据科学团队的领导者,请确保你的团队中有经验丰富的数据科学家,他们正在指导他人,并且已经建立了其他治理流程。
一些这些概念将在实际操作示例中再次出现,但我们在这里涵盖了可能不会在特定示例中出现,但可能在某个时候与你的项目相关的许多概念。这里列出的主题可以用作指南,以确定你开始使用像 DataRobot 这样的强大工具所需的一些基本知识。
到本章结束时,你将学习到一些使用 DataRobot 有效所需的核心概念。在本章中,我们将涵盖以下主要主题:
-
数据准备
-
数据可视化
-
机器学习算法
-
性能指标
-
理解结果
数据准备
在算法可以应用于数据集之前,数据集需要符合一定的模式。数据集还需要没有错误。某些方法和技术被用来确保数据集为算法做好准备,这将是本节的重点。
监督学习数据集
由于 DataRobot 主要处理监督学习问题,因此我们只会关注监督机器学习的数据集(其他类型将在后面的章节中介绍)。在监督机器学习问题中,我们将所有答案作为数据集的一部分提供。想象一下一张数据表,其中每一行代表一组线索及其相应的答案(图 2.1):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.1_B17159.jpg
图 2.1 – 监督学习数据集
该数据集由包含线索的列(这些被称为特征)和一个包含答案的列(这被称为目标)组成。给定一个类似这样的数据集,算法学习如何根据一组线索产生正确的答案。无论您的数据以何种形式存在,您的任务首先是将其转换成图 2.1中的表格样子。请注意,您拥有的线索可能分布在多个数据库或 Excel 文件中。您将不得不将这些信息全部汇总到一个表格中。如果您拥有的数据集很复杂,您将需要使用 SQL 等语言,Python Pandas或Excel等工具,或Paxata等工具。
时间序列数据集
时间序列或预测问题的时间是其数据集的关键组成部分。它们与监督学习数据集类似,略有不同,如图 2.2所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.2_B17159.jpg
图 2.2 – 时间序列数据集
您需要确保您的时间序列数据集看起来与前面的图表一样。它应该有一个基于日期或时间的列,一个包含您试图预测的序列值的列,以及所需的一组线索。如果您需要预测多个时间序列,您还可以添加帮助分类不同序列的列。例如,您可能对预测第 5 天和第 6 天的销量感兴趣。如果您的数据以其他形式存在,它需要被转换成前面图表的样子。
数据清理
您收到的数据通常会有错误。例如,您可能会在应该包含数字的字段中看到文本。您可能会看到价格列中的值有时包含美元符号,但有时没有符号。DataRobot 可以捕捉到其中的一些错误,但有时自动化工具无法捕捉到这些错误,因此您需要仔细查看和分析数据集。有时将您的数据上传到 DataRobot 以查看它发现了什么,然后使用其分析结果来确定下一步操作是有用的。一些清理工作需要在 DataRobot 之外完成,因此请准备好多次迭代以正确设置数据集。需要注意的常见问题包括以下内容:
-
列中的数据类型错误
-
列中的混合数据类型
-
在数值列中的空格或其他字符使它们看起来像文本
-
同义词或拼写错误的单词
-
日期以字符串形式编码
-
日期格式不同
数据归一化和标准化
当不同的数据特征具有不同的尺度和范围时,比较它们对目标值的影响变得更加困难。此外,许多算法在处理不同尺度的值时存在困难,有时会导致稳定性问题。避免这些问题的方法之一是对值进行归一化(不要与数据库范式混淆)或标准化。
在归一化(也称为缩放)中,您将值缩放,使它们在 0 到 1 之间:
Xnormalized = (X – Xmin) / (Xmax – Xmin)
另一方面,标准化会将数据中心化,使得平均值变为零,并按比例缩放,使得标准差变为 1。这也被称为 z 分数 数据:
Xstandardized = (X – Xmean) / XSD
在这里,Xmean 是所有 X 值的平均值,XSD 是 X 值的标准差。
通常,您不需要担心这个问题,因为 DataRobot 会根据需要自动对数据集进行此操作。
异常值
异常值是相对于数据集的其他部分似乎不合适的数据。这些值可能非常大或非常小。一般来说,与平均值相差超过三个标准差的数据被认为是异常值,但这仅适用于预期值呈正态分布的特征。异常值通常来自数据质量问题或一些不寻常的情况,这些情况被认为不足以作为训练数据。被认为异常的数据点通常从数据集中移除,以防止它们对您的模型产生过度影响。这些经验法则仅用于突出候选者。您将必须运用您的判断力来确定任何值是否为异常值以及是否需要删除它们。再次强调,DataRobot 将突出潜在的异常值,但您必须审查这些数据点并确定是否删除它们或保留。
缺失值
这是在数据集中非常常见的问题。您的数据集可能包含许多缺失值,标记为 NULL 或 NaN。在某些情况下,您可能会看到一个 ?,或者您可能会看到一个不寻常的值,例如 -999,这可能是一个组织用来表示缺失或未知值的值。您如何处理这些值在很大程度上取决于您试图解决的问题以及数据集代表的内容。很多时候,您可能会选择删除包含缺失值的行数据。有时,这可能不可行,因为您可能没有足够的数据,删除这些行可能会导致您数据集的重要部分被移除。有时,您可能会看到一个特征(或列)中的大量值可能缺失。在这些情况下,您可能希望从数据集中删除该特征。
另一种处理这种情况的可能方法是使用合理的猜测来填充缺失值。这可能采取零值的形式,或者该特征的均值,或者该特征的中间值。对于分类数据,缺失值通常被视为一个单独的类别。
更复杂的方法使用 k 最近邻算法根据其他相似数据点计算缺失值。没有一种答案在每次都适用,所以你需要使用你的判断和对问题的理解来做出决定。最后一个选项是保持原样,让 DataRobot 找出如何处理这种情况。DataRobot 也有许多填充策略以及处理缺失值的算法。但你要小心,因为这可能并不总是导致最佳解决方案。与经验丰富的数据科学家交谈,并使用你对业务问题的理解来规划行动方案。
类别编码
在许多问题中,你必须将你的特征转换为数值。这是因为许多算法无法处理分类数据。有许多方法可以编码分类值,DataRobot 内置了许多这些方法。其中一些技术包括独热编码、留一法编码和目标编码。我们不会深入细节,因为通常你会让 DataRobot 为你处理这些,但可能会有一些情况,由于你对业务问题的理解,你将想要以特定的方式自行编码。DataRobot 的这个特性可以节省大量时间,并且通常对大多数问题都工作得很好。
合并类别
有时,你会有包含大量类别的分类数据。尽管有处理大量类别计数的方法(如前文所述),但很多时候,合并类别是明智的选择。例如,你可能有很多包含非常少数据点但彼此非常相似的类别。在这种情况下,你可以将它们合并成一个单独的类别。在其他情况下,可能只是有人使用了不同的拼写、同义词或缩写。在这种情况下,最好也将它们合并成一个单独的类别。有时,你可能想要将数值特征分割成对用户或利益相关者有业务意义的区间。这是你需要根据对问题的理解自行进行的数据准备的一个例子。你应该在将数据上传到 DataRobot 之前完成这项工作。
目标泄露
有时,数据集包含从目标本身派生的特征。这些特征在事先未知或在预测时未知。无意中使用这些特征来构建模型会导致下游问题。这个问题被称为目标泄露。应该仔细检查数据集,并将这些特征从训练特征中移除。DataRobot 也会自动分析特征,并尝试标记可能导致目标泄露的任何特征。
项-文档矩阵
您的数据集中可能包含包含文本或注释的特征。这些注释通常包含对做出决策有用的重要信息。然而,许多算法却无法直接利用这些文本。这些文本必须被解析成数值,以便对建模算法变得有用。为此有几种方法,其中最常见的是术语-文档矩阵。这里的文档指的是单个文本或注释条目。每个文档都可以被解析以分割成术语。现在您可以计算一个术语在文档中出现的次数。这个结果可以存储在一个称为词频(TF)矩阵中。一些信息也可以在词云中进行可视化。DataRobot 会自动为您构建这些词云。虽然 TF 很有用,但它可能有限制,因为某些术语可能在所有文档中都非常常见,因此它们在区分它们之间不是非常有用。这导致另一个想法,即我们可能应该寻找仅对某些文档独特的术语。这种给仅在某些文档中出现的术语赋予更多权重的概念被称为逆文档频率(IDF)。一个术语在文档中多次出现(TF)并且相对罕见(IDF)的组合被称为TFIDF。TFIDF 是 DataRobot 会自动为您计算并应用于包含文本的特征。
数据转换
虽然 DataRobot 会为您执行许多数据转换(并且它一直在添加更多),但有许多转换会影响您的模型,但 DataRobot 将无法捕捉到。您将不得不自己执行这些操作。这些操作的例子包括数学转换,如对数、平方、平方根、绝对值和差值。其中一些简单的可以在 DataRobot 内部设置,但对于更复杂的转换,您必须在 DataRobot 之外或使用 Paxata 等工具执行操作。有时,您会进行转换以线性化问题或处理具有长尾数据的特征。DataRobot 自动执行的一些转换如下:
-
计算聚合数据,如计数、最小值、最大值、平均值、中位数、最频繁值和熵
-
一个广泛的时间相关特征列表,例如随时间变化、随时间最大值和随时间平均值
-
一些文本提取特征,例如词数、提取的标记和术语-文档矩阵
-
来自地理空间数据的地理空间特征
我们将在第四章中更详细地讨论这个主题,为 DataRobot 准备数据。
共线性检查
在任何给定的数据集中,都存在一些与其他特征高度相关的特征。本质上,它们携带与某些其他特征相同的信息。通常,我们希望删除这些与数据集中某些其他特征高度重复的特征。DataRobot 会自动为您执行这些检查,并将这些共线性特征标记出来。这对于线性模型尤其关键,但一些较新的方法可以更好地处理这个问题。使用的阈值取决于建模算法和您的业务问题。在 DataRobot 中删除这些特征以用于建模是非常容易的。
DataRobot 还会生成一个相关矩阵,显示不同特征之间是如何相互关联的。这有助于识别共线性特征以及模型中要使用的候选关键特征。通过分析相关矩阵,您可以深入了解您的数据和问题。在第五章《使用 DataRobot 进行探索性数据分析》中,我们将讨论如何进行这种分析的例子。
数据分区
在开始构建模型之前,您需要将数据集分为三个部分。这些部分被称为训练集、验证集和保留集。在模型构建过程中,这三个部分用于不同的目的。通常将 10-20%的数据集分为保留集。剩余的部分进一步分割,其中 70-80%用于训练集,20-30%用于验证集。这种分割是为了确保模型不会过拟合,并且部署中预期的结果与模型构建期间看到的结果一致。
只有训练集用于训练模型。验证集的设计是为了通过执行多次交叉验证测试来调整算法,以优化结果。最后,在构建模型后,使用保留集来测试模型在之前从未见过的数据上的表现。如果保留集上的结果是可以接受的,那么模型可以考虑部署。
DataRobot 自动化了这一过程的大部分,但它允许用户自定义分割百分比以及分区应该如何进行。它还通过自动分割数据以进行基于时间的回溯测试,为时间序列或预测问题执行类似的功能。
数据可视化
数据分析师或数据科学家需要完成的最重要任务之一是理解数据集。数据可视化是实现这一理解的关键。DataRobot 提供了多种可视化数据集的方法,以帮助您理解数据集。这些可视化是自动为您构建的,这样您就可以花时间分析它们,而不是准备它们。让我们看看这些是什么以及如何使用它们。
当你访问你项目的数据页面(图 1.20)时,你会看到你数据集的高级概要信息。仔细检查这些信息,以全面了解你的数据集。如果你点击左上角的特征关联菜单,你会看到特征之间是如何相互关联的(图 2.3):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.3_B17159.jpg
图 2.3 – 使用互信息进行特征关联
此图使用互信息指标显示了特征之间的相互关系。互信息(MI)使用信息理论来确定从另一个特征中获取关于一个特征的信息量。与皮尔逊相关系数相比,使用 MI 的优点是它可以用于任何类型的特征。其值从 0(两个特征是独立的)到 1(它们携带相同的信息)。这在确定哪些特征将是模型的良好候选者以及哪些特征不会提供任何有用的信息或冗余方面非常有用。在模型构建开始之前,理解并使用这种观点非常重要,尽管 DataRobot 会自动使用这些信息来做出建模决策。
另有一个指标也以类似的方式使用。如果你点击前面截图底部的度量下拉菜单,你可以选择另一个称为Cramer’s V的指标。一旦选择 Cramer’s V,你将看到类似的图形视图(图 2.4):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.4_B17159.jpg
图 2.4 – 使用 Cramer’s V 进行特征关联
Cramer’s V 是 MI 的另一种指标,其使用方式类似。其值范围也从 0(无关系)到 1(特征高度相关)。Cramer’s V 通常与分类变量一起使用,作为皮尔逊相关系数的替代。
注意到 DataRobot 自动找到了相互关联的特征簇。每个簇用不同的颜色编码,特征按簇排序在图 2.4中。你可以放大到特定的簇以进一步检查它们。这是 DataRobot 环境的一个重要特性,因为非常少的数据科学家了解这个想法或利用它。这些簇很重要,因为它们突出了相互关联的特征组。这些复杂的相互依赖关系通常对于理解业务问题非常重要。通常,只有拥有大量领域经验的人才知道这些复杂的相互依赖关系。大多数人甚至不会意识到这些复杂性。如果你是某个领域的初学者,那么理解这些将给你相当于多年的经验。仔细研究这些,与你的业务专家讨论,以全面理解他们试图强调的内容,然后使用这些见解来改进你的模型以及你的业务流程。
此外,请注意 DataRobot 提供了一个包含前 10 个最强关联的列表。注意这些关联并花些时间思考它们对你的问题意味着什么。这些是否与你对领域的了解一致,或者有一些惊喜?往往是惊喜导致的关键洞察,这些洞察可能对你的业务具有价值。在以下列表中,你可以看到一个查看特征关联对按钮。如果你点击该按钮,你将看到图 2.5:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.5_B17159.jpg
图 2.5 – 特征关联细节
此图形详细显示了两个选定特征之间的关系。在这个例子中,一个特征是分类的,而另一个是数值的。该图显示了这两个特征之间的关系,并可能为问题提供额外的见解。务必调查这些关系,特别是那些可能具有反直觉性的关系。
现在你可以点击特定的特征来查看它们的分布情况(图 2.6):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.6_B17159.jpg
图 2.6 – 特征细节
此视图显示了值的分布情况以及它们与目标值之间的关系。需要关注的关键点是数据不足的区间以及非线性区间。这些可能会给你关于特征工程的想法。这些也是你询问系统为何表现出这种行为的区域?
在完成这项背景工作后,你现在可以开始深入研究建模算法。
机器学习算法
现在已经有数百种机器学习算法可供机器学习项目使用,并且每天都有新的算法被发明。DataRobot 支持广泛的开源机器学习算法,包括几个深度学习算法——Prophet、基于 SparkML 的算法和 H2O 算法。现在让我们看看存在哪些类型的算法以及它们的应用(图 2.7):
图 2.7 – 机器学习算法
我们的重点将主要放在 DataRobot 支持的算法类型上。这些算法类型将在以下子节中描述。
监督学习
当你可以提供作为训练数据集一部分的答案(也称为标签)时,使用监督学习算法。对于监督学习,你必须将你的数据集的一个特征分配为答案,算法通过观察多个示例并从这些示例中学习来尝试预测答案。参见图 2.8以了解不同类型的答案:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.8_B17159.jpg
图 2.8 – 监督学习算法的目标
DataRobot 的功能主要集中于监督学习算法。该套件包括深度学习算法以及来自 SparkML 和 H2O 的大数据算法。DataRobot 内置了最佳实践来选择最适合您问题和数据集的算法。监督学习问题主要有以下四种类型:
回归
回归问题是指答案(目标)以数值形式出现的情况(参见图 2.8)。回归模型试图拟合一条曲线,使得预测值与实际值之间的误差在整个训练数据集上最小化。有时,甚至可以将分类问题设置为一个数值回归问题。在这种情况下,答案是数字,然后可以通过阈值将其转换为二进制。逻辑回归就是这样一种方法,它产生一个介于零和一之间的值。您可以将低于某个阈值的所有答案标记为零,而高于阈值的答案标记为一。根据问题,可以使用线性回归算法以及非线性回归算法。模型是根据回归线与数据匹配的程度来评估的。常用的指标包括RMSE、MAPE、LogLoss和Rsquared。常用的算法包括XGBoost、Elastic Net、随机森林和GA2M。
二元分类
二元分类问题的答案只能取两个不同的值(称为类别)。这些可以是 0 或 1、是或否等形式。请参阅图 2.8以了解二元分类的目标特征的示例。您通常遇到的一个典型问题是类别不平衡问题。当大多数数据集偏向于一个类别时,这种情况就会发生。这些通常通过在存在足够训练数据的情况下对过度代表的类别进行下采样来解决。当这不可能时,您可以尝试对代表性不足的类别进行上采样或使用其他方法。这些方法都不是完美的,有时您不得不尝试不同的方法来查看哪种方法最有效。DataRobot 提供了在需要时指定下采样的机制。一些常用的二元分类算法包括逻辑回归、k 最近邻、基于树的算法、SVM和朴素贝叶斯。在分类问题的情况下,最好避免使用准确率作为评估结果的指标。结果通常以混淆矩阵的形式显示(本章后面将描述)。在需要时,DataRobot 将自动选择合适的指标来使用。
多类分类
多分类分类问题是你试图预测两个以上类别或类别的那些问题。为了简单说明目标可能的样子,请参阅 图 2.8。多分类能力是最近添加的,许多 DataRobot 功能可能不适用于此类问题。由于没有下采样可用,你可能想在将数据集上传到 DataRobot 之前调整你的采样。此外,请注意,你可以通过将类别合并为两个类别来频繁地将问题简化为二元分类问题。这可能或可能不适用于你的用例,但如果需要,这是一个选项。此外,并非所有算法都适用于多分类问题。DataRobot 将自动选择合适的算法来构建多分类问题的模型。典型的指标包括 AUC、LogLoss 或平衡准确率。结果通常以混淆矩阵的形式显示(本章后面将描述)。典型的算法包括 XGBoost、随机森林和 TensorFlow。
时间序列/预测
在 DataRobot 中,时间序列或预测模型也被称为时间感知模型。在这些问题中,你拥有随时间变化的数据,并且你对预测/预测未来某个目标值感兴趣(图 2.2)。DataRobot 不仅支持时间序列的常用算法,如 ARIMA,还可以将这些问题适应为机器学习回归问题,然后应用 XGBoost 等算法来解决它们。这些问题要求将序列转换为平稳序列,并需要大量的特征工程来创建基于时间的特征。这些问题还要求你考虑过去可能重复发生的重要事件(如假日或大型购物日)。时间序列模型还需要通过一种称为回测的方法来处理验证和测试:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.9_B17159.jpg
图 2.9 – 时间序列问题的回测
在回测中,模型使用过去的数据构建,然后使用模型从未见过的较新和未知的保留数据进行测试。这种基于时间的保留数据切片也被称为时间外验证。DataRobot 自动为你自动化了许多这些任务,我们将在后面更详细地看到。
算法
让我们回顾一下 DataRobot 中使用的一些主要算法。在这里,我们只提供这些算法的高级概述。这些算法可以通过更改它们的超参数来针对特定问题进行调整。要更详细地了解任何特定算法,你可以参考机器学习书籍或 DataRobot 文档。一些重要的算法如下:
- 随机森林。随机森林模型是通过创建多个决策树模型,然后使用输出的平均值来构建的。这是通过创建训练数据的自助样本并在这些样本上构建决策树(图 2.10)来实现的:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.10_B17159.jpg
图 2.10 – 随机森林
随机森林模型可以处理缺失数据和非线性,并在许多情况下证明效果极佳。随机森林模型既可以用于回归问题,也可以用于分类问题:
-
XGBoost:也称为eXtreme梯度提升树,是基于决策树的算法,因其通常能产生非常有效的预测并可以处理缺失值而变得非常流行。它们可以处理非线性问题和特征之间的交互。XGBoost 通过创建一个随机森林并在先前树的残差上创建树来构建在随机森林模型之上。这样,每一组新的树都能产生更好的结果。XGBoost 可以用于回归问题,也可以用于分类问题。
-
Rulefit:Rulefit 模型是由简单规则组成的集成模型。你可以将这些规则想象成像决策树一样串联在一起。Rulefit 模型更容易理解,因为大多数人都能理解将规则组合起来解决问题。DataRobot 通常会构建这个模型来帮助你理解问题并提供洞察。你可以访问模型标签页的洞察部分,查看从 Rulefit 模型生成的洞察以及给定规则对问题的有效性。它们可以用于分类问题,也可以用于回归问题。
-
ElasticNet、岭回归、Lasso 回归:这些模型使用正则化来确保模型不会过拟合且不会过于复杂。正则化是通过添加更多特征的惩罚来实现的,这反过来迫使模型要么丢弃一些特征,要么减少它们的相对影响。Lasso 回归(也称为L1 回归)使用的是系数的绝对值作为惩罚权重。使用 Lasso 的效果是尝试将系数减少到零,从而选择重要的特征并移除那些贡献不大的特征。岭回归(也称为L2 回归)使用的是平方系数作为惩罚权重。这种影响是减少系数的幅度。ElasticNet用于指代同时使用 Lasso 和岭正则化的线性模型,以产生既简单又正则化的模型。当你有很多相互关联的特征时,这非常有用。
-
逻辑回归:逻辑回归是一种用于二元分类的非线性回归模型。输出形式为概率,值在 0 到 1 之间。这通常与一个阈值一起使用,以将值分配为 0 或 1。
-
SVM(支持向量机):这是一种试图找到最佳分离类别的分类算法。在二维空间中,这种算法的样子很容易理解(图 2.11),但该算法在高维空间中表现良好。SVM 的另一个优点是它能够通过使用非线性核函数来处理非线性,这可以将问题线性化:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.11_B17159.jpg
图 2.11 – 监督学习算法的目标
-
GA2M(广义加性模型):这是那些罕见算法之一,它提供了可理解性,同时在非线性问题中也能提供高准确度。名字中的数字“2”代表其建模特征之间相互作用的能力。GAM 模型的输出是单个特征效果的输出之和,这些效果已经被分箱。由于 GAM 允许这些效果非线性,它可以捕捉问题的非线性特征。模型的结果可以用一个简单的表格表示,该表格显示了每个特征对整体答案的贡献。这种表格表示方式容易被大多数人理解。对于理解和可解释性非常重要的行业或用例,这可能是一个最佳选择之一。
-
K-Nearest Neighbors:这是一个非常直接的算法,它找到 k 个最近的数据点(基于一种特定的距离计算方式)。现在它为这些 k 个点找到分类答案。然后它确定得票最多的答案,并将其作为答案。默认的距离度量是欧几里得距离,但 DataRobot 会根据数据集选择合适的度量。用户也可以指定要使用的特定距离度量。
-
TensorFlow. TensorFlow 是一种基于深度神经网络的深度学习模型。深度神经网络是指由人工神经元集合构成的深层隐藏层。这些神经元携带高度非线性的激活函数,使它们能够适应高度非线性问题。这些模型在不需要特征工程的情况下,能够产生非常高的准确度,但与其它算法相比,它们需要更多的训练数据。这些模型通常被认为非常不透明,容易过拟合,因此不适合某些应用。它们在特征和特征工程难以提取的应用中特别成功,例如图像处理。这些模型可以用于回归问题,也可以用于分类问题。
-
Keras 神经网络:Keras 是一个基于 TensorFlow 构建的高级深度学习库,它允许将许多类型的深度学习模型集成到 DataRobot 中。作为一个高级库,它使得构建 TensorFlow 模型变得容易得多。前述章节中描述的一切都适用于 Keras。在 DataRobot 中的特定实现非常适合稀疏数据集,并且特别适用于文本处理和分类问题。
无监督学习
无监督学习问题是指那些没有提供答案或标签的问题。这类问题的例子包括聚类或异常检测。DataRobot 对于这些问题没有太多提供,但它确实有一些异常或离群值检测的能力。这些问题是指那些数据点在非常罕见的情况下表现出不寻常的情况。例子包括欺诈检测、网络安全漏洞检测、故障检测和数据离群值检测。DataRobot 允许你设置一个没有目标的项目,然后它会尝试识别异常数据点。对于任何聚类问题,你应该尝试使用 Python 或 R 来创建聚类模型。
强化学习
强化学习问题是你希望学习一系列由代理做出的决策,以便实现某个特定目标。这个目标与一个奖励相关联,这个奖励是给予代理的,以表彰它完全或部分地实现了目标。对于这种训练没有可用的数据集,因此代理必须尝试多次(使用不同的策略)并在每次尝试中学习一些东西。经过多次尝试,代理将学会产生最佳奖励的策略或规则。正如你现在可以猜到的,这些算法在没有数据但可以在现实世界(或合成世界)中反复实验的情况下工作得最好。正如我们之前讨论的,DataRobot 不是这类问题的合适工具。
集成/混合模型
集成是一种创建聚合或混合其他模型预测的模型的技术。不同的算法有时能够更好地利用问题的不同方面或数据集。这意味着很多时候,通过结合几个好的模型,你可以提高预测精度。当然,这伴随着复杂性和成本的提高。DataRobot 提供了许多混合方法,并且在大多数情况下,它会自动为你的项目构建混合模型。然后你可以评估精度提高是否足以证明额外的复杂性是合理的。
蓝图
在 DataRobot 中,每个模型都与一个蓝图相关联。蓝图是 DataRobot 用来训练特定模型的一步步食谱。参见图 2.12以获取示例:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.12_B17159.jpg
图 2.12 – 模型蓝图
蓝图显示了 DataRobot 构建特定模型所采取的所有步骤,包括 DataRobot 所做的任何数据准备和特征工程。点击任何特定的框将显示采取的行动、使用的参数以及特定算法的文档。这也为您的建模项目提供了出色的文档,这些文档是自动为您创建的。
现在,让我们看看如何确定算法的表现如何。为此,我们需要一些性能指标。
性能指标
DataRobot 为模型提供了一系列性能指标。您必须指定您想要使用的指标来优化您项目的模型。通常,最佳指标是 DataRobot 推荐的指标。一旦构建了模型,DataRobot 也会计算其他指标,因此您可以在多个指标上查看您模型的结果。请记住,没有哪个指标适合所有情况,您在选择评估结果的指标时应谨慎。以下是一些关于常用指标的详细信息:
-
RMSE(均方根误差):RMSE 是一种首先计算误差平方(实际值与预测值之间的差异)的指标。然后,在整个数据集上对这些值进行平均,然后计算这个平均值的平方根。鉴于这个指标依赖于值的规模,其解释依赖于问题。您不能比较两个不同数据集的 RMSE。这个指标在数据不是高度偏斜的回归问题中经常被使用。
-
MAPE(平均绝对百分比误差):MAPE 在某种程度上与 RMSE 相似,因为它首先计算百分比误差的绝对值。然后,这些值在数据集上平均。鉴于这个指标按百分比缩放,比较不同数据集的 MAPE 更容易。然而,您必须注意,非常小的值(或零值)的百分比误差往往会看起来很大。
-
SMAPE(对称绝对百分比误差):SMAPE 与 MAPE 类似,但解决了上述讨论的一些缺点。SMAPE 限制了上限百分比值,这样小的值的误差就不会压倒指标。这使得 SMAPE 成为一个可以轻松跨不同问题比较的好指标。
-
准确率:准确率是用于分类问题的一种指标。它可以表示如下:
准确率 = 正确预测的数量/总预测数量
它本质上是指正确预测的数量与所有预测数量的比率。对于不平衡问题,这个指标可能会误导,因此它从不单独用来确定模型的表现如何。它通常与其他指标结合使用。
-
Balanced Accuracy: 平衡准确率通过在预测的两个类别中归一化准确率来克服准确率的问题。假设两个类别是 A 和 B:
(a) A 的准确率 = 正确预测 A 的数量/总数 A
(b) B 的准确率 = 正确预测 B 的数量/总数 B
© 平衡准确率 = A 的准确率 + B 的准确率/2
平衡准确率实际上是 A 的准确率和 B 的准确率的平均值。
-
AUC(ROC 曲线下的面积): AUC 是 ROC(接收者操作特征)曲线下的面积。这个指标经常用于分类问题,因为它也克服了与准确率指标相关的缺陷。ROC 曲线表示真正例率和假正例率之间的关系。AUC 从 0 到 1,它显示了模型区分两个类别的效果。0.5 表示随机模型,因此您希望模型的 AUC 大于 0.5。
-
Gamma Deviance: 当目标值呈伽马分布时,使用 Gamma 偏差进行回归问题。对于此类目标,gamma 偏差衡量预测值与实际值之间的平均偏差的两倍(使用对数似然函数)。一个拟合完美的模型将具有零偏差。
-
泊松偏差: 泊松偏差用于回归问题,当目标是计数偏斜数据时。它的工作方式与伽马偏差非常相似。
-
LogLoss: LogLoss(也称为交叉熵损失)是衡量分类问题预测概率不准确性的指标。值为 0 表示模型完美,随着模型变差,logloss 值增加。
-
R-squared: R-squared 是用于回归问题的指标,它说明了拟合线如何代表数据集。其值介于 0 和 1 之间。0 表示模型较差,无法解释任何变化,而 1 表示模型完美,解释了 100%的变化。这是最常用的指标之一,但它可能存在一个问题,即通过添加更多变量可以提高它,而不一定改善模型。它也不适用于非线性问题。
现在我们已经讨论了一些常用的指标,让我们看看如何查看其他结果来评估模型的质量,以及不同特征对模型的影响。
理解结果
在本节中,我们将讨论各种指标和其他信息的可视化,以理解建模练习的结果。这些是重要的可视化,除了检查上一节中讨论的模型指标外,还需要仔细检查。这些可视化是 DataRobot 为它训练的任何模型自动生成的。
升值图
抬升图显示了模型在预测目标值方面的有效性。由于数据点通常非常多,无法在一个图表中显示,因此抬升图对输出进行排序,并将数据聚合到多个桶中。然后,它比较每个桶中预测值和实际值的平均值(图 2.13):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.13_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.13_B17159.jpg
Figure 2.13 – Lift chart
前面的抬升图显示了预测是如何从低到高排序并分桶的(本例中有 60 个桶)。现在你可以看到每个桶中的平均预测值和平均实际值。这让你对模型在整个范围内的表现有一个感觉。你可以看到模型表现较差的范围。如果模型在对你业务重要的范围内表现不佳,你可以进一步调查以了解如何在该范围内改进模型。你还可以检查不同的模型,看看是否有在更重要的区域内表现更好的模型。抬升图对于回归问题更有意义。
混淆矩阵(二分类和多分类)
对于分类问题,评估模型结果的最佳方法之一是查看混淆矩阵及其相关指标(图 2.14)。此选项卡适用于多分类问题:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.14_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.14_B17159.jpg
Figure 2.14 – Confusion matrix
混淆矩阵映射了每个类别的预测值与实际值的计数(频率)。让我们看看轿车列。大绿色圆圈表示我们正确地将轿车分类为轿车多少次。在该列中,你还会看到红色点,表示模型预测它为轿车,但实际上它是另一种类型。你可以看到所有类别的这些情况。相对尺度应该能给你一个关于你的模型表现如何以及它在哪些方面有困难的印象。
如果你选择一个特定的类别,你可以查看右侧的类别特定混淆矩阵。你可以看到两列(+表示预测为轿车,-表示预测为非轿车)。同样,你看到两行(+表示它是轿车,-表示它不是轿车)。你还可以看到一些关键的定义和指标:
-
真阳性(TP)= 当它是轿车且预测结果显示是轿车时
-
假阳性(FP)= 当它不是轿车但预测结果却显示是轿车时
-
真阴性(TN)= 当它不是轿车且预测结果显示不是轿车时
-
假阴性(FN)= 当它是一辆轿车但预测结果却显示不是轿车时
使用这些,我们现在可以计算这个类别的某些特定指标:
-
精确度 = 预测正确的比例 = TP/所有正预测 = TP/(TP+FP)
-
召回率 = 实际正确的比例 = TP/所有正实际值 = TP/(TP+FN)
-
F1 分数 = 精确度和召回率的调和平均。所以,1/F1 = 1/精确度 + 1/召回率
ROC
此标签适用于二元分类问题。ROC(接收者操作特征)曲线是真正例率和假正例率之间的关系。此曲线下的面积称为 AUC。它从 0 到 1,显示了模型在两个类别之间的区分能力(图 2.15):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.15_B17159.jpg
图 2.15 – ROC 曲线和混淆矩阵
你还可以看到(之前描述的)混淆矩阵和两个类别的相关指标。你可以移动阈值并评估产生的权衡和累积收益。由于大多数问题在真实正例与真实负例具有不同业务价值的情况下并不对称,你应该选择适合你业务问题的阈值。
随时间变化的准确率
此标签适用于时间序列问题(图 2.16)并比较序列随时间变化的实际值与预测值:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.16_B17159.jpg
图 2.16 – 模型准确率随时间变化
你可以查看这些值对于回测或保留数据集。图表将清楚地显示模型表现不佳的地方以及你可能想要关注以改进模型的地方。
特征影响
除了模型性能之外,你首先想要了解的是特征在模型性能方面的影响程度。特征影响标签(图 2.17)可能是理解你的模型最关键的部分:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.17_B17159.jpg
图 2.17 – 特征影响
图形显示了一个按重要性排序的最重要特征列表。对于每个特征,你可以看到该特征对模型相对影响的程度。你可以看到哪些特征贡献很小;这可以通过移除一些影响很小的特征来创建新的特征列表。
特征拟合
特征拟合标签(图 2.18)显示了特征的另一种贡献视图。图形显示了按重要性排序的特征:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.18_B17159.jpg
图 2.18 – 特征拟合
对于选定的特征,它显示了预测值与特征值范围的实际情况的比较。回顾这些关键特征的图表可以提供关于特征如何影响结果以及表现较好的值范围和表现最差的值范围的很多见解。这有时可能会突出你可能需要收集更多数据以改进模型的数据区域。
特征效应
特征效应显示的信息与特征拟合(图 2.19)非常相似。在此图形中,特征按特征影响排序。此外,特征效应专注于部分依赖性:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.19_B17159.jpg
图 2.19 – 特征效应和局部依赖性
局部依赖性图是您想要仔细研究的最重要图表之一。这些图表告诉您特征值的变化如何影响其他特征值范围内目标平均值的改变。这种洞察力对于理解业务问题、理解模型正在做什么以及更重要的是,模型的哪些方面是可操作的以及哪些值范围会产生最大影响至关重要。
预测解释
预测解释描述了针对特定实例或正在评分的行的特征值来解释特定预测的原因(图 2.20)。请注意,这与特征影响不同,它告诉你特征在全局级别的重要性:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.20_B17159.jpg
图 2.20 – 预测解释
预测解释可以为整个数据集或数据子集生成,如前述截图所示。例如,它将提供模型预测特定值的前三个原因。在某些用例中,出于监管原因,这些解释有时是必需的,但生成这些解释是一个好主意,因为它们有助于理解模型为何以某种方式预测,并且在验证或捕捉模型中的错误时非常有用。DataRobot 使用两种算法来计算解释:XEMP(基于示例的解释)或Shapley 值。XEMP 支持更广泛的模型,并默认选择。Shapley 值将在下一节中描述。
Shapley 值
Shapley 值(SHAP)是生成预测解释的另一种机制(图 2.21)。如果您想使用 SHAP 进行解释,您必须在按下开始按钮之前的项目设置的高级选项中指定这一点。一旦 DataRobot 开始构建模型,您就不能切换到 SHAP。SHAP 值仅适用于线性或基于树的模型,并且对于集成模型不可用:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_2.21_B17159.jpg
图 2.21 – 基于 SHAP 的解释
SHAP 值基于合作博弈论,它试图为协作项目中团队成员的贡献分配价值。在机器学习的背景下,它试图在特征团队协作进行预测时分配特定特征的价值贡献。SHAP 值是可加的,您可以轻松地看到最终答案中有多少是由于特定特征值。
摘要
在本章中,我们介绍了一些基本的机器学习概念,这些概念在我们继续阅读剩余章节时将非常有用,并且在你的数据科学之旅中也将非常有用。请注意,我们只对概念进行了高层次概述,根据你的工作角色,你可能需要更深入地探索一些领域。我们还将这些材料与 DataRobot 执行某些功能的方式以及你需要更加关注的地方联系起来。
希望这已经让你对 DataRobot 将显示的内容以及在你项目不同阶段需要关注的地方有了更深的了解。由于 DataRobot 自动化了相当一部分模型构建和预测任务,你可能会有忽略 DataRobot 为你自动生成的大多数输出的诱惑。请抵制这种诱惑。DataRobot 软件在产生这些输出时投入了大量的努力和资源,这是有很好的理由的。它还在为你做大量的基础工作,所以请充分利用这些功能。具体来说,我们涵盖了以下内容:在数据准备过程中需要注意哪些事项?哪些数据可视化对于理解你的数据集很重要?关键机器学习算法有哪些,你何时使用它们?你如何衡量模型结果的好坏?你如何评估模型性能并理解模型对你问题的描述?
现在我们已经了解了基础知识,我们将在下一章开始我们的数据科学之旅,学习如何理解业务问题以及如何将其转化为可以通过机器学习解决的问题的规范。
第三章:理解和定义商业问题
本章涵盖了成功最关键的主题,但在数据科学课程或书籍中并未详细讨论。尽管理解并定义商业问题的主题被简要提及,应该被执行,但讨论很少深入到如何正确执行。在本章中,我们将探讨具体工具和方法,这些工具和方法可以用来理解所考虑的系统,并确定需要解决的问题。
本节与 DataRobot 无关,因为 DataRobot 无法帮助你完成这个过程的一部分。这是数据分析师、业务分析师或数据科学家必须做的事情。正确定义商业问题很难——它无法自动化,而且大多数时候也没有得到妥善处理。如果你掌握了这项技能,你将变得无价。这是一个始终需要经验丰富的数据科学家(或未来他们可能被称作什么)的关键领域。
到本章结束时,你将了解到一些核心概念和方法,这些是确保你解决正确问题的必要条件。本书的其余部分将解释如何以正确的方式解决这些问题。
在本章中,我们将涵盖以下主要主题:
-
理解系统背景
-
理解为什么和如何
-
找到商业问题的根源
-
定义机器学习(ML)问题
-
确定负责任的人工智能(AI)的预测、行动和后果
-
实施和创造价值
理解系统背景
所有问题都出现在系统的背景下。系统可能是一个生物体的单个细胞、全球人口或整个经济。同样,所有解决方案都需要适应系统。技术解决方案(例如,人工智能解决方案)通常需要改变流程、人员、技能、其他 IT 系统,甚至商业模式才能有效。对于一个组织来说,系统可能是其整个供应链、竞争对手和客户。鉴于系统的定义可能非常广泛,通常建议你想象系统比你所考虑的问题更广泛。你希望你的问题所触及的所有组成部分或代理都成为系统背景的一部分。定义系统边界既是艺术又是科学,并且是一个迭代过程。鉴于你将从更广泛的视角审视系统,这也意味着相同的系统背景将适用于多个机器学习项目或用例。在这里获得的理解将在许多项目中带来回报。
在组织或行业中工作过的数据科学家或分析师可能会本能地学习到许多问题的系统性方面。他们可能会觉得他们不需要进一步调查,因为他们已经理解了关键问题。虽然这可能是对的,但人们也会发展出盲点,开始忽视关键缺失的部分或携带隐含的假设,这些假设大多数情况下是正确的,但有时是错误的。使用结构化方法来捕捉系统性理解有助于克服这些问题,并确保每个人都从共同的理解出发。这些问题通常是导致下游项目出现问题或延误的问题。让我们通过创建上下文图来看看我们如何构建这种理解。
上下文图是您系统的概览,显示了关键参与者和他们的互动,如图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_03_01.jpg
特定的图表绘制惯例并不那么重要;更重要的是,您需要理解和记录组件,并了解它们如何相互作用。有许多图表绘制惯例,所以请随意使用您喜欢的。确保在图表中捕捉到每个主题的三到五个重要实例。箭头不必是单向的。
当您查看这个简单的图表时,您会同意我们应该了解所有这些信息。当您尝试构建这个图表时,您可能会惊讶地发现找到和捕捉这些信息并不那么简单。组织中的大多数人都会对这些事物有所了解,但可能无法精确地指定最重要的客户或关键绩效指标(KPI)等。在大多数组织中,可能需要一些时间和讨论才能将这些内容整理出来。图表中的大多数组件都很容易理解,但有些可能有些令人困惑,因此值得稍作讨论,如下所述:
-
关键目标:关键目标是可衡量的指标,让您能够及时确定您是否正在实现目标。这些通常以财务表现、市场份额、客户满意度、声誉、质量水平和合规性等形式出现。拥有精确和可衡量的定义以及与组织目标的协调一致非常重要。这些对组织来说具有真正的价值,了解您的项目和模型如何影响这些因素也很重要。
-
外部驱动因素/风险:这些是影响关键目标但不受您控制的外部因素或驱动因素。请注意,我们不是在讨论具体事件,而是在讨论可能被视为事件的因素的价值观变化——例如,该因素可能是国内生产总值(GDP)的变化。这不在我们的控制范围内,-20%的值可能表明金融危机。因此,我们在这个案例中的驱动因素是 GDP 变化,而不是金融危机。
-
关键决策杠杆:这些也是影响关键目标的因素,但它们在我们可控范围内。例如,员工的数量是我们可控的因素(因为我们可以决定雇佣多少人)并且它将对结果产生影响。其他例子可能包括在新技术或市场营销上投入多少,等等。这些可能是战略决策或选择,例如创建新的分销渠道、捆绑产品等。无论类型如何,重要的是确保想法以精确的方式被捕捉——例如,如果新的分销渠道是一个驱动因素,你应该知道五个实际的选择是什么。
警告提示
请不要陷入哲学辩论。快速创建你的图表的第一版,并在需要时进行改进。在分析可能影响并改变当前思考的情况下,可以带着第一稿继续前进。
如你现在可能已经猜到的,强调这三个项目的原因是它们的历史数据对于任何数据科学项目都至关重要。你也会同意,关于这些因素的数据对于运营以及战略决策都至关重要,但你可能会发现这些数据可能不容易获得或可能存在质量问题。此外,特别关注关键知识库。这些将是包含您组织数据的数据库、数据仓库、数据湖或文件系统。我们将在以下章节中再次讨论这些项目。
现在我们已经了解了背景,我们想要了解我们的系统是如何运作的,以及为什么它以某种方式表现。这两个方面对于理解系统至关重要。在下一节中,我们将描述如何创建这种理解。
理解“为什么”和“如何”
理解一个系统的功能和其行为的关键在于以下方面:
-
流程:对象和信息是如何通过系统的流程流动的?
-
交互:不同的实体或系统组件之间是如何相互作用的?
-
状态:一个实体的状态是如何随时间演变的?
-
因果关系:有哪些因果关系?
每个这些方面都通过图表来表示。对于流程建模、因果建模和交互图,存在许多图表绘制规范。这些规范在不同的领域中应用方式不同。你可以遵循你喜欢的或已经熟悉的任何规范。在这本书中,我们将遵循某些适合计算建模的规范。这意味着这些图表可以与数据结合,转化为可用于分析的模型。这将在我们项目的后期阶段变得很重要。如何创建这些图表并将它们转化为计算模型的具体细节超出了本书的范围,但如果你对此感兴趣,可以寻找其他资源来学习这些技术。即使你不创建计算模型,这些图表也会提供有用的见解,你可以在你的机器学习项目中使用。可能你的组织中有一些人构建过——或者正在构建——这样的图表。你应该找到这些人,并请求他们在构建这些图表时提供帮助。让我们更详细地看看这些方面的每一个。
流程图
在组织的运营中,有几个功能具有定义良好的流程。对象、人员或信息通过这些流程流动,如下面的图表所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_03_02.jpg
图 3.2 – 流程图
根据系统环境,你已经知道组织中最重要的流程。你可以开始为这些关键流程绘制图表——或者至少,与你的项目相关的那个流程。构建端到端流程流是非常重要的——例如,整个客户旅程,或者一个产品的整个开发流程。同样重要的是要从客户的角度(灰色框)理解流程,而不仅仅是内部流程(白色框)。确保捕捉到故障点或返工路径,或者一个流程可能突然结束而不是正常完成的地方。当实体通过这些流程流动时,会做出决策或进行计算,这些可能是机器学习问题的候选者。无论你从哪个项目开始,识别沿途的其他潜在机会都是一个好主意。结果可能表明,以不同的方式看待流程或构建不同的机器学习模型可能会带来更大的利益,或者可能预防当前项目的需求。无论结果如何,捕捉这些信息都是重要的。顺便说一句,你注意到在先前的流程图中客户没有收到拒绝消息吗?正如你可以想象的那样,这是客户体验中一个重要的部分,却被忽略了。我相信错误会在某个时候被发现,但使流程明确会增加尽早发现并考虑它在构建你的模型时的机会。
除了构建图表外,捕捉关于过程的数据也很重要。你经常会遇到有人已经构建了流程图,但没有捕捉任何数据的情况。如果你正在阅读这本书,那么我不需要告诉你收集这些数据对于准确理解过程有多么重要。需要捕捉的典型信息包括每个步骤中流动的对象的数量和类型、每个步骤所需的时间、每个步骤所需的劳动力和资源、采取特定路径的概率、质量指标等等。如果关键流程没有捕捉到此类信息,那么尽快开始收集这些信息是很重要的。这些信息对于构建项目商业案例、作为模型中的有用功能以及帮助识别可能被隐藏的问题可能至关重要。
重要的是再次指出,你不想陷入术语争论,而是快速创建一个图表,足以帮助你理解过程中的情况,而不是包含每一个细微差别的非常详细视图。如果需要深入了解过程中的某些特定方面,重新审视这是可以的。
实际过程通常比我们在图 3.2中展示的要复杂一些,但并不太多,而且发现许多外部特定部门中这些任务完成的人不知道的事情并不罕见。在我的经验中,发现没有一个人理解整个过程的情况也并不罕见。这个练习本身就有价值,因为它可以突出关键问题,但对于构建模型以自动化此过程一部分的数据科学团队来说,尤其有价值。然而,我惊讶地看到数据科学团队在不了解过程的情况下构建模型如此多次。
交互图
在一个系统中,有许多交互发生,并不遵循固定的流程。这些交互可以按不同的顺序发生,需要保持灵活性,并且最好通过交互图来理解。那些有软件开发背景的人可能熟悉这样的图表,它们显示了软件组件或对象之间的交互。在我们的案例中,我们感兴趣的是理解系统关键参与者之间的交互,如下面的图表所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_03_03.jpg
图 3.3 – 交互图
该图显示了一个市场,其中几个竞争对手在销售他们的产品。客户来到这个市场购买产品。竞争对手在各个媒体渠道上花钱做广告,并设定他们的价格。消费者受到广告、定价和其他消费者口碑的影响。在任何给定时间,许多这些互动都在进行中,创造了一个复杂且动态的环境。如果你在构建定价模型,你必须考虑到所有这些因素,否则你的模型将对数据有很好的统计拟合,但在实际操作中却证明是无效的。
注意,关键参与者可以是人、组织、机器人、市场、欺诈者等等。构建这个和其他图背后的想法是将你所知道的内容编码化并使其明确化。这使每个人都能对系统有一个共同的认识,并质疑假设或指出缺失的信息。同样重要的是要确保你将这些图视为需要用数据来检验的假设。你必须不断地问自己,数据是否支持我们在这些图中所说的内容。如果不是,那么可能需要细化你的假设,或者可能缺少数据或其他数据质量问题。也许数据收集是有偏见的。我确信你听说过如何使用有偏见的预测数据导致完全错误的预测的故事。构建一个图并不能保证你将捕捉到有偏见的数据,但它确实提高了你捕捉到它的机会。
状态图
状态图捕捉了系统中某些重要实体或参与者状态的变化。典型的候选者包括客户和产品。与其他图一样,你只为系统中的重要或关键参与者构建这些图。
一个示例状态图可以在这里看到:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_03_04.jpg
图 3.4 – 状态图
状态图在概念上与马尔可夫链非常相似(这个概念表示系统从一个状态转换到另一个状态的概率,这种概率是固定的,并且不依赖于任何先前历史),但在状态图中,你不必假设历史不重要。状态图是为特定代理构建的。图 3.4显示了一个人随时间通过各种状态的状态图。箭头代表从一个状态到另一个状态的转换,并且人在给定状态下停留,直到他们转换到下一个状态。转换通常被认为是瞬时的。你也可以从转换概率的角度来考虑转换(在这种情况下,它开始类似于马尔可夫链)。这些图可以是分层的,因为一个状态可以被分解为子状态,而这些子状态可以通过转换相互连接。
除了构建图之外,你还想了解是什么导致了状态的转变。这是确定性的还是随机的?你还想收集有关这些转变发生频率和时间的资料,因为这些数据对于进一步分析和构建机器学习模型非常有用。一个行为者的转变可能会引起另一个行为者状态的转变,因此状态图也与交互图相关联。每个转变都是机器学习模型的潜在候选者,你可以使用数据来预测何时(以及哪个)转变可能会触发。正如你可以想象的那样,构建这些图将导致识别出可能被忽视的机会。
使用这些图,你现在已经理解了系统是如何运作的。我们现在可以看看是什么决定了系统的行为。
因果图
因果图旨在捕捉系统中存在的因果关系。这种理解可能正确也可能不正确。实际上,你可能永远无法证明因果关系。抛开哲学辩论不谈,你可以通过使用本节中概述的方法,并结合数据,大大提高你的理解。
一个示例因果图如下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_03_05.jpg
图 3.5 – 因果图
上述图示展示了房地产市场中的关系(这只是一个例子——它并没有显示所有因果关系)。它表明,随着利率上升,房屋销售量下降。房屋销售还受到需求和价格的影响。随着价格上涨,价格上涨可以增加需求,因为更多的人想要购买房屋以赚钱,但价格本身是一个阻碍。你可以看到,在这个简单的图中存在相反的效果和反馈循环。难怪动态让我们感到困惑,这通常会导致系统出现混乱。每个人都认为他们理解房地产市场是如何运作的,但在复杂的动态面前,真正的理解很难实现。许多商业情况中也存在类似的动态。建立预测房价的机器学习模型很容易,但理解整体动态则要困难得多。这种缺乏理解可能导致你使用优秀的机器学习模型做出糟糕的决策,因此,构建这样的模型对于理解你试图解决的问题的真实本质至关重要。这样的图对于理解和处理混杂变量以及反事实分析也非常有用 [Pearl]。
系统动力学领域还提供了一种因果模型的表示方法。这种表示方法结合了其他图表的一些思想与因果图,以创建一个可以非常具有洞察力的视图,并且可以轻松地转换为动态模拟模型。系统动力学本身是一个庞大的学科,关于这个主题有许多优秀的书籍和论文[斯特曼]。在这里,我将仅介绍这个概念及其外观,以及它如何有用。以下是一个系统动力学(也称为库存和流量)图的示例:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_03_06.jpg
图 3.6 – 系统动力学(库存和流量)图
该图将状态图、过程图和因果图中的思想捕捉到一个复合视图中,这种视图可以非常具有指导意义。想象一下产品的旅程,它随着状态的变化而变化,从原材料变为已发货产品。在这个例子中,每个方框代表特定状态下产品的数量——例如,组装产品方框代表所有已经组装并等待成为成品的产品。这发生在称为完成率的速率下。完成率取决于有多少组装员可以执行工作。你还会注意到,一些组装产品出现了缺陷。这些产品以称为缺陷率的速率流入缺陷产品方框。然后它们必须由维修人员修复。由于缺陷,无法达到发货目标,出现了短缺。这种短缺增加了对员工的压力,从而增加了倦怠。倦怠反过来又减少了组装员的人数(他们辞职或生病)。由于组装员人数减少,这减慢了完成率。这反过来又增加了压力,更多的人被转移到维修人员,因为维修可以更快地完成。这导致没有人担任预防工作,从而导致了恶性循环的持续,过程变得越来越积压。
这种动态在许多组织中都会发生,他们想知道为什么他们总是处于压力之下。一旦图表被布置出来,你就可以看到问题在于他们正在解决症状,而不是缺陷的根本问题。在这个简单的图表中很容易看出,但在更复杂的情况下,你可以对这些图表进行模拟以找到问题点。该图还有助于阐明过程、决策和商业目标之间的关系。这些图表可以模拟以了解决策的商业影响,以及部署机器学习模型的影响。这是以大多数人都能轻松理解的方式展示你努力价值的一种极好方式。
现在,让我们回到机器学习。如果这个分析没有完成,那么很可能是缺陷修复会被标记为问题,你很可能会构建一个模型来预测将产生多少缺陷或预测将发送多少物品。你会构建一个很好的模型,但这不会解决问题。关键问题是要找到导致缺陷的因素以及如何减少缺陷。这需要制造团队与数据科学团队紧密合作以找到解决方案。再次强调,关键点是除非有人进行这种分析,否则数据科学团队很可能会解决错误的问题。你可能认为这种情况不常发生,但我认为这种情况发生的频率比你想象的要高得多,因为真正的问题往往隐藏很长时间。
通常,最好将这些图中绘制的每个因果关系视为一个假设。这样,图就代表了一组假设。有一些统计和模拟方法可以用来验证这些假设。为此,你需要开始收集数据或开始发现数据存储的位置。现在我们已经了解了这些图,让我们看看我们是如何找到问题的根源的。
找到商业问题的根源
有些问题容易解决,而有些问题则证明非常难以解决。其中一个原因是,当问题的症状出现在其他地方并且经过一段时间后,很难知道问题真正在哪里。根据定义,症状是明显可见的——它们是明确的,你可以很容易地收集关于它们的数据。另一方面,潜在的问题可能发生在其他部门或建筑中,并且不可见,因为它不会立即引起疼痛。很可能是没有收集关于根本问题的数据,或者收集这些数据可能过于困难。鉴于机器学习的性质,几乎可以肯定的是,你得到的所有数据都是关于症状的。如果你很幸运,你可能会得到一些关于根本问题的数据(尽管你可能不知道)。
一种开始的方法是使用一种称为“五问法”的旧方法,它基本上涉及问“为什么?”五次以找到根本原因。很多时候,每个级别可能会有多个原因。因此,在实践中,许多人使用另一种称为“鱼骨图”的图来捕捉这些信息,如图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_03_07.jpg
图 3.7 – 鱼骨图
在前面的鱼骨图示例中,我们试图理解为什么会有软件缺陷问题。当你问“为什么”问题时,并捕捉到原因,你开始添加潜在的原因。你继续这个过程,直到你觉得你已经捕捉到了问题的本质。正如你所看到的,这部分是因果图,可以用作构建系统因果模型的开端,同时保持对特定问题的关注。然后可以收集数据来证实或拒绝假设。正如你所看到的,这个鱼骨图将告诉我们图 3.6 中看到的系统动态图。这个练习的关键是要理解根本原因,并着手解决这个问题。我希望你开始看到,准确预测某件事并不总是等同于解决真正的问题,你必须小心设置你的 ML 问题,以确保你的项目成功。此外,请注意,可能存在导致问题的多个原因,你可能必须解决多个问题才能看到问题的显著缓解。另一方面,如果不了解全貌,只解决一个方面(比如员工倦怠),可能会导致你得出倦怠不是问题的结论。在组织中,得出错误的结论,然后将其纳入组织的神话中——"我们已经尝试过了,但不起作用。"并不罕见。
现在我们已经确定了需要解决的商业问题,让我们看看我们如何将其转化为一个 ML 问题。
定义机器学习问题
在我们深入探讨机器学习的细节之前,重要的是要注意,并非所有问题都适合用机器学习来解决。对于一个问题来说,要成为好的候选者,它应该具有以下特征(我们现在将只关注监督学习(SL)问题):
-
如果一个算法能够预测它,那么有一个清晰的目标或标签值将是有用的。在没有算法的情况下,这个值仍然是未知的,需要人的判断,或者需要付出大量努力才能确定。有时,目标可能不是实际感兴趣的实际变量,而是计算中的关键组成部分。这部分并不总是显而易见,但你在本章前面部分所做的问题分析无疑将有助于阐明哪个变量是最佳的目标。
-
你可以访问一个足够大的历史数据集,其中包含你希望预测的目标或标签值。你需要创建一个包含相关数据的来源列表,并开始理解它们包含的数据。
-
确定哪种类型的 SL 问题最适合你的问题(回归、分类或时间序列)。有时,你可以将一种类型的问题转化为另一种类型。
-
通常在准确性、可解释性和可理解性之间存在权衡。对于你的业务问题,考虑什么更重要是很重要的。在许多情况下,我们愿意牺牲准确性以提高可理解性。这反过来又决定了你应该选择哪些算法和解释方法。
你将不得不审查你的数据集和业务问题定义,以确定你是否可以制定一个规范,以满足之前列出的条件。在这个过程中,可能需要进行几种转换,例如这些:
-
将目标进行转换,使其作为输出更有价值或更适合解决业务问题。以下是一些例子:
(a) 如果数值目标值在一个非常大的值范围内,或者分布具有高度偏斜,那么你可以尝试将目标对数化作为新的目标。
(b) 如果实际值不如范围重要,那么你可以创建分箱,并使用分箱值作为目标。
© 有时,值的改变或变化率可以作为一个更好的目标。
-
根据因果图创建交互特征。以下是一些例子:
(a) 在因果模型中,那些未直接观察到但可以通过组合其他各种特征来计算的中间变量。
(b) 如果你的目标是日志形式,那么创建各种特征的日志可能是有意义的。
© 类似地,如果你想要某些特征在业务问题中具有特殊意义,你可能想要对这些特征进行分箱。
(d) 探索创建变化率特征是否对你的模型很重要。
-
识别出在因果图中出现但不在你的数据集中存在的缺失数据。根据其重要性和获取的难易程度,你可能希望在构建模型之前收集这些数据。另一个选择是与使用你已有的数据进行模型构建的过程并行启动数据收集。在后一种情况下,当你收集到数据后,你总是可以在下一次迭代中重新审视模型。
此外,你还必须考虑你将如何定义和评估错误。哪个指标最适合这个问题?我们在第二章,“机器学习基础”中介绍了指标,DataRobot 会自动为问题选择一个合适的指标。我发现大多数时候选择都非常好,所以除非你有充分的理由不这样做,否则遵循推荐是一个好主意。除了指标之外,你还需要考虑你是否更关心特定范围内的错误,而不是其他范围的错误——例如,你可能希望在高价值范围的特性上比在低价值范围内更准确。在这种情况下,你可以考虑使用这个数值特征(这必须是一个非目标特征)作为计算错误指标的权重。你可以在“附加”选项卡下的高级选项中找到这个设置,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_03_08.jpg
图 3.8 – 其他选项
上述截图显示了选择用作预测权重的特征的选项。请注意,这必须在项目开始时设置。一旦模型构建开始,就不能更改此设置。
一旦你定义了机器学习问题,DataRobot 就会开始构建模型。我们将在后面的章节中介绍这一点。现在,我们想要讨论模型构建并能够生成预测时会发生什么。
确定负责任的 AI 的预测、行动和后果
在模型在 DataRobot 中构建和部署之后,可能会觉得我们的工作已经完成——但并非如此。你应该开始分析预测概览的样子,并开始与用户和利益相关者讨论将要采取的行动的细节。你帮助构建的模型可能会在你的系统中引入许多变化,并影响其他人。因此,确保这些影响不是负面的非常重要。确保你的模型不会造成伤害被称为负责任的 AI。这将建立在你在理解阶段通过各种图表所做的工作之上。
正如在之前的章节中我们看到因果图如何帮助你将特征与目标相关联一样,我们也可以看到目标如何影响系统的其他部分。该图应揭示目标如何影响关键目标或结果;它还应揭示将改变系统其余部分行为的关键反馈循环,以及给出其他后果的暗示。这使得理解并计算模型的投资回报率(ROI)相对简单。数据科学团队表达的一个常见挑战是他们发现很难表达模型的影响。正如你现在所看到的,我们从因果角度理解系统所投入的工作也有助于确定模型的企业影响。
很常见的是,大多数系统并不提供免费的午餐——总是有权衡。你的行动可能会改善一个目标,但可能会损害另一个。理解这些权衡并确保你的利益相关者也理解它们非常重要。即使模型会提供正的投资回报率,它也可能在其他领域降低性能,以至于你可能不想继续进行。其中一些后果可能涉及监管或伦理问题。这些领域通常被忽视,直到后来(痛苦地)被发现。进行这种分析的一个关键好处是确保你能够尽早发现问题。
另一种常用的机制是模拟系统动态图。这使你能够理解你系统的动态行为,并可以作为虚拟实验。虚拟实验或模拟让你在发布模型之前,在一个安全的环境中测试不同的策略。这不仅可以帮助你避免代价高昂的错误——它还常常能提出改进或策略,以进一步优化收益。许多数据科学项目未能成功的原因是,数据科学团队很少这样做,通常没有进行这种分析所需的技能,并且历史上并没有非常重视这一部分。让我们来看一个系统中的机器学习模型的一个简单例子:
![图 3.9 – 影响分析
![图片 B17159_03_09.jpg]
图 3.9 – 影响分析
在这个例子中,你有一个使用一些特征生成促销价格的促销模型。该模型监控销售情况并相应地更新价格。由于某种原因(数据库更新、审批等),在电子商务网站上更新这些价格存在延迟。这导致销售数据出现滞后,建模团队并不知道,因为建模团队没有理解整个流程以及更新网站价格所需的时间。如果你对这个简单的图进行分析,你会发现这种带有延迟的反馈循环会产生振荡行为。这意味着定价将始终不准确——有时会更高,有时会更低。这种行为与你在大多数模型结果中看到的行为有些相似,因此这种影响可能会被忽略。即使模型本身没有问题,系统表现也可能不佳。我保持这个例子非常简单,以便说明问题。你可以想象,如果情况更复杂,大多数人可能无法自己发现问题,直到为时已晚。
反过来,您还可以评估与现状相比,您的模型将产生多少销售影响。这是展示投资回报率和您工作的商业价值的好方法。由于基于这些图表的模拟是您业务的视觉表示,大多数人发现它比叙述或电子表格更容易理解。这也帮助获得对您的机器学习模型的接受。
虽然 DataRobot 并不帮助处理这些方面的许多问题,但它确实提供了机制来确定您的模型是否在受保护特征上存在偏差,以及测量模型中存在的偏差量。结合前面的分析,这可以在很大程度上确保您的模型没有偏差,并且结果不会被用于违背您组织价值观的方式。现在我们对于模型的预期结果感到满意,我们可以开始部署过程。
运营和创造价值
在您的基础设施中实施模型可能是一项复杂的任务。DataRobot 简化了部署的一些方面,但还有其他部署部分超出了 DataRobot 的范围,可能相当具有挑战性。让我们讨论以下这一过程中的任务:
-
将模型作为应用程序编程接口(API)部署:非常早期的任务之一是将您的模型部署为 API,以便它可以根据需要提供预测。您将不得不决定这需要是批量操作还是实时操作。DataRobot 自动化了设置这一过程的大部分任务,您可以在几分钟内拥有一个提供预测的 API。
-
与业务系统集成和测试:拥有一个 API 只是故事的一部分——您现在需要将此 API 集成到您的业务系统中。有时,您可以通过独立的 Excel 文件或网页向用户提供预测,但对于许多用例,集成是必需的。这有时可能需要时间和精力,并可能减慢事情的发展。许多组织开始使用的另一个潜在途径是机器人流程自动化(RPA)。如果您的用例适合 RPA 实现,DataRobot 提供与多个 RPA 工具的集成,可以加快集成过程。
-
构建最终用户界面:如果您的用例需要完全自动化,则不需要此操作,但大多数用例将需要一定程度的用户参与。在集成完成之后,您仍然需要某种方式让用户与预测交互并做出适当的决策。您需要考虑用户如何适应新的业务方式,以及如何使这一体验尽可能无摩擦。实际上,在许多用例中,预测被特别设置以减少现有流程中的摩擦。
-
用户培训:确保你正在计划并为受新模型影响的用户提供培训做好准备。创建培训并提供这种培训是提高模型采用率和接受度的绝佳方法。很多时候,这都是在事后才考虑到的,可能会导致延误或降低接受度。
-
用户接受度和变更管理:这通常是一个持续的过程。通常来说,从一开始就涉及用户和利益相关者是一个好主意。如果用户觉得他们的声音被听到,这将提高接受的可能性。用户还可以帮助避免数据科学团队自己可能无法察觉的潜在问题。频繁地沟通你为什么要进行这个项目,它如何影响用户,以及他们的工作将如何改变(希望是变得更好),这些都是提高成功机会的好策略。与用户一起构建之前列出的图表是开始这种对话的好方法,并且最终为业务增加价值。正如你所看到的,在模型构建前后有许多事情要做,才能实现价值。难怪项目往往在增加价值方面并不总是成功。
-
模型监控和维护:一旦模型投入运行,你需要建立机制来监控预测服务和性能。随着时间的推移,性能往往会下降,或者你可能希望提高模型的表现。这需要用新数据更新或重新训练模型。幸运的是,DataRobot 使这些任务变得非常简单,因为它提供了设置模型监控和重新训练的机制。
摘要
在本章中,我们介绍了一些工具和方法,帮助你了解你的系统和你要尝试解决的问题的商业问题。其中一些方法即使是经验丰富的数据科学家也可能感到陌生,但花时间内化和在项目上实践这些方法是重要的。考虑到时间压力,其中一些可能感觉是不必要的。这就是为什么像 DataRobot 这样的工具是有益的,因为它们减少了你在重复性任务上花费的时间,让你可以专注于工具无法做到的事情。
希望我已经说服你们,数据科学团队更加专注于理解问题,并使用自动化工具进行一些模型构建和调优任务,这对组织提供了最佳的价值。在这里完成的大部分工作也将在项目后期派上用场,当我们准备将模型投入组织运营时。具体来说,在本章中,我们学习了如何理解更广泛的系统环境,系统是如何运作的,以及为什么它会以某种方式表现。我们还看到了如何找到企业需要解决的根源问题,并将业务问题转化为可以用机器学习解决的问题。然后我们学习了如何确保解决方案解决了正确的问题,并且不会产生意外的副作用。
最后,我们学习了如何确保解决方案被利益相关者接受并得到实施,从而实现商业价值。
我们现在已准备好开始使用一些示例数据集,并开始使用 DataRobot 来帮助我们解决我们发现的业务问题和定义的机器学习问题。
进一步阅读
-
《因果性:模型、推理与推断,第二版》,作者:Judea Pearl,出版社:剑桥大学出版社。
-
《商业动态:复杂世界的系统思维与建模》,作者:John D. Sterman,出版社:Irwin/McGraw-Hill。
第二部分:使用 DataRobot 的完整机器学习生命周期:从概念到价值
本节将涵盖使用 DataRobot 构建和部署机器学习模型的整个生命周期。完成本节后,您将了解如何从项目开始到结束。尽管任务按线性列出,但在任何实际项目中,这些任务都会迭代发生,并且在许多环节中,您将返回到之前的步骤重新执行一些任务。
本节包括以下章节:
-
第四章, 为 DataRobot 准备数据
-
第五章, 使用 DataRobot 进行探索性数据分析
-
第六章, 使用 DataRobot 进行模型构建
-
第七章, 模型理解和可解释性
-
第八章, 模型评分和部署
第四章:为 DataRobot 准备数据
本章涵盖了与为建模准备数据相关的任务。虽然这些任务本身相对简单,但它们可能需要花费大量时间,有时还可能引起挫败感。只需知道,如果你有这样的感觉,你并不孤单。这是很正常的。这也是你开始注意到事情与你在学术环境中的经验略有不同的时候。数据几乎永远不会以适合建模的形式出现,假设你收到的数据状况良好且质量上乘是错误的。
大多数现实世界的问题并不附带现成的数据集,你可以开始处理并用于构建模型。很可能会需要从多个不同的来源拼接数据。根据数据的不同,DataRobot可能会自动执行数据准备和清洗任务,或者你可能需要自己完成其中的一些。本章涵盖了概念和示例,展示了如何清洗和准备你的数据,以及 DataRobot 提供的帮助完成这些任务的特性。
到本章结束时,你将了解如何设置数据以便将其传递给 DataRobot 并开始建模。在本章中,我们将涵盖以下主要主题:
-
连接到数据源
-
为建模聚合数据
-
清洗数据集
-
处理不同类型的数据
-
为建模工程特征
技术要求
本章的一些部分需要访问 DataRobot 软件和一些数据处理工具。大多数示例处理的是小型数据集,因此可以通过 Excel 处理。本书后面将使用的数据集将在以下章节中描述。
汽车数据集
汽车数据集(来源:Dua, D. 和 Graff, C. (2019)。UCI 机器学习库[archive.ics.uci.edu/ml]。加州大学欧文分校,信息与计算机科学学院)可以在 UCI 机器学习库(archive.ics.uci.edu/ml/datasets/Automobile)中访问。该数据集中的每一行代表一辆特定的汽车。特征(列)描述了其特性、风险评级和相关的归一化损失。尽管这是一个小型数据集,但它具有许多既是数值型又是分类型的特征。特征在网页上进行了描述,数据以.csv格式提供。
家用电器能耗预测数据集
此数据集(来源:Luis M. Candanedo, Veronique Feldheim, Dominique Deramaix, Data driven prediction models of energy use of appliances in a low-energy house,Energy and Buildings,Volume 140,2017 年 4 月 1 日,第 81-97 页,ISSN 0378-7788)可在 UCI 机器学习库中访问(archive.ics.uci.edu/ml/datasets/Appliances+energy+prediction#)。此数据集捕捉了房屋中各个房间和外部环境中的温度和湿度数据,以及各种设备随时间推移的能耗。数据每 10 分钟捕获一次。这是一个典型的时间序列数据集示例。数据以.csv格式提供,网站还提供了各种特征的描述。此数据集中的所有特征都是数值特征。数据集还包括两个随机变量以使问题更有趣。
SQL
对于本章的一些部分,了解 SQL 将很有帮助,尽管您不需要了解 SQL 就能通过示例问题。
连接到数据源
到目前为止,您应该有一个数据源列表以及存储在那里的数据的大致了解。根据您的用例,这些源可能是需要挖掘的实时数据流源。以下是一些典型的数据源:
-
文件系统
-
Excel 文件
-
SQL 数据库
-
Amazon S3 存储桶
-
Hadoop 分布式文件系统(HDFS)
-
NoSQL 数据库
-
数据仓库
-
数据湖
-
图数据库
-
数据流
根据数据源的类型,您将使用不同的机制来访问这些数据。这些机制可以是本地或云端的。根据数据的状态,您可以直接将数据带入 DataRobot,或者可能需要在将数据带入 DataRobot 之前进行一些准备工作。DataRobot 最近添加了Paxata功能来帮助这个过程,但您可能无法访问该附加组件。大部分的处理工作是通过SQL、Python、pandas和Excel完成的。为了本书的目的,我们将只关注 Excel。
如果您还不熟悉 SQL 和 pandas,那么在有机会的时候开始学习它们将很有帮助:
-
您可以通过访问创建新项目菜单来连接数据源,如图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.1_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.1_B17159.jpg
-
您可以搜索已定义的现有数据源,或者添加一个新的数据连接。如果您选择添加新数据连接选项(如图所示),您将看到以下连接选项:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.2_B17159.jpg
Figure 4.2 – 数据连接类型
-
您将看到为您的组织提供的连接选项。这里显示的内容可能与前面的图不同。大多数具有 JDBC 驱动的数据库都受支持,但您可能需要与您的管理员确认。例如,让我们选择MySQL选项,如图下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.3_B17159.jpg
图 4.3 – 配置数据连接
在前面的图中,您将看到配置 MySQL 数据源的配置参数。其他数据源在本质上类似。在这里,您将输入可以从您的数据库管理员那里获得的配置设置。如果您正在连接到数据库以将数据导入 Python 或 Excel,则需要创建类似的连接。
注意
您需要具备一些 SQL 的工作知识或与了解 SQL 的人合作,才能使用这些选项。
为建模聚合数据
从前面的章节中,您可能还记得机器学习算法期望数据集以特定的形式存在,并且它需要在一个表中。然而,为这个表所需的数据可能存在于多个来源。因此,您需要做的第一件事之一就是从多个来源聚合数据。这通常使用 SQL 或 Python 完成。最近,DataRobot 添加了将多个数据集添加到项目中的功能,并在 DataRobot 内部聚合这些数据。请注意,您可能仍需要在 DataRobot 之外执行一些数据清洗操作,因此如果您想使用 DataRobot 的聚合功能,您需要在将数据带入 DataRobot 之前执行清洗操作。我们将在下一节中介绍数据清洗。如果您选择在 DataRobot 内部进行数据聚合,您必须确保在项目的非常开始阶段就进行此操作(如图 4.4):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.4_B17159.jpg
图 4.4 – 添加二级数据集
在前面的图中,在开始按钮下方,您可以点击添加数据集。一旦点击,您将看到一个窗口,允许您指定附加的数据集,如图 4.5 所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.5_B17159.jpg
图 4.5 – 二级数据集
在这里,您可以添加新的数据集并定义主数据集与二级数据集之间的关系。对于时间序列问题,您还可以使用此功能将数据聚合到正确的时间尺度,并将其与主数据集连接起来。
请注意,这确实需要您对关系表的工作方式以及一些 SQL 概念有一定的了解。如果您不熟悉这些概念,并且不确定要使用哪些索引,请与了解数据库的人合作,以帮助您设置这些选项。
数据集清洗
这一步可以在我们之前章节中提到的数据聚合之前或之后进行。我们在 第二章 的数据清洗部分介绍了一些概念,机器学习基础,所以让我们看看如何在数据集上实际操作。为此,让我们从汽车数据集开始。请参考 技术要求 部分以访问该数据集的 UCI 存储库:
-
让我们下载两个文件:
imports-85.data和imports-85.names。数据文件是.csv格式,所以让我们将文件重命名为带有.csv扩展名的文件,并使用 Excel(你也可以使用任何文本编辑器)打开它。现在你会看到数据(图 4.6):https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.6_B17159.jpg图 4.6 – 汽车数据
-
你会在前面的截图中发现缺少了标题信息。要检索标题信息,请在任何文本编辑器中打开
.names文件。你将看到属性名称以及它们的定义。在你的.csv文件顶部创建一个空行,然后你必须手动将这些属性的名称作为文件的第一行输入。现在让我们将这个文件保存为autodata.csv。现在它应该看起来像 图 4.7 所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.7_B17159.jpg
图 4.7 – 带标题的汽车数据
请检查这个数据文件中的所有单元格。你可能会注意到,在前面的图中,许多单元格都有一个 normalized-losses,其中 20%的总值是缺失的。鉴于我们的数据集非常小,我们不希望删除包含缺失数据的行。此外,DataRobot 有机制来处理缺失值,所以我们打算将大部分保留原样。我们唯一想要考虑的是 normalized-losses。如果 normalized-losses 是我们的目标变量,那么我们别无选择,只能删除这些行。如果不是,我们可以先尝试保留原样,让 DataRobot 构建模型。然后我们可以尝试使用每个 Symboling 值的 normalized-losses 平均值作为替代策略,看看这会有什么不同。我将使用 Excel 的交叉表功能来计算这些平均值(图 4.8):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.8_B17159.jpg
图 4.8 – 交叉表
使用 Symboling 的原因是它是风险的指标。根据问题和你要达成的目标,你可以选择其他一些特征来完成这个目的。现在,我们将使用 Symboling 来说明如何操作。还有更复杂的插补方法可用,例如基于 K-Nearest Neighbor 的插补方法,如果你愿意可以探索(scikit-learn.org/stable/modules/generated/sklearn.impute.KNNImputer.html))。
在审查家用电器能源预测数据集时,我们发现数据看起来非常干净,不需要进一步清洗。在现实世界的项目中,您几乎找不到没有任何问题的数据集。在时间序列数据集中需要注意的典型问题如下:
-
数据非常少:为了使 DataRobot 能够对您的数据进行有用的操作,回归问题至少需要 35 个数据点,分类问题需要 100 个数据点。
-
数据缺失:有时某些时间步的数据可能缺失。在这种情况下,您可以使用之前或之后时间步的值来为缺失的时间步分配值。您也可以让 DataRobot 为您完成这项工作。
-
相互关联的序列:通常您会尝试预测多个时间序列。如果这些序列相似并且相互关联,那么您可以将它们合并为一个单一模型。这通常可以提高预测精度。在这些情况下,您必须创建一个特征来告诉 DataRobot 这些序列是同一集群的一部分。
我们将根据 DataRobot 发现的情况重新审视数据质量。现在,数据集看起来相当干净(顺便说一句,这在现实中是非常不寻常的),让我们进一步调查这些数据。
处理不同类型的数据
您可能已经注意到,一些特征具有数值,而其他特征具有分类值。例如,您数据集中的standard以及std。在这种情况下,即使它们是相同的,DataRobot 也会将它们视为不同的值。
有些特征可以被视为分类或数值。例如,num-of-cylinders;在这里,值以文本形式表示。鉴于这里存在数值顺序,将其转换为数值变量可能是有益的,如图 4.9所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.9_B17159.jpg
图 4.9 – 分类到数值特征的转换
在这里,我们创建了(在cylinder-count中,它携带了气缸数量的数值。在这个例子中,我们使用 Excel 进行数据处理,但这也可以通过许多方法实现,例如 SQL、Python 和 Paxata。您也可以进行类似的数据处理,并为num-of-doors创建一个新列。
让我们看一下以下图中的make特征。这似乎有 22 个可能的值,但我们可用的数据非常有限。如果我们为每个制造商计算行数,我们可以看到每个制造商可用的数据量:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.10_B17159.jpg
图 4.10 – 每个制造商的数据
我们注意到某些车型数据非常少,因此将它们组合起来可能很有用。例如,我们可以(使用 Excel)将突出显示的行组合成一个名为other的型号。你划线的依据取决于你对业务问题的理解或与领域专家的讨论。即使有了这些知识,你也可能需要尝试几种不同的选项,看看哪种效果最好。这就是机器学习是一个迭代和探索过程的原因。同时,请记住,你的时间有限,所以不要过度探索。当然,有一个点,额外的调整不会带来很多好处。
DataRobot 还允许对图像和地理空间数据进行特殊处理。我们将在 第十一章 使用地理空间数据、NLP 和图像处理 中介绍它们。现在让我们看看可以对数据进行的其他转换。
为建模工程特征
作为系统理解的一部分,你可能会对问题和数据集有一些洞察,这些洞察可以通过以各种方式组合现有特征来创建新的数据特征。例如,我们可以通过乘以长度、宽度和高度来创建一个名为volume的新特征。同样,我们可以通过将highway-mpg除以city-mpg来创建一个名为mpg-ratio的特征。让我们还通过将engine-size除以cylinder-count来创建一个名为cylinder-size的特征。这些特征的方程如下:
-
volume = length * width * height -
mpg-ratio = highway-mpg / city-mpg -
cylinder-size = engine-size / cylinder-count
Figure 4.11 展示了这些特征值的一个示例:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.11_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.11_B17159.jpg
图 4.11 – 汽车 Dataset 的工程特征
如你现在所看到的,有许多可能性可以创建新的特征,这些特征可能有助于解决你的问题。许多这些新特征可能并不有用,稍后删除它们是可以的。有时,这些特征对客户或利益相关者可能有意义,你可能想保留它们而不是其他冗余的特征。
让我们看看 Appliances Energy Prediction Dataset 文件。使用这个数据集,我们可以创建以下特征:
-
total-energy = Appliances + lights -
avg-temp-inside = (T1 + T2 + T3 + T4 + T5 + T7 + T8 + T9 ) / 8 -
avg-rh-inside = (RH_1 + RH_2 + RH_3 + RH_4 + RH_5 + RH_7 + RH_8 + RH_9 ) / 8 -
temp-inout-diff = T6 – avg-temp-inside -
rh-inout-diff = RH_6 – avg-rh-inside -
windchill-factor(我正在根据www.weather.gov/media/epz/wxcalc/windChill.pdf创建一个近似的风寒指数)= T_out * (Windspeed⁰.16 )
新的数据特征将如图 Figure 4.12 所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_4.12_B17159.jpg
图 4.12 – 用于家用电器能源预测数据集的工程化特征
如您所见,这些特征利用了我们通过与领域专家交谈或在网上进行一些研究而获得的领域知识。您可能通过研究露点、压力和能见度等主题找到更多此类特征。自动化可能很难独立捕捉到所有这些特征,但另一方面,自动化可能能够基于这些特征找到一些额外的有趣特征。最近,DataRobot 也开始添加一些自动进行特征工程的能力,但这些能力相对有限。这些能力非常有用的一个领域是时间序列问题。在这个特定领域,这些能力在尝试大量难以独自匹配的特征时极为有帮助。话虽如此,通过工程化特征将您的领域知识注入模型仍然是您的责任。
摘要
在本章中,我们介绍了帮助您为构建模型准备数据集的方法。尽管 DataRobot 正在开始提供对许多数据准备任务的支持,但许多这些方法必须在 DataRobot 之外应用。正如我们讨论的,许多这些任务目前无法自动化,并且需要领域理解来做出适当的决策。
具体来说,在本章中,我们学习了如何连接到各种数据源以及如何从这些源中聚合数据。我们研究了如何处理缺失数据问题以及其他在建模前应进行的数据处理。我们还介绍了创建新特征的方法,这些特征对于提高模型性能可能非常重要。
我们现在处于一个几乎完全在 DataRobot 环境中分析数据和构建模型的状态。在下一章中,我们将使用 DataRobot 来分析数据集。
第五章:使用 DataRobot 进行探索性数据分析
在本章中,我们将介绍与使用 DataRobot 探索和分析您的数据集相关的任务。DataRobot 执行许多您需要执行此分析的功能,但您仍然需要自己理解这些内容。
到本章结束时,您将学会如何利用 DataRobot 进行探索性数据分析(EDA)。在本章中,我们将涵盖以下主要内容:
-
数据摄入和数据目录
-
数据质量评估
-
探索性数据分析(EDA)
-
设置目标特征和相关性分析
-
特征选择
数据摄入和数据目录
现在我们已经准备好了数据集,我们有两种选择将它们带入 DataRobot。我们可以访问创建新项目/拖放数据集页面(图 1.5)或AI 目录页面(图 1.17)。如果数据集相对较小,我们可能更喜欢从创建新项目方法开始。经过几次迭代后,当数据集稳定下来,您可以将其移动到AI 目录页面,以便在其他项目中重用。
让我们从上传我们创建的本地文件开始,该文件位于第四章,为 DataRobot 准备数据。您可以将项目命名为Automobile Example 1,如下面的截图所示:
![Figure 5.1 – Uploading dataset for a new project
![img/Figure_5.1_B17159.jpg]
Figure 5.1 – Uploading dataset for a new project
您会注意到 DataRobot 自动开始分析数据并执行快速探索性分析。您可以看到它找到了30个特征和205行数据。
备注
如果您使用的是具有多个工作表的 Excel 文件,请确保您想要的数据在第一个工作表中。
数据质量评估
DataRobot 也会进行数据质量评估,并在发现任何数据问题时通知您,如下面的截图所示:
![Figure 5.2 – Data quality issues
![img/Figure_5.2_B17159.jpg]
图 5.2 – 数据质量问题
在这个案例中,它已经在八个特征中发现了异常值。您可以查看详细信息,看看这些是否看起来可以接受,或者您是否需要删除或以其他方式修复这些异常值。我们将在下一节探索和分析这些特征时进行此操作。
注意,它还寻找了任何特征中的任何隐藏的缺失值或过多的零。这些可能难以手动检测,并且可能对您的模型造成问题,因此如果出现这些问题,修复这些问题很重要。例如,您在第四章,为 DataRobot 准备数据中看到,我们已经修复了normalized-losses特征中过多零的问题。如果我们之前没有这样做,DataRobot 会提醒我们修复此问题或过滤掉这些行再继续。它还会在选择目标特征后进行额外的分析。
您将对 Appliances Energy 数据集执行相同的流程。
EDA
如您在上一节所见,DataRobot 自动对数据集进行了初步分析。让我们看看我们将如何审查这些数据并从中获得洞察。如果您向下滚动页面,您将看到一个特征表及其特性的概述,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.3_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.3_B17159.jpg
图 5.3 – 数据分析概述
您可以看到,在这个表中,DataRobot 已经计算并列出了关于一个特征的任何数据质量担忧,它是什么类型的变量,数据集中有多少唯一值,以及有多少值是缺失的。这些都是非常重要的特征,您需要审查所有这些以确保您理解它们在告诉您什么。
例如,DataRobot 选择的变量类型是否如您所期望?如果您查看 num_of_doors,您会注意到这是一个分类变量。尽管这是正确的,因为数据是以文本形式存在的,但您知道这实际上是数字。您可能想要修复这个问题(就像我们在第四章,为 DataRobot 准备数据中所做的那样)。提前这样做将减少后续的重工作和浪费精力。同样,您会注意到 num_of_doors 有两个缺失值。如果这个数字更高,我们会尝试解决缺失值问题,如第四章,为 DataRobot 准备数据中所述。此外,请注意唯一值。对于某些特征,我们期望有许多唯一值,而对于其他特征,我们则不期望。检查 DataRobot 发现的内容是否与您的期望一致。如果不一致,尝试确定原因。当分类变量具有大量唯一值时,请特别注意。我们很快将讨论如何解决这个问题。
对于数值特征,您还将看到诸如平均值、中位数、标准差(标准差)、最小值和最大值之类的汇总统计信息。请为每个特征进行审查,看看它们是否都看起来合理。如果您点击任何特征行,它将展开并显示更多详细信息,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.4_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.4_B17159.jpg
图 5.4 – "symboling"特征详情
在这里,您可以查看所有值的直方图。现在您可以看到这些数据是如何分布的。需要特别注意的一个方面是您数据较少的区域。例如,您可以看到用于值 -2 的训练数据量非常有限,因此我们应预计在尝试预测这些值时会出现问题。现在,让我们看看以下截图中的 normalized_losses 的详细信息:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.3_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.5_B17159.jpg
图 5.5 – "normalized_losses"特征详情
在这个视图中,我们可以看到似乎在make特征周围几乎没有损失,我们可以看到它是如何分布的:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.6_B17159.jpg
图 5.6 – “make”特征的细节
由于make是一个分类特征,你可以看到每个值出现的频率。记住,我们之前已经将一些数据非常少的车型合并到了other中。如果我们没有这样做,我们会在这里注意到一些类型的数据点非常少,需要解决,否则它们在训练过程中表现不佳。让我们看看fuel_type,看看我们能从这些数据中提取什么,如图下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.7_B17159.jpg
图 5.7 – “fuel_type”特征的细节
在这里,我们注意到diesel汽车没有得到很好的代表,这可能对汽车来说是正常的。每次我们看到这种不平衡,我们都应该尝试看看是否可以解决。现在,当我们查看engine_location特征时,如图下所示,我们发现了一个问题:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.8_B17159.jpg
图 5.8 – “engine_location”特征的细节
如您在先前的屏幕截图中所见,rear特征在数据集中几乎没有任何记录。从实际的角度来看,这意味着算法将忽略这个特征。如果你没有仔细查看,你可能会认为engine_location对你的目标没有影响,但正如您可以从这个屏幕截图中看到的,我们的数据集不足以做出这样的判断。现在,让我们在以下屏幕截图中查看engine_type,看看我们在这里发现了什么:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.9_B17159.jpg
图 5.9 – “engine_type”特征的细节
在这种情况下,我们发现一种类型占主导地位,而某些类型几乎不被代表。观察这个分布,你可能想创建另一个特征,将这个特征转换为二进制值,对于其他类型则为ohc和1。这也会在数据集中创造一些平衡。
请记住,这可能会或可能不会证明是有用的。你必须在你自己的模型中尝试,看看什么有效。现在,让我们在以下屏幕截图中查看num_of_cylinders和cylinder_count,这是我们数据准备期间创建的一个特征:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.10_B17159.jpg
图 5.10 – “num_of_cylinders”和“cylinder_count”特征的细节
如您所见,尽管数据相同,但转换值与您首次查看直方图时得到的印象不同。数值是对数据的更准确表示,应该比分类值产生更好的模型。
希望我们已经强调了 DataRobot 自动提供的内容以及通过查看 DataRobot 生成的图表可以获得哪些见解。我们现在可以设置我们的目标特征并进行额外的分析。
设置目标特征和相关性分析
到你达到这个阶段时,你应该已经对你要解决的问题以及应该设置的目标特征有一个相当好的了解。对于不同的用例使用不同的特征作为目标并不罕见。有时,你甚至会设置一个转换后的特征作为目标(例如,特征的日志)。对于汽车数据集,我们想要预测汽车的价格。一旦你选择了目标特征,如以下截图所示,它将分析该特征并提供一些建议:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.11_B17159.jpg
图 5.11 – 设置目标特征
从前面的截图中你可以看到,它显示了价格是如何分布的。DataRobot 也提醒说,一些目标值是缺失的。理想情况下,我们在上传数据集之前应该过滤掉带有缺失目标值的行。你还会注意到 DataRobot 将其描述为回归问题。另一件需要注意的事情是,它选择了Gamma 偏差作为优化指标。你可以在第二章 机器学习基础中了解更多关于这个指标的信息,或者你可以在 DataRobot 的帮助部分中更详细地探索它。目前看来,考虑到价格值的广泛差异,这似乎是一个不错的选择。
在我们点击开始按钮之前,我们应该探索高级选项。这样做的原因是,一旦点击了开始按钮,就无法更改选项。话虽如此,如果不完全理解数据,往往很难做出所有正确的选择。克服这一问题的方法之一是暂时忽略高级选项,继续进行探索。
一旦我们知道我们想要什么,我们就可以创建一个新的项目并选择适当的选项。你可以看到这是一个迭代的过程,我们通常会尝试一些东西,然后回来重新做一些工作。此外,请注意,图 5.11 中的建模模式设置为快速。这通常是一个好的开始选择。考虑到这一点,我们实际上可以跳过选项,直接点击开始按钮。你会注意到 DataRobot 将开始执行额外的分析,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.12_B17159.jpg
图 5.12 – 特征分析
你会注意到,除了进行额外的分析外,DataRobot 实际上已经开始构建模型。这可能令人惊讶,因为我们仍在进行分析,但请放心——这些不是最终模型。让 DataRobot 构建这些模型,因为其中一些将为我们提供关于数据的有用见解。我们很可能会稍后丢弃这些模型,但它们将在我们的旅程中证明是有用的。一旦 DataRobot 完成所有任务,你将看到一条自动驾驶完成的消息,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.13_B17159.jpg
图 5.13 – 初始分析完成
你现在会注意到 DataRobot 为所有特征填充了一个重要性列。这是相对于目标特征的特征相对重要性。我们还可以检查是否发现了其他数据质量问题。为此,让我们点击数据质量评估框中的查看信息下拉菜单。然后你会看到以下截图中的选项:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.14_B17159.jpg
图 5.14 – 数据质量评估
我们之前看到了一些问题,但现在我们看到有一些特征可能存在目标泄漏。如果存在目标泄漏,我们将过滤掉这些特征。通过查看与每个特征相关的警告标志,我们发现这些特征是horsepower和engine_size。由于这些是重要特征,并且对价格有明显的影響,我们将保留这些特征。我们还在表头行中看到了另一个警告符号,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.15_B17159.jpg
图 5.15 – 缺失的目标值
点击符号,我们看到 DataRobot 已经过滤掉了价格缺失的行。这是好的,这意味着我们不需要重新创建我们的数据集并将其再次上传到 DataRobot。你也会在以下截图中注意到,现在在屏幕的左上角出现了一个新的标签页,称为特征关联。这是我们数据分析任务的关键标签页。让我们点击这个标签页来查看 DataRobot 发现了什么:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.16_B17159.jpg
图 5.16 – 特征关联
DataRobot 将这些称为关联而不是相关性,原因在于 DataRobot 使用engine,它包括一组紧密相关的特征,如engine_size、bore、cylinder_size和stroke。理解这些关系作为一个整体对于解决商业问题可能非常重要。在这个特定的情况下,它告诉你你不能单独修改这些中的一个。
改变气缸直径将影响许多其他特征,即使您的模型最终没有包含这些特征。忽略这些方面通常会导致下游问题,所以请特别注意这些关系。
您可以通过按重要性对关联进行排序来获得额外的见解,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.17_B17159.jpg
图 5.17 – 按重要性排序的特征关联
前面的截图显示了按其对目标特征的影响排序的特征。这告诉您哪些特征最有可能在您的模型中突出。要寻找的一件事是它与您在问题理解阶段构建的因果模型是否一致。它是否一致?如果不一致,差异和惊喜在哪里?这些通常会导致对您问题的新的见解。查看 MI 值的整体情况也很有用。为此,您可以点击 .csv 文件。然后您可以在 Excel 等工具中分析它们,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.18_B17159.jpg
图 5.18 – MI 值
这让您对这些值的相对规模有了更好的感觉。在这个视图中,我们可以看到,aspiration 对价格的影响非常小。这似乎有点反直觉,值得进一步调查。为此,我们可以通过点击 price 和 aspiration 来更详细地查看这个关联,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.19_B17159.jpg
图 5.19 – 关联对详细信息
在这里,我们可以看到,对于相同的 aspiration 值,价格可能会有很大的变化。尽管如此,我们仍然可以看到,平均而言,turbo 的价格更高。基于这一点,我们将将其保留在建模中。我们还应该与领域专家讨论,看看为什么它没有与 price 更强地相关。这些讨论可能导致创建其他可能阐明这种关系的特征。另一方面,price 和 num_of_doors 之间的关系看起来并不很有趣。
仔细审查关联对以了解可以获得的见解是个好主意。至少,审查那些值非常高或非常低的关联。具体来说,寻找非线性关系。例如,让我们看看 curb_weight 和 highway_mpg 之间的关联,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.20_B17159.jpg
图 5.20 – curb_weight 和 highway_mpg 之间的关联
在这里,您会注意到随着 curb_weight 的增加,每加仑英里数(MPG)值会减少,这是符合直觉的。我们还看到曲线在更高的重量处开始变平。这可能是由许多原因造成的,因为影响 MPG 的其他因素并不随着重量的增加而增加。
注意,虽然这可能会或可能不会影响模型的预测准确性,但理解这些关系是确定基于模型采取的行动的关键。例如,对于大于 curb_weight 和 drive_wheels 的重量,减重可能不会为 MPG 带来很多好处,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.21_B17159.jpg
图 5.21 – curb_weight 和 drive_wheels 之间的关联
在前面的截图中,我们可以看到 curb_weight 受 drive_wheels 选择的影响。可能的情况是,如果我们在这两个特征中同时使用我们的模型,模型可能会给予 curb_weight 更高的优先级,并且可能发现 drive_wheels 的价值不大。因此,商业用户可能会将 drive_wheels 解释为不太重要。
如您所见,这并不正确,因为 curb_weight 本身受到 drive_wheels 的影响。已经观察到,如果不小心,一个精确的模型有时会给出错误的印象。DataRobot 可以进行这种分析并生成这些图表,但正确理解和解释这些图表的责任在于您。
让我们再次查看之前看过的某些单个特征图。为此,让我们查看 图 5.13 中显示的特征细节并点击 curb_weight。这将显示关于该特征的详细信息,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.22_B17159.jpg
图 5.22 – curb_weight 特征细节
您会注意到我们现在在这个图表中有更多信息。具体来说,我们现在可以看到价格如何随 curb_weight 变化,以及 curb_weight 值的分布情况。查看这些关系可以为您提供关于您问题的额外见解,尤其是在关系非线性时。例如,让我们查看以下截图中的 highway_mpg 的详细信息:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_5.23_B17159.jpg
图 5.23 – highway_mpg 特征细节
如您所见,价格随着 MPG 值的增加而指数级下降。鉴于这种非线性,这在其他特征中似乎也存在,尝试通过取价格的对数来创建一个新的目标特征可能是有用的。同样,通过查看其他特征,您可以获得有关可能有益的特征转换的想法。有些人可能会想知道为什么我们应该这样做,因为新的算法可以处理非线性。虽然这是真的,但如果从业务理解的角度来看是有意义的,仍然最好将您的非线性问题进行转换。此外,这也允许算法将计算能量集中在其他可能被忽视的领域。
现在我们已经理解了特征并且根据需要进行了转换,我们可以专注于选择一个特征集来开始建模过程。
特征选择
特征选择的背后基本思想是选择对目标具有高重要性的特征。此外,我们还想删除与其他特征高度交叉相关(或具有高 MI 值)的任何特征。所选特征集在 DataRobot 中表示为特征列表。如果您点击页面左上角的 特征列表 菜单,如图下所示,您将看到 DataRobot 为数据集创建的特征列表:
![Figure 5.24 – 特征列表
![Figure_5.24_B17159.jpg]
图 5.24 – 特征列表
在这里,您将看到一个包含所有原始特征、基于单变量分析(即逐个分析特征)的选择以及最重要的特征的列表。DR Reduced Features M8 列表或 Univariate Selections 列表看起来是良好的起点。点击 项目数据 菜单返回数据视图。现在,让我们通过从 特征列表 下拉菜单中选择 Univariate Selections 来检查单变量列表,如图下所示:
![Figure 5.25 – 选择特征列表
![Figure_5.25_B17159.jpg]
图 5.25 – 选择特征列表
您现在可以检查已选定的特征列表。您可以通过删除任何不想包含在此列表中的特征来修改此列表并创建新的特征列表。如您所见,DataRobot 已经为您做了大部分特征选择,以便开始工作。您现在可以删除更多,或者您可以在构建了一组初始模型之后,在下一轮迭代中删除它们。
有趣的是,DataRobot 已经使用其中一些列表构建了一些模型,我们将在下一章中探讨这一点。
摘要
在本章中,我们学习了如何将数据带入 DataRobot。我们学习了如何使用 DataRobot 的功能来评估数据质量并执行 EDA(探索性数据分析)。我们看到了 DataRobot 如何使探索数据、设置目标特征和执行相关性分析(或更准确地说,关联分析)变得非常容易。
我们学习了如何利用 DataRobot 的输出更好地理解我们的问题和数据集,然后如何创建用于模型构建的特征列表。您可以在 Python 或 R 中执行这些任务,它们并不困难,但确实需要一些时间。这段时间最好用于专注于理解问题和数据集。
在下一章中,我们将进入大家可能都在期待的事情:构建模型。
第六章:使用 DataRobot 进行模型构建
在本章中,我们将看到 DataRobot 是如何用于构建模型的。模型构建的大部分过程已经自动化,DataRobot 提供了许多功能来自动探索广泛的算法,同时允许数据科学家微调他们想要构建的内容。这为数据科学团队节省了大量的时间,并导致探索比其他情况下更多的模型。这也导致更好地遵循最佳实践,从而减少了犯错误的机会。
到本章结束时,你将学会如何利用 DataRobot 构建各种模型。在本章中,我们将涵盖以下主要主题:
-
配置建模项目
-
构建模型和模型排行榜
-
理解模型蓝图
-
构建集成模型
配置建模项目
在上一章中,我们创建了一个项目并执行了数据分析。我们还看到 DataRobot 自动为我们构建了几个模型。为了构建这些模型,我们使用了默认的项目设置。
在本节中,我们将介绍 DataRobot 默认为我们做了什么,并查看我们如何可以微调这种行为。如果你还记得,一旦我们在项目页面上点击 开始 按钮(见 第五章,使用 DataRobot 进行探索性数据分析),我们就不能对项目选项进行任何更改。因此,我们将创建一个新的项目来审查和选择我们想要的选项。
为了这个目的,让我们进入 DataRobot 并选择 Automobile Example 2,如图下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.1_B17159.jpg
图 6.1 – 上传新项目的数据集
你可以选择与我们之前相同的靶特征(价格)。现在,请点击屏幕底部的 显示高级选项,而不是点击 开始 按钮。现在,你将看到 高级选项 屏幕,如图下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.2_B17159.jpg
图 6.2 – 高级选项
在这里,你可以看到分区选项。你可以看到默认设置,并且可以根据需要更改它们。由于我们拥有的数据量非常有限,我已经将交叉验证折数减少到 3,将保留百分比设置为 15%。你可以轻松更改这些值,并根据需要使用不同的设置运行。接下来,我们点击 智能降采样 选项卡,如图下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.3_B17159.jpg
图 6.3 – 智能降采样
由于这不是一个分类问题,我们在这里不需要担心降采样。如果你有一个不平衡的分类数据集,你可以使用此选项进行降采样。现在,让我们看看 特征约束 选项卡,如图下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.4_B17159.jpg
图 6.4 – 特征约束
在这里,您可以设置对特征(如单调性)的约束,即目标值是否与特征的值增加方向相同。目前,我们预见不到需要设置此类约束。此类约束可能是某些用例中的监管要求的一部分。如果是这样,它们可以在此处指定。大多数用例不需要此类约束。现在,让我们点击额外选项卡,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.5_B17159.jpg
图 6.5 – 额外选项
在这里,我们看到一个选项可以更改用于建模的优化指标。我发现 DataRobot 的推荐非常好,除非您有充分的商业理由选择不同的指标,否则您应该使用此选项。鉴于我们处于建模的早期阶段,并且我们希望了解我们的数据,我们将选择搜索交互选项,取消选择从顶级模型创建混合器选项,并选择仅包括具有 SHAP 值支持的模型选项。如第二章中所述,机器学习基础,SHapley Additive exPlanations (SHAP) 值有助于理解模型,并将为我们的问题提供额外的见解。这可能以模型精度为代价,但我们将在以后担心提高精度。如果您继续向下滚动此页面,您将看到更多选项,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.6_B17159.jpg
图 6.6 – 更多选项
在这里,您可以设置选项以限制运行时间,限制目标变量预测的值,设置随机种子,或为特定特征添加权重。目前,我们看不出有必要更改这些默认设置。
这完成了配置过程,我们现在可以构建模型。
构建模型和模型排行榜
一旦我们完成对配置设置的任何更改,我们可以向上滚动并点击开始按钮。DataRobot 将自动开始构建模型,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.7_B17159.jpg
图 6.7 – 模型的自动构建
您可以看到 DataRobot 正在构建哪些模型以及使用了多少训练数据。您会注意到 DataRobot 将首先使用较小的数据集构建快速模型,学习哪个表现更好,然后有选择地使用更多数据构建模型。在当前情况下,您可能看不到这一点,因为一开始数据就很少。一旦 DataRobot 完成构建模型,它将显示模型排行榜,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.8_B17159.jpg
图 6.8 – 模型排行榜
在前面的截图中,你可以看到哪些模型基于你为交叉验证选择的指标而上升至顶端。你也可以从下拉菜单中选择不同的指标,以查看模型在不同指标上的比较。你可以清楚地看到哪些模型上升至顶端。在顶级看到梯度提升模型并不罕见。你也会注意到,根据所选的指标,模型排名会有所变化。你会看到一旦 DataRobot 为部署选择了一个模型,它已经解锁了保留结果,并使用 100%的数据训练模型以准备部署。现在,我们将忽略这一点,因为我们还没有准备好讨论部署。另一件需要注意的事情是用于顶级模型的特征列表。你会看到一个新的**信息性特征+**特征列表被使用。这是 DataRobot 为这些模型创建的特征列表。让我们看看这个列表包含的内容,如下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.9_B17159.jpg
图 6.9 – 新特征列表
如你所见,这个列表包含了一组特征,它还包含了一个 DataRobot 自动创建的新特征:(孔径)除以(长度)。这个比率可能对发动机有重要意义,你应该与领域专家(SMEs)讨论其作用。如果之前不知道,这可能会代表你业务团队的一个新见解。实际上,这被称为冲程比,被认为是发动机的一个重要参数。建模过程的下一步是看看是否需要进一步细化这个特征列表。让我们回到模型排行榜,选择表现最好的模型eXtreme Gradient Boosted Trees Regressor (Gamma Loss),转到理解选项卡并选择特征影响子选项卡,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.10_B17159.jpg
图 6.10 – 理解和特征影响选项卡
你会看到并不是每个模型都会计算特征影响,所以请点击启用特征影响按钮,让 DataRobot 进行计算。一旦点击,DataRobot 将开始计算影响,并显示结果,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.11_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.12_B17159.jpg
图 6.12 – 导出特征影响
你可以将这些信息下载为.csv文件以进行更详细的探索。让我们使用 Excel 打开.csv文件来查看特征影响,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.13_B17159.jpg
图 6.13 – 整个集合的特征影响
如你所见,最后七个特征没有增加太多,我们可以尝试移除它们并查看影响。像 DataRobot 这样的工具的一个好处是运行这些实验非常快且容易。现在我们知道我们想要做什么,让我们回到特征影响屏幕。注意左下角的**+ 创建特征列表**按钮。点击该按钮将弹出一个创建新特征列表的对话框,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.14_B17159.jpg
图 6.14 – 创建新的特征列表
在这里,我们可以给特征列表起一个新的名字,FL1 top23,并指定我们想要 23 个最佳特征。现在,我们可以点击创建特征列表按钮来保存这个新的特征列表。现在,一个新的特征列表已经创建,我们可以在页面右侧的列中点击配置建模设置。这将弹出一个配置对话框,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.15_B17159.jpg
图 6.15 – 配置建模设置
我们现在可以从下拉菜单中选择新的特征列表,FL1 top23。如果我们需要,可以修改其他设置并点击运行按钮。DataRobot 现在将开始使用新的特征列表构建模型,当过程完成后,你可以在排行榜中看到新的模型,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.16_B17159.jpg
图 6.16 – 带有新模型的排行榜
如你所见,使用新特征列表构建的模型表现更好,现在位于排行榜的顶部(忽略已部署就绪的模型,因为它使用了整个数据集)。正如我们所见,移除贡献不大的特征实际上有助于模型(即使只是略微)。鉴于这个模型使用的是更小的特征集,它是一个更理想的模型。我们可以根据需要继续这个过程。在此阶段,我们也开始更深入地查看模型的细节和它产生的结果。我们将在下一章回到这个话题。现在,我们想看看模型蓝图或 DataRobot 构建模型所采取的步骤。
理解模型蓝图
DataRobot 在构建模型时执行了许多数据转换和超参数调整。它利用了许多最佳实践来构建特定类型的模型,这些最佳实践以蓝图的形式编码。您可以通过检查这些蓝图来了解这些最佳实践,并更好地理解构建模型所采取的步骤。要检查模型的蓝图,您可以点击一个模型,转到描述选项卡,然后选择蓝图选项卡,如下面的截图所示:
![图 6.17 – 模型蓝图
![img/Figure_6.17_B17159.jpg]
图 6.17 – 模型蓝图
在这里,您可以查看工作流程步骤。如您所见,这个蓝图相当简单。这是因为梯度提升方法非常灵活,不需要太多的预处理。让我们看看另一个表现相当不错的模型,即**广义加性 2 模型(Gamma 损失)**的蓝图,如下面的截图所示:
![图 6.18 – 广义加性 2 模型(Gamma 损失)的模型蓝图]
![img/Figure_6.18_B17159.jpg]
图 6.18 – 广义加性 2 模型(Gamma 损失)的模型蓝图]
在这里,您可以看到需要对分类变量和缺失值进行预处理。现在让我们看看另一个深度学习(DL)模型的蓝图。选择使用训练计划的 Keras 精简残差神经网络回归器模型,并选择蓝图选项卡,如下面的截图所示:
![图 6.19 – Keras 的模型蓝图
![img/Figure_6.19_B17159.jpg]
图 6.19 – Keras 的模型蓝图
您可以看到,对于 Keras,我们需要对数据进行清洗、缩放,并对分类变量进行独热编码。您可以通过点击模型框来检查这些步骤的详细信息,如下面的截图所示:
![图 6.20 – 处理步骤细节
![img/Figure_6.20_B17159.jpg]
图 6.20 – 处理步骤细节
您现在可以看到构建模型时执行的任务以及使用的超参数设置。还有一个链接,可以查看关于该方法的其他详细信息。在检查蓝图后,您可能会发现 DataRobot 没有使用您最喜欢的算法,您可能会想知道该算法或模型的性能可能是什么样的。为此,您可以在页面左上角点击存储库选项卡,如下面的截图所示:
![图 6.21 – 存储库蓝图
![img/Figure_6.21_B17159.jpg]
图 6.21 – 存储库蓝图
在这里,您将看到 DataRobot 提供的所有与此项目相关的蓝图。如您所见,这是一个相当全面的列表。请注意,这个列表将因项目类型的不同而有所变化(例如,时间序列项目)。您可以选择这些蓝图中的任何一个来构建一个模型。新模型将显示在排行榜上,您可以在那里评估其相对性能。目前,我们对此特定项目不感兴趣做这件事。
在这一点上,我们感兴趣的是比较一些模型,以查看它们在更详细层面上如何比较。为此,让我们点击顶部的最右侧标签,称为模型比较。这将打开一个页面,您可以选择任何两个模型来查看它们的匹配情况,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.22_B17159.jpg
图 6.22 – 模型比较
在这里,我们选择了 XGBoost 模型和广义加性模型(GAM)模型,用于在多个指标上进行比较。我们可以看到,这两个模型之间并不太远,您可以根据其他因素选择任何一个。正如我们之前讨论的,GAMs 的优势在于它们易于向商业用户解释,并且可以呈现为查找表(LUT),有时也称为评级表。选择 GAM 模型可能还有监管原因。让我们通过点击计算双重提升数据按钮进一步探索,带我们到以下屏幕:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.23_B17159.jpg
图 6.23 – 双重提升图
双重提升图用于比较两个模型的结果。对于双重提升图,结果是根据两个模型之间的差异进行排序,而不是根据目标值。然后,这些值被分箱以显示每个箱子的结果。阴影区域描述了两个模型之间的差异。在这里,我们再次看到,这两个模型在性能上非常相似。
如果两个模型在整体得分良好但在此图表中显示值有较大偏差,那么这些模型将是创建集成模型的良好候选者。
构建集成模型
众所周知,模型集合往往表现更好,并且也更稳健。DataRobot 提供了自动构建模型集合的能力;然而,这确实需要一些权衡。例如,构建和部署模型集合需要更多的时间和计算资源,并且它们也往往更不透明。这就是我们最初没有从构建模型集合开始的理由。一旦你构建了几个模型,并且你对提高模型准确率的方法感兴趣,你可以决定构建模型集合。正如我们在前面的章节中看到的,我们必须明确选择构建模型集合的选项,这也意味着我们无法计算 SHAP 值。让我们看看这是如何操作的。首先,让我们转到项目列表页面,该页面显示了所有当前项目,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.24_B17159.jpg
图 6.24 – 项目列表
在这里,我们将选择 Automobile Example 2。从菜单中,我们将选择 Duplicate 选项。现在,你会看到 Duplicate 对话框,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.25_B17159.jpg
图 6.25 – 复制项目
我们可以给它一个新的名字,Automobile Example 3,并且我们将选择 Copy dataset only。这样,我们可以应用新的项目设置。让我们点击 Confirm。这将创建一个新的项目。我们可以选择目标为价格,现在我们点击 Advanced Options 选项卡,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.26_B17159.jpg
图 6.26 – 模型集合(blender)的高级选项
这次,我们将选择 Create blenders from top models 选项,并取消选择 Include only models with SHAP value support 选项。现在,我们可以点击 Start 按钮让 DataRobot 构建模型。一旦 DataRobot 完成构建模型,我们可以检查排行榜,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.27_B17159.jpg
图 6.27 – 拼接模型排行榜
你会注意到 DataRobot 构建了一个 AVG Blender 模型,这似乎是顶级模型,但提升效果并不明显。混合模型有时可以比单个模型产生更大的提升,因此探索这个选项是值得的。我们可以选择这个模型,并点击 Describe 选项卡,然后点击 Blueprint 选项卡,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_6.28_B17159.jpg
图 6.28 – AVG Blender 的蓝图
现在,我们可以看到 blender 已经选择了两个 XGBoost 模型,因此提升效果并不令人惊讶。在这种情况下,我们不会选择混合模型,而是返回到上一个项目。
摘要
在本章中,我们学习了如何利用 DataRobot 的功能构建和比较模型。正如你所见,DataRobot 使得快速构建多个模型变得非常简单,并帮助我们比较这些模型。正如你所体验的,我们尝试了许多事情,构建了数十个模型。这种快速模型探索是 DataRobot 的关键功能,其对数据科学团队的重要性不容小觑。如果你要自己用 Python 构建这些模型,将会花费更多的时间和精力。相反,我们利用了这些时间和思考来实验不同的想法,并将更多的精力投入到理解问题上。我们还了解到了编码最佳实践的蓝图。这些蓝图对于新晋和经验丰富的数据科学家都是有用的学习工具。我们还学习了 DataRobot 如何为我们构建集成或混合模型。
可能会有一种冲动想要跳过分析阶段,直接开始部署这些模型,但重要的是在进行一些分析之前不要直接跳入这一步。我们现在已经准备好深入挖掘模型,理解它们,并看看我们能否从中获得更多见解。
第七章: 模型理解和可解释性
在上一章中,我们学习了如何构建模型,现在我们将学习如何使用 DataRobot 生成的输出理解模型,并利用这些信息解释为什么模型会做出特定的预测。正如我们之前讨论的,这一点对于确保我们正确使用结果至关重要。DataRobot 自动化了创建图表和绘图的大部分任务,以帮助人们理解模型,但你仍然需要知道如何在你试图解决的问题的背景下解释它所显示的内容。这也是为什么即使许多任务已经自动化,我们仍然需要参与这个过程的人的原因。正如你可以想象的,随着自动化程度的提高,解释结果的任务将变得越来越有价值。
在本章中,我们将涵盖以下主要内容:
-
检查和理解模型细节
-
评估模型性能和指标
-
生成模型解释
-
理解模型学习曲线和权衡
检查和理解模型细节
在上一章中,我们为不同的项目创建了几个模型。DataRobot 在一个项目中创建 10 到 20 个模型,查看和分析所有这些模型的细节将非常繁琐。你不必逐一审查这些模型,在做出最终选择之前,通常只审查前几个模型。现在,我们将查看Automobile Example 2项目中的模型排行榜,并选择最顶尖的模型,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.1_B17159.jpg
图 7.1 – 模型信息
在前面的截图中,我们在描述选项卡内选择了模型信息选项卡,以查看模型的大小以及创建预测所需预期时间。这些信息对于需要快速评分数千笔交易且对时间敏感的实时应用非常有用。现在,让我们转到理解选项卡内的特征影响选项卡,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.2_B17159.jpg
图 7.2 – 特征影响
这张图对于模型来说非常重要,因为它展示了特征对 XGBoost 模型贡献的大小。我们可以看到,最大的贡献者是curb_weight、engine_size、horsepower、highway_mpg和cylinder_count。另一方面,cylinder_size和engine_type的贡献很小。虽然cylinder_size的预测能力不是很强,但我们不能忘记预测并不总是最终目标。我们知道cylinder_size对engine_size有影响,这是一个重要的特征。目标可能是利用这些信息找出降低成本的方法。为此,我们可能希望减小engine_size,但你不能直接减小engine_size。为此,你需要减小气缸的大小或数量,这将导致engine_size的减小。拥有一个因果图来指导你,在确定实现目标的最佳行动时变得非常有帮助。
在我们采取行动之前,让我们检查一下广义加性模型(GAM)的结果,如图下所示截图:
![图 7.3 – GAM 的特征影响]
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.3_B17159.jpg
图 7.3 – GAM 的特征影响
图 7.3 展示了 GAM 的重要特征。虽然许多特征看起来很相似,但我们注意到engine_type在这个模型中的重要性相当高,而在之前的模型中engine_type的重要性非常低。这并不是错误——它指向了这样一个事实,即许多特征是相互关联的,不同的模型可以从不同的特征中捕捉到信号,并且预测能力并不一定等同于根本原因。为了采取行动,我们需要了解导致目标特征变化的根本特征。换句话说,最能预测某事的特征,并不总是可以改变以在目标中产生期望变化的特征。
为了进一步了解特征如何影响目标,让我们在模型的“理解”选项卡中选择“特征效应”选项卡,如图下所示截图:
![图 7.4 – 特征效应]
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.4_B17159.jpg
图 7.4 – 特征效应
上述截图显示了各种特征的局部依赖性图。选定的图是关于curb_weight的。该图显示了curb_weight和价格之间相当线性的关系。我们确实在几个地方看到了价格的一些异常下降——例如,在curb_weight值为2700左右。在我们对此过于认真之前,我们注意到围绕这个值的数据量非常有限。这告诉我们,这个特定的观察结果很可能是由于数据不足。这确实提出了一个问题,即我们的模型很可能会在那个小区域内预测一个较低的价格,这反过来又可能导致收入降低。
让我们在以下截图中查看另一个特征:
![图 7.5 – engine_size 的部分依赖性]
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.5_B17159.jpg
图 7.5 – engine_size 的部分依赖图
前面的截图显示了 engine_size 和价格之间高度非线性关系。我们在 engine_size 值为 180 附近看到了价格的一个非常戏剧性的上升。如果不与领域专家讨论,很难知道这个效果有多真实。我们可以注意到,对于大于 130 的尺寸,可用的数据量非常小,因此我们看到的效应可能仅仅是数据不足造成的。就目前来看,它表明价格在 200 以上的尺寸上停滞不前,这对业务可能是一个重要的见解。
让我们看一下以下截图中的 highway_mpg 的另一个部分依赖图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.6_B17159.jpg
图 7.6 – highway_mpg 的部分依赖图
图 7.6 显示了另一个高度非线性关系,一个关键的转折点发生在 highway_mpg 值约为 28 附近。这清楚地表明在 28 附近有一个大的价格下降,因此这是一个关键点。这可能是由于法规,低于 28 将您置于不同类型的车辆或发动机。我们还注意到,一旦超过这个阈值,任何进一步的变化对价格的影响都不是很大(然而,从其他角度来看,它仍然可能非常有影响)。如果您不知道为什么是这样,与您的主题专家(SMEs)讨论这一点很重要。
我展示和讨论这些图表的主要目的是向您展示分析这些图表而不是花费所有时间编写这些图表的重要性。由于 DataRobot 会自动为您创建这些图表,您现在可以花时间进行更有价值的分析工作,以帮助改进您的业务。
让我们回顾一下 engine_size 的图表,但这次是针对 GAM,如下截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.7_B17159.jpg
图 7.7 – GAM 的部分依赖图
图 7.7 显示了 GAM 的部分依赖图。与 图 7.5 进行比较,我们看到 图 7.7 在 95 和 180 的值周围显示了更清晰的阈值。与领域专家讨论这个问题可以帮助您确定哪个模型更好地代表现实,哪个模型有助于您更好地设定定价。GAMs 的一个好处是您可以轻松地平滑这些曲线并调整它们的形状以部署。记住——准确的预测并不总是等同于更好的干预或行动。
GAMs 更容易理解和解释。让我们再看另一个图表,它有助于理解这一点:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.8_B17159.jpg
图 7.8 – 特征系数
图 7.8 展示了 GAM 中不同特征的系数。你会注意到 DataRobot 创建了一些派生特征。你可以点击它们以查看更多详细信息。这提供了一个系数的高级视图,但还有一个更好的视图,可以更好地理解模型。为此,让我们点击 GAM 的“描述”选项卡内的“评级表”选项卡,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.9_B17159.jpg
图 7.9 – GAM 的评级表
这个视图允许你下载 DataRobot 构建的评级表;你也可以修改这个表并将其上传回来以使用修改后的表。这种机制因此允许你根据对问题的理解手动微调你的模型。因此,这个功能非常强大,因为它为你提供了很多灵活性,但与此同时,你必须谨慎使用。让我们点击“下载表格”按钮并下载逗号分隔值(CSV)文件。下载后,我们可以使用Excel打开文件,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.10_B17159.jpg
图 7.10 – GAM 的评级表
现在,你可以看到评级表的样子。在这里,你可以看到 DataRobot 为各种特征创建了区间。对于每个区间,它都分配了系数和相对性,以说明特征变化如何影响目标变量。为了更好地理解这一点,我们可以在 Excel 中为单个特征创建图表,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.11_B17159.jpg
图 7.11 – 特征相对性
在 图 7.11 中,你可以看到给定特征(如 body_style)如何影响价格。GAM 模型本质上是从所选特征中得到的所有贡献的总和。给定评级表,任何人都可以轻松计算价格,这也可以以非常简单的方式实现。鉴于单个特征效应是非线性的(但仍非常易于理解),这使得这些模型在易于理解的同时表现出色。GAMs 变得非常受欢迎也就不足为奇了。
我们还想查看一个图表,这个图表经常有助于理解特征的贡献。为此,我们将点击页面顶部的“洞察”菜单项,这将显示下面的图表:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.12_B17159.jpg
图 7.12 – 模型洞察
图 7.12 使用 DataRobot 选定的模型(在这种情况下,如果值落在特定区间内则为one,否则为zero)展示了变量效应。你可以参考所选模型的特征效应来查看这些图表之间是否存在任何不一致。
现在我们已经从哪些特征重要以及它们如何有助于目标值的视角理解了模型,我们可以关注模型的表现如何。
评估模型性能和指标
在本节中,我们将关注模型在尝试预测目标值方面的表现如何。让我们首先查看不同模型之间的整体性能比较,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.13_B17159.jpg
图 7.13 – 模型间的性能
前一个截图显示了之前见过的整体排行榜。在这里,我们可以看到基于Gamma 偏差指标的不同模型的总体性能。我们还可以通过点击指标附近的下拉箭头来查看基于其他指标的性能,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.14_B17159.jpg
图 7.14 – 性能指标
图 7.14 展示了我们可以选择的各项指标。你通常会看到在不同指标中,哪些模型会出现在顶部位置上呈现出相似的趋势。一般来说,DataRobot 选择的指标是一个非常不错的选择,如果不是最佳选择。现在,让我们通过点击模型并在评估选项卡中选择升力图选项卡来检查特定模型的性能细节,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.15_B17159.jpg
图 7.15 – 升力图
前一个截图中的升力图显示了预测值与实际值之间的对比。你可以选择分组结果的桶数。最大值为60,这通常是一个好的起点。这意味着预测值首先按升序排序,然后分组到60个桶中。你看到的结果是那个桶内的平均值。分桶的原因是,如果你查看整个数据集,会有如此多的数据,你将无法从中得出任何有意义的结论。你可以看到,模型在整个值域上表现非常好,有一些小区域,其中差异似乎比其他区域更高。我们通常希望看到多个模型的升力图,以查看是否有某个模型比另一个模型表现更好的区域。现在,让我们查看 GAM 的升力图,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.16_B17159.jpg
图 7.16 – GAM 的升力图
图 7.16 的结果看起来与图 7.15 的结果非常相似,但我们可以看到,对于更高的值,GAM 的表现不如 XGBoost 模型。现在我们知道 GAM 相对于 XGBoost 模型在哪些具体区域较弱。让我们进一步查看,通过点击评估选项卡中的残差选项卡,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.17_B17159.jpg
图 7.17 – 模型残差
残差似乎在平均值周围分布良好,但略偏向负值。让我们也检查一下 GAM 的残差分布。我们可以在下面的屏幕截图中看到输出:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.18_B17159.jpg
图 7.18 – GAM 的残差
GAM 的残差也分布良好,但与 XGBoost 模型相比,略偏斜。总体而言,模型的表现看起来非常好。我们现在可以深入了解个别预测及其解释。
生成模型解释
DataRobot 的另一个关键功能是它自动为每个预测生成实例级解释。这对于理解为什么特定的预测结果是这样非常重要。这不仅对于理解模型很重要;很多时候,这也需要用于合规目的。我相信如果你被拒绝信用,你一定见过生成的解释。生成这些解释的能力并不简单,可能非常耗时。让我们首先看看 XGBoost 模型生成的解释,如下面的屏幕截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.19_B17159.jpg
图 7.19 – 模型解释
由于我们选择了 0 到 10000。您可以选择一些特定的点,并查看构成该预测的组成部分。在 图 7.19 中,我们选择了预测点 27788.86。我们可以看到右侧的主要贡献元素,其中 engine_size 贡献最大,在这种情况下,engine_size 的值为 183。请注意,特征的相对贡献可能会根据具体情况而变化,这里特征的排序将不会与前面章节中看到的特征影响顺序完全匹配。让我们将此与 GAM 生成的解释进行比较,如下面的屏幕截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.20_B17159.jpg
图 7.20 – GAM 模型的模型解释
在前面的屏幕截图中,选择的点是预测 31465.18。对于这个点,我们可以看到对价格有主要贡献的特征,我们还注意到由于 engine_size 的 183 导致的减少或负贡献在 GAM 中要大得多。
整个数据集的解释可以下载并进行分析,以获得更多见解。您还可以通过点击上传新数据集按钮,轻松上传全新的数据集进行评分并生成这些解释。
正如你在本章中看到的,不同的模型有不同的性能,使用特征的方式略有不同,可理解性水平也不同。在最终选择你想要使用的模型之前,应该考虑几个其他维度。现在让我们看看模型学习曲线和一些模型权衡。
理解模型学习曲线和权衡
在机器学习(ML)问题中,我们总是试图找到更多数据来改进我们的模型,但正如你可以想象的那样,总会有一个点,收益递减。很难知道何时达到那个点,但你可以通过查看学习曲线来获得一些指示。幸运的是,DataRobot 通过自动构建这些学习曲线使这项任务变得简单。当 DataRobot 开始构建模型时,它首先尝试在数据的小样本上使用广泛范围的算法。然后使用更大的样本大小构建有希望的模型,依此类推。
在这个过程中,我们发现随着更多数据的添加,性能改进了多少。要查看学习曲线,你可以点击屏幕顶部的学习曲线菜单项,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.21_B17159.jpg
图 7.21 – 模型学习曲线
你可以在页面右侧看到不同的模型类型。在这里,你可以点击你想要检查和比较的模型。选择模型后,你点击**+ 计算学习曲线**按钮。这将弹出一个对话框,显示所选模型和相应的样本大小,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.22_B17159.jpg
图 7.22 – 用于比较的模型
如果图 7.22中的选择看起来正确,你可以点击计算按钮。现在你会看到所选模型的曲线,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.23_B17159.jpg
图 7.23 – 学习曲线比较
随着样本量的增加,你现在可以看到性能的改进。我们可以看到 GAM 学习非常快,但随着样本量的增加,XGBoost 模型开始占据主导地位。我们可以看到,这两个模型都将从额外的数据中受益。我们还可以看到,如果我们只有目前数据的一半,那么 GAM 将是明显的赢家。
我们现在可以看看模型的一个另一个权衡——即速度与准确率的权衡。如果你点击页面顶部的速度与准确率菜单项,你会看到一个图表,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_7.24_B17159.jpg
图 7.24 – 速度与准确率权衡
你会注意到 DataRobot 构建了一个 AVG Blender 模型,这似乎是顶级模型,但提升并不大。混合模型有时可以比单个模型产生更大的提升,因此探索这个选项是值得的。我们可以选择这个模型,并在“描述”菜单项中的“蓝图”选项卡上点击。
摘要
在本章中,我们介绍了如何利用 DataRobot 的功能构建和比较模型。正如你所见,DataRobot 使得快速构建多个模型变得非常简单,并帮助我们进行比较。正如你所体验的,我们尝试了许多事情,构建了数十个模型。这是 DataRobot 的关键功能,其对数据科学团队的重要性不容小觑。如果你要自己用 Python 构建这些模型,将会花费更多的时间和精力。相反,我们利用了这些时间和思考来实验不同的想法,并将更多的精力投入到理解问题上。我们还了解到了编码最佳实践的蓝图。这些蓝图对于新晋和经验丰富的数据科学家都是非常有用的学习工具。我们还学习了 DataRobot 如何为我们构建集成或混合模型。
可能会很有诱惑力直接跳过并开始部署这些模型之一,但重要的是在进行一些分析之前不要直接跳到那一步。在下一章中,我们将更深入地研究模型,以了解它们,并看看我们是否能从中获得更多见解。
第八章:模型评分和部署
在上一章中,我们学习了如何使用 DataRobot 生成的输出来理解模型以及为什么模型会提供特定的预测。现在,我们将学习如何使用模型对输入数据集进行评分并创建用于预期应用的预测。DataRobot 自动化了许多评分和生成行级解释所需的任务。
然而,这些任务并没有结束。在大多数情况下,这些预测需要转换为行动,以便由人员或应用程序消费。这种将预测映射到行动的过程需要理解业务,因此需要有人来解释结果(在大多数用例中)。在本章中,我们将讨论如何进行这项工作。我们将涵盖以下主要主题:
-
评分和预测方法
-
生成预测解释
-
分析预测和后处理
-
部署 DataRobot 模型
-
监控已部署的模型
评分和预测方法
DataRobot 提供了多种方法来使用已创建的模型对数据集进行评分。其中最简单的方法是通过 DataRobot 用户界面(UI)进行批量评分。为此,我们需要遵循以下步骤:
-
创建一个包含要评分的数据集的文件。鉴于我们正在使用公共数据集,我们将简单地使用相同的数据集进行评分。在实际项目中,您将能够访问一个新数据集,您希望为其创建预测。为了我们的目的,我们简单地复制了我们的
imports-85-data.xlsx数据集文件,并将其命名为imports-85-data-score.xlsx。 -
现在,让我们选择 预测 选项卡,然后选择 测试预测 选项卡,用于 XGBoost(XGB)模型,如下面的截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.1_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.1_B17159.jpg
图 8.1 – 批量评分
在前面的截图中,您将看到有一个选项可以 拖放新数据集 来添加评分文件到模型中。
-
让我们选择我们的
imports-85-data-score.xlsx评分文件,并将其拖放到 拖放新数据集 框中。一旦放下文件,它就会上传,您可以在界面上看到它,如下面的截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.2_B17159.jpghttps://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.2_B17159.jpg
图 8.2 – 计算预测
-
现在,您可以点击在 Excel 中可以查看的
.csv文件,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.3_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.3_B17159.jpg
图 8.3 – 下载的预测
下载的预测文件现在可以与原始数据集合并,以进行进一步分析。
评分数据集的第二种方法是通过 DataRobot 批量预测 应用程序编程接口(API),将在下一节中讨论。
生成预测解释
在本节中,我们将重点介绍如何为评分数据集生成预测和解释。在上传评分数据集(如前节所述)后,您现在可以转到理解选项卡,然后选择预测解释选项卡,如下面的截图所示:
![Figure 8.4 – Prediction explanations
![img/Figure_8.4_B17159.jpg]
图 8.4 – 预测解释
在前面的截图中,您可以看到现在显示的是已上传的评分数据集。您现在可以点击数据集文件名旁边的图标来计算解释。一旦计算完成,您将看到下载图标。您可以使用下载图标来下载模型预测生成的解释。解释以.csv文件的形式提供,可以使用 Excel 打开,如下面的截图所示:
![Figure 8.5 – Prediction explanations file
![img/Figure_8.5_B17159.jpg]
图 8.5 – 预测解释文件
在前面的截图中,我们看到文件包含预测以及每个预测的解释。例如,如果我们查看make行,它解释了这辆汽车相对于基准值的 5.17%的价值差异。同样,您可以看到每个特征值的相对贡献。请注意,文件中的特征不是按最重要的特征排序的,并且对于给定行最重要的特征与其他行可能不同。特征重要性会随行变化。
现在我们有了预测及其解释,让我们看看如何分析这些内容,并确定如何使用它们采取行动或做出决策。
分析预测和后处理
在我们部署模型之前,分析预测并查看它们是否有意义,是否存在某些错误模式,以及如何将预测转化为可执行的行动,这些都是传统数据科学工具和方法帮助不大,而您需要依赖判断和其他学科的方法来帮助制定下一步的方面。为此,让我们首先将评分数据集文件与解释文件结合起来。这可以在结构化查询语言(SQL)、Python 或 Excel 中完成。合并后的文件看起来大致如下:
![Figure 8.6 – Combined scoring data and predictions
![img/Figure_8.6_B17159.jpg]
图 8.6 – 合并评分数据和预测
我们还创建了一个新的ERROR列,它简单地从价格中减去预测。现在我们可以使用 Excel 创建数据透视表,并从多个角度查看结果。例如,让我们创建一个数据透视表,查看按符号化的ERROR 平均值,如下面的截图所示:
![Figure 8.7 – Average of ERROR value by symboling
![img/Figure_8.7_B17159.jpg]
图 8.7 – 按符号化平均 ERROR 值
前面的截图显示,对于值**-2**,错误率要高得多。查看数据集,我们发现我们只有三个**-2的数据点,因此模型表现不佳并不令人惊讶。这告诉我们,当符号化值为-2**时,我们不能相信结果,我们应该尝试获取更多该值的数据。此类分析可以指出改进的领域以及需要集中精力解决的问题。我们还意识到,由于这是一个平均误差,我们应该使用误差的绝对百分比值的平均值来防止得出错误的结论,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.8_B17159.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.8_B17159.jpg
图 8.8 – 按符号化计算的绝对百分比误差平均值
现在,我们看到随着符号化值的增加,绝对百分比误差在减小。在这个阶段,除了探索输出数据并从不同角度观察以寻找可以找到的内容外,没有找到洞察力的明确方法。通常,对错误进行排序并查看具有异常大错误的行是一个好主意,然后看看你是否可以确定为什么会出现这种情况。
现在,让我们转向构建数据科学模型最重要的一个方面——理解应该采取哪些行动。现在我们有一个合理的模型来预测价格,一个问题随之而来:我们应该如何利用这些信息? 希望在项目开始时就确定了这次练习的目标。让我们假设目标是根据模型预测和提供所有参数(如engine_size等)来设定新车辆的价格。我们也可以想象,这样的模型在设计师试图确定不同参数(如bore或width)之间的权衡时,在设计阶段也是有用的。这进一步说明,预测模型可以多次应用于在构建模型时未考虑到的用例。
然而,这需要我们理解业务问题的更广泛背景。这是我们花费时间讨论和理解业务背景的主要原因,正如我们在第三章“理解和定义业务问题”中所讨论的那样。回顾那章以刷新那里讨论的概念可能是有用的,因为我们将使用那里介绍的一些技术,例如因果建模。
为了确定我们如何使用价格预测,让我们回顾一下我们关于价格与其他参数之间关系的了解。在第五章《使用 DataRobot 进行探索性数据分析》中,我们研究了关联分析信息。DataRobot 生成了使用互信息生成的关联强度。我们可以使用这些信息来绘制不同特征之间的网络图,如下面的截图所示。你可以通过为每个特征画一个圆圈,然后创建具有高关联强度的特征之间的线条来完成此操作:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.9_B17159.jpg
图 8.9 – 特征之间关联的网络图
在第七章《模型理解和可解释性》中,我们看到了价格的特征重要性,以SHapley Additive exPlanations(SHAP)值来衡量,是针对我们选择的模型特定的。以下可能代表此问题的因果图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.10_B17159.jpg
图 8.10 – XGB 模型的因果图
图表的左侧表示 SHAP 值中最重要的特征。让我们假设实际收取的价格与预测略有不同。价格差异特征反映了某人可能做出的收取与预测不同的价格的决定。价格特征影响销量,这最终影响盈利能力。请注意,这仅反映了一种使用此模型帮助做出定价决策的可能方式。
另一方面,如果我们想象我们正在尝试帮助汽车设计团队制定出既是最优配置也是最盈利的汽车配置,那么我们可能会以不同的方式看待这个图。这是因为不同的汽车或发动机设计选择也会影响汽车的成本。此外,从图 8.9 我们知道特征不是独立的。改变缸径特征将改变发动机尺寸和马力特征。因此,当我们考虑做出决策时,我们必须考虑因果影响。这是一个非常简化的观点,你可以想象对于真实问题,这些图将更加复杂。想象一下,商业领导者通过在脑海中考虑所有这些关系来做出这些决策。这也是为什么许多时候,模型不会被商业用户使用的原因之一。
在我们的示例问题中,图 8.10 中所示的因果图相当简单。你可以想象现实世界中的问题,其中这个图将更加复杂。在这种情况下,很难评估模型部署对生态系统的影响,这包括用户和其他利益相关者。复杂问题往往有许多未预见的后果,尤其是当受影响的是人的时候。
在这种情况下,如果潜在影响可能很大,建议在合成或模拟环境中测试新模型。完成测试和影响分析后,我们现在可以部署我们的模型。
部署 DataRobot 模型
DataRobot 使得部署您开发的模型变得非常简单。为了准备模型进行部署,以下是步骤:
-
让我们解锁项目,以便我们可以查看保留数据集的指标,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.11_B17159.jpg
图 8.11 – 解锁 DataRobot 模型
在前面的截图中,您可以在界面的右侧看到解锁所有模型的保留集项目选项。
-
在选择用于部署的模型之后,您才应该解锁项目。在我们的例子中,我们选择了使用FL1 top23特征列表的 XGB 模型。点击此选项将弹出一个对话框,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.12_B17159.jpg
图 8.12 – 解锁项目保留集
-
解锁项目是一个不可逆的过程。让我们解锁项目,查看保留集的指标,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.13_B17159.jpg
图 8.13 – 解锁项目视图
图 8.13 显示,保留集的值高于交叉验证的值,这是预期的。保留集的值是模型部署后应期望的性能的更好表示。
-
现在项目已解锁,让我们用 100% 的数据重新训练所选模型,以提高该模型的表现。为此,点击模型旁边的橙色**+**号,如图 图 8.13 所示。这将弹出一个更改样本大小的对话框,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.14_B17159.jpg
图 8.14 – 定义新的样本大小
在前面的截图中,您可以看到更改样本大小的选项。
-
将滑块拖到100%,表示您想用 100% 的数据训练模型,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.15_B17159.jpg
图 8.15 – 设置新的样本大小
-
您现在可以点击使用新的样本大小运行按钮。DataRobot 将现在使用 100% 的数据重新训练 XGB 模型。对于 XGB 模型,您现在可以点击预测选项卡,然后点击部署选项卡,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.16_B17159.jpg
图 8.16 – 部署模型
-
接下来,点击部署模型按钮。这将弹出一个新页面,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.17_B17159.jpg
图 8.17 – 为模型创建部署
-
您现在可以为您的部署模型命名。您还可以选择部署模型所在的服务预测环境,这是由您的管理员设置的。在数据漂移部分,您可以指定是否要跟踪数据漂移或启用挑战者模型。您还可以启用预测行的存储,这允许 DataRobot 分析随时间推移的性能。同样,您还可以启用跟踪属性,以进行基于段落的模型性能分析。
-
您现在可以点击
https://app2.datarobot.com。 -
您现在可以调用此 API 来生成预测。您还可以通过点击不同的标签页来查看有关您的部署的其他信息。如果您点击服务健康标签页,您将看到如下页面:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.19_B17159.jpg
图 8.19 – 部署的服务健康
前面的截图显示了价格预测模型的状态。它显示了已完成的预测数量、预测的响应时间和错误率。截图没有显示任何值,因为我们刚刚部署了此模型。
我们现在已准备好开始监控这个部署模型。
监控部署模型
如您现在所猜到的,一旦模型部署,数据科学团队的工作并没有结束。我们现在必须监控这个模型,看看它的表现如何,是否按预期工作,以及我们是否需要干预并做出任何更改。我们将按以下步骤进行:
-
为了了解它是如何工作的,让我们点击预测标签页,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.20_B17159.jpg
图 8.20 – 使用部署的模型进行预测
-
我们现在可以通过拖放文件(在这里,我们将使用在模型训练期间使用的相同文件)到预测源框中,上传要评分的数据集。我们现在可以看到其他选项变得可用,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.21_B17159.jpg
图 8.21 – 计算数据集的预测
-
在选择选项后,我们可以点击计算并下载预测按钮。在 DataRobot 完成计算后,我们将看到输出文件变得可用,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.22_B17159.jpg
图 8.22 – 下载预测
输出文件现在可以下载并分析。由于我们感兴趣的是监控模型,让我们点击服务健康标签页,如下截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.23_B17159.jpg
图 8.23 – 模型的服务健康
我们现在可以看到,该模型已服务了 15 个请求,平均响应时间为 325 毫秒(ms),错误率为 0%。整体服务健康看起来很好。
-
我们现在可以通过点击数据漂移选项卡来查看模型的数据漂移,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.24_B17159.jpg
图 8.24 – 模型的数据漂移
在上一张截图的顶部是价格。如果您向下滚动页面,您将看到额外的图表,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/Figure_8.24_B17159.jpg
图 8.25 – 模型的数据漂移:附加信息
上一张截图显示了随时间变化的平均预测值。这将表明预测是否稳定,或者它们是否随时间变化。您将不得不依靠自己对业务问题的理解来确定漂移量是否可接受。DataRobot 也会通过显示红色、黄色或绿色状态来给您一个指示。红色状态表示存在需要解决的问题;同样,黄色表示您应该注意潜在的问题,绿色表示一切看起来都很正常。一般来说,问题可能是数据管道中的错误或商业环境的改变。商业环境的改变将表明模型需要重新训练。
如果模型需要重新训练或者您需要重建模型,您可以遵循我们在前几章中概述的步骤。这完成了使用 DataRobot 构建和部署模型的基本视图。
摘要
在本章中,我们学习了如何训练模型后使用模型。我们讨论了用于评分数据集的方法以及用于分析结果输出的方法。我们还涵盖了将预测转化为行动或决策的方法和考虑因素。这是一个关键步骤,您必须与业务利益相关者合作,确保引入此模型不会引起未预见到的问题。这也是进行变更管理任务的时候,比如向受变更影响的人传达变更,并确保用户接受新流程的培训,知道如何使用新功能。
我们接着讨论了如何使用 DataRobot 功能快速部署模型并监控模型性能。很容易低估这一功能的重要性。模型部署和监控并不容易,许多组织花费大量时间和精力来部署模型。希望我们已经展示了如何使用 DataRobot 轻松完成这一任务。
我们现在已经完成了构建和部署模型所需的基本步骤,现在可以深入了解 DataRobot 的一些高级概念和功能。你现在可以根据你的兴趣或将要从事的项目类型深入研究高级主题。例如,如果你正在处理时间序列问题,那么你可以回顾第九章,预测和时间序列建模。
第三部分:高级主题
本节涵盖了您在掌握前几节内容后可以利用的许多高级主题和能力。本节提供了经验丰富的数据科学家将使用的高级功能示例,以使他们更加高效。本节的一些章节需要熟悉 Python 编程。
本节包含以下主题:
-
第九章, 预测和时间序列建模
-
第十章, 推荐系统
-
第十一章, 处理地理空间数据、NLP 和图像处理
-
第十二章, DataRobot Python API
-
第十三章, 模型治理和 MLOps
-
第十四章, 结论
第九章:预测和时间序列建模
在本章中,我们将了解时间序列是什么,并了解如何使用 DataRobot 来建模它们。时间序列建模在商业中变得越来越有用。然而,与预测相关的挑战使得许多有技能的数据科学家在成功执行时间序列建模方面面临相当大的挑战,这种建模形式也可能非常耗时。DataRobot 提供了一个自动化流程,使数据科学家能够以有效和高效的方式执行时间序列项目。在本章中,我们将介绍预测的概念,强调其商业重要性和内在挑战,并说明如何使用 DataRobot 来构建其模型。
到本章结束时,你将学会如何利用 DataRobot 构建时间序列预测模型。此外,我们还将探讨如何使用这些模型进行预测。在高级主题部分,我们将进一步构建多序列时间序列模型。以下是本章将涵盖的主要主题:
-
时间序列预测和建模的概念性介绍
-
定义和设置时间序列项目
-
构建时间序列预测模型并理解其模型结果
-
使用时间序列模型进行预测
-
时间序列建模的高级主题
技术要求
本章的一些部分需要访问 DataRobot 软件以及一些数据处理工具。大多数示例涉及小型数据集,因此可以通过 Excel 处理。我们将在本章中使用的数据集将在下面进行描述。
电器能源预测数据集
此数据集可在加州大学欧文分校(UCI)机器学习仓库中访问(archive.ics.uci.edu/ml/datasets/Appliances+energy+prediction#)。
数据集引用
路易斯·M·坎达内多,维罗妮克·费尔德海姆,多米尼克·德拉马伊克斯,《低能耗房屋中电器能源使用的数据驱动预测模型》,《能源与建筑》,第 140 卷,2017 年 4 月 1 日,第 81-97 页,ISSN 0378-7788。
此数据集捕捉了房屋中各个房间和室外环境中的温度和湿度,以及各种设备随时间变化的能源消耗。数据每 10 分钟采集一次。这是一个典型的时间序列数据集示例。数据以 .csv 格式提供,网站还提供了各种特征的描述。此数据集中的所有特征都是数值特征。数据集还包括两个随机变量,以使问题更有趣。
时间序列预测建模的概念性介绍
商业环境的动态性质使得时间成为商业成功的关键资源。因此,企业在决策时需要考虑时间因素。商业环境中的变化发生得很快,这使得组织需要采取快速但经过深思熟虑的行动。分析技术为组织提供了工具,这些工具能够预测未来,从而使决策者有足够的时间确保他们的决策与组织目标一致。组织使用特定时间的数据来预测未来某一时期的销售量。其他作家已经区分了时间序列模型和预测模型。在本章中,我们使用了这个术语,并将时间序列预测视为利用基于时间的数据通过高级分析获得指导商业决策的见解。
时间序列预测支持商业计划的多个方面。通过预测,可以优化人力和其他形式的资源规划,以确保实现预期的结果。通过预测,现金流、利润和预算预测可以更加严格地建立,从而减轻人为偏差。预测销售可能会受到可控和非可控的多种因素的影响。某些随时间变化的消费者因素倾向于影响销售量。这些因素包括人口变化、客户口味和兴趣的变化。此外,需求对更广泛的经济变量(如通货膨胀)敏感,这些变量也随时间变化。因此,使用一些可以作为这些消费者和经济变量代理的特征变得至关重要,除了滞后或历史销售数据。由于一些这些变量难以获取,分析师往往局限于在建模未来结果时使用一些历史值和数量。
尽管详细讨论时间序列超出了本书的范围,然而,理解建模时间序列的特性使得它们更具挑战性是相关的。除了本书前几章讨论的其他预测建模形式的困难之外,时间序列建模还带来了额外的挑战。线性回归建模的一个假设是观察值的独立性,即观察或数据行是独立的。然而,这个假设在时间序列建模中不可避免地被打破。在时间序列中,自相关自然发生,因为观察在不同时间段内是相似的。也有可能高度修正的观察不会连续发生,在这种情况下,会出现季节性。当固定时间段内的观察具有更高的相关性时,序列被认为是季节性的。实际上,这些是观察的周期性波动。在假日期间航班票务销售量的相似量就体现了这一点。季节性确实可能发生,但并不遵循固定的周期性时间框架。通常,验证周期需要比序列的其他属性(如周期性)大得多的数据集,因为周期性主要与外部因素有关,例如商业环境中的宏观经济或政治变化。
自相关还导致了线性,这是一个描述连续观察值相似性的总体趋势的概念,尽管它们以遵循线性趋势的方式变化。由于这种线性趋势,尽管有时会有一些综合波动,特定时间框架的平均值将遵循一个模式,但不太可能相同,因此使用了移动平均(MA)和自回归方法来表示时间序列。然而,序列仍然可以通过它们随时间变化的统计属性的程度来表征。当它们具有恒定的均值和方差,且与时间无关时,它们被认为是平稳的。最有趣的是,尽管在统计上存在问题,但某些时间序列数据具有这些特性的组合。一个很好的例子是航班量。尽管随着时间的推移逐渐增加,具有季节性,但在经济衰退期间通常会下降。在这个例子中,我们可以看到季节性、周期性和线性的元素。
有时候在细节中容易丢失的概念是可操作性。可操作性是指利益相关者能够因为分析或模型的结果而采取行动的能力,数据科学家通常专注于预测的准确性。虽然准确性很重要,但更重要的是为决策者提供可操作的指导。一个能够让你今天采取行动的预测比一个更准确但不可操作的预测更有价值。在定义预测问题时必须谨慎,以确保正在开发的模型具有可操作性。
本节中省略的对话突出了使时间序列建模对典型数据科学家更具挑战性的特性。DataRobot 已经开发了独特的流程,使数据科学家,包括那些统计知识有限的人,能够创建复杂且稳健的时间序列模型。在下一节中,我们将探讨如何在 DataRobot 中定义和设置时间序列问题。
定义和设置时间序列项目
从第四章,“为 DataRobot 准备数据”,到第八章,“模型评分和部署”,我们探讨了在 DataRobot 中创建、理解、评分和部署基本模型的过程。我们看到了 DataRobot 自动为我们构建了几个模型,然后我们可以使用这些构建的模型对数据集进行评分。进一步地,在我们选择了一个与我们的需求最匹配的模型之后,DataRobot 为我们提供了一个部署所选模型的过程。由于时间序列建模与其他形式的预测建模之间的差异,我们将在本节中探讨如何通过有效地定义和设置 DataRobot 中的时间序列项目来缓解问题。
我们将用于探索使用 DataRobot 进行时间序列建模的数据集是我们在第四章,“为 DataRobot 准备数据”中探讨的家用电器能耗预测数据集。该项目的目标是预测能耗。这个能耗时间序列数据集包含了来自不同数据源 4 个半月的 10 分钟读数。首先,涉及到的数据包括房屋内的温度和湿度。这些数据通过无线传感器网络进行监测,并且每 10 分钟存储一次。房屋中的九个房间都有温度和湿度的读数被存储在相应的时间段内。其次,还有外部数据提供了附近机场(公共来源)关于房屋外部的详细天气信息,同样以 10 分钟为间隔。这包括风速、能见度、露点、压力和湿度。这些信息通过日期和时间与数据合并。此外,与日期和时间对齐的家用电器和照明使用情况也被附加到数据集中。
在这个数据集中,很容易看出这个时间序列预测的目标是预测能源使用。直接影响变量是房屋内的温度和大气压力;然而,房屋外部的天气数据也很重要。我们创建了计算房屋九个房间平均条件的特征。此外,我们还设计了捕捉平均房间温度与外部温度以及平均房间压力与外部压力之间差异的特征。由于我们有两个时间序列(设备使用和照明使用),我们将以两种方式来处理这个问题。首先,作为一个.csv文件,如下截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_01.jpg
图 9.1 – 选择时间序列的目标变量
项目命名为Energy_Prediction,选择的目标变量是total_energy(照明和设备使用的总和)。我们按以下步骤进行:
-
在选择目标变量后,我们选择时间变量和时间建模的性质。点击
date特征,它指定了所有读数的日期和时间,如下截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_02.jpg图 9.2 – 选择基于时间的函数和时间变量
-
点击设置基于时间的建模按钮并选择时间特征后,平台会请求构建的时间感知模型类型。有两种选项——自动时间序列预测与回测和自动机器学习与回测,如下所述:
-
自动时间序列预测与回测—此选项在预测未来数据时考虑了先前数据。对于时间序列,需要预测多个未来的点。此类基于时间的项目的例子可以是使用去年销售数据来估计下个月百货商店的每日销售额。
自动机器学习与回测—自动机器学习选项,有时被称为时间外验证,基本上是按时间顺序创建基于时间的特征,然后使用一个典型的预测模型来预测该行的目标变量。在这里,我们不使用典型的交叉验证方案;相反,这种方法使用旧数据来训练,并保留新数据用于回测。我们项目的问题背景属于预测类别,因此选择了此选项,如下截图所示:
-
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_03.jpg
图 9.3 – 基于时间的建模选项
一旦我们选择了自动时间序列预测与回测选项,我们将看到一个时间感知建模选项卡(见图 9.3)。在这里,需要仔细选择几个选项。我们表达模型用于预测的数据回溯多远,以及模型预测多远。让我们首先考虑特征推导窗口选项。这个滚动窗口突出显示了一个滞后,相对于预测点的时间,时间序列模型的特征和统计量是据此推导出来的。滚动窗口相对于预测点表达,并随着时间的推移自动向前移动。在理想情况下,这个窗口应该覆盖你的数据中的季节性周期。本质上,这个窗口通常回答的问题是:*我们模型用于预测的数据回溯多远?*此外,窗口的结束和你的预测时间之间应该有足够的时间来应对任何数据摄入延迟,确保数据足够新。这个时期被称为盲历史。在我们的案例中,我们假设一个小时足够的时间来允许任何盲历史,因此将预测点之前的时间间隔设置为 60 分钟。考虑到我们的数据限制在 4 个半月,我们问题的背景下的季节性将是日夜使用。因此,我们将我们的滚动窗口设置为 2 天(2,880 分钟),考虑到最初的 60 分钟预测点间隔,总计为 2,940 分钟。
第二个考虑因素是预测窗口选项。这定义了相对于预测点,我们预测的未来有多远。这有两个要素;首先,预测开始的时间。预测应该提供足够的时间采取行动,但又不能过于遥远,以确保这些预测足够准确。其次,我们选择预测的结束点。这取决于起点以及我们问题的性质。因此,这一方面回答了问题:*预测应该向前推进多远?*对于当前的问题,我们选择了操作化差距,即预测点和预测窗口开始之间的 1 天(1,440 分钟)差距。此外,滚动窗口设置为 1 天,考虑到我们的操作化差距,变为 2,880 分钟。
在本节中我们已经建立了时间序列预测项目,现在我们将探讨构建模型的过程,从理解特征列表及其分布到观察它们对评估模型的影响。
构建时间序列预测模型并理解其模型结果
与我们在第四章中查看的项目类似,即准备数据以供 DataRobot 使用到第八章的[模型评分和部署],一旦我们完成了初始配置,我们就向上滚动并点击开始按钮。通过这样做,DataRobot 会自动为该项目构建时间序列模型。在我们评估模型之前,了解平台提取的特征的性质将是有用的。DataRobot 从数据中提取的特征与其它预测模型大不相同,如下面的截图所示:
![图 9.4 – 特征列表
![图片 B17159_09_04.jpg]
图 9.4 – 特征列表
在特征列表选项卡下显示的列表是作为探索性数据分析(EDA)的一部分构建的,并列出了 DataRobot 在创建模型时使用的不同特征列表。许多特征列表涉及派生特征,这些特征是根据时间序列的属性自动创建的。关于派生特征的进一步讨论将在本节后面进行。很容易看出,一些列表涉及从原始数据中提取的特征(例如,时间序列提取特征)。其他列表仅涉及从日期中创建的特征,而有些则被认为是有信息的。大多数列表似乎是不同类型(例如,时间序列信息特征)的组合。重要的是,特征列表提供了每个特征列表名称的描述以及特征的数量。可能至关重要的特征列表作为排行榜功能的一部分展示,如下面的截图所示,这指导我们最终模型的选择:
![图 9.5 – 模型排行榜
![图片 B17159_09_05.jpg]
图 9.5 – 模型排行榜
排行榜功能提供了对为 DataRobot 项目构建的模型的洞察。它提供了有关模型名称和标识符(ID)、它们的准确度指标以及它们的类型、版本和模型开发中的样本大小的信息。然而,在时间序列建模中,有一些差异,如下所述。首先,样本大小存在于数据范围内。这是由于时间序列数据集基于时间的特性。与其他建模形式不同,数据的顺序确实会影响结果;因此,数据是在时间范围内选择的。在这种情况下,如图 9.5所示,我们的模型是使用 3 个月、21 小时和 51 分钟的数据构建的。其次,我们没有验证和交叉验证列,而是有回测 1和所有回测列。回测逻辑上遵循关于样本大小的讨论(参见第六章,使用 DataRobot 进行模型构建)。回测提供了对数据子集上模型性能的评估。然而,与典型的验证不同,数据是按时间顺序排列的,回测的大小和数量可以根据需要更改。我们为这个示例项目使用了默认的回测设置,以便数据以这种方式分区,使得只有一个回测分区可用于建模。最后,在时间序列建模项目中,似乎有更多的特征列表。与其他预测项目类型一样,模型可以通过排行榜功能上的任何列进行排序或选择。
有许多指标可以用来评估时间序列预测模型。这当然取决于模型本身。对于回归类型的输出,有些人提倡使用均方根误差(RMSE)。问题的本质在确定评估指标时仍然至关重要。话虽如此,基线模型在排行榜上的作用对于评估其他模型至关重要。基线模型在做出预测时使用最新的值。因此,将模型与基线预测蓝图进行比较在模型评估中起着关键作用,因为它在一定程度上回答了以下问题:我们的模型在多大程度上优于从最新数据中做出的简单预测? DataRobot 提供了平均绝对缩放误差(MASE),它将感兴趣模型的平均绝对误差(MAE)与基线模型的进行比较。例如,以下截图所示的Eureqa 广义加性模型(250 代)模型,在回测 1中的比较比率为约 0.76。这表明 Eureqa 模型比基线模型好约 24%。由于保留集指标可能会突出数据中的重大变化,因此它应该包含在模型评估中,但不应单独使用。本章的时间序列建模高级主题部分涵盖了评估模型时的其他指示。点击模型名称可以提供关于数据和其过程更详细的见解。我们现在转向我们认为对时间序列预测独特的内容,以下使用**Eureqa 广义加性模型(250 代)**作为例子:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_06.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_06.jpg
图 9.6 – 原始特征的冲击
理解标签页向我们展示了特征影响、特征效应、预测解释和词云功能,这些我们在第七章的模型理解和可解释性中已经遇到。特征影响显示了特征对模型整体准确性的相对贡献程度。点击特征影响标签页将打开原始特征页面(见图 9.6)。原始特征是它们在数据集中存在的特征。
在total_energy (1440 分钟平均基线)中的其他标签页看起来是基于时间序列的平稳性构建的特征,如下面的截图所示。这是因为它突出了平均 1,440 分钟基线能量对模型准确性的重要性:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_07.jpg
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_07.jpg
图 9.7 – 导出特征的冲击
如图 9.7所示,从时间序列的平稳性中衍生出相当数量的特征似乎是合理的,这本身可能表明这个时间序列相当平稳。然而,在得出这个结论时需要谨慎,因为我们的数据集只包含了 4 个半月的值得数据;例如,我们的数据集只覆盖了 2016 年 1 月到 2016 年 5 月,因此没有涵盖晚夏、秋季和早冬月份。因此,如果我们使用覆盖更长时间范围的数据集,可能会出现季节性。
DataRobot 创建了利用时间序列特性的特征,以提高其模型的准确性。尽管在这个项目中不明显,但如果有季节性或周期性,DataRobot 会确定周期性变化发生的时间,并相应地创建特征。基于这些信息,它接下来检测季节性模式——例如,在某个时间段内发生的季节性可以通过从时间段的开始计数或从时间段的结束计数来定义。因此,该平台可以检测并构建特征,例如,使用 3 月的最后一个周六的能量使用情况来预测 4 月的最后一个周六的能量使用情况。以类似的方式,DataRobot 使用基于差分的特征来提高模型性能。它可以使用 3 月第一周的平均使用情况作为特征来预测 4 月第一周的使用情况。
切换到描述标签页,打开蓝图标签页后,我们就会看到时间序列项目建模过程中涉及到的各个阶段。如以下截图所示,我们可以迅速认识到这与其他章节中遇到的其他预测项目并没有太大区别:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_08.jpg
图 9.8 – 模型蓝图
我们现在已经花费时间构建和理解时间序列预测模型。下一步合乎逻辑的步骤是使用我们选定的模型进行预测。
使用时间序列模型进行预测
DataRobot 为我们提供了使预测变得轻松的工具。对于小于 1 千兆字节(GB)的小数据集,可以使用排行榜功能中的制作预测标签页进行预测。这涉及到设置和上传预测数据集,然后在拖放新数据集用户界面(UI)功能中进行评分。对于显著更大的数据集,需要部署模型,并使用应用程序编程接口(API)进行预测。在本章中,我们将介绍预测的第一种方法。在第十二章,DataRobot Python API中,我们将详细讨论一般模型部署和与 API 一起工作。
排行榜对时间序列模型评分的拖放方法与传统的模型方法略有不同,如第八章“模型评分和部署”中所述。当打开预测选项卡时,DataRobot 会简要概述进行预测所需数据的最新性和数量。这个概述与模型开发配置期间建立的预测窗口以及派生特征基本一致。正如以下截图所示的预测过程,预测数据集需要至少 4,320 分钟的历史数据,超出预测点前 60 分钟。此外,当模型包含涉及早期时间段的派生特征时,早期时间段也包含在数据集要求中。由于所讨论的模型具有 24 小时差异的派生特征,这增加了对 5,820 分钟的要求。这 5,820 分钟的要求包括一个初始的 60 分钟预测点间隔窗口,4,320 分钟的基础预测需求数据,以及为派生差分特征增加的 1,440 分钟。这使得模型在 1,440 分钟的操作间隔之后,能够在预测点前 2,880 分钟进行预测。其中一些特征如下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_09.jpg
图 9.9 – 预测窗口
要进行预测,如果数据格式与训练数据一致,请按以下步骤操作:
-
点击导入数据,允许从本地源、统一资源定位符(URL)、现有的数据源之一或 AI 目录中摄取数据。如果在默认预测点之后没有找到行,DataRobot 将生成一个模板。为此,预测窗口内必须没有空行,并且模板文件必须满足上传大小限制条件。文件上传后,DataRobot 设置预测点并包括满足预测窗口期望所需的行。
-
在上传数据后,点击以下截图所示的计算预测按钮,因为上传的预测文件是最新的,没有间隔,并且行数符合预期:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_10.jpg
图 9.10 – 计算时间序列预测
在图 9.10 中的预测设置按钮提供了预测选项,其中预测点可能不是最新的,或者更改了预测的范围。
-
要进行此类更改,请单击预测设置按钮,它默认打开预测点预测选项卡,如图下截图所示。此窗口提供了一个预测点滑动选项卡选择器,可以通过滑动或输入实际时间值进行配置。然而,无效的日期已被禁用:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_11.jpg
图 9.11 – 预测点预测设置
如前所述,可以选择作为预测点的次数有限。预测点必须小于或等于最新的一个。在本项目的情况下,这是2016-05-27 19:00:00:00,这是最新的数据行时间,有1440分钟的操作间隔。可以通过类似的操作来更改预测日期范围。理想情况下,预测范围预测功能将用于验证模型,而不是进行未来预测。
在本节中,我们强调了确保我们的时间序列模型预测数据集与训练模型数据集相似的重要性。我们继续进行预测并从模型中解释其他结果。接下来,我们将探讨涉及 DataRobot 的时间序列建模的更高级主题。
时间序列建模的高级主题
在本章中,我们学习了如何在 DataRobot 中配置、构建和使用基本时间序列预测模型进行预测。在前一节中,我们的注意力集中在构建只有一个时间序列的模型。然而,你可能会有这样的情况,需要做出多时间序列预测。在我们的能源利用问题背景下,我们可能想要预测灯光和电器的使用情况。在其他地方,能源公司可能想要在同一模型中预测不同城市或家庭的能源使用情况。现在,我们将深入研究这类问题的解决方案。此外,我们将探讨未来其他高级方法可能用于评估我们的时间序列模型。最后,我们将承认计划事件对时间序列的影响,并强调 DataRobot 为处理这种可能性所采取的措施。
本项目使用的数据集突出了灯光和其他电器的能耗。对于早期项目,我们将所有使用量加总作为我们的目标变量,但在本项目(命名为Energy_Prediction_2)中,将建立模型来预测每种设备类型的能耗。现在该数据集有两个序列,这意味着时间戳可能会重复,但每个序列内的时间戳必须是唯一的。区分列Device_type是分配给使用量的设备类型的 ID。在将项目验证为时间感知并选择其类型为Device_type后:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/agl-ml-dtrbt/img/B17159_09_12.jpg
图 9.12 – 多序列时间序列预测设置
对于这个项目,我们感兴趣的是进一步评估我们的模型。因此,在自定义我们的预测窗口,在5 + Holdout内进行。以下截图详细说明了此配置的设置,我们可以看到训练、验证和保留数据是如何从初始数据中划分出来的。重要的是要强调,为了设置回测,我们必须考虑数据中的任何形式的季节性、周期性和/或循环性,并确保每个折叠至少有一个这些实例。这是因为每个回测都应该是一个完整的数据集,所以季节性、周期性和循环性需要在每个回测中考虑。验证和间隔长度也可以更改。此项目的默认长度设置为超过 13 小时 9 分钟。您可以在以下位置查看配置:
![图 9.13 – 回测配置
![图片 B17159_09_13.jpg]
图 9.13 – 回测配置
在配置回测后,我们点击开始来训练模型。当模型创建后,评估过程类似于单一时间序列模型。正如以下截图所示,我们可以看到所有回测指标,它衡量模型在所有回测中的平均性能。因此,它提供了一种快速评估模型性能以及数据模式随时间一致性的有趣方法:
![图 9.14 – 随时间变化的准确性
![图片 B17159_09_14.jpg]
图 9.14 – 随时间变化的准确性
模型评估标签页中的随时间变化的准确性功能允许用户对其模型随时间的变化进行直观且深入的评估(见图 9.14)。在这里,预测值和实际值以视觉方式呈现。在此窗口中,您可以选择要绘制的序列设置,并更改回测和预测距离设置。在业务背景下,此视图有助于了解是否存在表现不佳的时期,这可能意味着数据中未表示的业务方面。以下截图所示的预测准确性窗口是另一个重要的表示,它表明模型性能如何随着预测距离的变化而变化:
![图 9.15 – 预测准确性窗口
![图片 B17159_09_15.jpg]
图 9.15 – 预测准确性窗口
预测准确性窗口突出了模型性能的变化,因为预测被延伸到未来。这个视图使我们能够评估模型性能在时间上的相似性,这表明模型何时可以在业务中使用。此外,它还突出了当使用 MASE 性能指标时,模型性能显著超过基线模型的情况。如图 9.15 所示,模型在回测 1的性能似乎在+1,960 分钟标记处开始显著优于基线模型。稳定性视图向用户展示了分数随时间范围的变化。
随着对性能更优的模型的追求,我们需要对建模范式进行一些改变。对于时间序列建模可用的默认模型可能根本无法提供所需的表现。在这种情况下,正如在第六章“使用 DataRobot 进行模型构建”中解释的那样,模型库提供了选择传统时间序列模型(如自回归积分移动平均(ARIMA))和更近期的模型(如 Keras 长短期记忆(LSTM)和XGBoost(XGB))的选项。根据研究时间序列的性质,这些建模方法有时会呈现更好的性能。
摘要
在本章中,我们广泛探讨了如何使用 DataRobot 构建时间序列模型。我们简要讨论了时间序列建模为商业带来的独特机会,以及它对分析师和数据科学家提出的挑战。我们使用 DataRobot 创建了单时间序列和多时间序列模型。我们还描述了如何使用 DataRobot 构建的模型进行预测。随后,我们讨论了 DataRobot 时间序列能力的先进方面。
预测对商业至关重要,因为它能够根据时间依赖变量预测未来可能发生的事情。另一个具有商业价值的领域是建议不同客户对广泛产品感兴趣的能力。这就是推荐系统发挥作用的地方。
在下一章第十章“推荐系统”中,我们将探讨如何使用 DataRobot 构建推荐引擎。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)