PowerBI-机器学习的数据解放指南-全-
PowerBI 机器学习的数据解放指南(全)
原文:
annas-archive.org/md5/54c32ce0dbabfc5a79bda15c39cf5198译者:飞龙
前言
欢迎您!如果您对这本书感兴趣,您很可能熟悉 Power BI、机器学习(ML)和 OpenAI。多年来,Power BI 已从数据可视化工具发展成为一个用户友好的端到端软件即服务(SaaS)工具套件,用于数据和分析。我开始写这本书的目的是教 Power BI 专业人士了解 Power BI 内置的 ML 工具。我决定不写技术手册,而是遵循微软流行的Power BI Dashboard in a Day课程(可在aka.ms/diad找到)的传统,将本书写成一次端到端的旅程,从原始数据开始,以 ML 结束,所有这些都在 SaaS Power BI 工具套件内完成。
在撰写本书的过程中,一种令人惊叹的新技术出现在了舞台上,名为 OpenAI。OpenAI 能够以惊人的方式生成和总结人类语言。本书的用例非常适合将 OpenAI 作为旅程的顶点。
这本书将带您踏上一场数据探险之旅,从联邦航空管理局(FAA)的真实原始数据开始,回顾类似真实世界项目的需求,使用 Power BI 清洗和整理数据,利用 Power BI ML 进行预测,然后将 OpenAI 集成到用例中。您可以通过参考 Packt GitHub 网站(github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/)在阅读本书时重现整个端到端解决方案。
商业智能(BI)、ML 和 OpenAI 以不同的方式使用数据,需要不同的数据建模技术和准备。在我的经验中,大多数 Power BI 专业人士对数据的思考方式与 ML 和 AI 专业人士不同。当 BI 专业人士首次转向 ML 时,这些差异可能导致 ML 项目失败。通过一个真实的数据故事示例,本书试图在具有与您在现实世界中可能遇到的类似挑战和要求的应用场景中,教授这些差异。主题是这些技能集的交集,用于现实世界项目,这些项目无缝结合了 BI、ML、AI 和 OpenAI。
如果您正在寻找关于 Power BI ML 或 OpenAI 的技术手册,这本书不适合您。这本书将引导您经历一段英雄之旅,最终达到 ML 和 OpenAI 作为项目的顶点。本书结束时,除了了解如何使用 Power BI ML 和 OpenAI 外,您还将了解如何以能够结合 ML 和 OpenAI 的方式思考和理解数据项目。即使 Power BI 中的工具在本书编写时发生了变化,您也应该能够将这些学到的经验应用到新工具和未来的挑战中。
我还想在序言中简要讨论 SaaS ML 工具。我经常听到经验丰富的 ML 专业人士敦促对 SaaS ML 工具保持谨慎。我同意,ML 作为一个学科,需要与其他许多数据工具不同的思维方式和独特的技能集。许多因素可能导致 ML 模型返回误导性或偏颇的结果。需要高度准确或错误时可能产生有害后果的 ML 项目应由使用高级 ML 工具的 ML 专业人士处理。
话虽如此,像 Power BI ML 这样的 SaaS 工具在合适的受众中仍然有着强大的地位。对 ML 感兴趣的 Power BI 专业人士可以通过使用 Power BI ML 快速提升技能。通过 Power BI ML,可以快速发现特征、实现简单的预测用例和即兴假设测试,而这一切都只需要低门槛的入门。本书中构建的 ML 模型旨在激发你对这个主题的兴趣,而不是提供构建正确 ML 模型的全面课程。在本书结束时,Power BI 专业人士将理解为什么他们可能会使用 ML,数据需要如何建模以供 ML 使用,以及 ML 如何在数据项目的流程中使用。希望你们中的一些人能从中受到启发,学习更多关于 ML 的知识,并过渡到更高级的 ML 工具和课程。
关于 OpenAI,本书的最后两章提供了 OpenAI 的应用案例,这些案例为与 GitHub 工作坊相关的动手工作坊增添了价值。在 Power BI 解决方案中,使用真实的 FAA 数据生成新的描述并总结事件。本书的意图不是让你成为 OpenAI 或 ML 专家,而是理解 BI、ML、AI 和 OpenAI 的交汇点。我相信,随着企业 SaaS 工具如 Power BI 的使用变得更加容易,这些技能和工具的交汇点将是我们的职业的未来。
本书面向的对象
本书非常适合希望在动手工作坊中使用真实世界数据学习 Power BI ML 和 OpenAI 的 BI 专业人士。在阅读本书之前对 Power BI 有实际了解将有所帮助。参加“一天之内掌握 Power BI 仪表板”培训是一个很好的起点,即使你按照自己的节奏跟随链接中的 PDF 文档也是如此。ML 专业人士也可能从 BI、ML、OpenAI 和 AI 的交汇点这个角度找到本书的价值。我预计,在阅读本书后,ML 专业人士将对 BI 项目和 Power BI 工具集有更深入的理解。
本书涵盖的内容
第一章,需求、数据建模和规划,回顾了本书中将要使用的 FAA 野生动物撞击数据,浏览 Power BI 中的数据,审查数据用例,并为未来章节规划数据架构。
第二章, 使用 Power Query 准备和摄取数据,包括数据转换和建模,为 Power BI 数据集和用于构建 ML 模型的查询准备数据。本章的潜在主题是在 BI 的背景下探索数据的同时,也为 ML 做准备。
第三章, 使用 Power BI 探索数据并创建语义模型,开始设计一个用户友好的 BI 数据集的过程,它可以作为报告的基础。命名约定、表关系和自定义度量标准都将被创建,以便您可以在 Power BI 中开始进行数据分析,轻松探索 FAA 数据以发现 ML 模型的特征。
第四章, Power BI 中机器学习的模型数据,将使用 Power BI 探索数据,以发现可用于构建 ML 模型的可能特征。然后,这些特征将被添加到 Power Query 中的查询中,形成与 Power BI ML 一起使用的数据的基础。
第五章, 使用分析和 AI 可视化发现特征,利用 Power BI 作为分析和数据可视化工具,快速探索 FAA 数据并发现适用于 ML 查询的新特征。使用了各种不同的度量标准和可视化来为您提供多样性。
第六章, 使用 R 和 Python 可视化发现新特征,使用 Power BI 中的 R 和 Python 可视化来发现 ML 查询的附加特征。R 和 Python 可视化提供了一些标准度量标准和可视化难以实现的先进分析功能。
第七章, 将数据摄取和转换组件部署到 Power BI 云服务,将前六章创建的内容移动到 Power BI 云服务。Power BI 数据流、数据集和报告将在本书和研讨会剩余部分移动到云端。
第八章, 使用 Power BI 构建机器学习模型,在 Power BI 中构建 ML 模型。前几章设计的 ML 查询被用来构建三个 ML 模型,用于二元分类、一般分类和回归预测。
第九章, 评估训练和测试的 ML 模型,回顾在 Power BI 中构建的三个 ML 模型。测试结果在预测能力的背景下进行审查和解释。
第十章, 迭代 Power BI ML 模型,讨论基于前一章发现结果的 ML 模型未来计划。选项包括使用 ML 模型、修改查询并重新构建模型等。
第十一章,应用 Power BI ML 模型,从 FAA 野生动物撞击数据库中引入新的/更近期的数据,并通过 ML 模型运行。将结果与原始测试结果进行比较,并建立了一个流程来对未来的新数据进行评分。
第十二章,OpenAI 的应用案例,介绍了如何将 OpenAI 与项目和研讨会结合使用。关于 BI 和 OpenAI 交叉讨论产生了将 OpenAI 整合到您计划中的想法。
第十三章,在 Power BI Dataflows 中使用 OpenAI 和 Azure OpenAI,将 OpenAI API 调用集成到解决方案中。文本生成和摘要直接添加到 Power BI 中。
第十四章,项目回顾与展望,讨论了本书的关键概念。还回顾了将本书中学到的知识应用到您的职业和未来计划中的建议。
为了充分利用这本书
与本书相关的 Packt GitHub 网站提供了用于重现本书中所有内容的全面研讨会脚本和文件。仓库可以在以下链接找到:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/。大多数 Power BI 专业人士已经使用的 Power BI 基本工具,以及一个 OpenAI 订阅,将促进 GitHub 仓库的使用。
| 本书涵盖的软件/硬件 | 操作系统要求 | 
|---|---|
| Power BI Desktop – 2023 年 4 月或更新版本 | Windows | 
| Power BI 云服务 | 网络浏览器 | 
| Python – 与 Power BI Desktop 兼容的版本 | Windows | 
| R – 与 Power BI Desktop 兼容的版本 | Windows | 
| OpenAI | 网络浏览器 | 
| Azure OpenAI(可选) | 网络浏览器 | 
从许可的角度来看,在 Power BI 云服务中需要一个分配给 Power BI Premium per User 或 Power BI Premium 的工作空间。几章还需要 Power BI Pro 许可证才能跟随。对于 OpenAI,需要一个带有 OpenAI 或 Azure 订阅且可以访问 OpenAI 的订阅。
如果您正在使用本书的数字版,我们建议您亲自输入代码或从本书的 GitHub 仓库(下一节中有一个链接)获取代码。这样做将帮助您避免与代码复制粘贴相关的任何潜在错误。
下载示例代码文件
您可以从 GitHub 下载这本书的示例代码文件:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/。如果代码有更新,它将在 GitHub 仓库中更新。
我们还有其他来自我们丰富图书和视频目录的代码包,可在github.com/PacktPublishing/找到。查看它们吧!
使用的约定
本书使用了多种文本约定。
文本中的代码:表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“可以使用以下 DAX 表达式创建用于计算主要数据表中行数的度量值:Incidents = COUNTROWS('Strike Reports Fact')。”
代码块设置如下:
(if [Struck Engine 1] = true then 1 else 0) + 
(if [Struck Engine 2] = true then 1 else 0) + 
(if [Struck Engine 3] = true then 1 else 0) + 
(if [Struck Engine 4] = true then 1 else 0)
粗体:表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词以粗体显示。以下是一个示例:“从管理面板中选择系统信息。”
小贴士或重要提示
看起来是这样的。
联系我们
我们始终欢迎读者的反馈。
总体反馈:如果您对本书的任何方面有任何疑问,请通过电子邮件发送至 customercare@packtpub.com,并在邮件主题中提及书名。
勘误:尽管我们已经尽一切努力确保内容的准确性,但错误仍然可能发生。如果您在这本书中发现了错误,我们将不胜感激,如果您能向我们报告,我们将非常感谢。请访问www.packtpub.com/support/errata并填写表格。
盗版:如果您在互联网上发现我们作品的任何非法副本,如果您能提供位置地址或网站名称,我们将不胜感激。请通过 copyright@packtpub.com 与我们联系,并提供材料的链接。
如果您有兴趣成为作者:如果您在某个领域有专业知识,并且您有兴趣撰写或为书籍做出贡献,请访问authors.packtpub.com。
分享您的想法
一旦您阅读了《利用 Power BI 机器学习和 OpenAI 释放您的数据》,我们非常乐意听到您的想法!请点击此处直接进入此书的亚马逊评论页面并分享您的反馈。
您的评论对我们和科技社区非常重要,并将帮助我们确保我们提供高质量的内容。
下载本书的免费 PDF 副本
感谢您购买本书!
您喜欢在路上阅读,但又无法携带您的印刷书籍到处走?
您的电子书购买是否与您选择的设备不兼容?
别担心,现在,随着每本 Packt 书籍,您都可以免费获得该书的 DRM 免费 PDF 版本。
在任何地方、任何地点、任何设备上阅读。直接从您最喜欢的技术书籍中搜索、复制和粘贴代码到您的应用程序中。
优惠不会就此结束,您还可以获得独家折扣、时事通讯和每日免费内容的专属访问权限。
按照以下简单步骤获取福利:
- 扫描下面的二维码或访问以下链接
 

https://packt.link/free-ebook/9781837636150
- 
提交您的购买证明
 - 
那就结束了!我们将直接将您的免费 PDF 和其他福利发送到您的邮箱
 
第一部分:数据探索和准备
您的旅程从使用 Power BI 摄取和准备数据开始。在讨论商业智能和机器学习的数据建模之后,您将学习如何连接到数据以用于用例,清理它并检查错误,探索数据以确保引用完整性,然后创建关系数据模型。
本部分包含以下章节:
- 
第一章, 需求、数据建模和规划
 - 
第二章, 使用 Power Query 准备和摄取数据
 - 
第三章, 使用 Power BI 探索数据并创建语义模型
 - 
第四章, 在 Power BI 中为机器学习建模数据
 
第一章:需求、数据建模和规划
你开始你的旅程是通过评估你的项目需求和数据。用例将是一个虚构的场景,但一切都将使用来自联邦航空管理局(FAA)野生动物撞击数据库的真实数据来构建。数据是真实的,主题可以被任何人理解,数据中的发现既有趣又吸引人。根据 FAA 网站的数据,大约有 47 起动物撞击事件每天由飞机报告。这些事件可能会损坏飞机,可能危及乘客,并对野生动物(尤其是鸟类)种群产生负面影响。
对于这个用例,你被分配的任务是为你的领导提供工具,以便对 FAA 野生动物撞击数据进行交互式分析,找出影响事件的因素,并对未来的野生动物撞击事件及其相关成本进行预测。你的项目的主要目标,即预测 FAA 野生动物撞击的未来影响,将需要构建一些 Power BI 机器学习模型。
在将数据上传到 Power BI 的机器学习(ML)工具之前,你需要创建用于训练 ML 模型的数据表。关于数据和数据分析有一句古老的谚语:“垃圾进,垃圾出。”软件即服务(SaaS)机器学习工具易于使用,但你仍然需要向它们提供高质量的数据。确定正确的训练数据并将其转换为正确的格式是 ML 项目中的关键步骤。
在你开始使用 Power BI ML 工具之前,这个项目将包括数据探索、数据转换、数据分析以及额外的下游数据转换。你已经是一位经验丰富的商业智能(BI)专业人士和 Power BI 用户,现在你准备好通过 Power BI 中的 ML 将你的技能提升到下一个层次!
Power BI支持连接到多种不同格式的源数据,从关系型数据库到非结构化数据源,再到原始数据的扁平表格。关于为不同用例结构化和建模数据的最佳方法,已经写下了无数本书。对于这本书,我们不会深入探讨数据建模的细节,而是从两个简单的假设开始:
- 
大多数情况下,星型模式设计将为商业智能数据模型提供最有效的存储和查询性能。
 - 
基本 ML 模型,例如你将在本书中构建的模型,通常是用扁平表创建的。
 
为了明确起见,并非每个解决方案都会遵循这些假设。相反,这些假设是一般化,可以在你接近设计新的数据模型时为你提供一个起点。很多时候,可能没有完美的答案,最佳设计将由数据模型的最终用户生成的查询和业务逻辑来决定。
如果你之前从未听说过星型模式和扁平化数据这些术语,不要担心!本书将以适合学习的速度推进,同时也会保持一个在你审查 FAA 数据时合理的水平。让我们浏览 FAA 野生动物撞击数据,并决定你新项目的最佳数据建模策略!
在本章中,我们将采取以下步骤,以便你能够理解数据,思考其使用方式,然后为数据模型制定初步计划:
- 
审查源数据
 - 
审查解决方案的要求
 - 
设计初步数据模型
 - 
机器学习考虑事项
 
技术要求
对于本章,你需要以下内容:
- 
Power BI 桌面版 2023 年 4 月或更高版本(无需许可证)
 - 
来自 FAA 网站或 Packt GitHub 仓库的 FAA 野生动物撞击数据文件:
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-01 
审查源数据
你将从挖掘你将为项目使用的数据源开始你的旅程。让我们开始吧!
访问数据
你将为这本书使用的数据是来自美国FAA的真实数据。数据包含飞机撞击野生动物时提交的报告。在以下 URL 中有一个提供详细信息、文档、更新和访问说明的网站:wildlife.faa.gov/home。该 URL(以及所有 URL)也将从关联的 GitHub 网站github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI链接,以防本书出版后有所变动。
如果你更喜欢使用本章内容的完成版本而不是逐步构建,你可以从 Packt GitHub 网站文件夹中第 1 章的 PBIT 文件版本下载:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-01。
在 FAA 野生动物撞击数据库网站上,你可以导航到这个链接,对数据进行基本查询,并熟悉其内容:wildlife.faa.gov/search。此页面上还链接了两个文件,你可以在审查源数据时参考。
在本书编写时,网页上的第二个标题为 下载 FAA 野生动物撞击数据库,它有一个名为 下载 的链接,允许您下载整个历史数据库以及一个参考文件。您可以从 FAA 网站下载这些文件以用于本书。GitHub 仓库中还将包含本章努力的成果 Power BI PBIT 文件。PBIT 文件是 Power BI 模板,可以填充您从 Packt GitHub 网站下载的文件。如果 FAA 数据不可用,您仍然可以使用 GitHub 网站上的内容来重新创建每个章节的内容。
您将使用的 FAA 文件如下:
- 
wildlife.accdb:此文件包含所有历史 FAA 野生动物撞击报告。您也可以从 Packt GitHub 网站下载与书中相同的文件副本:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-01。 - 
read_me.xls:此文件包含关于wildlife.accdb数据库文件中数据的描述性信息。该文件的.xlsx版本也可在 Packt GitHub 网站上找到。 
探索 FAA 野生动物撞击报告数据
wildlife.accdb 文件是 Access 文件格式,可以用许多不同的工具打开,包括 Microsoft Access、Microsoft Excel、Power BI 等。本书中,您将使用 Power BI Desktop 打开它。Power BI Desktop 可在此链接免费下载:powerbi.microsoft.com/en-us/downloads/。
- 首先,打开 Power BI Desktop。一旦它在您的桌面上打开,从功能区选择 获取数据 下拉菜单,然后点击 更多…,如图下截图所示:
 

图 1.1 – 使用 Power BI Desktop 连接到数据
- 接下来,在 获取数据 窗口中,选择 Access 数据库 并点击 连接:
 

图 1.2 – Power BI 中的 Access 数据库连接器
- 选择从 FAA 野生动物撞击数据库下载并解压的 Access 数据库 文件,命名为 wildlife:
 

图 1.3 – wildlife 文件在 Power BI 中显示
- 选择 STRIKE_REPORTS 表并点击 转换数据:
 

图 1.4 – 变换前数据预览
- Power Query 窗口将在 Power BI Desktop 中打开,并预览 FAA 野生动物撞击数据。在功能区,选择数据预览的视图标题,然后勾选列质量、列分布和列概要的复选框。这些功能将为数据预览提供一些见解,有助于您探索和理解数据:
 

图 1.5 – Power Query 中的数据预览功能
在图 1.5中,请注意第一列INDEX_NR被突出显示。您可以看到,没有任何值是空的,没有错误,并且在图 1.6底部的列统计信息中,每个值都是唯一的整数。名称INDEX_NR揭示了这一点,但此列是每行数据的唯一标识符。
让我们再回顾 Power Query 中的另一列。请突出显示TIME_OF_DAY。如您在图 1.6中看到的那样,有四个不同的值,大约 12% 是空的。空值是此解决方案的重要考虑因素。非空值包括Day、Dawn、Dusk和Night等术语。空值意味着什么?是填写报告的人故意留空的吗?还是没有正确输入到系统中?您将在本书的后面重新讨论这个话题。

图 1.6 – 列统计信息有助于理解数据
由于 FAA 野生动物撞击报告数据中超过 100 列,我们不会在本章中讨论所有这些列。但话说回来,检查每一列是检查数据错误、空字段、值分布等的好方法。为了本章的目的,请打开与 FAA ZIP 文件一起提供的 read_me.xls 文件。第一个工作表是 wildlife.accdb 文件。大多数列属于以下类别之一:
- 
详细说明与每个报告相关事件日期、时间和年份的日期和时间字段
 - 
关于事件的描述性信息,例如接触高度、纬度和经度、出发机场和航班号
 - 
关于飞机的描述性信息,例如所有权、飞机类型和制造商、发动机数量、发动机位置等
 - 
由于撞击造成的损害估计,如成本、调整通货膨胀的成本、飞机上的损害位置等
 - 
关于被飞机撞击的野生动物的信息,包括物种、大小、撞击数量等
 
一旦您浏览完报告数据,关闭桌面上的 read_me.xlsx 文档,然后按照以下步骤从 Power BI 连接到它。本书中使用的文档版本可以从 Packt GitHub 网站下载:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-01。
- 在左侧面板中点击 Excel 工作簿:
 

图 1.7 – Excel 工作簿是新的数据源
- 从浏览器中选择 read_me 文件并点击 打开:
 

图 1.8 – Excel 文件准备在 Power Query 中打开
- 打勾 飞机类型、发动机代码和发动机位置复选框。然后,点击 确定。
 

图 1.9 – Power Query 中的工作表可以单独选择
点击 确定 并导入三个工作表后,注意 飞机类型、发动机代码和发动机位置现在在 Power Query 中作为三个独立的数据表可用:

图 1.10 – 在 Power Query 中预览了三个新表格
三张表格包含关于 FAA 野生动物撞击报告数据中存在的值的描述性信息:
- 
飞机类型:将飞机代码映射到描述,如飞机、直升机或滑翔机
 - 
发动机代码:关于发动机制造商和型号信息
 - 
发动机位置:关于飞机上发动机位置的详细信息
 
对于这三张表格,您会注意到有一些不必要的行和空白值。您将在本书的后续部分解决这些问题,因此在此阶段无需在 Power Query 中进行任何修改。
一旦您在 Power Query 中浏览了所有不同表格中的不同列,点击 关闭并应用 将数据导入 Power BI 并保存,如下图所示:

图 1.11 – 点击“关闭并应用”按钮将数据导入 Power BI
数据导入后,您可以将 Power BI Desktop 文件保存为 .pbix 文件。一个名为 第一章 Template.pbit 的 PBIT 文件副本,可以填充数据然后保存为 PBIX,可以在以下 GitHub 链接找到:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-01。
审查解决方案的要求
现在,您已经探索了 FAA 野生动物撞击数据,您对可用于您解决方案的数据有了更好的了解。您从利益相关者那里得到的原始任务如下:
- 
为领导提供工具,以便对 FAA 野生动物撞击数据进行交互式分析
 - 
寻找影响事件的因素的见解
 - 
对未来野生动物撞击事件进行预测
 
这些需求听起来相当模糊!现在,您对可用的数据有了更好的了解,是时候与利益相关者回过头来澄清这些需求了。您会问他们如下问题:
- 
您想进行哪些类型的交互式分析?
 - 
您是否对受威胁的鸟类物种的影响感兴趣?
 - 
您是否想查看野生动物撞击导致的时间趋势,并比较机场和地区?
 - 
您是否想查看不同时间野生动物撞击的高度和频率?
 - 
理解与飞机大小、一天中的时间、季节、地理和高度等因素的相关性是否有用?
 - 
您是否对预测特定的风险或结果感兴趣?
 
关于为数据和分析项目收集需求,已经撰写了整本书,关于这个特定主题的讨论也可能非常广泛。为了保持这本书的可读性,让我们假设您与利益相关者的讨论导致了以下可交付成果的优先排序:
- 
分析报告:查看时间趋势,如事件数量、事件位置、高度以及飞机类型和野生动物物种等细节
 - 
预测损害:当报告撞击时,预测是否会有与任何损害相关的成本
 - 
预测大小:当报告撞击时,预测撞击飞机的野生动物的大小
 - 
预测高度:对于野生动物撞击,预测事件的高度
 
现在,您回顾一下在您的数据探索努力中关于 FAA 野生动物撞击数据的笔记。在这样做的时候,您可以思考数据如何与用例相匹配。根据需求和您对数据的初步探索,您决定wildlife.accdb文件中的 FAA 野生动物撞击数据和read_me.xls文件中的表格(发动机代码、飞机类型和发动机位置)是项目初期阶段应包含的适当内容。
设计初步数据模型
在本章的早期,我们对数据建模做出了两个简单的假设:
- 
大多数情况下,星型模式设计将为商业智能数据模型提供最有效的存储和查询性能
 - 
基本机器学习模型,例如您可以在本书中构建的模型,通常是用扁平表创建的
 
现在你已经掌握了底层数据和需求,是时候考虑你的 FAA 野生动物撞击数据解决方案的数据模型了。从逻辑上讲,你可以这样描述你的数据表:
- 
(
wildlife.accdb): 每一行代表一份提交的报告。数据表包含描述性值(日期、位置和类型)以及可以汇总和平均的值(高度和成本)。 - 
(
read-me.xls): 这包含有关可以与STRIKE_REPORTS关联的飞机发动机的信息。 - 
(
read-me.xls): 这包含有关可以与STRIKE_REPORTS关联的飞机的信息。 - 
(
read-me.xls): 这包含有关可以与STRIKE_REPORTS关联的飞机发动机位置的信息。 
在这一点上,你将面临一些数据模型选择。无论你做出什么决定,有些人可能会质疑你的架构,因为没有完美的设计。根据最终用户如何使用数据,数据模型设计可能会改变。本书将展示一些用于 ML 模型与传统 BI 设计的数据模型设计差异。在 Power BI 中,你可以采取以下三种基本方法之一:
- 
扁平化:你可以通过将发动机代码、飞机类型和发动机位置与STRIKE_REPORTS表连接,将所有数据扁平化到一个单独的表中。
 - 
星型模式:你可以构建一个真正的星型模式,其中STRIKE_REPORTS作为事实表,发动机代码、飞机类型和发动机位置作为维度表。STRIKE_REPORTS的一些其他数据也会被拆分到单独的维度表中。例如,AIRPORT_ID、AIRPORT、STATE和FAAREGION可以是单独的维度表。
 - 
混合设计:为了实用性和易用性,你可以使用扁平化和星型模式设计模式来构建混合设计。
 
让我们逐一查看这些内容。
扁平化数据
扁平化 FAA 野生动物撞击报告的数据将需要将发动机代码、飞机类型和发动机位置表连接到STRIKE_REPORTS表,以便所有内容都在一个大的扁平数据表中。结果将类似于以下内容:

图 1.12 – 左侧的表合并成右侧的单个表
下表包含了一些,但不是全部,关于数据扁平化表优缺点的信息:
| 优点 | 缺点 | 
|---|
|
- 
简单性
 - 
无需进行代码连接
 - 
通常被数据科学家使用
 - 
可以很好地与列式数据库压缩
 - 
对于商业用户没有关系数据模型
 
|
- 
重复的数据可能导致不高效的存储占用
 - 
高级逻辑查询的限制
 - 
对于解决方案未来变化和演化的灵活性较低
 - 
复杂的逻辑查询可能效率较低
 
|
图 1.13 – 扁平化表在 BI 中的优缺点
接下来,让我们看看星型模式。
星型模式
按照最佳实践构建的真正星型模式将包括发动机代码、飞机类型和发动机位置与STRIKE_REPORTS表之间的关系。它还会将STRIKE_REPORTS表的一部分拆分成更小的维度表。以下图表示了真正星型模式的方法。除了位置和物种之外,可能还需要从STRIKE_REPORTS表中拆分出更多的维度表,但这是一个示例,说明它可能看起来是什么样子:

图 1.14 – 左侧的表组合成一个星型模式,部分数据被拆分到新的维度表中
以下表格包含了一些,但不是全部,关于真正星型模式设计的优缺点:
| 优点 | 缺点 | 
|---|
|
- 
表通常与业务逻辑一致
 - 
最小数据重复与高效查询的平衡
 - 
如果解决方案的范围扩大并引入了新的数据,通常可以扩展
 - 
传统上被认为是 BI 数据模型的黄金标准
 
|
- 
与较老的工具相比,使用现代工具减少数据重复的好处影响较小
 - 
ETL 过程复杂
 - 
机器学习模型通常使用扁平的数据表进行训练
 - 
不总是能够很好地扩展到具有数十亿行的大型数据量
 
|
图 1.15 – 星型模式在 BI 中的优缺点
混合设计
对于 FAA 野生动物撞击数据,结合扁平设计和星型模式的特点也是一个选项。在本书撰写时,整个STRIKE_REPORTS表少于 300,000 行,且列数少于 100 列。只有两列包含冗长的自由文本,因此在使用 Power BI 时数据量不是问题。对于这个特定的用例,扁平模型和星型模式数据模型在数据存储需求上的差异很小。对于如此小的数据量,你可以设计数据模型以满足解决方案的需求,而无需引入那些对于包含数千万行或数百列自由文本字段的数据源的性能担忧。在交易表中保留的数据列,将用作分类,在技术上被称为退化维度。混合设计可能看起来像以下示例:

图 1.16 – 左侧的表经过增强和组合,形成了一个带有一些描述性数据的星型模式
以下表格包含了一些,但不是全部,关于混合设计的优缺点:
| 优点 | 缺点 | 
|---|
|
- 
快速原型设计
 - 
数据转换层中的逻辑较少
 - 
灵活的设计
 
|
- 
可能不如传统的 BI 星型模式性能好
 - 
与大型扁平表相比,对用户来说有额外的逻辑复杂性
 - 
数据仍需要为机器学习进行扁平化处理
 - 
不太适合 BI 或 ML,但介于两者之间的折衷方案
 
|
图 1.17 – 混合设计的优缺点以及额外数据的考虑
在最终确定 FAA 野生动物撞击解决方案的初步逻辑设计之前,退一步思考数据和需求。你可以回顾本章早些时候的预期可交付成果,包括分析报告和对损害、大小和高度的预测。
除了你一直在使用的 FAA 野生动物撞击数据外,还有哪些数据可能对解决方案有用?获取这些数据需要多少努力?以下是一些你可以研究的例子:
| 额外 数据源 | 努力 程度 | 
|---|---|
| 基于月份、季度、季节和节假日等聚合的日期表 | 容易 | 
| 基于小时、上午/下午等聚合的时间表 | 容易 | 
| 没有野生动物撞击的飞行数据可以提供飞行撞击百分比的基线 | 困难 | 
| 可映射到野生动物撞击日期和时间的天气数据 | 困难 | 
| 关于野生动物物种的额外数据,如体重范围、栖息地范围等 | 困难 | 
图 1.18 – 解决方案的其他潜在数据源
额外的飞行、天气和野生动物数据可以为解决方案提供更大的分析和预测价值。然而,添加这些来源将需要相当多的努力,这超出了你的项目范围和本书的长度。如果初始项目进展顺利,你可以将来对这些选项进行改进。
在解决方案中添加时间表可能是有价值的,所以打开 Power Query 并再次查看 TIME 列。注意,95% 的条目都是空的:

图 1.19 – TIME 的 95% 值为空
由于数据不完整,你决定在初始构建中省略时间表。
有没有这样一个日期表,你可以通过周、月、季度、年、节假日、周末等来汇总数据?查看 Power Query 中的 INCIDENT_DATE 列,它在预览中的每个条目都已填充:

图 1.20 – INCIDENT_DATE 已完全填充日期值
INCIDENT_DATE 可以用作连接包含许多不同基于日期聚合的日期表的键。你决定为架构引入一个日期表。因此,初步数据模型现在将如下所示:

图 1.21 – 在初步数据模型中添加了日期表
日期表在源数据中不存在,但在你的报告模型中,它将允许你按日、周、月、季度、年、周末等切片和切块数据。当你探索未来章节中的数据时,它将添加新的方式来深入探索基于日期的趋势。日期表将在第二章中添加。
在本章的最后部分,我们将探讨在机器学习(ML)中还需要考虑哪些其他因素。
机器学习考虑因素
现在你已经创建了一个初步的数据模型,它将作为 Power BI 分析报告的基础,你开始思考创建用于与 Power BI 机器学习一起使用的数据表的过程。你需要为每个你训练、测试和部署的机器学习模型创建一个单一的数据表,其中包含扁平化的数据。
创建用于训练机器学习模型的数据表涉及将每个列视为你将要训练并用于预测的算法的特征,然后使用这些特征进行预测。例如,如果你想要创建一个预测某物是否为昆虫的机器学习算法,你需要[六条腿 Y/N?]、[生命形式 Y/N?]、[眼睛数量]和[重量]等列,以及一个将要预测的列,例如[昆虫 Y/N?]。每一行将代表被评估以进行预测以回答问题“这是昆虫吗?”的对象。
你决定按照以下顺序采取以下方法,以便你可以在 Power BI 中完成所有操作:
- 
在 Power BI 桌面 Power Query 中进行数据探索和初始数据模型创建。
 - 
在 Power BI 中创建分析报告。
 - 
Power BI 中的特征发现。
 - 
在 Power Query 中创建训练数据集。
 - 
将训练数据集移动到 Power BI 数据流。
 - 
在 Power BI 数据流中训练、测试和部署 Power BI 机器学习模型。
 
此过程在图 1.22中显示。

图 1.22 – 所有的 ETL(提取、转换、加载)将在 Power BI Power Query 和 Power BI 数据流中发生
Power BI ML 提供了三种不同的预测模型类型。这些类型在 Power BI 服务中定义如下:
- 
二元预测模型预测是否能够实现某个结果。实际上,返回的预测是“是”或“否”。
 - 
通用分类模型预测超过两个可能的结果,例如A、B、C或D。
 - 
回归模型将预测一系列可能值中的数值。例如,它将根据类似的历史事件预测活动的成本。
 
作为你的初步规划的一部分,你考虑这些选项如何映射到你的利益相关者优先考虑的可交付成果:
- 
分析报告:这个可交付成果将是一个 Power BI 分析报告,可能需要一些 Power BI AI 功能,但它不会是一个 Power BI ML 模型。分析报告将帮助您探索和确定适合 Power BI 机器学习模型的数据。
 - 
预测损害:预测野生动物撞击是否会导致损害是一个很好的二进制预测模型匹配,因为答案将有两个可能的结果:是或否。
 - 
预测大小:根据损害成本、损害位置、高度、年度时间和机场位置等因素预测撞击飞机的野生动物的大小,可能会预测出多个值,如大型、中型和小型。这一需求可能非常适合通用分类模型。
 - 
预测高度:这个可交付成果预测野生动物撞击发生的高度,并将该预测作为表示地面以上高度的数值。它可能非常适合回归模型,该模型预测数值。
 
无法确定 FAA 野生动物撞击数据是否支持这些特定的用例,但您只有尝试了才知道!发现是过程的关键部分。首先,您必须识别数据中可能具有预测价值的特征,然后在 Power BI 中训练和测试机器学习模型。只有到那时,您才会知道您项目可能有哪些类型的预测。
摘要
在本章中,您探索了您项目可用的数据,并回顾了将数据映射到利益相关者需求的后继选项。您审查了数据架构选项以满足 Power BI 中的商业智能和机器学习需求,并决定采用一种混合方法,将星型模式设计与扁平化数据相结合。您还制定了一个计划来探索、分析、设计、构建和部署您的解决方案。最后,您确定了三个在 Power BI 中使用预测机器学习模型的用例。
在下一章中,您将使用 Power BI 中的 Power Query 从 FAA 野生动物撞击数据库中摄取和准备数据。您将深入研究数据特征,决定您的设计需要什么,并构建一个灵活的基础,它将支持当前项目和未来的迭代和变化。您在 Power Query 中的方法将支持 Power BI 中的商业智能分析和 Power BI ML 中的预测分析。
第二章:使用 Power Query 准备和摄取数据
在本书的第一章中,你启动了一个项目,旨在设计一个可以帮助跟踪和预测飞机撞击野生动物的高度和结果的相关解决方案。你从项目利益相关者那里收集了需求,深入研究了 FAA 野生动物撞击数据,将需求映射到可用数据,并制定了一个初步的数据模型设计,这将成为你使用 Power BI ML 模型进行报告和预测分析的基础。
创建用于机器学习的数据表需要清晰地理解 FAA 野生动物撞击数据,并需要一个允许你发现数据中特征的架构。在本章中,你将开始准备查询你在第一章中探索的数据,使用你的初步数据模型作为指南来对该数据进行建模,并创建精选查询,这些查询将成为 Power BI 中数据集和机器学习训练数据集的基础。
技术要求
本章节基于第一章中开始的工作。所有数据都可以在github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-02找到。
对于本章,你需要以下内容:
- 
Power BI 桌面版 2023 年 4 月或更高版本(无需许可证)
 - 
来自 FAA 网站或 Packt GitHub 站点的 FAA 野生动物撞击数据文件:
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-02 
如果你希望使用本章内容的完成版而不是逐步构建,你可以从 Packt GitHub 站点的第二章文件夹中下载完成的 PBIT 文件版本:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-02。
准备主要数据表
你决定通过从 FAA 野生动物撞击数据库的主要数据表开始建模,来启动构建数据集设计的过程。你首先打开在第一章中创建的Chapter 1.pbix Power BI 桌面文件。你也可以从本书的 Packt GitHub 网站下载文件的干净副本,该链接作为 PBIT 文件,可以使用在第一章中下载的数据填充为 PBIX 文件:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-01。
在 Power BI 中打开 Power Query,你会看到构成 FAA 原始数据的四个数据表:
- 
STRIKE_REPORTS
 - 
飞机类型
 - 
引擎代码
 - 
引擎位置
 
检查你在第一章中创建的初步数据模型。第一步,你将现有的原始数据查询组织到一个文件夹中,这样你就可以在创建修改后的数据模型查询时进行引用:

图 2.1 – Power Query 文件夹包含转换阶段
接下来,你需要对原始数据进行一些处理。Power Query 允许你将查询组织成组,这些组作为逻辑分组,类似于 SharePoint 或 OneDrive 中的文件夹。
在 Power Query 中,根据上下文,“查询”和“表”这两个术语可以互换使用。在本书的其余部分,“查询”一词将用于指代未缓存的或用于生成表的逻辑,而“表”将指代已缓存在 Power BI 数据集或 Power BI 服务中的数据流中的数据。
对原始数据进行分组
你为原始数据查询创建了一个组,该组可以在项目后期作为原始数据的视图进行引用。在数据湖或数据湖屋架构的示例中,你经常会看到青铜/银/金或原始、精炼、优化层,这些层既作为数据转换过程中的参考点,也作为可能被称为旧数据仓库术语中的临时表的参考数据。虽然 Power BI Power Query 和数据流与数据湖屋架构不同,但将你的查询和表分组到不同的阶段可以帮助理解逻辑,也有助于扩展解决方案的未来迭代。无论数据下游发生什么,Power BI 开发者都可以返回到原始数据文件夹,查看数据在源中的样子:
- 
在
原始数据中,添加以下描述:原始 FAA 野生动物撞击数据表。 - 
右键单击每个查询,并将它们各自移动到新的组中,原始数据。
 - 
右键单击每个查询,并禁用 启用加载。为什么需要这一步?通过禁用启用加载,这些查询将仅是源数据的简单预览,不会加载到你的数据集中并消耗存储空间。
 
该组是一个逻辑容器,它存在是为了组织你的查询。查询表示了从源数据中存在的原始数据,并且可以通过你在 Power Query 中创建的新查询进行引用。随着你的数据模型和机器学习用例随时间演变,你可以迭代地以未修改的形式引用源数据,以评估变化并为未来的机器学习模型创建新的训练数据。现在,图 2.1中的步骤 1的左侧部分已经完成!你的 Power Query 中的查询面板现在应该如下所示:

图 2.2 – 表示未修改原始数据的查询
接下来,你需要设计表格。
设计主STRIKE_REPORTS数据的精选表格
现在,你已准备好开始构建数据集的精选表格,这些表格首先可以用于填充 Power BI 数据集,然后可以用于填充数据表,用于机器学习。在 Power BI 出现之前,每一点数据都占据着宝贵的空间,运行查询时是喝咖啡的好时机,架构师们通常会先构建维度表,然后再填充简单的事实表,这些事实表由整数键和用于计算度量值的数值字段组成。
如果你正在构建包含数千万行或更多行的 Power BI 数据集,遵循最佳实践处理大量数据仍然是一个好主意。对于这个包含不到 30 万行 FAA 野生动物撞击数据的解决方案,在第一章中,为了实用性和易用性,决定构建一个混合设计,它包含星型模式和扁平化数据设计元素。采用混合方法,你决定从主要的STRIKE_REPORTS数据表开始,这主要是一个事实表,但也包含描述性文本列——这些本可以分解为维度,但将用作退化维度。
评估STRIKE_REPORTS表的数据将是一项繁琐、重复且耗时的努力。你意识到,你付出的这部分努力可能是这本书中最不愉快的一部分,但你同时也知道,坚持下去将导致更好的数据,这将导致更有效的分析和机器学习之旅。
你决定将STRIKE_REPORTS表的评估分为七个步骤,以便你能够理解数据并稍作休息:
- 
评估维度表以获取必要的键值。
 - 
评估STRIKE_REPORTS表中的日期和时间列。
 - 
评估STRIKE_REPORTS表中的地理和位置列。
 - 
评估STRIKE_REPORTS表中的飞机和运营商描述列。
 - 
评估STRIKE_REPORTS表中的物种和动物列。
 - 
评估STRIKE_REPORTS表中的天气、航班详情和罢工损害列。
 - 
查看来自STRIKE_REPORTS表的其它列。
 
接下来,您将详细地走过每个步骤。
评估维度表所需的键值
在您开始整理STRIKE_REPORTS表之前,您将回顾将作为您解决方案一部分的其他(维度)表。您需要确定这些表中的主键列。当您在STRIKE_REPORTS表上工作时,您需要确保存在一个外键来将该表映射到其他表中:
- 
飞机类型:对于这个表,您可以看到飞机代码是表中每个选项的唯一字母。这些值与STRIKE_REPORTS中的AC_CLASS列中的值相匹配。您希望将AC_CLASS保留为您的整理表中的外键,指向飞机 类型表。
 - 
引擎代码:这个表有点棘手。您需要使用制造商代码和型号代码列来识别一个唯一的行。这被称为复合键。根据read_me.xls文件,STRIKE_REPORTS中的AMA和AMO列映射到这些列。
 - 
read_me.xls定义列表。ENG_1_POS、ENG_2_POS、ENG_3_POS和ENG_4_POS都是引擎位置表的外键。这种场景将提出一些有趣的架构选项,您需要考虑。 - 
原始数据文件夹。根据您的初步数据模型,您需要一个日期表来在周、月、季度和年度级别进行聚合。您将在本章后面添加一个日期表,但您还需要评估STRIKE_REPORTS表中的列以确定合适的外键。 
评估STRIKE_REPORTS表上的日期和时间列
在商业智能和分析领域工作足够长的时间的人都知道,有一个read_me.xls文件,以及 Power Query 的原始数据文件夹。您为每个数据列的以下标准做笔记:
- 
列名:STRIKE_REPORTS表中的列名。
 - 
初始数据类型:在Microsoft Access文件中检测到的数据类型,或者由 Power BI 自动检测的数据类型是什么?
 - 
备注:您对每个列的备注。
 - 
保留?:是/否,表示您是否保留此列。如果您改变主意,您将来可以将其添加回来。
 - 
新数据类型:新整理的表版本的数据类型应该是什么?
 - 
键:这是一个外键列吗?如果是,它将整合到哪个表中?
 - 
报告名称:该列的用户友好名称,在报告中看起来很好,反映报告用户的语言,并且与 Power BI 自然语言查询等工具很好地协同工作。
 
| 列名 | 初始数据类型 | 备注 | 保留? | 新数据类型 | 键? | 报告名称 | 
|---|---|---|---|---|---|---|
| 事故日期 | 日期/时间 | 这是野生动物撞击事件发生的日期。数据的时间部分未被使用。 | 是 | 日期 | 是 – 链接到日期表 | 事故日期 | 
| 事故月份 | 十进制 | 由于它存在于事故日期中,该列不需要,它将链接到包含月份值的日期表。 | 否 | |||
| 事故年份 | 十进制 | 由于它存在于事故日期中,该列不需要,它将链接到包含年份值的日期表。 | 否 | |||
| 时间 | 文本 | 这列有缺失数据,但您可能在未来重新考虑它。 | 否 | |||
| 白天时间 | 文本 | 这列比时间列更频繁地被填充,可能很有价值。 | 是 | 文本 | 否 | 白天时间 | 
| LUPDATE | 日期/时间 | 关于报告更新时间的信息不需要成为您初始工作的部分。 | 否 | 
图 2.3 – 与日期和时间相关的 STRIKE_REPORTS 列的表格
接下来,您需要处理位置列。
评估 STRIKE_REPORTS 表中的地理和位置列
地理和位置列将提供有关野生动物撞击事件在世界各地 FAA 覆盖区域发生的信息。这类信息可能对区分基于当地气候和野生动物种群的不同趋势、模式和频率具有潜在价值。
再次深入到STRIKE_REPORTS数据中,并列出地理或与位置相关的列:
| 列名 | 初始数据类型 | 备注 | 保留? | 新数据类型 | 键? | 报告名称 | 
|---|---|---|---|---|---|---|
| 机场 ID | 文本 | 机场的唯一标识符。 | 是 | 文本 | 否 | 机场 ID | 
| 机场 | 文本 | 机场的名称。 | 是 | 文本 | 否 | 机场名称 | 
| 州 | 文本 | 州的缩写。 | 是 | 文本 | 否 | 州 | 
| 中转州 | 文本 | 目的州的缩写。 | 是 | 文本 | 否 | 州 | 
| FAA 区域 | 文本 | 报告中列出的 FAA 区域。 | 是 | 文本 | 否 | FAA 区域 | 
| 跑道 | 文本 | 飞行的跑道。 | 是 | 文本 | 否 | 跑道 | 
| 位置 | 文本 | 关于位置的文本注释。您决定在第一轮开发中省略它,因为它有 96%是空的。 | 否 | 文本 | 否 | |
| 纬度 | 十进制 | 报告中列出的纬度。 | 是 | 十进制 | 否 | 纬度 | 
| 经度 | 十进制 | 报告中列出的经度 | 是 | 十进制 | 否 | 经度 | 
图 2.4 – 与地理和位置相关的 STRIKE_REPORTS 列的表格
注意,在真正的星型模式设计中,一个 地理 表通常是一个独立的维度。再次强调,你正在采用混合方法,以最小化你第一轮开发中的复杂性。你可以在未来开发迭代中随时将地理维度拆分出来。
评估 STRIKE_REPORTS 表中的飞机和运营商描述列
飞机和飞机运营商的信息也包含在来自 FAA 野生动物撞击数据的 STRIKE_REPORTS 表中。你对这些列执行了类似的分析:
| 列名 | 初始数据类型 | 备注 | 保留? | 新数据类型 | 键? | 报告名称 | 
|---|---|---|---|---|---|---|
| OPID | Text | 运营商的 ID。 | 是 | Text | 否 | 运营商 ID | 
| OPERATOR | Text | 运营商的名称。 | 是 | Text | 否 | 运营商 | 
| REG | Text | 飞机注册号。 | 否 | |||
| AIRCRAFT | Text | 飞机描述。 | 是 | Text | 否 | 飞机 | 
| AMA | Text | 飞机制造商代码。 | 是 | Text | 是 – 发动机代码 | AMA | 
| AMO | Text | 飞机型号代码。 | 是 | Text | 是 – 发动机代码 | AMO | 
| EMA | Text | 报告中列出的纬度。 | 是 | Text | 否 | EMA | 
| EMO | Text | 报告中列出的经度。 | 是 | Text | 否 | EMO | 
| AC_CLASS | Text | 飞机类别。 | 是 | Text | 是 – 飞机类型 | 飞机类别代码 | 
| AC_MASS | Text | 飞机质量键;也包含一些 NULL 的文本条目。你将需要在以后添加一些描述。 | 
是 | Text | 否 | 飞机质量代码 | 
| TYPE_ENG | Text | 发动机键的类型;还需要添加描述。 | 是 | Text | 否 | 发动机类型代码 | 
| NUM_ENGS | Text | 一些条目是 NULL(文本)而其他的是整数或空值。你决定现在将其保留为文本值,但在设计数据集时将重新考虑。 | 
是 | Text | 否 | 发动机数量 | 
| ENG_1_POS | Text | 这四个列的 NULL 文本条目将暂时保留为文本。 | 
是 | Text | 是 –发动机位置 | 发动机 1 位置代码 | 
| ENG_2_POS | Text | 是 | Text | 是 – 发动机位置 | 发动机 2 位置代码 | |
| ENG_3_POS | Text | 是 | Text | 是 – 发动机位置 | 发动机 3 位置代码 | |
| ENG_4_POS | Text | 是 | Text | 是 –发动机位置 | 发动机 4 位置代码 | 
图 2.5 – 与飞机和运营商描述相关的 STRIKE_REPORTS 表的列表
接下来,你将查看记录涉及动物的列。
评估 STRIKE_REPORTS 表中的物种和动物列
关于撞击飞机的不同野生动物物种、它们的大小以及撞击结果的信息,也可能有助于预测与野生动物撞击相关的成本和损害。您将查看与野生动物相关的数据列:
| 列名 | 初始数据类型 | 备注 | 保留? | 新数据类型 | 键? | 报告名称 | 
|---|---|---|---|---|---|---|
| 鸟带编号 | 文本 | 主要为空 | 否 | |||
| SPECIES_ID | 文本 | 物种 ID | 是 | 文本 | 否 | 物种 ID | 
| 物种 | 文本 | 物种名称 | 是 | 文本 | 否 | 物种 | 
| 剩余收集 | 真/假 | 项目不需要 | 否 | 否 | ||
| 剩余发送 | 真/假 | 项目不需要 | 否 | |||
| 警告 | 文本 | 是否有警告? | 是 | 文本 | 否 | 警告 | 
| NUM_SEEN | 文本 | 看到的动物数量 | 是 | 文本 | 否 | 看到的数量 | 
| NUM_STRUCK | 文本 | 被撞击的动物数量 | 是 | 文本 | 否 | 被撞击的数量 | 
| 大小 | 文本 | 动物的大小 | 是 | 文本 | 否 | 大小 | 
图 2.6 – 与物种和动物描述相关的 STRIKE_REPORTS 表的列表
在下一节中,您将查看更多列。
评估 STRIKE_REPORTS 表中的天气、飞行细节和撞击损害列
飞行状态信息,如飞机的高度和速度,也可能是有趣和有用的数据。您还可以查看与野生动物撞击相关的损害、成本和伤害信息:
| 列名 | 初始数据类型 | 备注 | 保留? | 新类型 | 键? | 报告名称 | 
|---|---|---|---|---|---|---|
| 飞行阶段 | 文本 | 注意阶段,如起飞和巡航 | 是 | 文本 | 否 | 飞行阶段 | 
| 高度 | 十进制 | 碰撞时飞机的高度 | 是 | 整数 | 否 | 高度 | 
| 速度 | 十进制 | 碰撞时飞机的速度 | 是 | 整数 | 否 | 速度 | 
| 距离 | 十进制 | 机场距离 | 是 | 十进制 | 否 | 距离 | 
| 天空 | 文本 | 可视性注释 | 是 | 文本 | 否 | 天空 | 
| 降水量 | 文本 | 关于雨、雪等的注释 | 是 | 文本 | 否 | 降水量 | 
| AOS | 十进制 | 飞机停机时间 | 是 | 十进制 | 否 | AOS | 
| 成本修复 | 固定十进制数 | 修复成本 | 是 | 固定十进制数 | 否 | 修复成本 | 
| 其他成本 | 固定十进制数 | 其他成本 | 是 | 固定十进制数 | 否 | 其他成本 | 
| 成本修复通胀调整 | 固定十进制数 | 成本(通胀调整后) | 是 | 固定十进制数 | 否 | 修复成本(调整后) | 
| COST_OTHER_INFL_ADJ | Fixed Decimal Number | 其他成本(通货膨胀调整后) | 是 | Fixed Decimal Number | 否 | 其他成本(调整后) | 
| DAMAGE_LEVEL | Text | 损坏程度 | 是 | Text | 否 | 损坏程度 | 
| OTHER_SPECIFY | Text | 96% 空白和自由文本,因此现在跳过它 | 否 | |||
| EFFECT | Text | 对飞行的影响 | 是 | Text | 否 | 飞行影响 | 
| EFFECT_OTHER | Text | 其他影响,98% 空白 | 否 | |||
| REMARKS | Text | 关于事件的各项备注 | 是 | Text | 否 | 备注 | 
| NR_INJURIES | Decimal | 受伤人数 | 是 | Integer | 否 | 受伤人数 | 
| NR_FATALITIES | Decimal | 死亡人数 | 是 | Integer | 否 | 死亡人数 | 
| COMMENTS | Text | 自由文本中的评论 | 否 | 
图 2.7 – 与天气、飞行和损坏描述相关的 STRIKE_REPORTS 表的列表
你还发现了与撞击和相关损坏相关的 34 个 True/False 列。真/假列通常对用于机器学习来说很容易评估,因此你决定包括这些列。其中大部分以 ING(摄入)、DAM(损坏)或 STR(撞击)开头:
| Additional True/False columns included | 
|---|
| INGESTED_OTHER | 
| INDICATED_DAMAGE | 
| DAM_OTHER | 
| STR_RAD | 
| DAM_RAD | 
| STR_WINDSHLD | 
| DAM_WINDSHLD | 
图 2.8 – 标记 STRIKE_REPORTS 表中特定野生动物撞击事件的真/假列
STRIKE_REPORTS 表中的其他列
你决定从精选的 STRIKE_REPORTS 表中省略其他列,因为你怀疑它们不会为你的初始分析阶段增加价值。不必要的列还会增加最终用户对元数据浏览体验的负担,并增加数据集的大小,因为它们需要额外的存储空间。如果需要,以下列可以随时添加:INDEX_NR、REPORTED_NAME、REPORTED_TITLE、SOURCE、PERSON 和 TRANSFER。
你已经决定了要保留的列、数据类型以及列的用户友好名称。现在,你可以继续构建精选层,这将成为你的 Power BI 数据集和 Power BI 中的机器学习模型的基础。
构建一个精选的 STRIKE_REPORTS 主要数据列表
现在,你可以开始构建 STRIKE_REPORTS 元数据和查询逻辑的精选版本,在 Power Query 中进行。你将遵循以下步骤:
- 
参考原始表以创建新的查询。
 - 
只保留你需要的列。
 - 
进行数据类型更改。
 - 
修改列名。
 
让我们开始吧。
引用原始表创建新的查询
你将你的新查询放入 Power Query 中的一个新的组,命名为 Curated Reporting Queries:
- 
在 Power Query 中创建一个新的组,命名为 Curated Reporting Queries,使用与创建 Raw Data 组相同的方法。
 - 
右键点击
wildlife.accdb源文件。这样,你可以在 Power Query 中修改元数据和查询逻辑,同时保持源文件的不变视图。 - 
右键点击 STRIKE_REPORTS (2) 表,并将查询移动到 Curated Reporting Queries。
 - 
在右侧面板中,在
Strike Reports。这样,你的表将有一个干净且用户友好的名称。 
你的 Power Query 中的 Queries 面板现在应该看起来像这样:

图 2.9 – 一个用于数据集和 ML 查询的整理后的数据表
接下来,你需要删除不必要的列。
只保留你需要的列
现在你已经开始你的新查询,你可以选择你想要保留的列。基于你完成的七个评估批次,你可以删除不必要的列。在 Power Query 的 Home 选项卡下,在 Manage Columns 部分中,你可以选择 Choose Columns。你可以取消选择以下列:
| INCIDENT_NR | EFFECT_OTHER | SOURCE | 
|---|---|---|
| INCIDENT_MONTH | COMMENTS | PERSON | 
| INCIDENT_YEAR | REMAINS_COLLECTED | LUPDATE | 
| LOCATION | REMAINS_SENT | TRANSFER | 
| REG | REPORTED_NAME | BIRD_BAND_NUMBER | 
| OTHER_SPECIFY | REPORTED_TITLE | TIME | 
图 2.10 – 从 Strike Reports 查询中删除的列
现在,你的查询只包含你计划用于分析的列。
数据类型更改
根据你对 STRIKE_REPORTS 数据的评估,你决定更改一些列的数据类型。在 Power Query 的 Transform 选项卡下,在 any columns 部分中,你可以为每个你高亮的列选择 Data Type:
| Column | Existing data type | New data type | Reason | 
|---|---|---|---|
| INCIDENT_DATE | Date/Time | Date | Time 部分未使用;也作为一个好的外键作为 Date 类型。 | 
| HEIGHT | Decimal | Integer | 所有值要么为空,要么为整数。 | 
| SPEED | Decimal | Integer | 所有值要么为空,要么为整数。 | 
| NR_INJURIES | Decimal | Integer | 未以小数测量。 | 
| NR_FATALITIES | Decimal | Integer | 未以小数测量。 | 
图 2.11 – 在查询中更改数据类型以准备数据集和 ML 查询
列名更改
高质量的元数据对分析有多个好处,尤其是在最终用户不熟悉源数据命名约定的情况下。除了可以通过搜索工具发现之外,良好的命名约定还将使 Power BI Q&A 等工具更加直观和有价值。根据您的评估,您可以通过右键单击每个列并选择重命名…来对列名进行以下更改:
| 列名 | 报告名称 | 列名 | 报告名称 | 
|---|---|---|---|
| 事故日期 | 事故日期 | COST_OTHER_INFL_AD****J | 其他成本(调整后) | 
| 白天时间 | 白天时间 | DAMAGE_LEVEL | 损伤程度 | 
| AIRPORT_ID | 机场 ID | EFFECT | 对飞行的影响 | 
| AIRPORT | 机场名称 | REMARKS | 备注 | 
| 状态 | 状态 | NR_INJURIES | 受伤人数 | 
| 飞行状态 | 飞行状态 | NR_FATALITIES | 死亡人数 | 
| FAAREGION | FAA 区域 | INGESTED_OTHER | 吞入其他 | 
| 跑道 | 跑道 | INDICATED_DAMAGE | 指示的损伤 | 
| 纬度 | 纬度 | STR_RAD | 随机撞击 | 
| 经度 | 经度 | DAM_RAD | 损坏随机 | 
| OPID | 操作员 ID | STR_WINDSHLD | 撞击挡风玻璃 | 
| 操作员 | 操作员 | DAM_WINDSHLD | 损坏挡风玻璃 | 
| 飞机 | 飞机 | STR_NOSE | 撞击机头 | 
| AMA | AMA | DAM_NOSE | 损坏机头 | 
| AMO | AMO | STR_ENG1 | 撞击发动机 1 | 
| EMA | EMA | DAM_ENG1 | 损坏发动机 1 | 
| EMO | EMO | ING_ENG1 | 吞入发动机 1 | 
| AC_CLASS | 飞机类别代码 | STR_PROP | 撞击螺旋桨 | 
| AC_MASS | 飞机质量代码 | DAM_PROP | 损坏螺旋桨 | 
| 发动机类型代码 | 发动机类型代码 | STR_ENG2 | 撞击发动机 2 | 
| NUM_ENGS | 发动机数量 | DAM_ENG2 | 损坏发动机 2 | 
| ENG_1_POS | 发动机 1 位置代码 | ING_ENG2 | 吞入发动机 2 | 
| ENG_2_POS | 发动机 2 位置代码 | STR_WING_ROT | 撞击机翼或旋翼 | 
| ENG_3_POS | 发动机 3 位置代码 | DAM_WING_ROT | 损坏机翼或旋翼 | 
| ENG_4_POS | 发动机 4 位置代码 | STR_FUSE | 撞击机身 | 
| 物种 ID | 物种 ID | DAM_FUSE | 损坏机身 | 
| 物种 | 物种 | STR_ENG3 | 撞击发动机 3 | 
| 警告 | 警告 | DAM_ENG3 | 损坏发动机 3 | 
| 目击数量 | 目击数量 | ING_ENG3 | 吞入发动机 3 | 
| NUM_STRUCK | 撞击数量 | STR_LG | 撞击起落架 | 
| 尺寸 | 尺寸 | DAM_LG | 损坏起落架 | 
| 飞行阶段 | 飞行阶段 | STR_TAIL | 撞击尾部 | 
| 高度 | 高度 | DAM_TAIL | 损坏尾部 | 
| 速度 | 速度 | STR_ENG4 | 撞击发动机 4 | 
| 距离 | 距离 | DAM_ENG4 | 损坏发动机 4 | 
| 天空 | 天空 | ING_ENG4 | 吞入发动机 4 | 
| 降水 | 降水 | STR_LGHTS | 撞击灯光 | 
| AOS | AOS | DAM_LGHTS | 损坏的灯光 | 
| COST_REPAIRS | 维修成本 | STR_OTHER | 碰撞其他 | 
| COST_OTHER | 其他成本 | DAM_OTHER | 损坏的其他 | 
| COST_REPAIRS_INFL_ADJ | 调整后的维修成本 | 
图 2.12 – 野生动物碰撞查询的名称更改
现在,您已经重命名了将用于碰撞报告查询的列,您可以继续填充其他描述性数据的精炼版本。
构建飞机型号、发动机代码和发动机位置查询的精炼版本
接下来,您将创建 Power Query 的精炼报告查询组中引用(维度)表的新版本查询。在开始这些任务之前,您还应该考虑日期表。日期表将是 Power BI 数据集的一个基本组成部分,但它是一个在数据集中不存在的架构组件。因此,它将在本章后面的下游组中添加到数据集层。您已经进入到了工作的另一个阶段:

图 2.13 – 移动到分析数据的引用表查询
对于原始数据组中的三个表,飞机型号、发动机代码和发动机位置,右键单击它,选择引用,将生成的查询移动到精炼报告查询组,并将其重命名为在名称末尾包含信息,以便它们具有唯一名称。您的 Power Query 查询应如下所示:

图 2.14 – 精炼报告级别的新的查询
现在,您可以开始清理和修改每个查询,以便它们适合构建维度表和机器学习查询。在这些步骤中,作为一名经验丰富的 Power BI 用户,您可能拥有丰富的清理数据表的经验,您可以利用这些经验快速进行更改。您与微软合作伙伴一起参加的“一天之内构建 Power BI 仪表板”课程非常有帮助!
飞机型号信息查询
您会注意到在飞机型号信息表中,Power BI 显示列名作为第一行,并且有一个空行。在 Power Query 的选项卡上,在转换选项卡下,在表部分,您可以选择使用第一行作为标题。接下来,左键单击飞机代码列旁边的箭头并取消选择(null)。现在,您的飞机型号信息表应如下所示:

图 2.15 – 添加到飞机型号信息的列名
接下来,您需要查询发动机位置。
发动机位置信息查询
发动机位置信息需要与飞机类型信息完全相同的转换步骤。有时,标题会自动提升,这取决于您 Power BI 的版本。您重复上一节的步骤,您的表应如下所示:

图 2.16 – 查询的精选版本,用于发动机位置描述信息
接下来,您需要查询发动机代码。
发动机代码信息查询
发动机代码信息查询需要更多的工作:
- 
从查询视图的左上角选择下拉菜单,并删除前两行。
 - 
选择使用第一行作为标题。
 - 
突出显示Column5和Column6然后删除列。
 - 
突出显示制造商代码和发动机制造商列。右键单击并选择填充和向下。
 - 
左键单击模型代码旁边的箭头,取消选择(null)。
 
您的发动机代码信息查询应如下所示:

图 2.17 – 精选查询,用于涉及野生动物撞击的飞机上的发动机信息
让我们构建一个精选查询!
构建精选查询以填充日期表
日期聚合是 Power BI 和整体商业智能工具的重要组件。在周、月、季度和年的层面上理解和重新计算趋势,增加了强大的分析能力。日期表甚至可以用来按周末、假日、财政日历等切片和切块数据。Power BI 甚至具有将表指定为日期表的能力,以启用特殊的时间智能功能。
在 Packt GitHub 网站链接github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-02上可获取日期数据的 .csv 文件。按照以下步骤将其导入 Power Query:
- 
在 Power Query 中,选择新建源然后选择网页。粘贴 URL 并点击确定。
 - 
当预览显示时,选择确定。
 - 
将查询重命名为
Date Info并将其移动到 Power Query 中的精选报告查询组。 - 
选择使用第一行作为标题。
 - 
更改以下列的数据类型:
 
| 列名 | 数据类型 | 列名 | 数据类型 | 
|---|---|---|---|
| 日期 | 日期 | 月份编号 | 整数 | 
| 日期编号 周数 | 整数 | 月份 年份 订单 | 整数 | 
| 年内天数 | 整数 | 月日编号 | 整数 | 
| 周编号 | 整数 | 季度编号 | 整数 | 
| 周结束日期 | 日期 | 季度年份订单 | 整数 | 
| 年份周订单 | 整数 | 年份 | 整数 | 
图 2.18 – 日期信息表的数据类型更改
您的日期表查询现在应如下所示:

图 2.19 – 日期数据现在可在 Power Query 中使用,以在 Power BI 数据集中创建日期表
您现在已成功构建了 Power BI 数据集和 ML 查询的定制查询层。这些查询尚未准备好用于数据集,因为它们仍然需要外键和主键值,以及处理任何潜在数据问题的维护任务。现在您已准备好开始构建 Power BI 数据集的步骤!
摘要
在本章中,您创建了来自 FAA 野生动物撞击数据的查询,这些查询将作为 Power BI 数据集和 ML 训练数据集的基础。在整个章节中,您移除了不必要的列,清理了列名,并格式化了查询,以便它们可以作为数据表使用。
在下一章中,您将探索这些查询中的数据,并在 Power BI 数据集中创建一个语义模型,该模型将所有数据关联起来,用于创建 Power BI 报告 – 这将启动对 FAA 野生动物撞击数据的分析。
第三章:使用 Power BI 探索数据并创建语义模型
第二章是一个繁琐的过程,需要仔细检查 FAA 野生动物打击原始数据,识别你想要用于分析的列,然后设置查询以转换数据及其元数据,以便进行分析和机器学习。然而,这是一项重要的工作。
现在,你已经准备好创建一个列名,或者column_name可能会通过语义层显示为列名。此外,如年度累计销售额等运行时计算的逻辑通常存在于语义层中。在 Microsoft Power BI 生态系统中,语义层存在于 Power BI 数据集中。
Power BI 数据集将包含第二章中查询创建的所有数据,但会添加自定义列、表之间的关系以及计算度量,这些将帮助你聚合列,以便进行数学运算,以支持你的分析。回到第一章中审查解决方案需求部分,这将是你被要求交付的分析报告的基础。
一旦你使用一些基本的计算度量创建了 Power BI 数据集,你将开始构建用于 Power BI 中机器学习的数据基础。这将作为预测损害、预测尺寸和预测高度机器学习模型的基础,这些模型是来自第一章中审查解决方案需求部分的必需要求。
技术要求
对于本章,你需要以下内容:
- 
Power BI 桌面版 2023 年 4 月或更高版本(无需许可证)
 - 
来自 FAA 野生动物打击数据文件,可以从 FAA 网站或通过以下链接的 Packt GitHub 站点获取:
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/ 
设计表之间的关系
在 Power BI 数据集中,表之间的关系决定了涉及两个表数据的查询是如何生成的。如果你已经参加了 Power BI 的入门课程,例如一天构建仪表板,了解关系是 Power BI 开发的基础技能。回到第二章,你确定了以下键值以建立关系:
- 
日期列与打击报告表中的事件日期列相匹配 - 
飞机代码与飞机类别代码在打击报告表上相匹配 - 
制造商代码和型号代码是复合键,与打击报告表中的AMA和AMO相匹配 - 
发动机代码映射到打击报告表中的四列——发动机 1 位置代码、发动机 2 位置代码、发动机 3 位置代码和发动机 4 位置代码 
让我们继续确保所有这些表都存在适当的关键值!
您可以从第二章的 PBIX 文件中断点继续,或者使用本章内容的完成版进行跟随。您可以从 Packt GitHub 网站文件夹的第三章下载文件的 PBIT 版本:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-03.
日期表
您已经创建了一个名为日期信息的日期表,其中包含一个名为日期的字段,包含 1990-2024 年之间的每个唯一日期值。在 Power Query 中,您会在列统计信息中看到没有空白值,每个值都是唯一的且不重复。日期是日期表的主键。
对于打击报告表,事件日期是映射到日期表的外键值。该列表示报告野生动物打击发生的日期。该列也完全填充了有效数据。
由于日期表包含有效的主键,并且打击报告表中的事件日期是一个有效的日期字段,因此您不需要进行任何额外的转换。这些列在数据集中已准备好建立关系!
飞机类型信息
在飞机类型信息表中,您会看到一个名为飞机代码的文本列。每一行包含一个唯一字母,用于标识该行。飞机分类是另一列,提供了飞机类型的描述。如果处理极大量的数据,整数键值是一个最佳实践。然而,由于总数据量是可管理的,您可以使用字符文本值作为飞机类型表的主键。
打击报告表包含一个名为飞机类别代码的对应列。您左键单击列名旁边的箭头并选择加载更多以查看表中所有可能的唯一值。您会发现有值注册为(null),这实际上是空白,以及四个字母的值NULL,这是一个文本条目:

图 3.1 – 展示(null)和 NULL 文本值的屏幕截图
NULL文本值在飞机类型信息查询中不存在。它与(null)不同,因为NULL包含实际的文本,而(null)是一个空值。如果你对(null)或NULL文本值进行筛选,你会注意到包含这些值的行似乎存在差异。大多数空白(null)值出现在未知航班撞击野生动物的行上,并且许多列都是空的,而一些NULL文本值包含航班号码。
当你构建用于与 Power BI ML 一起使用的数据时,你将想要删除或替换所有空白值,因为 ML 模型通常需要一个不包含空值的结构。Power BI 数据集仍然可以与空外键值一起工作,但这种方法并不理想。你决定向飞机类型信息查询中添加两行新数据,一行用于NULL文本值,另一行用于显示为(null)的空白值。你还需要替换打击报告查询中的空白值。以下是你需要执行的步骤:
- 
右键单击
blank的null的blank。 - 
在 Power Query 的主页选项卡上,选择获取数据。将新表命名为飞机类型添加数据。创建两列,飞机代码和飞机分类。
 - 
在第 1 行中为两列输入
blank,在第 2 行中为两列输入NULL。在点击确定之前,你的表格应该看起来像这样: 

图 3.2 – 为飞机类型添加新数据以处理空白值和文本值 NULL
- 在查询面板中右键单击新查询,并将其移动到原始数据组。再次右键单击它,取消选中启用加载。Power Query 现在应该看起来像这样:
 

图 3.3 – 添加到原始数据组的新数据,这些数据将不会加载到数据集中
- 左键单击飞机类型信息查询。在 Power Query 选项卡下,在主页 | 合并中,选择追加查询 | 追加查询。追加飞机类型添加数据查询。现在,你的飞机类型信息查询应该看起来像这样:
 

图 3.4 – 添加到飞机类型信息查询的新行
现在,打击报告查询和飞机类型信息查询都将具有引用完整性,这意味着当你填充数据集时,打击报告表上的每个键值都将与飞机类型信息表上的值匹配。飞机类型信息查询已准备就绪!
发动机代码信息
如前所述,你已经确定制造商代码和型号代码是复合键,与打击报告查询中的AMA和AMO相匹配。对于引擎代码信息查询,你观察到制造商代码和型号代码的组合产生了一个唯一的行定义。在打击报告查询中,你浏览AMA和AMO列的值,发现两个列中都有空白(null)值,还有一些无效值,这些值不会与引擎代码信息查询匹配。你评估了几种处理这些差异的选项:
- 
通过在引擎代码****信息查询中添加新行,来考虑所有不完整和不匹配的值。
 - 
将引擎制造数据拆分为一个单独的查询,这将是一个新的维度。
 - 
在
不完整或缺失中添加新行。将为不完整或缺失的复合键值在引擎代码信息查询中添加一个新的外键。 
虽然第一个和第二个选项遵循最佳实践,但你决定在第一轮开发中采用第三个选项(将所有不完整条目和不匹配值放入一个单独的类别中)。如果你后来确定更好的匹配将以有意义的方式改善你的结果,你可以在未来的开发轮次中回过头来。选项一和二将需要大量的努力,而现在,你怀疑这些好处是否足以证明投入时间的价值。你有一个截止日期要遵守!由于 Power Query 和 Power BI 的灵活性,未来改变架构仍然是一个有效的选项。
首先,向引擎代码信息查询中添加新行。在原始数据组中创建一个新的查询,命名为引擎代码添加数据,就像你为飞机类型****添加数据所做的那样:
- 
在 Power Query 的选项卡上,选择获取数据。将新表命名为引擎代码添加数据。创建四个列:制造商代码、型号代码、引擎制造商和引擎型号。
 - 
在第 1 行中,为所有四个列输入
不完整或缺失。在点击确定之前,你的表格应该看起来像这样: 

图 3.5 – 在引擎代码报告中,不完整或缺失的关键值可以被归入不同的类别
- 
在查询面板中右键点击新的查询,并将其移动到原始数据组。再次右键点击,取消勾选启用加载。
 - 
左键点击引擎代码信息查询。在 Power Query 选项卡下,在主页|组合中,选择追加查询|追加查询。追加引擎代码添加数据查询。现在,你的引擎代码信息查询包含了额外的数据行。Power Query 现在应该看起来像这样(注意不完整或缺失现在在表中):
 

图 3.6 – Engine Codes Info 查询现在有一个用于缺失和不完整键值的桶
- Power BI 数据集需要一个单独的键列,并且不支持复合键。您需要向Engine Codes Info查询添加一个单独的主键。在 Power Query 功能区,选择添加列 | 常规 | 索引列 | 从 1。将新的索引列重命名为Engine Codes Info Key。现在Engine Codes Info查询看起来是这样的:
 

图 3.7 – 将整数主键值添加到 Engine Codes Info 查询中
- 现在,您将为Strike Reports查询添加相应的外键。在 Power Query 中的Strike Reports查询上,选择主页 | 组合 | 合并查询 | 合并查询。选择Engine Codes Info作为第二个表。在Strike Reports表上点击EMA,在Engine Codes Info表上点击制造商代码。您将看到超过 50%的行找到了匹配项:
 

图 3.8 – Strike Reports 中的 EMA 值并非全部在 Engine Codes Info 查询中找到匹配项
- 由于表通过复合键匹配,EMA和EMO与制造商代码和型号代码匹配,您在Strike Reports表上按 Ctrl 并点击EMO,对于Engine Codes Info表点击型号代码。与仅使用制造商键相比,您会丢失一些匹配项,这可以证明将制造商信息拆分为单独的维度表是合理的。然而,由于差异很小,您决定将拆分制造商作为单独的维度添加到开发的后备计划中。如果您没有找到任何匹配项,请检查两个表中的EMA和EMO列是否为文本值,因为数据类型需要相同。按照当前计划进行仍将给出相当相似的匹配率:
 

图 3.9 – 复合键可以将 Strike Reports 和 Engine Codes Info 关联起来,但并非每一行都能找到匹配项
- 点击确定。您将看到在Strike Reports中添加了一个名为Engine Codes Info的新列。点击箭头并仅选择Engine Codes Info Key:
 

图 3.10 – 在 Strike Reports 中为 Engine Codes Info 添加了外键
- 点击确定。现在,您数据集中Engine Codes Info表有一个单独的外键值,Engine Codes Info Key。
 
让我们继续下一步。
发动机位置信息
您之前确定发动机位置信息表上的发动机代码是该表的唯一键,野生动物打击查询中的所有四个列(发动机 1 位置代码、发动机 2 位置代码、发动机 3 位置代码和发动机 4 位置代码)都是外键,引用发动机位置。您重新审视初步数据模型,该模型包括发动机位置信息作为维度表,引用打击报告作为事实表。由于发动机位置信息表上没有单个外键引用打击报告表上的单个主键,因此可以以几种不同的方式处理维度设计,如下所示:
- 
一个单独的事实表,为每个发动机位置有一个单独的行。
 - 
将现有事实表的粒度更改为为每个发动机位置有一个单独的行。
 - 
为打击报告表上的四个外键列中的每一个添加一个单独的发动机位置信息副本。
 - 
在发动机位置信息和打击报告表之间添加不活动的关联,可以使用 DAX 表达式语言交互式地切换。
 
如果要对发动机位置执行重要的分析并且您正在构建复杂的星型模式设计,第一个选项可能是一个有效的选择。第二个和第三个选项在逻辑上可能可行,但会给您的结构增加不必要的复杂性和冗余。记住,您将执行分析以使用 Power BI 中的 ML 构建预测模型。保持打击报告表上的列的当前格式将很好地用于构建用于 ML 目的的查询。您知道 Power BI ML 与简单扁平的数据表配合得最好,其中每个四个列都是数据的潜在特征。您决定选择第四个选项,因为它最适合您的 ML 用例,并且不会给设计增加冗余或不必要的复杂性。
您查看打击报告表中的发动机 1 位置代码、发动机 2 位置代码、发动机 3 位置代码和发动机 4 位置代码列中的数据。这四个列与您之前审查的飞机类别代码列类似,都具有(null)条目,实际上为空白,以及四个字母的NULL值,这是一个文本条目。您可以通过为发动机位置信息查询中的空白和NULL条目添加两个新行以类似方式处理此场景:
- 
右键单击每个空白的替换为。现在,所有空值都将包含单词空白。
 - 
在 Power Query 的选项卡上选择获取数据。将新表命名为发动机位置添加数据。创建两个列,发动机代码和发动机位置。
 - 
在第 1 行中为两列输入
blank,在第 2 行中为两列输入NULL。 - 
在查询面板中右键单击新查询,并将其移动到原始数据组。再次右键单击它,并取消选中启用加载。Power Query 现在应如下所示:
 

图 3.11 – 新数据以处理发动机位置中的空白和 NULL 文本值
- 左键单击发动机位置信息查询。在 Power Query 功能区中,在主页 | 组合选择追加查询 | 追加查询下,追加发动机位置添加数据查询。现在您的发动机位置信息查询应如下所示:
 

图 3.12 – 现在可以匹配空白行和 NULL 文本值
您一定会注意到,尽管使用整数值作为主键和外键是最佳实践,但 Power BI 具有灵活性和性能来处理此解决方案中作为键列的文本值。在您的工作的这个阶段,用整数值替换这些表上的所有键值将引入不必要的复杂性。
到此为止,您已准备好开始构建您的 Power BI 数据集!
构建 Power BI 数据集
您回顾了之前努力的初步数据模型设计,并注意到您已经接近一个分叉点,其中将填充 Power BI 数据集的关系分析数据可能与 Power BI 中用于机器学习的扁平化数据存在差异:

图 3.13 – 您现在将填充 Power Query 查询以用于 Power BI 数据集
为了使您的工作既有序又为未来的更改优化,您决定在 Power Query 中创建一个新的组,该组将包含 Power BI 数据集的表。您注意到,当处理极大量的数据或复杂的数据模型时,避免 Power Query 中的复杂性通常是最佳实践。然而,考虑到您数据量、复杂性和整体用例,为项目的不同部分有单独的组是有意义的:
- 
在查询中创建一个新的组,称为精选数据集表。
 - 
右键单击每个打击报告、飞机类型信息、发动机代码信息、发动机位置信息和日期查询,并选择引用。
 - 
将每个新查询移动到精选数据集 表组。
 - 
将查询重命名为打击报告事实、飞机类型维度、发动机代码维度、发动机位置维度和日期维度以提高可读性。
 - 
在精选报告查询组中,右键单击每个查询并取消选中启用加载。这些查询不需要导入并缓存到 Power BI 中。
 
Power Query 现在应如下所示:

图 3.14 – 将作为 Power BI 数据集中的表填充的查询
现在,是时候让你的数据集起飞了!首先,你需要完成以下步骤来构建你的 Power BI 数据集:
- 
从 Power Query 导入并处理野生动物空袭数据查询。
 - 
在事实表和维度表之间创建关系。
 - 
清理元数据和调整设置。
 
从 Power Query 导入并处理野生动物空袭数据查询
你将运行完整查询并导入你的数据集的野生动物空袭数据:
- 
在 Power Query 功能区,选择主页 | 关闭 | 关闭并应用 | 关闭并应用。你的数据集将填充使用 Power Query 转换导入的数据。
 - 
数据导入后,Power Query 关闭,你将进入 Power BI Desktop 的主界面。
 - 
在应用程序的左侧,点击模型视图,以易于阅读的方式排列表:
 

图 3.15 – 在模型视图中排列数据集表
在事实表和维度表之间创建关系
接下来,你将在数据表中创建关系。在日期维度表中,将日期列拖放到空袭报告事实表的事件日期列上。Power BI 将显示如下:

图 3.16 – 空袭报告事实与日期维度之间已创建关系
双击关系线,可以看到关系被确定为多对一,交叉过滤方向为单一。关系线上的箭头表示日期维度表可以过滤空袭报告事实表,但不能反过来。使此关系生效框也已勾选:

图 3.17 – 基数和过滤方向设置为多对一和单一
通过拖放剩余的列到空袭报告事实表来重复此过程:
| 源表(列) | 目标表(列) | 基数 | 交叉 – 过滤方向 | 使此关系生效 | 
|---|---|---|---|---|
| 空袭报告事实(飞机类别代码) | 飞机类型维度(飞机代码) | 多对一(事实到维度) | 单一(维度到事实) | 是 | 
| 空袭报告事实(发动机代码信息键) | 发动机代码维度(发动机代码信息键) | 多对一(事实到维度) | 单一(维度到事实) | 是 | 
| 空袭报告事实(发动机 1 位置代码) | 发动机位置维度(发动机代码) | 多对一(事实到维度) | 单一(维度到事实) | 是 | 
| 击中报告事实(发动机 2 位置代码) | 发动机位置维度(发动机代码) | 多对一(事实到维度) | 单一(维度到事实) | 否 | 
| 击中报告事实(发动机 2 位置代码) | 发动机位置维度(发动机代码) | 多对一(事实到维度) | 单一(维度到事实) | 否 | 
| 击中报告事实(发动机 2 位置代码) | 发动机位置维度(发动机代码) | 多对一(事实到维度) | 单一(维度到事实) | 否 | 
图 3.18 – 击中报告事实表与维度表之间的关系设置
您的 Power BI 模型视图现在应该看起来像这样:

图 3.19 – Power BI 数据集完成的关联设计
表之间的关系现在已定义并完成。
清理元数据和调整设置
接下来,您将进行清理元数据,以便分析报告的最终用户可以轻松理解数据集的内容。此过程将涉及以下任务:
- 
隐藏不必要的列
 - 
调整汇总和数据类别设置
 - 
调整日期维度表的设置
 
隐藏不必要的列
默认情况下,作为外键或代理主键的列仍然是报告开发人员和查看者可浏览的解决方案的一部分。您可以通过隐藏这些列的可见性来隐藏它们,因为它们是关系数据集的一部分,但在报告中没有实际用途。在屏幕右侧的字段面板上,右键单击这些列并选择在 报告视图中 隐藏:
| 要隐藏的(列)表 | 
|---|
| 发动机代码维度(发动机代码信息键) | 
| 击中报告事实(发动机代码信息键) | 
| 击中报告事实(事件日期) | 
| 击中报告事实(飞机类别代码) | 
图 3.20 – 报告中不需要的列被隐藏
调整汇总、数据类别、格式和排序依据设置
Power BI 为影响报告数据显示和聚合的数据列提供设置。汇总设置确定数值是否将添加/平均/最小/最大,或者它们是否不打算用于数学。不汇总设置将确保默认情况下数值不会被汇总。数据类别设置将确定当数据添加到报告时,数据在地图、URL 等上下文中的显示方式。当您突出显示一个列时,汇总和数据类别在 Power BI 数据视图选项卡上的列工具 | 属性。格式也在选项卡上配置,并确定页面上的显示特征,如小数点。排序依据确定一个列以排序另一个列,例如使用数字值 1-12 对数据可视化中的 1 月到 2 月进行排序。您在此解决方案中使用以下列设置:
| 表(列) | 汇总 | 数据类别 | 格式 | 排序依据 | 
|---|---|---|---|---|
Strike Reports Fact (Latitude) | 
不汇总 | 纬度 | 具有七位小数的十进制数 | |
Strike Reports Fact (Longitude) | 
不汇总 | 经度 | 具有七位小数的十进制数 | |
Strike Reports Fact (State) | 
不汇总 | 州或省 | 文本 | |
Strike Reports Fact (``Enroute State) | 
不汇总 | 州或省 | 文本 | |
Date (``Quarter Year) | 
不汇总 | 文本 | Date (****Quarter Num) | |
Date (``Month Name) | 
不汇总 | 文本 | Date (****Month Num) | |
Date (Month Name Short) | 
不汇总 | 文本 | Date (****Month Num) | |
Date (``Month Year) | 
不汇总 | 文本 | Date (Month Year Order) | |
Date (``Week Year) | 
不汇总 | 文本 | Date (Week Year Order) | |
Date (``Day Name) | 
不汇总 | 文本 | Date (Day Num Week) | |
Date (Day Name Short) | 
不汇总 | 文本 | Date (Day Num Week) | 
图 3.21 – 列的分类、汇总、格式和排序设置
当您构建分析报告并确定 Power BI 中机器学习(ML)的合适特征时,您可能需要修改更多设置并添加到这个列表中。
调整日期维度表的设置
将日期维度表指定为官方日期表将解锁 Power BI 中的时间智能等能力。通过在数据视图中的表工具 | 日历 | 标记为日期表导航,并将日期作为解决方案的官方日期列进行标记,可以完成将日期维度表标记为官方日期表的操作。
在 Power BI 数据集中构建了关系模型的基础后,您可以继续构建运行时计算。您已经以所需的方式设置了数据模型,但为语义层添加一些用于数学运算的逻辑将使您能够通过分析深入挖掘。
向您的 Power BI 数据集添加度量
作为本章的最终活动,您将向 Power BI 数据集添加一些基本度量。度量不是存储在数据表的表中,而是在运行时在报告中。这些度量将用于进行数学运算,例如报告总数、平均损害成本金额、平均接触高度计算等。目前,您可以选择一些基本度量,这将为您分析提供一个起点。在未来章节中,您可以在发现数据中的新视角时添加更多度量。
可以使用 DAX 表达式语言添加度量,这是 Power BI 的关键技能。对于熟悉在 Excel 中编写公式的任何人来说,大多数公式都将相当简单。
在高亮显示打击报告事实表时,在 Power BI 的数据视图中添加以下度量:
| 名称 | DAX 公式 | 描述 | 
|---|---|---|
| 事故 | 事故 = COUNTROWS('Strike Reports Fact') | 
此公式将计算报告的总事故数 | 
| 平均速度 | 平均速度 = AVERAGE([Speed]) | 
在碰撞时刻的事故平均速度 | 
| 平均高度 | 平均高度 = AVERAGE([Height]) | 
在碰撞时刻的事故平均高度 | 
| 维修总成本 | 维修总成本 = SUM([Cost of Repairs]) | 
所有维修成本的总和 | 
| 维修平均成本 | 维修平均成本 = SUM([Cost of Repairs]) | 
所有维修成本的平均值 | 
| 有成本的事故 | 有成本的事故 = CALCULATE([事故],FILTER('Strike Reports Fact',[Cost of Repairs] > 0)) | 
导致产生成本的事故数量 | 
| 有成本的百分比事故 | 有成本的百分比事故 = DIVIDE([有成本的事故],[事故]) | 
导致产生成本的事故的百分比 | 
图 3.22 – 计算度量值和相应的 DAX 表达式
在您探索数据的过程中,您可能会向您的列表中添加更多度量值。在进入下一个分析阶段之前,前表中列出的度量值是一个良好的起点。
摘要
在本章中,您为 Power BI 数据集中的表格设计了关键值,创建了一个 Power BI 数据集,并向 Power BI 数据集中添加了度量值。您已经从探索和理解原始数据进步到在 Power BI 中使用包含运行时度量的多维度数据集。现在,您已经具备了分析和构建分析报告的基本基础。
在下一章中,您将构建一个分析报告,深入数据并揭示您将为 Power BI 机器学习标记的特性。随着您丰富分析报告并发现新特性,您也将开始构建 Power Query 中的数据集,这些数据集将用于 Power BI ML 的训练和测试。
第四章:Power BI 中机器学习的模型数据
在本书的 第三章 中,您为 Power BI 数据集准备了 FAA 野生动物撞击数据,构建了一个将作为分析基础的关系型数据集,然后在数据集中配置了基本设置,以便您可以深入挖掘数据并发现 Power BI 中的机器学习特征。
当您开始发现数据中适合 Power BI 机器学习的特征时,您需要一个过程将这些特征添加到查询中,以便在 Power BI 中训练和测试这些模型。在本章中,您将在探索数据集中适合 Power BI 机器学习的特征时构建 Power BI 的分析报告。当发现特征时,您将在 Power Query 中创建查询,这些查询最终将用于训练和测试您的机器学习模型。
技术要求
对于本章,您需要以下内容:
- 
Power BI Desktop 2023 年 4 月或更高版本(无需许可证)
 - 
来自 FAA 网站或 Packt GitHub 网站的 FAA 野生动物撞击数据文件:
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI 
通过数据探索选择特征
您的项目需要在 Power BI 中完全实现,不使用外部工具。Power BI ML 是一个 软件即服务(SaaS)工具,不需要设置基础设施或高级编码技能。传统上,大多数机器学习项目都是使用高度专业化的工具实现的,这些工具需要强大的编码技能,例如 R 和 Python 语言。通过在 Power BI 中实现整个项目,您将能够在短时间内完成它,使用 SaaS 工具和最少的编码构建所有组件,然后使用单一套件工具管理部署、可扩展性和未来的更改。
本章中的数据架构技术针对分析师和商业智能开发者,这个过程将是一个学习寻找和建模机器学习特征基础的好方法。熟练掌握 R 或 Python 的经验丰富的机器学习架构师可能处理过程的方式不同,但您需要使用您技能范围内的工具。使用 Power BI 工具,包括 Power Query、数据集、数据流和机器学习,将使您能够以最小的编码努力在 Power BI 中完成项目。
当您将潜在特征通过 Power BI ML 运行时,该工具将帮助识别具有强大预测价值的特征。您添加到表中的某些特征可能预测价值很小,但通过 Power BI ML 工具运行它们将有助于识别特征的价值。
将 Power Query 表添加到您的机器学习训练和测试架构中
回顾您初步的数据架构,您将在 Power Query 中填充 ML 训练数据表,这些特征是在您使用数据集在 Power BI 中创建分析报告时发现的:

图 4.1 – 在 Power BI 分析过程中将发现 ML 训练数据
您决定回顾那些将满足利益相关者需求的可交付成果,正如在第一章中讨论的那样:
- 
分析报告:这将作为分析过程的一部分使用您的 Power BI 数据集创建
 - 
预测损害、预测尺寸、预测高度:您将为这三个机器学习模型中的每一个需要三个单独的训练数据表
 
当您构建分析报告并发现可用于预测的新特征时,您将在 Power Query 中迭代构建训练数据表,以便与 ML 一起使用。您还在构建一个可以更新和修改以适应项目未来版本的架构:

图 4.2 – 数据探索和特征发现是一个迭代过程
您可以从第三章中的 PBIX 文件继续,或者您可以使用本章内容的完成版本进行操作。您可以从 Packt GitHub 网站的第四章文件夹下载文件的 PBIT 版本:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-04。
首先,您需要创建一个新查询组,以便在迭代过程中修改表格:
- 
在 Power Query 中创建一个名为“ML 查询”的新组。
 - 
右键单击精炼报告查询,在精炼报告查询组中,选择引用。
 - 
将新查询重命名为“预测损害”。
 - 
右键单击新查询,取消选择启用加载。
 - 
右键单击新查询,将其移动到新的ML 查询组。
 - 
重复这些步骤两次,但将查询重命名为“预测尺寸”和“预测高度”。
 
您的 Power Query 组现在应该看起来像这样:

图 4.3 – 您现在有一个单独的 ML 查询组
你是不是挠头并想知道为什么所有三个查询都是相同的?回顾 *图 4**.2 的迭代过程,你会发现随着你使用 Power BI 在数据中发现新的特征,每个查询都将被修改。通过这个过程,每个查询都将被精简并定制,以代表与预期预测相关的独特特征集。在开始通过分析进行特征发现之前,你考虑每个查询对你机器学习模型的可能粒度。实际上,你想要定义数据单行代表什么:
- 
预测损害:对损害的 是/否 二进制预测将应用于单个报告的野生动物撞击。提出的问题将是:“根据撞击的情况,飞机受损的可能性有多大?”每一行将是一个独特的野生动物撞击报告航班。
 - 
预测大小:预测撞击飞机的野生动物的大小是你的第二个交付成果。如果没有任何视觉确认或遗骸被回收,这个预测可以用来识别撞击飞机的动物的大小。这个预测也将处于独特的野生动物撞击报告航班级别。
 - 
预测高度:理想情况下,你希望预测撞击飞机的不同野生动物的高度。关于时间、地点和物种的数据可以用来预测高度。预测单个事件的高度也将保持表格的粒度与源数据库相同。
 
下一个阶段是构建报告。
构建分析报告以发现和选择预测损害机器学习模型的初始特征
在你的空白 Power BI 报告底部,将页面名称更改为 Predict Damage。这个页面将成为你的分析报告的一部分。你首先提出问题:“什么构成了一个表示野生动物撞击是否造成损害的肯定/否定答案?”参考 read_me.xls 文档,你找到一个名为 Indicated Damage 的列,它在 Strike Reports 表中,提供 True/False 值。这个列将作为你在预测损害二进制机器学习模型中预测的列。
你遵循以下步骤深入数据:
- 
从 字段 列表中将 Incidents 拖到画布上。
 - 
创建一个新的计算度量来计算有损害事件的百分比:
Indicated Damage % = DIVIDE(CALCULATE([Incidents],FILTER('Strike Reports Fact',[Indicated Damage] = TRUE)),[Incidents]) - 
将 Indicated Damage % 格式化为百分比。
 - 
将 Indicated Damage % 拖到包含 Incidents 的表格上。
 - 
将表格更改为矩阵。
 - 
将 Aircraft Type Dim[Aircraft Classification] 拖到行上。
 
你的矩阵应如下所示:

图 4.4 – 根据飞机分类报告的动物撞击及损害
你注意到绝大多数野生动物撞击报告都是针对飞机的,9.4%的报告表明有损害。直升机也有数千份报告,但你决定将数据缩小到飞机,因为那些是最常见的客运飞机,并且不会引入如悬停等飞行路径复杂性:
- 
将Aircraft Type Dim[Aircraft Classification]拖到 Power BI 筛选器面板的此页面的筛选器上。
 - 
筛选飞机并保留其他选项未选中。
 
将矩阵移动到画布的左侧,并创建一个新的图表来按年查看意外事件和损害。
- 
从可视化列中选择折线图和堆叠柱状图。
 - 
将Strike Report Fact[Incidents]放在列y轴上。
 - 
将Strike Report Fact[Indicated Damage %]放在线y轴上。
 - 
将Date Dim[Year]放在x轴上。
 
你在图表上注意到一个有趣的趋势。报告的意外事件数量随时间增加,直到 2020 年与 COVID 相关的中断。同时,造成损害的罢工比例下降,并在 2014 年左右趋于平稳。

图 4.5 – 按年统计的意外事件及损害事件
这些趋势是如何发展的?你不知道答案,但以下是一些可能的原因:
- 
随时间推移,空中交通管制对野生动物的监视和威慑能力提高
 - 
在没有损害的情况下填写报告的合规性更好
 - 
飞机技术的改进
 - 
飞行数量、飞行时间和不同高度时间的改变
 
目前,你决定专注于从 2014 年开始的数据,因为旧数据可能具有不同的趋势。这是完美的起点吗?高级分析技术可能会揭示数据的完美起始日期,但为了你在 Power BI 中的第一次分析,你决定以 2014 年为起点。将Date Dim[Year]拖到 Power BI 筛选器面板的此页面的筛选器上,并筛选大于或等于 2014。
使用常识,似乎大型野生动物比小型动物更有可能造成损害。复制并粘贴页面左侧显示Aircraft Classification的矩阵,并将Aircraft Classification替换为Strike Report Fact[Size]。你的报告应该看起来如下:

图 4.6 – 应用筛选条件查看意外事件和损害
你注意到,野生动物大小的增加似乎导致了更大比例的损坏事件。也有几个事件在大小字段中留空,如果你使用该字段进行机器学习,则需要修复这个问题。基本的机器学习工具通常需要用于训练和测试的数据中非空值。Power BI ML 内置了特征化工具,可以处理空白值,但在构建机器学习模型之前处理空白值是一个好主意。
对于你在 Power BI 中进行机器学习的第一次迭代 Predict Damage 数据,你已经隔离了以下特征。你将在本书的未来章节中添加更多特征,但这是测试你在 Power Query 中的架构设计的一个良好起点:
- 
一行代表一个报告的单独事件。
 - 
打击报告事实[指示损伤] 是你将训练机器学习模型进行预测的字段。
 - 
你将使用具有
Airplane的行。 - 
你将使用 事件日期 在或之后 2014 年 1 月 1 日的数据。
 - 
你还将使用
blank。 
构建一个分析报告以发现和选择用于预测大小机器学习模型(Predict Size ML model)的初始特征
现在你继续寻找一些用于预测撞击飞机的野生动物大小的特征。预测动物的大小可能有助于了解在特定高度、位置和季节可能撞击飞机的物体。当物种未知时,大小可能是确定未来风险和识别可能碰撞的濒危或受保护野生动物的一个有价值因素。
你已经将大小作为预测因素包含在你的损坏预测机器学习模型中,但不可避免地会有动物未被看到或发现的情况。预测大小算法将预测是否发生了野生动物大型、中型或小型打击:
- 
你首先复制
Predict Size。你将重复使用已经创建的内容。 - 
首先,你决定保留
Airplane,以便你的机器学习模型适用于你的项目相同类型的用例。你按如下方式修改了折线图和堆叠柱状图:- 
从图表中移除 指示损伤百分比
 - 
将 打击报告事实[大小] 添加到列图例
 - 
在过滤器面板中,清除 日期[年份] 的过滤器
 
 - 
 
你注意到,大小 的空白(空)值从 2010 年开始出现:

图 4.7 – 空白值从 2010 年开始出现
- 你将Strike Reports Fact[Size]添加到此页面的筛选器的筛选面板中,并从报告中移除空白值。虽然空白值对于预测损坏的先前的查询是有用的,但空白值对于这个模型没有价值,因为你正在尝试预测Strike Reports Fact[Size]字段的输出。Predict Damage ML模型将有助于评估罢工造成损坏的可能性,而Predict Size ML模型将在其他因素已知的情况下预测野生动物罢工的规模。
 
你注意到,即使在移除了Size中的空白值之后,2010 年似乎发生了一些变化。中等规模的罢工报告较少,小型罢工报告较多:

图 4.8 – 报告的尺寸分布似乎在 2010 年发生变化
你决定通过在筛选面板中筛选Date[Year]来包含从 2010 年开始的数据。在此页面的筛选器中添加Year作为筛选条件。
在Predict Damage报告页面上,你已经观察到随着罢工规模的增加,损坏的可能性也在增加。因此,你决定将Strike Reports Fact[Indicated Damage]作为预测尺寸的特征。
你知道鸟类,这些野生动物罢工中常见的罪魁祸首,在一年中会迁徙。你从折线图和堆叠柱状图的x轴中移除Date[Year],并用Date[Month Num]替换它。注意,罢工的频率和分布以及罢工的规模在一年中都会变化:

图 4.9 – 当所有年份汇总时,频率和分布似乎按月份变化
你决定将月份数字作为特征添加到你的查询中,以训练和测试预测尺寸的机器学习模型。与年份中的日、周或季度相比,月份是否是更好的聚合级别?你可能会在未来解决方案的迭代中重新审视这个问题,但就目前而言,你决定继续进行,因为深入分析需要额外的时间和精力,这可能会影响你的截止日期。
从逻辑上讲,大型野生动物罢工可能造成更严重或昂贵的损坏。Strike Reports Fact表包含四个包含成本数据的列,包括维修成本、其他成本、调整后的维修成本和调整后的其他成本。调整后的列按通货膨胀率索引,因此你决定使用这些值。你决定将这些列合并成一个单独的列。为了合并它们,你回到 Power Query,在Curated Reporting Queries组中的Strike Reports查询上创建一个新列:
- 
点击Curated Reporting Queries组中的Strike Reports查询。
 - 
在 Power Query 功能区选择添加列 | 常规 | 自定义列。
 - 
将新列命名为
总成本调整。 - 
输入以下 M 表达式作为添加列的值:
= if [Cost of Repairs Adjusted] = null then [Other Costs Adjusted]else if [Other Costs Adjusted] = null then [Cost of Repairs Adjusted]else [Cost of Repairs Adjusted] + [Other Costs Adjusted] 
条件语句存在是为了确保只有一个空值的行不会被跳过。
- 将数据类型更改为固定 小数数字。
 

图 4.10 – 为总成本添加自定义列
由于你在其他下游查询中引用了打击报告查询,新列也将传播到那些查询!下次你重新处理 Power BI 数据集时,打击报告事实表上会出现一个总调整成本列。在 Power Query 中点击关闭并应用以更新你的数据集。一旦处理完毕,你决定向数据集的打击报告事实表添加三个新的 DAX 表达式,用于求和(所有选定行的总费用)、平均值(所有选定行的平均值)和中位数(所有选定行的中间值,以消除极端高昂且罕见成本事件的影响):
- 
通货膨胀调整后的总成本 = SUM([总成本调整]) - 
每次打击的平均成本 = AVERAGE([总成本通货膨胀调整]) - 
每次打击的中位数成本 = MEDIAN([总成本调整]) 
最后,考虑到气候和地理环境,你意识到太平洋西北部、南部深处和新英格兰在不同时间段的动物种类将不同。某些物种将栖息在国家的不同部分,而某些物种会在一年中的不同时间迁移到新的地理区域。例如,火烈鸟永远不会飞过明尼苏达州。对于你项目的第一次迭代,你决定筛选出前 15 个经历野生动物打击的机场:
- 
复制并粘贴带有大小、事件和指示 损害百分比的矩阵视觉。
 - 
将大小从行移动到列。
 - 
将打击报告事实[机场 ID]添加到行中。
 - 
按总事件数排序。
 - 
根据总打击次数选择前 15 个机场。排除
ZZZZ,因为这不是有效的机场代码,很可能是在机场未知时使用的。注意,这些位置也提供了一些地理多样性: 
| 机场 ID | 机场城市 | 
|---|---|
| KDEN | 丹佛,科罗拉多州 | 
| KMEM | 孟菲斯,田纳西州 | 
| KDFW | 达拉斯,德克萨斯州 | 
| KSMF | 萨克拉门托,加利福尼亚州 | 
| KCLT | 夏洛特,北卡罗来纳州 | 
| KORD | 芝加哥,伊利诺伊州 | 
| KPHL | 费城,宾夕法尼亚州 | 
| KSDF | 路易斯维尔,肯塔基州 | 
| KMCO | 奥兰多,佛罗里达州 | 
| KLGA | 奎恩斯,纽约州 | 
| KATL | 亚特兰大,乔治亚州 | 
| KJFK | 奎恩斯,纽约州 | 
| KIAH | 休斯顿,德克萨斯州 | 
| KAUS | 奥斯汀,德克萨斯州 | 
| KBNA | 纳什维尔,田纳西州 | 
图 4.11 – 按事件数量排名前 15 的机场
你现在已经确定了将要预测的特征,以及用于在 Power BI 中评分机器学习模型的特征:
- 
一行代表一个单独报告的事件
 - 
大型、中型或小型打击规模 - 
您将使用具有
飞机的行 - 
您将使用日期在 2010 年 1 月 1 日或之后的日期的数据
 - 
空值将从撞击报告事实[尺寸]中移除
 - 
您将包括撞击报告事实[指示损坏]标志作为一个特征
 - 
您将筛选出野生动物撞击量最高的前 15 个机场
 - 
您将包括年份的月份作为一个特征
 
建立分析报告以发现和选择预测高度机器学习模型的初始特征
您在 Power BI 中的第三个机器学习模型计划预测飞机上野生动物撞击的高度。回归模型将预测地面以上的数值(英尺)。您计划在单个航班级别预测高度,如果这些结果准确性低,则将事件汇总到聚合级别。
首先,在您的 Power BI 报告中,复制预测高度。高度是数据表中的一个单独列。您将想要过滤掉高度缺失的行。
您创建新的 DAX 表达式来分析高度,除了在第三章中创建的平均高度:
- 
中位数高度 =MEDIAN([高度]) - 
最大高度 =MAX([高度]) - 
最小高度 =MIN([高度]) 
现在,您开始分析数据:
- 
在折线图和堆叠柱状图中,从线y轴中移除指示损坏百分比,并用撞击报告事实[平均高度]和撞击报告事实[中位数高度]替换。
 - 
清除日期[年份]在此页面的过滤器上的过滤器面板。
 - 
保留
飞机。 - 
在过滤器面板中,添加高度,并将其设置为不是空白。
 - 
确保视觉元素的次级 y 轴已开启。
 
您的图表应如下所示:

图 4.12 – 随时间变化的平均和中位数高度
您决定将过滤器重新应用于整个页面的年份,以 2010 年及以后,以便日期范围与预测尺寸保持一致。
在包含尺寸、事件和指示损坏百分比的矩阵中,按照以下步骤操作:
- 
移除指示损坏百分比。
 - 
将撞击报告事实[平均高度]、撞击报告事实[中位数高度]、撞击报告事实[最大高度]和撞击报告事实[最小高度]添加到矩阵的值中。
 - 
在所有页面上的过滤器下的过滤器面板中添加高度,并将其设置为不是空白。
 
注意,随着中位数和平均值的尺寸增加,存在轻微的上升趋势,而对于平均值,上升趋势更为显著:

图 4.13 – 按野生动物撞击尺寸的平均、中位数、最大和最小高度
在这个总结级别,大小和高度之间似乎没有太大的差异。由于有许多不同的物种被归类到大小分类中,这个特征可能不是非常有价值。例如,一只单独的小鸟可能被归类为“小型”,而一大群相同的鸟可能被归类为“大型”。你将保留大小在预测高度的数据表中,然后看看它在通过 Power BI ML 运行时的表现如何。
- 复制并粘贴你构建的矩阵视觉,并将Strike Reports Fact[Size]替换为Strike Reports Fact[Species]。你看到发生了更显著的变化:
 

图 4.14 – 按物种的高度指标
平均值、中位数和最大高度在物种之间差异很大。地面生物,它们很可能是被跑道上的撞击所击中,也列在清单上,并且始终有零英尺的高度。例如,如果你筛选“猪”,你可以看到有四个事件发生在零高度。常识告诉你这是预期的,你不需要测试“猪不会飞”的假设。非常严肃地说,你可能想要筛选清单,只包含可以飞行的物种,并消除像“未知小鸟 – 小型”这样的总括类别。实际上会飞的特定物种可能是一个强大的预测因素。
- 再次复制并粘贴矩阵视觉,并将大小替换为Date[Month Num]。你还可以看到按月份的模式:
 

图 4.15 – 按年月度的高度指标
月份编号可能是预测高度的一个有价值的特征。一些鸟类物种会根据季节迁移到不同的地理区域,并占据不同的高度。将机场 ID字段作为特征添加,并筛选到本章预测大小部分列出的前 15 个机场(构建分析报告以发现和选择预测大小机器学习模型的初始特征)也可以提高月份编号的价值。
在这一点上,你决定继续进行项目的下一步,并在 Power Query 中开始构建机器学习训练和测试数据的基础。对于预测高度查询,你决定以下内容:
- 
高度将通过回归模型进行预测
 - 
数据将被筛选,从 2010 年开始
 - 
飞机 - 
野生动物撞击的大小将是一个特征
 - 
物种将是一个特征
 - 
前 15 个机场将作为预测高度的筛选标准
 
你现在已经发现了足够的潜在特征,可以返回 Power Query 并开始构建一些查询,这些查询将成为训练和测试你的机器学习模型所使用的数据的基础。
在 Power BI 中为机器学习创建 Power Query 的平坦表
现在您已经进行了一些分析,并发现了您希望包括在第一轮机器学习模型中的特征,您返回 Power Query 并开始工作。您回顾本章前面的笔记,并从 ML 查询 组中的 Predict Damage 表开始。
在 Power Query 中修改 Predict Damage 表。
由于每一行将代表一个预测的单独事件,因此您不需要对数据进行任何分组。您将选择列并筛选行,以获得更适合任务的 数据集:
- 
在 ML 查询 组中突出显示 Predict Damage 表。
 - 
飞机类别代码为
A,因此筛选A。 - 
筛选出
1/1/2014。 - 
在 Power Query 的功能区上,选择 Home | Manage Columns | Choose Columns 并保留 Size 和 Indicated Damage 列。
 - 
在
null值上使用empty,以确保没有空白值。 
您是否对只有两列感到困惑?别担心!随着您进入未来的章节,表中将添加更多功能。这个例子保持简单,是为了强调在发现过程中逐步构建特征表的方法。您的表应如下所示:

图 4.16 – Predict Damages 查询的基础,用于训练和测试机器学习模型
接下来,我们将对 Predict Size 表进行同样的操作。
在 Power Query 中修改 Predict Size 表。
在 Power Query 的 ML 查询 组中重复相同的 Predict Size 查询过程:
- 
在 ML 查询 组中突出显示 Predict Size 表。
 - 
飞机类别代码为
A,因此筛选A。 - 
筛选出
1/1/2010。 - 
筛选出分析期间记录的前 15 个机场。对于
KDEN、KMEM、KDFW、KSMF、KCLT、KORD、KPHL、KSDF、KMCO、KLGA、KATL、KJFK、KIAH、KAUS和KBNA。 - 
在 Power Query 的功能区上,选择 Home | Manage Columns | Choose Columns 并保留 Size、Indicated Damage、Airport ID 和 Incident Date 列。
 - 
对于 Size,取消选中 (null) 值。
 - 
使用以下 M 代码添加一个名为 Month Number 的自定义列:
= Date.Month([Incident Date]) - 
删除 Incident Date。
 
您的 Predict Size 查询现在应如下所示:

图 4.17 – Predict Size 查询的基础,用于训练和测试机器学习模型
最后,我们将对 Predict Height 表进行同样的操作。
在 Power Query 中修改 Predict Height 表。
Power Query 中的 Predict Height 表也将遵循相同的列宽和行数减少的过程:
- 
在 ML 查询 组中突出显示 Predict Height 表。
 - 
飞机类别代码为
A,因此过滤A。 - 
过滤
1/1/2010。 - 
在 Power Query 功能区,选择主页 | 管理列 | 选择列,并保留大小、物种、机场 ID、事件日期和高度列。
 - 
将大小列的空值替换为
空。 - 
过滤到分析期间注意到的前 15 个机场。对于
KDEN、KMEM、KDFW、KSMF、KCLT、KORD、KPHL、KSDF、KMCO、KLGA、KATL、KJFK、KIAH、KAUS和KBNA。 - 
过滤高度以移除空值。
 - 
使用以下 M 代码添加一个名为月份编号的自定义列:
= Date.Month([Incident Date]) - 
移除事件日期。
 
您的预测高度表现在应该看起来像这样:

图 4.18 – 预测高度查询的基础,用于训练和测试机器学习模型
您的机器学习查询现在已修改,包括本章发现的新潜在特征。
摘要
本章开始构建您在 Power BI 中的机器学习冒险的基础。您在 Power Query 中创建了一组查询,这些查询将成为训练和测试您的二进制、通用分类和回归机器学习模型的基础。您在发现数据中可能对机器学习的预测分析有价值的特征的同时,开始构建分析报告。最后,您将这些特征添加到 Power Query 中的新查询中。您现在可以为查询添加新特征,这些特征将尝试预测是否发生了损坏,野生动物撞击的大小以及野生动物撞击的高度。
在下一章中,您将更深入地研究 Power BI 数据集,以发现新的预测特征。您将利用一些 Power BI AI 功能来揭示新的见解和可能的新特征,这些特征可用于机器学习。最后,您将把您的发现添加到用于在 Power BI 中训练和测试您的机器学习模型的查询中。
第二部分:人工智能和机器学习可视化以及发布到 Power BI 服务
在接下来的几章中,您将通过数据可视化和探索发现的新特征来丰富训练数据集。
本部分包括以下章节:
- 
第五章,使用分析和 AI 可视化发现特征
 - 
第六章,使用 R 和 Python 可视化发现新特征
 - 
第七章,将数据摄取和转换组件部署到 Power BI 云服务
 
第五章:使用分析和 AI 可视化发现特征
在第四章中,你发现了 FAA 野生动物撞击数据中的特征,并使用 Power BI ML 进行测试,以查看它们是否是好的预测特征,在 Power Query 中构建查询以将这些特征结构化为表格,并完成了你高级数据架构的基础。你现在可以深入分析并准备在 Power BI 中进行机器学习。
在本章中,你将继续构建 Power BI 分析报告,同时探索数据和发现趋势。你还将尝试一些 Power BI AI 可视化,看看你是否可以揭示可以添加到你的机器学习努力中的额外特征。在本章结束时,你将拥有一个更完整的分析报告和更丰富的数据,用于构建、训练和测试你的 Power BI ML 模型。
技术要求
对于本章,你需要以下内容:
- 
Power BI 桌面版 2023 年 4 月或更高版本(无需许可证)
 - 
从 FAA 网站或此链接的 Packt GitHub 站点获取 FAA 野生动物撞击数据文件:
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI 
使用报告在 Power BI 中识别特征
现在你已经为预测损坏、预测大小和预测高度构建了基础查询,你可以在每个查询中添加额外的特征来评估,这些特征将被用于 Power BI ML。评估 ML 模型的特征将被添加到每个 ML 查询中。在 Power BI 中构建 ML 模型将允许你缩小特征列表,使其包含最有用的特征。为了使章节易于阅读,你可以逐个查看与 Power BI ML 的三个查询相关的潜在新特征。在 Power BI 中训练和测试你的 ML 模型时,每个特征的预测价值将在构建 ML 模型时进行评估。因此,如果一个特征存在问题,你最好将其保留在查询中,然后在它显示出提供很少价值时再将其删除。
注意,如果你不希望在本书的旅程中构建所有这些 Power BI 报告页面,完整的 PBIT 模板可在以下链接获取:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-05。
受击数量
撞击次数是一列数据,代表每次野生动物撞击事件中涉及的动物数量的五种选择:1,2-10,11-100,超过 100,或文本值NULL。您将折线图和堆积柱状图复制粘贴到预测损伤页面,并将年份在x轴上替换为撞击次数。文本值NULL可能包含代表其他四个类别所有事件的案例。除了NULL之外,随着撞击次数的增加,损伤的可能性似乎也在增加,这可能代表了动物撞击次数与损伤可能性之间的相关性。随着动物撞击次数的增加,事件数量也在增加:

图 5.1 – 撞击可能性随撞击次数增加而增加
现在看看撞击次数与预测大小用例之间的关系。记住,大小指的是撞击飞机的动物的大小。将折线图和堆积柱状图复制粘贴到该页面,将月份编号在x轴上替换为撞击次数,并将图表更改为100%堆积柱状图。您在NULL列中发现了一个意外的分布。许多这些事件被归类为大型。您不知道这个发现的原因,但这里有一些可能性:
- 
如果一只大型动物撞击了飞机,那么撞击次数字段有时可能被跳过。
 - 
如果撞击未被目击,那么NULL实际上可能意味着未知。
 - 
飞行后发现的撞击损伤可能被认为是大型动物造成的,但具体数量并不清楚。
 

图 5.2 – 当按撞击次数分解时,野生动物撞击的大小分布不同
最后,您查看预测高度页面,看看撞击次数是否有任何有趣的模式。您将预测损伤页面上的折线图和堆积柱状图复制粘贴到预测高度页面,并在x轴上将年份替换为撞击次数。将平均高度和中位数高度添加到y轴。动物数量较少的事件似乎发生在较高的高度:

图 5.3 – 单一动物的撞击似乎具有更高的高度指标
您通过分析验证了撞击次数可能为所有三个机器学习特征集提供价值。在本章的后面部分,您将将其添加到查询中。
飞机质量代码
根据read_me.xls文档,飞机质量代码值表示参与野生动物撞击的飞机的以下质量值:
- 
1: 2,250 公斤或以下
 - 
2: 2,251–5,700 公斤
 - 
3: 5,701–27,000 公斤
 - 
4:27,001–272,000 kg
 - 
5:超过 272,000 kg
 
文本值 NULL 不在文档中,但很可能表示飞机的大小未知。您可以为 飞机质量代码 创建一个与上面用于 被击中数量 的相同的 100% 堆积柱状图,用于 预测损坏 页面。您可以从 图 5**.4 中看到,较小的飞机似乎比较大的飞机有更高的损坏百分比,这在常识角度上是合理的。

图 5.4 – 较小的飞机似乎有更高的损坏率
现在,您可以通过复制和粘贴 100% 堆积柱状图 并将 被击中数量 替换为 飞机质量代码 来查看 预测大小 的 飞机质量代码。差异是明显的,但并不突出:

图 5.5 – 由于飞机质量代码导致的尺寸略有差异
使用 折线图和堆积柱状图 对 预测高度 页面上的 飞机质量代码 重复相同的操作。平均高度 和 中位数高度 是 y 轴上的线条:

图 5.6 – 高度指标似乎随着飞机尺寸的增大而略有上升
飞机质量代码 将在本章的 在 Power Query 中添加新特征到机器学习查询 部分中添加到所有三个机器学习查询中。
月份编号(数字)
月份编号,即月份的数值表示,在上章中添加到 预测大小机器学习 查询中。您决定对其他两个机器学习查询进行评估,从 预测损坏 开始。在 预测损坏 页面上,执行以下操作:
- 
高亮显示现有的 按年分的 事故和指示损坏百分比 图表。
 - 
将 月份编号 拖到 可视化 | X 轴,在 年份 之下。
 - 
您现在可以深入到 按年分的 事故和指示损坏百分比 图表,并在 x 轴上查看 月份编号。
 
注意到在夏季月份(北美的六月到九月)损坏可能性似乎有所下降:

图 5.7 – 损坏可能性似乎呈季节性波动
您将在本章末尾将 月份编号 作为特征添加到 预测损坏 机器学习查询中。
发动机数量
与前面的例子一样,您查看其他两个机器学习查询的 发动机数量,从 预测损坏 开始。复制并粘贴一个 折线图和堆积柱状图,然后在 x 轴上添加 发动机数量。似乎单引擎飞机在遭受打击后有更高的报告损坏的可能性:

图 5.8 – 单发动机飞机在撞击后似乎有更高的损坏可能性
现在从预测规模页面复制粘贴一个 100%堆叠条形图,并将发动机数量放在x轴上。虽然不是特别深刻,但似乎根据发动机数量动物大小的分布存在差异:

图 5.9 – 根据发动机数量动物大小分布的微小变化
你会注意到根据read_me.xls文档,确定撞击规模大小的变量还有其他一些。这种分类是一个主观值,飞行员经验、地理文化差异等因素可能导致变化。特别是,这张图表让你怀疑私人飞行员是否可能比为大型航空公司工作的经验丰富的专业飞行员描述野生动物撞击的方式不同。也许这是数据科学家可以在另一天进行的研究。尽管如此,你将把发动机数量添加到预测损坏和预测规模的机器学习查询中。
被击中、吞入野生动物和损坏的发动机百分比
虽然发动机数量是源数据库中的一列,但你还需要做一些工作来找出有多少发动机被击中、吞入野生动物以及被击中损坏。考虑到发动机数量,两台发动机被击中对于双发动机飞机和四发动机飞机来说可能是一个非常不同的场景。发动机数量将是你的机器学习查询中的一个特征,但分别针对被击中、吞入野生动物和损坏的发动机百分比的独立特征也可能很有趣。
将TRUE,然后除以发动机数量。打开 Power Query 并按照以下步骤添加一个用于被击中发动机数量的新列:
- 
在定制报告查询组中突出显示撞击报告。
 - 
从 Power Query 功能区添加一个新的自定义列,并将其命名为被击中发动机数量。
 - 
添加以下 M 代码:
(if [Struck Engine 1] = true then 1 else 0) +(if [Struck Engine 2] = true then 1 else 0) +(if [Struck Engine 3] = true then 1 else 0) +(if [Struck Engine 4] = true then 1 else 0) - 
当你的屏幕看起来像以下截图时,点击确定:
 

图 5.10 – 新列用于计算每次野生动物撞击中发动机被击中的数量
现在创建另一个列来计算每次事件中被击中发动机的百分比。
- 
在定制报告查询组中突出显示撞击报告。
 - 
从 Power Query 功能区添加一个新的自定义列,并将其命名为发动机被击中百分比。
 - 
添加以下 M 代码(注意,这里使用
NULL而不是数字,因此需要进行转换):if [Number of Engines] = "NULL" then 0 elseValue.Divide([Number of Engines Struck],Number.From([Number of Engines])) 
您的打击报告查询现在应该看起来像这样:

图 5.11 – 新增的两列将传播到 Power BI 数据集和 ML 查询的层中
将被击中发动机的数量的数据类型更改为整数,将被击中发动机的百分比更改为百分比。
为吸入发动机数量、吸入发动机百分比、损坏发动机数量和损坏发动机百分比添加新列将遵循完全相同的模式:
- 
使用吸入发动机 1、吸入发动机 2、吸入发动机 3和吸入发动机 4来表示吸入发动机的数量和吸入发动机的百分比。
 - 
使用损坏发动机 1、损坏发动机 2、损坏发动机 3和损坏发动机 4来表示损坏发动机的数量和损坏发动机的百分比。
 
这是打击报告查询中所有六个新列的快照:

图 5.12 – 新增六列以分析被击中、吸入和损坏的发动机数量和百分比
现在您可以点击关闭并应用,并使用新列刷新数据集。
对于预测损坏页面,您添加一个新的矩阵视觉,其中发动机数量在行上,被击中发动机的百分比在列上,指示损坏百分比在值中。损坏的可能性似乎会根据总发动机数量和被击中发动机的数量而变化:

图 5.13 – 根据发动机总数和被击中发动机的百分比,损坏的可能性变化
您决定将所有这些新功能添加到TRUE表示已经观察到损坏。
使用 Power BI 中的关键影响因素视觉识别其他特征
Power BI 有一个内置的 AI 视觉称为关键影响因素,可以用来发现数据中的有趣模式。您现在将查看一些来自 FAA 野生动物打击数据的附加列,并探索它们如何影响损坏的可能性和动物的大小。
首先,复制预测损坏页面,并将复制的版本重命名为预测损坏关键影响因素。通过添加一个副本页面,您保留了筛选器面板中的筛选器。删除页面上的所有视觉元素。在可视化面板中,将关键影响因素视觉添加到页面。现在按照以下步骤操作:
- 
当关键影响因素视觉突出显示时,将指示损坏字段添加到分析中。
 - 
将飞行阶段、降水、天空和对飞行的影响字段添加到解释中。
 - 
将视觉上方的选择设置为
True。 
您会注意到许多来自这些字段的选项似乎与损坏相关,并且过滤器上下文得到保持:

图 5.14 – 不同字段选择与损坏结果相关
您甚至可以向页面添加额外的过滤器,并且过滤器选择将导致重新计算的关键影响因素视觉。您可以深入了解数据以及不同特征之间的关系。
由于特征发现,您将以下功能添加到机器学习查询中:
| 特征 | 预测损坏 | 预测大小 | 预测高度 | 
|---|---|---|---|
| 被击中数量 | 是 | 是 | 是 | 
| 飞机质量代码 | 是 | 是 | 是 | 
| 月份编号 | 是 | 已存在 | 是 | 
| 发动机数量 | 是 | 是 | 是 | 
| 被击中发动机数量 | 是 | 是 | 是 | 
| 被击中发动机百分比 | 是 | 是 | 是 | 
| 吞入发动机数量 | 是 | 是 | 是 | 
| 吞入发动机百分比 | 是 | 是 | 是 | 
| 损坏发动机数量 | 否 | 是 | 是 | 
| 发动机损坏百分比 | 否 | 是 | 是 | 
| 飞行阶段 | 是 | 是 | 是 | 
| 降水 | 是 | 是 | 是 | 
| 天空 | 是 | 是 | 是 | 
| 对飞行的影响 | 是 | 是 | 是 | 
图 5.15 – 要添加到 Power Query 中机器学习查询的功能
在发现了许多新的机器学习查询功能之后,您现在可以将它们添加到 Power Query 中!
向 Power Query 中的机器学习查询添加新功能
在 Power Query 中,您现在将添加本章讨论的新功能到机器学习查询中。查看列表,Date.Month([Incident Date]) M 代码用于自定义列。
从突出显示在组机器学习查询中的预测损坏开始,按照以下步骤操作:
- 
在应用步骤下双击移除其他列。
 - 
在图 5.16 中显示的表格中的每个功能都要添加。16*(包括需要转换为月份编号的事故日期)。
 
您的屏幕应该看起来像这样:

图 5.16 – 选择要添加到机器学习查询的列
- 
点击确定。
 - 
empty。 - 
在添加新的月份编号列之后,您可以删除事故 日期列。
 
重复这些步骤为预测大小和预测高度机器学习查询以及图 5.16 中的新功能。现在,您的机器学习查询正在变得更具鲁棒性,因为您有理由相信这些数据与 Power BI ML 结合使用时可能具有预测价值。
摘要
在本章中,你发现了新的功能并将它们添加到了你的 Power BI 报告的页面中。你还使用了 Power BI 的关键影响因素视觉工具来探索 FAA 野生动物撞击数据,以寻找有趣的关联。然后,你将这些新功能添加到了你的 预测损害、预测大小 和 预测高度 机器学习查询中。最后,你确保了机器学习查询已经清理完毕,并准备好用于 Power BI 机器学习。
在下一章中,你将继续使用 Power BI 中的不同类型功能,如 R 和 Python 视觉工具,来探索 FAA 野生动物撞击数据。在你完成它们并准备迁移到 Power BI 云服务时,新发现的功能将被添加到你的机器学习查询中。
第六章:使用 R 和 Python 可视化发现新特征
在本书的第五章中,你使用 Power BI Desktop 为你的查询发现了新的列和特征,这些特征将被迁移到 Power BI 云服务以训练和测试机器学习模型。在探索和发现数据的过程中,你还扩展了将用于向最终用户提供交互式数据探索的 Power BI 报告。
在将你的解决方案迁移到 Power BI 云服务之前,你将对 FAA 野生动物撞击数据进行最后一次检查,并寻找要添加到用于构建 Power BI 机器学习模型的机器学习查询中的额外特征。为了向分析报告添加一些多样化的功能,你将在 Power BI 中利用 R/Python 可视化。在本章结束时,你将准备好将你的解决方案发布到 Power BI 云服务。
技术要求
对于本章,你需要以下资源:
- 
Power BI Desktop 2023 年 4 月或更高版本(无需许可证)
 - 
来自 FAA 网站或 Packt GitHub 仓库的 FAA 野生动物撞击数据文件
 - 
在你的本地计算机上安装 R:
learn.microsoft.com/en-us/power-bi/create-reports/desktop-r-visuals - 
在你的本地计算机上安装 Python:
learn.microsoft.com/en-us/power-bi/connect-data/desktop-python-visuals 
使用 R 可视化探索数据
Power BI 具有运行 R 脚本并显示 R 可视化的功能。R 是一种强大的语言,通常被数据科学家用于统计和机器学习。你将需要按照learn.microsoft.com/en-us/power-bi/create-reports/desktop-r-visuals中的说明在你的本地计算机上安装 R,以便与 Power BI Desktop 一起使用。
有许多 R 可视化可以用于数据分析以及为机器学习模型寻找新的特征。FAA 野生动物撞击数据包含与飞机被击中的部分、损坏位置、动物被吸入发动机等相关的一些真/假标志。这些值应该非常适合 R 相关性图,它将以图形方式显示倾向于正相关或负相关的标志。让我们试试吧!
你将遵循三个步骤来寻找新的特征:
- 
准备数据以用于 R 相关性图。
 - 
构建 R 相关性图可视化并将其添加到你的报告中。
 - 
为你的 Power BI 机器学习查询识别新的特征。
 
注意,如果您不想将所有这些 Power BI 报告页面作为您通过本书的旅程的一部分来构建,则可在以下链接处找到完成后的 PBIT 模板第六章(包括 R 和 Python 组件):github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-06。
准备 R 相关图的数据
将真/假列转换为整数列,其中1代表真,0代表假,这是为 R 相关图准备数据所必需的。让我们确定将在精选报告查询组的打击报告查询中使用的列:
| 吞入其他 | 指示损伤 | 随机撞击 | 随机损坏 | 
|---|---|---|---|
| 撞击挡风玻璃 | 损坏挡风玻璃 | 撞击机头 | 损坏机头 | 
| 撞击引擎 1 | 损坏引擎 1 | 吞入引擎 1 | 撞击引擎 2 | 
| 损坏引擎 2 | 吞入引擎 2 | 撞击引擎 3 | 损坏引擎 3 | 
| 吞入引擎 3 | 撞击引擎 4 | 损坏引擎 4 | 吞入引擎 4 | 
| 撞击螺旋桨 | 损坏螺旋桨 | 撞击机翼或旋翼 | 损坏机翼或旋翼 | 
| 撞击机身 | 损坏机身 | 撞击起落架 | 损坏起落架 | 
| 尾部撞击 | 尾部损坏 | 灯光撞击 | 灯光损坏 | 
| 撞击其他 | 损坏其他 | 
图 6.1 – 与野生动物撞击相关的真/假列
如果您要更改列的数据类型,并且该列正在 Power BI 中使用,您可能会破坏报告或 DAX 表达式。通常,除非绝对必要,否则避免更改数据类型是一种最佳实践。报告用户通常也会更了解报告中的真或假选项,而不是 1 或 0。继续创建每个整数数据类型的列的新版本。在未来的某个时候,您可以根据用例决定将哪个版本包含在每个数据集或 ML 查询中。对图 6.1中的列执行以下步骤:
- 
在精选报告查询组中,复制所有这些列。
 - 
将新列重命名为以
Int结尾,以便指示损伤 – 复制变为指示 损伤 Int。 - 
将新列的数据类型更改为
整数。 - 
在 Power Query 中点击关闭并应用以更新 Power BI 数据集。
 
这些标志主要与损伤和撞击位置相关,但也可以用于预测动物的高度和大小。例如,起落架可能不会在超过一定高度的地方被撞击,因为它只在起飞和降落时放下。如果飞机的多个部分被撞击,可能与一群鸟与一只单独的动物相关。
现在您可以返回 Power BI 报告并构建 R 相关图视觉!
构建 R 相关性图可视化并将其添加到您的报告中
根据本章前面提到的技术要求,FAA 野生动物撞击数据中的真/假列的整数版本现在应可在您的 Power BI 数据集中使用。同时,您应该在运行 Power BI Desktop 的本地计算机上安装 R:
- 
在 Power BI Desktop 中选择 R 脚本可视化,并将其添加到新页面的画布上。
 - 
在页面上设置过滤器以匹配“飞机”和“大于或等于 2014”。将整数指示损坏列添加到值。
 

图 6.2 – Power BI 中的 R 脚本可视化
- 当 R 可视化被突出显示时,页面底部将显示一个脚本窗口。添加一些 R 代码以激活 R 相关性图:
 

图 6.3 – 添加 R 相关性图代码
这是添加到可视化中的代码:
require("corrplot")
library(corrplot)
M <- cor(dataset)
corrplot(M, tl.cex=0.6, tl.srt = 45, tl.col = "black")
- 现在将您创建的新整数列以及添加的原始字段添加到值。
 

图 6.4 – 使用真/假整数列的 R 相关性图
图 6.5 中的图被扩展。

图 6.5 – 使用真/假整数列的 R 相关性图
图 6.5 中列的文本太小,难以阅读,但表示所有转换为整数值的 TRUE/FALSE 指示器。GitHub 仓库中 第六章 的 PBIT 文件允许您查看这些值。

图 6.6 – 使用真/假整数列的 R 相关性图代码。
现在,您可以使用 R 相关性图深入数据!
为您的 Power BI ML 查询识别新特征
R 相关性图通过大小和颜色强度增加的圆圈显示正负相关性水平。蓝色表示正相关(值上下波动一致),白色表示无相关性(值上下波动随机相关),红色表示负相关(一个值上升时另一个值下降)。
查看 图 6.5 中 R 相关性图的初始渲染,除了自我匹配和几个浅蓝色圆圈表示不同的相关损坏标志外,没有很多蓝色或红色圆圈。添加一些过滤器到页面允许您探索数据子集中的相关性。每次您选择新的过滤器时,R 相关性图都会重新计算。例如,图 6.7 在数据集中选择了以下过滤器:
- 
大于或等于 2014 - 
飞机 - 
大 - 
3、4或5 - 
空白、无或其他 - 
1或2-10 
您可以在以下屏幕截图中看到这一点:

图 6.7 – 当选择过滤器时,R 相关性图将被重新处理。
图 6.7 中的列文本太小,难以阅读,但表示所有转换为整数值的 True/False 指示器。GitHub 仓库中第六章 的 PBIT 文件允许您查看这些值。
在过滤到数据子集后,R 相关性图上开始出现相关性。扩展可视化并关注指示的损坏字段的相关性。最强的相关性是对于也指示某种损坏的标志。然而,对于其他标志也有一些较弱的正相关相关性:

图 6.8 – 显示了指示损坏的几个弱正相关相关性
在使用 R 相关性图探索额外的过滤器组合后,以下功能将被添加到 ML 查询中:
| 特征 | 预测损坏 | 预测大小 | 预测高度 | 
|---|---|---|---|
| 吞入其他 | 是 | 是 | 是 | 
| 击中挡风玻璃 | 是 | 是 | 是 | 
| 击中引擎 1 | 是 | 是 | 是 | 
| 损坏的引擎 2 | 否 | 是 | 是 | 
| 吞入的引擎 3 | 是 | 是 | 是 | 
| 击中螺旋桨 | 是 | 是 | 是 | 
| 击中机身 | 是 | 是 | 是 | 
| 击中尾部 | 是 | 是 | 是 | 
| 击中其他 | 是 | 是 | 是 | 
| 损坏的挡风玻璃 | 否 | 是 | 是 | 
| 损坏的引擎 1 | 否 | 是 | 是 | 
| 吞入的引擎 2 | 是 | 是 | 是 | 
| 击中引擎 4 | 是 | 是 | 是 | 
| 损坏的螺旋桨 | 否 | 是 | 是 | 
| 损坏的机身 | 否 | 是 | 是 | 
| 损坏的尾部 | 否 | 是 | 是 | 
| 损坏的其他 | 否 | 是 | 是 | 
| 击中的随机 | 是 | 是 | 是 | 
| 击中机头 | 是 | 是 | 是 | 
| 吞入的引擎 1 | 是 | 是 | 是 | 
| 击中引擎 3 | 是 | 是 | 是 | 
| 损坏的引擎 4 | 否 | 是 | 是 | 
| 击中机翼或旋翼 | 是 | 是 | 是 | 
| 击中起落架 | 是 | 是 | 是 | 
| 击中灯光 | 是 | 是 | 是 | 
| 损坏的随机 | 否 | 是 | 是 | 
| 损坏的机头 | 否 | 是 | 是 | 
| 击中引擎 2 | 是 | 是 | 是 | 
| 损坏的引擎 3 | 否 | 是 | 是 | 
| 吞入的引擎 4 | 是 | 是 | 是 | 
| 损坏的机翼或旋翼 | 否 | 是 | 是 | 
| 损坏的起落架 | 否 | 是 | 是 | 
| 损坏的灯光 | 否 | 是 | 是 | 
图 6.9 – 将添加到 ML 查询中的功能
您已经发现了许多用于 ML 查询的特征,但您还没有完成!您还可以使用 Python 可视化在 Power BI 中探索数据,这是您的下一个任务。
使用 Python 可视化探索数据
除了 R 语言,Power BI 还支持 Python 查询和可视化。Python 是一种非常流行的语言,也是数据科学家经常使用的语言。根据本章开头的需求,你需要在本地机器上安装 Python 以用于 Power BI 桌面:learn.microsoft.com/en-us/power-bi/connect-data/desktop-python-visuals。
在 FAA 野生动物撞击数据中,高度和速度都是可以记录在报告中的字段。高度是事件发生时从地面测量的英尺数,而速度是飞机被野生动物撞击时的速度。你将使用 Python 直方图查看这两个指标,以便在应用不同过滤器时比较这些值的分布。
你将遵循以下步骤:
- 
准备 Python 直方图的数据。
 - 
构建 Python 直方图可视化并将其添加到报告中。
 - 
识别你的 Power BI ML 查询的新特征。
 
让我们继续。
准备 Python 直方图的数据
高度和速度都是包含空值的整数列。对于数值列中的空值,可能会有些棘手,因为你不知道它是零还是未知。对于报告页面,你需要为每个可视化过滤掉空值。否则,整数列就准备好用于你的 Python 直方图数据可视化了。
构建 Python 直方图可视化并将其添加到报告中
接下来,我们需要构建可视化:
- 
在 Power BI 桌面中,选择 Python 脚本可视化,并将其添加到新页面的画布上。
 - 
在页面上设置过滤器以匹配
Airplane和大于或等于 2014。将整数速度列添加到值: 

图 6.10 – 值下速度的 Python 可视化
- 当 Python 可视化被突出显示时,页面的底部将出现一个脚本窗口。添加一些 Python 代码以激活标题为
Speed for Incidentswith Damage的 Python 直方图: 

图 6.11– 在 Power BI 中渲染直方图的 Python 代码
这就是如图图 6.11所示的脚本编辑器中输入的代码:
import matplotlib.pyplot as plt
dataset.plot(kind='hist',y='Speed')
plt.xlabel("Speed")
plt.ylabel("Incidents")
plt.title("Speed for Incidents with Damage")
plt.show()
- 对于这个可视化的过滤器,设置为
True和is not (Blank)。现在你可以渲染 Python 直方图可视化: 

图 6.12 – 以速度为单位的损坏事件 Python 直方图
现在,你可以使用 Python 直方图可视化来分析数据的分布了!
识别 Power BI ML 查询的新特征
让我们看看这个可视化:
- 
复制并粘贴该视觉图表,并将标题重命名为
Speed for Incidents without Damage。以下是 Python 代码,可以像在图 6.10中一样输入:import matplotlib.pyplot as pltdataset.plot(kind='hist',y='Speed')plt.xlabel("Speed")plt.ylabel("Incidents")plt.title("Speed for Incidents without Damage")plt.show() - 
将
False更改为,您就可以比较这两个视觉图表: 

图 6.13 – 比较有损和无损事故的速度
注意,有一些无损伤的事故位于 1200 节的桶中,这进一步将直方图向左倾斜。
- 
过滤页面以创建可比较的直方图,
小于 700。还可以在页面上添加一些过滤器(您想探索的任何内容),例如大小、对飞行的影响和月份名称。 - 
接下来,复制并粘贴两个图表,并将
Speed替换为Height。过滤整个页面,使Height不为空。以下是报告损坏时高度的直方图的 Python 代码:import matplotlib.pyplot as pltdataset.plot(kind='hist',y='Height',color='black')plt.xlabel("Height")plt.ylabel("Incidents")plt.title("Height for Incidents with Damage")plt.show() - 
这里是用于无损伤直方图的 Python 脚本:
import matplotlib.pyplot as pltdataset.plot(kind='hist',y='Height',color='black')plt.xlabel("Height")plt.ylabel("Incidents")plt.title("Height for Incidents without Damage")plt.show() 
您现在可以以许多不同的过滤设置交互式地查看高度和速度的分布:

图 6.14 – 高度和速度的交互式 Python 直方图
当报告损坏时,高度和速度似乎都会发生变化。通过使用 Python 直方图进行探索,您将添加高度和速度到 ML 查询中。使用 R 和 Python 视觉图表,您已验证了众多可用于在 Power BI 中训练和测试您的 ML 模型的新特征。
向 ML 查询添加新功能
到目前为止,在本章中,您已经确定了要添加到 Power BI ML 模型的预测损坏、预测大小和预测高度ML 查询中的许多新特征。正如您在第五章第三部分添加新特征到 ML 查询中中所做的那样,您可以将这些特征添加到 Power Query 中的 ML 查询中:
- 
双击应用步骤下的移除其他列。
 - 
在图 6.9中添加每个特征(也包括速度和高度)。
 
在添加特征时,您的屏幕应该看起来像这样:

图 6.15 – 选择要添加到 ML 查询中的列
在添加新特征后,您可能会注意到empty。例如,对于速度,当以 5 节或 500 节的速度撞击大型动物时,预期的撞击影响应该非常不同。空值可能代表许多不同的场景,例如缺失数据或未知速度。当您在 Power BI 中构建和测试 ML 模型时,您将评估几种不同的处理这些缺失值的方法。
你解决方案的未来迭代可能非常可能包含你发现的额外功能。目前,你已经识别并添加了许多功能到为机器学习(ML)架构的查询中,你现在准备好进入 Power BI 云服务之旅了!
摘要
在本章中,你将 R 和 Python 可视化添加到你的 Power BI 报告中,以发现 FAA 野生动物撞击数据中的新功能。使用 R 相关性图,你能够交互式地切割和剖析几个事件标志值以确定正负相关性。通过 Python 直方图,你研究了速度和高度对你计划中的 Power BI ML 模型的结果的影响。最后,你向你的预测损害、预测大小和预测高度ML 查询中添加了新功能,这些功能将在 Power BI 中的 ML 中使用。
在下一章中,你将开始将内容迁移到 Power BI 云服务。在迁移 Power BI 数据集和报告之后,你将接着迁移 Power Query 脚本到数据流中,以便与 Power BI ML 一起使用。
第七章:将数据摄取和转换组件部署到 Power BI 云服务
在第六章中,你完成了 ML 查询的基本设计,这些查询将被迁移到 Power BI 云服务以训练和测试 ML 模型。你专注于在 Power BI 桌面中使用 R 和 Python 可视化来可视化和评估这些 ML 查询的潜在特征。
本章将是一次探索 Power BI 云服务的冒险。你将迁移 Power Query 中的工作,并将你的 Power BI 数据集和报告发布到 Power BI 工作区。移动这些查询的过程是端到端项目、与本书并行运行的研讨会中重复但必要的步骤。经验丰富的 Power BI 开发者可能可以通过剪切和粘贴 GitHub 中的 M 查询快速完成本章。到本章结束时,你的内容将完全迁移到 Power BI 云服务,并准备好进行 Power BI ML。
技术要求
对于本章,你需要以下资源:
- 
Power BI 桌面 2023 年 4 月或更高版本(无需许可证)
 - 
来自 FAA 网站或 Packt GitHub 网站的 FAA 野生动物撞击数据文件
 - 
Power BI Pro 许可证
 - 
以下 Power BI 许可选项之一用于访问 Power BI 数据流:
- 
Power BI Premium
 - 
Power BI Premium Per User
 
 - 
 - 
将数据导入 Power BI 云服务的以下选项之一:
- 
Microsoft OneDrive(与 Power BI 云服务连接)
 - 
Microsoft Access 和 Power BI 网关
 - 
Azure 数据湖(与 Power BI 云服务连接)
 
 - 
 
创建 Power BI 工作区
在我们开始将内容导入 Power BI 云服务之前,你需要为项目创建一个工作区。工作区是在 Power BI 云服务中组织、保护和治理内容的一种方式。对于这个项目,你需要一个支持使用数据流和 ML 的工作区,这在撰写本书时需要Power BI Premium与Pro许可证或Premium Per User许可证。如果你没有这些许可证中的任何一个,你仍然可以为了学习目的跟随本书,并探索 Packt GitHub 仓库中的代码示例。
工作区可以扩展以包括与安全功能、信息保护、部署管道用于生命周期管理等功能集成。本书将仅涵盖如何创建基本工作区,因为有关工作区的详细文档可在网上找到。创建工作区的教程可在learn.microsoft.com/en-us/power-bi/collaborate-share/service-create-the-new-workspaces找到。
按照以下步骤在 Power BI 中创建新的工作区:
- 
通过访问
app.powerbi.com/登录 Power BI 云服务。 - 
确保您拥有 Pro 或 Premium Per User 许可证:
powerbi.microsoft.com/en-us/pricing/。 - 
您还需要确保您的 Power BI 管理员已授予您创建 workspace 的权限。
 - 
从左侧垂直窗格中选择 Workspaces | + New Workspace。
 - 
为您的 workspace 选择一个名称,描述它,然后选择 Premium Per User 或 Premium Per Capacity 作为 许可模式 选项。
 
现在,您已经准备好使用支持报告、数据集、数据流和机器学习的 Power BI workspace 来进行您的 FAA 野生动物撞击数据项目!
将 Power BI Desktop 数据集和报告发布到 Power BI 云服务
接下来,您必须将您的数据集和报告从 Power BI Desktop 导入到 Power BI 云服务中。一旦发布到云服务,您将能够与其他项目利益相关者共享分析报告。如果您想在移动中深入数据,您还可以在 Power BI 移动应用程序中查看报告。
到目前为止,您所做的工作是在您的本地机器上使用 Power BI Desktop。您有两个选项将此内容迁移到 Power BI 云服务:
- 
从 Power BI Desktop 发布:
learn.microsoft.com/en-us/power-bi/create-reports/desktop-upload-desktop-files - 
从 Power BI 服务导入
.pbix文件 
这两种选项同样简单。在本教程中,您将从 Power BI 服务导入 .pbix 文件。
从您新创建的 Power BI workspace 中,选择您创建的 .pbix 文件。如果您不使用 OneDrive,您也可以从其他文件位置上传。一旦上传 .pbix 文件,您将看到数据集已从报告中分离出来,并且它们现在是两个独立的实体。点击报告后,您可以验证所有页面现在都可以在 Power BI 云服务中浏览:

图 7.1 – 现在可以在 Power BI 云服务中浏览 FAA 野生动物撞击报告
最终,您可能需要重新访问此报告,并允许它使用新数据刷新。由于您正在为您的机器学习(ML)工作使用 FAA 野生动物撞击数据的快照,您不希望更改此报告中的数据。此报告中的数据需要反映您在项目的初始训练和测试阶段用于训练 ML 模型的数据。这样,您就可以重新访问此报告来探索或验证用于 ML 的确切数据。
创建与源数据连接的 Power BI 数据流
在前几章中,Power BI Desktop 的 Power Query 工作是从您本地的数据源连接的。Power BI 数据流是一个非常类似 Power Query 的工具,但连接是从 Power BI 云服务发生的。在创建您的数据流时,您需要考虑与数据源的连接。在这本书的早期,您确定了 FAA 野生动物撞击数据库的数据源如下:
- 
wildlife.accdb:所有历史 FAA 野生动物撞击报告。此文件是从 FAA 网站下载的 ZIP 文件格式的 Access 数据库。 - 
read_me.xls:关于Database.accdb数据库文件中数据的描述性信息。此文件是下载在 Access 数据库相同 ZIP 文件中的 Excel 文件。该文件在 Packt GitHub 存储库中已更改为.xlsx扩展名,可在github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-01文件夹中找到。 - 
日期:在这个项目中,日期表将使用 Power Query 和 Power BI 数据流中的自定义 M 代码创建。该代码命名为12 Date Table .M,可在 Packt GitHub 网站上的github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-07文件夹中找到。 
当在 Power BI Desktop 中使用 Power Query 时,您创建了查询组来组织您的项目。原始数据、精炼报告查询、精炼数据集表和机器学习查询是基于查询预期用途的逻辑分组。使用 Power BI 数据流,您可以将这些分组拆分成更小的查询组,以便您可以监控它们、解决问题,并保持逻辑块的大小。您的数据流将具有以下架构:

图 7.2 – Power Query 的逻辑将迁移到四个 Power BI 数据流
您将首先创建数据流 1,它将引用数据带入 Power BI 云服务。
数据流 1 – 从 read_me.xls 文件中引用数据
您必须使用read_me.xlsx文件中的数据开始您的 Power BI 数据流冒险,该文件包含有关 FAA 野生动物撞击数据库报告数据的描述性信息。首先,您需要决定如何连接到read_me.xlsx文件。您有很多选择,包括但不限于以下选项:
- 
将文件存储在 OneDrive 中,并从 Power BI 连接
 - 
将文件存储在 SharePoint Online 中,并从 Power BI 连接
 - 
使用 Power BI 网关从您的本地计算机或另一个存储位置连接到文件
 - 
将文件存储在 Azure 数据湖中,并从 Power BI 连接。
 
您可以通过简单的在线搜索找到关于所有这些方法的详细文档。对于本书中的示例,我们将使用 OneDrive,因为它简单且配置要求最小。按照以下步骤开始:
- 
从您新创建的 Power BI 工作区,从功能区选择新建 | 数据流。
 - 
选择定义新表 | 添加 新表。
 - 
选择Excel 工作簿。
 - 
选择
read_me.xlsx文件。此文件是从 Packt GitHub 网站上的以下文件夹位置复制的:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-01。 - 
点击选择。
 - 
点击下一步以继续到表选择。
 - 
选择
Aircraft Type、Engine Codes和Engine Position。 - 
选择转换数据。
 
您的浏览器应如下所示:

图 7.3 – 显示 read_me.xls 文件中的三个数据流
现在,您可以从 Power Query 迁移逻辑到数据流。而不是复制本书前几章中的步骤,可以从 Packt GitHub 网站复制可粘贴到高级编辑器区域或 Power Query 或数据流的M 脚本。M 脚本是由 Power Query SaaS 界面创建的代码,可以粘贴到高级编辑器区域或 Power Query 或数据流中。
您可以将这些脚本剪切粘贴到数据流中以节省时间。以下是对第一个查询Engine Codes的示例:
- 
从 GitHub 存储库文件夹
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-07复制01 Raw Data - Engine Codes.M M 代码。 - 
在您新数据流中的Engine Codes查询上右键单击并选择高级编辑器。
 - 
将 M 代码粘贴到 M 代码中的
YOUR_ONEDRIVE_URL以反映您的 OneDrive URL。高级编辑器区域应如下所示: 

图 7.4 – 将代码粘贴到您的数据流查询中
为了清晰起见,图 7.4 也已放大并呈现为两张图片。图 7.5 显示了代码的左侧:

图 7.5 – 将代码粘贴到您的数据流查询中
图 7.6 显示了代码的右侧。

图 7.6 – 复制到你的数据流查询中的代码
- 点击确定;你的查询应该看起来如下:
 

图 7.7 – 应用步骤的发动机代码查询
注意,这些额外的步骤对数据格式做了一些修改。由于 Excel 文件中的一些格式问题,这些清理步骤对于“发动机代码信息”查询是独特的。在一个完美的架构中,原始数据查询不应该有任何转换或格式更改。由于你在现实世界中处理真实数据,在这个特定情况下,这种妥协是必要的。
对于“数据类型”的文本查询。在同一个 GitHub 文件夹中,你也可以获取02 原始数据 - 飞机类型.M和03 原始数据 – 发动机 位置.M查询的 M 代码。
现在,你可以添加 GitHub 仓库中Chapter-07文件夹的查询:
- 
04 原始数据 – 发动机代码添加数据.M - 
05 原始数据 – 飞机类型添加数据.M - 
06 原始数据 – 发动机位置添加数据.M 
- 在“原始数据”中右键点击,并添加你创建的所有六个查询。现在在你的浏览器中,你的数据流应该看起来像这样:
 

图 7.8 – 数据流中原始数据组的查询
- 接下来,在数据流中创建一个名为“精选报告查询”的新组。你需要为此组添加三个新的查询,分别是“飞机类型信息”、“发动机代码信息”和“发动机位置信息”。要在数据流中这样做,请选择获取数据 | 空白查询。将相应的 M 代码粘贴到新空白查询的连接到数据源窗口中。M 代码可以在 Packt GitHub 文件夹中找到,网址为
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-07。以下示例显示了飞机 类型信息的 M 代码: 

图 7.9 – 飞机类型信息的 M 代码
- 选择下一步后,验证数据流查询是否正常工作,并看起来如下:
 

图 7.10 – 精选报告查询组中的新飞机类型信息查询
对于“发动机代码信息”和“发动机位置信息”查询,重复相同的步骤,并确保所有三个查询都在新的“精选报告查询”组中。这三个查询的 M 代码在 Packt GitHub 网站上命名为以下名称:
- 
07 精选数据 - 飞机类型信息.M - 
08 精选数据 – 发动机代码信息.M - 
09 精选数据 - 发动机位置信息.M 
完成后,保存并关闭您的数据流,并将其命名为 参考数据。您的第一个数据流已完成!
数据流 2 – 从数据库.accdb 文件中获取野生动物撞击数据
现在,您可以继续进行第二个数据流,这将引入 FAA 野生动物撞击数据库的报告级数据。database.accdb 文件包含来自 FAA 野生动物撞击数据库的事故级数据。该文件采用 Microsoft Access 数据库格式。有关连接到 Access 数据库的官方文档,请参阅 learn.microsoft.com/en-us/power-query/connectors/accessdatabase。您有几个选项,包括但不限于以下:
- 
使用 Power BI 网关连接到 Access 文件。
 - 
使用 ELT/ETL 工具,如 Azure Data Factory,从 Access 文件中提取数据并将其放入数据湖或数据库:
learn.microsoft.com/en-us/azure/data-factory/connector-microsoft-access?tabs=data-factory。 - 
从 Access 数据库导出数据至平面文件,并使用提取的文件作为源。
 
对于本书,数据将从 Access 导出至平面文本文件。如果您没有 Microsoft Access,您也可以从 Packt GitHub 网站下载提取文件,网址为 github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-07。
首先,您必须从 Access 提取数据至文本文件:
- 
使用 Microsoft Access 打开
wildlife.accdb文件。 - 
右键点击 STRIKE_REPORTS 表格并选择 导出 | 文本文件。
 - 
选择存储文本文件的路径,例如 OneDrive。
 
下面是导出过程的截图:

图 7.11 – 从 Microsoft Access 导出至文本文件
现在,您可以按照为参考数据创建数据流时采取的类似步骤创建一个名为 Strike Reports 的数据流:
- 
从您新创建的 Power BI 工作区中,从功能区选择 新建 | 数据流。
 - 
选择 定义新表 | 添加 新表。
 - 
选择 文本/CSV。
 - 
选择
STRIKE_REPORTS.txt文件。 - 
点击 选择。
 - 
点击 下一步 进入下一屏幕。
 - 
选择 转换数据。将表格带入编辑视图。
 - 
根据源的不同,数据流可能会自动更改一些数据类型。对于原始数据层,通过移除 更改列类型 步骤来保持文本文件未格式化:
 

图 7.12 – 在原始数据层中不需要自动更改列类型
- 接下来,在数据流中创建两个新的组,分别为原始数据和精选报告查询。将您创建的新查询命名为打击报告并将其移动到原始 数据组。
 
精选版的打击报告包含与引擎代码信息查询的连接,以便可以向打击报告添加一个主键值,该值引用引擎代码信息。要从您的新数据流中引用引擎代码信息,请按照以下步骤操作:
- 
点击获取数据 | 数据流。
 - 
点击下一步。
 - 
展开工作区。
 - 
展开您的 Power BI 工作区。
 - 
展开参考数据数据流。
 - 
选择引擎代码信息并点击创建。
 - 
将引擎代码信息查询移动到精选报告查询,然后右键单击它并取消选择加载。您的浏览器屏幕应如下所示:
 

图 7.13 – 引擎代码信息可以在数据流中引用
现在,您可以添加针对精选版打击报告的 M 代码。该 M 代码可在 Packt GitHub 网站上找到,并且也已包含在此处:
- 
选择获取数据 | 空白查询。
 - 
将文件夹
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-07中的11 Curated Data - Strike Reports Info.MM 代码粘贴进来,然后点击下一步。 - 
将查询重命名为打击报告精选。
 - 
将其移动到精选报告 查询组。
 
一旦您验证了所有数据都如 Power BI 桌面版中所示,您就可以保存并关闭数据流,将其命名为打击报告,然后刷新它!现在您已准备好继续进行第三个数据流,它将是一个日期表。
数据流 3 – 日期表
从个别项目的角度来看,为日期表创建单独的数据流可能看似不必要,但它将允许您在其他未来的项目中重用日期表。按照以下步骤创建一个从 1990 年 1 月 1 日(FAA 野生动物打击数据的起始年份)开始,运行至 2024 年的日期表数据流:
- 
从您新创建的 Power BI 工作区,从功能区选择新建 | 数据流。
 - 
选择定义新表 | 添加 新表。
 - 
选择空白查询。
 - 
将可在 Packt GitHub 网站
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-07找到的12 Date Table.M M 代码粘贴进来。 - 
点击下一步。
 - 
重命名查询日期。
 - 
点击保存并 关闭。
 - 
将您的新数据流命名为日期表。
 - 
刷新数据流。
 
现在,您已经准备好将您为第四个数据流创建的所有内容整合在一起,该数据流将包含用于填充 Power BI 数据集的数据!
数据流 4 – 用于填充 Power BI 数据集的数据
您的第四个数据流将结合您创建的所有查询,并将它们组织在一个地方,以便可以与 Power BI 数据集一起使用。您不会对源表进行任何转换,但拥有一个独立的数据流让您在需要时可以灵活地添加新的转换,而不会影响下一章中将用于填充 ML 查询的查询。创建此数据流应该是直接的:
- 
从您新创建的 Power BI 工作空间中,从功能区选择新建 | 数据流。
 - 
选择定义新表 | 从其他数据流链接表。
 - 
登录并点击下一步。
 - 
展开您的空间。
 - 
展开日期表数据流并检查日期。
 - 
展开撞击报告数据流并检查撞击报告整理。
 - 
展开参考数据数据流,并检查飞机类型信息、发动机代码信息和发动机位置信息。
 - 
点击转换数据。
 - 
将查询重命名为日期、撞击报告、飞机类型、发动机代码和发动机位置。
 - 
选择保存并关闭。
 - 
将数据流命名为FAA 野生动物撞击****数据集表。
 - 
保存并刷新数据流。
 
通过这样,您已经将主要的数据提取和转换查询从 Power BI Desktop 迁移到 Power BI 服务中的数据流。在本项目的后期,您可以回过头来将 Power BI 数据集重定向到新的 FAA 野生动物撞击数据集表。现在,您已经有了开始构建 Power BI 数据流中的 ML 查询所需的一切。这些查询将用于训练和测试您的 Power BI ML 模型。
为 ML 查询添加数据流
现在,您已经从 FAA 野生动物撞击数据库中提取、清理和转换了数据,您可以构建针对 Power BI ML 模型的专用查询。在您开始之前,请注意,Power BI ML 是 Azure AutoML 的一种版本,它已被构建到 Power BI 中作为 SaaS 提供服务。使用高级工具的数据科学团队通常会应用数据转换,例如填充缺失值、规范化数值范围以及在模型中对特征进行加权。本书不会涵盖特征的先进转换,因为 AutoML 具有特征化能力,可以优化数据以用于机器学习。您将要创建的查询可能可以通过高级特征化技术进行改进,但在这个项目中,我们将保持简单,并让 Power BI ML 中的 AutoML 特征化能力处理一些高级特征转换。
将预测损坏 ML 查询添加到数据流
现在,您将创建一个包含 ML 查询逻辑的第五个数据流。扩展后的架构将如下所示:

图 7.14 – 将 ML 查询添加到 Power BI 数据流
您将首先将 Power Query 中创建的预测损坏 ML 查询迁移到新的数据流中:
- 
从您新创建的 Power BI 工作区,从功能区选择新建 | 数据流。
 - 
选择定义新表 | 链接来自其他数据流中的表 | 添加链接表**。
 - 
登录并点击下一步。
 - 
展开您的 workspace。
 - 
展开打击报告数据流并检查打击报告精选。
 - 
点击转换数据。
 - 
创建一个名为源的组,并将打击报告精选移动到该组中。
 - 
右键点击打击报告精选并取消选择启用加载。
 
接下来,您必须添加一个使用打击报告精选构建的预测损坏新查询:
- 
选择获取数据 | 空白查询。
 - 
粘贴13 Predict Damage.M M 代码。此代码可在 Packt GitHub 网站上找到:
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-07。 - 
点击下一步。
 - 
将查询重命名为预测损坏。
 - 
创建一个名为ML 查询的新组,并将预测损坏移动到该组中。
 
您的数据流现在应如下所示:

图 7.15 – 将预测损坏查询添加到 Power BI 数据流
在您继续下一个查询之前,保存并处理您的数据流以确保您不会丢失工作。
- 
点击保存 & 关闭。
 - 
将您的新数据流命名为ML 查询。
 - 
刷新数据流。
 
现在,您已准备好将另一个 ML 查询添加到数据流中!
将预测大小 ML 查询添加到数据流
在 Power Query for Power BI 中创建的预测大小ML 查询也可以添加到您创建的ML 查询数据流中。打开数据流的编辑表格视图,按照以下步骤操作:
- 
选择获取数据 | 空白查询。
 - 
粘贴14 Predict Size.M M 代码。此代码可在预测大小查询的 Packt GitHub 网站上找到:
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-07。 - 
点击下一步。
 - 
将查询重命名为预测大小。
 - 
将预测大小移动到ML 查询组。
 
一旦您已验证数据预览正确,您可以保存 & 关闭数据流以确保您不会丢失工作。现在,您已准备好添加第三个用于预测高度的 ML 查询!
将预测高度 ML 查询添加到数据流
最后,您必须将一个用于预测高度的查询添加到 ML 查询数据流中。该查询可以像其他两个查询一样添加:
- 
选择获取数据 | 空白查询。
 - 
粘贴15 Predict Height.M M 代码。这个代码可以在 Packt GitHub 网站上找到,用于预测身高查询:
github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-07。 - 
点击下一步。
 - 
重命名查询预测身高。
 - 
将预测身高移动到ML 查询组。
 
一旦你的查询被添加,你的数据流在你的浏览器中应该看起来如下:

图 7.16 – 所有三个 ML 查询已添加到数据流中
现在,你可以保存并关闭你的数据流,然后在 Power BI 云服务中刷新它。这样,你就准备好继续学习 Power BI 中的 ML 了!
摘要
在本章中,你将查询从 Power BI 桌面 Power Query 迁移到 Power BI 云服务中的数据流。这些查询摄取、准备并创建为你的 Power BI 数据集设计的表。然后,你将你的 ML 查询从 Power BI 桌面 Power Query 迁移到 Power BI 云服务中的数据流。这样做,你创建了一个新的数据流,该数据流由你在上一章中创建的数据流填充。新的 ML 查询数据流已保存在你的 Power BI 工作区中,并进行了刷新。
在第八章中,你将开始使用云中的 Power BI ML。你将使用在这里创建的三个 ML 查询来构建和测试 Power BI 中的二进制预测、分类和回归 ML 模型。
第三部分:Power BI 中的机器学习
在这部分,你将在 Power BI 中构建一个 ML 模型,评估该模型,然后配置它以与新数据和更新后的数据一起工作。
这个过程将在以下章节中介绍:
- 
第八章,使用 Power BI 构建机器学习模型
 - 
第九章,评估训练和测试的 ML 模型
 - 
第十章,迭代 Power BI 机器学习模型
 - 
第十一章,应用 Power BI 机器学习模型
 
第八章:使用 Power BI 构建机器学习模型
在本书的第七章中,你在 Power BI 数据流中构建了三个查询,这些查询将在 Power BI 中用于机器学习。FAA 野生动物撞击数据是这些数据的来源,你将使用这些数据来构建你的 Power BI 机器学习模型。这些查询是与飞机撞击野生动物事件报告相关的特征集。
在本章中,你将使用在第七章中创建的查询构建和训练机器学习模型。在第一章中,你确定将创建一个二进制预测模型来预测是否发生了损坏,一个用于预测野生动物大小的通用分类模型,以及一个回归模型来预测与造成损坏的野生动物撞击相关的高度。在本章结束时,你将准备好评估你构建的机器学习模型的结果。我们将在下一章中这样做。
技术要求
你需要以下内容来完成本章:
- 
来自 FAA 网站或 Packt GitHub 网站的 FAA 野生动物撞击数据文件
 - 
Power BI Pro 许可证
 - 
以下任一 Power BI 许可证选项用于访问 Power BI 数据流:
- 
Power BI Premium
 - 
Power BI Premium 按用户计费
 
 - 
 - 
将数据导入 Power BI 云服务的以下任一选项:
- 
微软 OneDrive(与 Power BI 云服务连接)
 - 
微软 Access 和 Power BI 网关
 - 
Azure Data Lake(与 Power BI 云服务连接)
 
 - 
 
在 Power BI 中构建和训练二进制预测机器学习模型
你终于准备好在 Power BI 中构建和训练你的第一个机器学习模型了!我们将从一个二进制预测模型开始,该模型将预测野生动物撞击飞机时是否发生了损坏。如第一章中所述,二进制预测模型将对包含预测特征的列的给定数据行进行是/否的预测。你在第七章中构建的查询位于你的ML Queries数据流中,并命名为Predict Damage。
你将按照以下步骤构建你的预测模型:
- 
通过选择新建 | 数据流在你的 Power BI 工作区中创建一个新的数据流。
 - 
选择从其他数据流链接表。
 - 
确保你已登录到你的组织账户并选择下一步。
 - 
展开你的 Power BI 工作区文件夹,展开ML Queries数据流,选择Predict Damage,然后点击转换数据。
 - 
保存并关闭新的数据流。
 - 
将新的数据流命名为
PredictDamage ML。 - 
刷新新的数据流。
 
现在,你可以在 Power BI 工作区中开始构建你的二进制预测机器学习模型。
- 
点击你的工作区中的新数据流Predict Damage ML。
 - 
点击工具栏上的机器学习模型。
 - 
选择如图所示的开始:
 

图 8.1 – 在 Power BI 数据流中启动 ML 模型
现在,选择 ML 模型将要预测的数据列。对于您的二进制预测模型,您必须选择一个有两个可能结果的数据列。在预测损伤表中的指示损伤列,当报告野生动物撞击时包含1值,当未报告损伤时包含0值。每一行代表一个独特的野生动物撞击事件。
- 
选择
预测损伤表。 - 
选择
指示损伤。 - 
点击下一步。您的屏幕应该如下所示:
 

图 8.2 – 选择二进制预测模型的表格和结果列
Power BI 自动识别指示损伤列。1值表示报告了损伤,这是 ML 模型最感兴趣的预测。损伤是较少见的结果,也将与可能的安全问题和成本相关联。
- 
从选择目标结果字段中选择1。
 - 
对于
1表示预测准确匹配结果。 - 
对于
非 1表示预测未达到目标。 - 
在您点击下一步之前,您的屏幕应该看起来像以下截图:
 

图 8.3 – Power BI 检测到二进制预测模型的拟合
选择用于训练二进制预测 ML 模型的特征是下一步。如您在图 8.4中看到的那样,Power BI 已检测到与结果相关的列。在拍摄此截图时,推荐的列包括速度、撞击挡风玻璃、撞击机头、吸入发动机 2、撞击螺旋桨、撞击机翼或旋翼、撞击机身、撞击起落架、撞击尾部和尺寸。您检查所有不直接指示某种形式损伤的列的复选框,这些列不在推荐之列。建议基于数据样本,因此特征中可能存在一些未被标记的隐藏宝藏。除非有太多唯一值,否则将所有特征添加到 Power BI AutoML 工具的第一步尝试中并无害处。您将在迭代 ML 模型并尝试改进未来结果时削减特征。以下是您检查所有特征之前的选择页面截图:

图 8.4 – ML 模型的默认列选择包含 Power BI 推荐列
现在您可以选择将要训练的 ML 模型的设置。
- 
给 ML 模型起一个像
预测损伤 ML 模型这样的名字。 - 
在描述字段中添加描述。
 - 
选择
29分钟。请注意,你也可以在不同的持续时间下重新运行训练过程以比较结果。 - 
注意,在屏幕底部,Power BI 表示它将自动使用20%的数据进行测试,80%的数据进行训练。以下是在你选择保存并训练之前的截图:
 

图 8.5 – 命名和训练机器学习模型的设置
一旦你选择保存并训练,Power BI 将开始训练和测试不同的机器学习算法,以找到最适合你数据的最优拟合。现在你可以放松,让 Power BI 做工作,然后继续你的下一个机器学习模型!机器学习模型训练完成后,你将在下一章深入探讨测试结果。
在 Power BI 中构建和训练通用分类机器学习模型
接下来,进行你的第二个机器学习模型,你将根据关于撞击的数据预测撞击飞机的野生动物的大小。这个机器学习模型可以用于预测可能撞击飞机的物种。使用名为Predict Size的ML Queries数据流中的查询:
- 
通过选择新建 | 数据流在你的 Power BI 工作区中创建一个新的数据流。
 - 
选择从其他数据流链接表。
 - 
确保你已登录到你的组织账户并选择下一步。
 - 
展开 Power BI 工作区文件夹,展开ML Queries数据流,选择预测大小,然后点击转换数据。
 - 
保存并关闭新的数据流。
 - 
将新的数据流命名为
Predict Size ML。 - 
刷新新的数据流。
 
现在,你可以在 Power BI 中开始构建你的通用分类机器学习模型。
- 
点击你工作区中的新Predict Size ML数据流。
 - 
点击机器学习模型的标签页。
 - 
选择开始。
 
对于一个通用分类机器学习模型,你现在选择一个具有两个以上可能值的列进行预测。在Predict Size表中的大小列包含三个值:大、中和小。每一行仍然代表一个独特的野生动物撞击事件,就像在先前的二分类机器学习模型中一样。
- 
选择预测大小表。
 - 
选择名为大小的结果列。
 - 
点击下一步。
 - 
Power BI 自动识别通用分类模型是最佳选择。在你点击下一步之前,你的屏幕应该看起来像以下截图:
 

图 8.6 – Power BI 检测到通用分类模型的拟合
与之前的二进制预测 ML 模型一样,Power BI 将为您构建模型的第一尝试推荐特征。在本书编写时,用于您的通用分类 ML 模型的推荐列包括机场 ID、飞机质量代码、发动机数量、飞行阶段、高度、速度、天空、降水、吸入其他、指示性损害、随机撞击、随机损坏、挡风玻璃撞击、挡风玻璃损坏、机头撞击、机头损坏、发动机 1 撞击、发动机 2 损坏、发动机 3 撞击、螺旋桨撞击、机翼或旋翼撞击、机翼或旋翼损坏、机身撞击、机身损坏、起落架撞击、尾巴撞击、尾巴损坏、灯光撞击、灯光损坏、其他撞击、对飞行的影响、吸入的发动机数量、吸入的发动机百分比、损坏的发动机数量和月份编号。注意这些特征,然后也在 Power BI ML 工具的第一遍中检查其他特征的复选框。
现在,您可以为将要训练的 ML 模型选择设置。
- 
为 ML 模型命名,例如
Predict SizeML Model。 - 
在描述字段中添加描述。
 - 
在训练时间中选择一个值。
 - 
一旦您选择保存并训练,Power BI 将开始训练和测试不同的 ML 算法,以找到最适合您数据的最优匹配。
 
一旦您为您的 ML 模型构建留出一些时间,您可以在下一章中回顾测试数据。
在 Power BI 中构建和训练回归 ML 模型
最后,您将构建一个 ML 模型来预测与野生动物撞击相关的冲击高度。回归 ML 模型可以根据用于训练模型的特征预测数值。此 ML 模型在野生动物撞击造成损害时预测预期成本可能很有用。使用名为预测高度的ML 查询数据流中的查询:
- 
通过选择新建 | 数据流在您的 Power BI 工作区中创建一个新的数据流。
 - 
选择从其他数据流链接表。
 - 
确保您已登录到您的组织账户并选择下一步。
 - 
展开您的 Power BI 工作区文件夹,展开数据流ML 查询,选择预测高度,然后点击转换数据。
 - 
保存并关闭新的数据流。
 - 
将新的数据流命名为
PredictHeight ML。 - 
刷新新的数据流。
 
现在,您可以在 Power BI 中开始构建您的回归 ML 模型。
- 
在您的工作区中点击新的预测高度 ML数据流。
 - 
点击机器 学习模型的选项卡头。
 - 
选择开始使用。
 
一个回归机器学习模型将根据特征预测一个数值。在这个用例中,你将构建一个预测与野生动物撞击相关的高度的机器学习模型。在预测身高表中的名为身高的列包含表示地面以上的英尺数的整数值。每一行仍然代表一个独特的野生动物撞击事件。
- 
选择预测身高表。
 - 
选择名为身高的结果列。
 - 
点击下一步。
 - 
如果没有自动检测到回归用例,Power BI 会为你提供所有三种机器学习模型类型的选择。如图图 8**.7所示,在点击下一步之前,点击回归:
 

图 8.7 – 回归模型将预测数值
Power BI 再次推荐特征,你可以在第一次运行机器学习模型时选择所有这些特征。
现在你可以选择将要训练的机器学习模型的设置。
- 
给你的机器学习模型起一个名字,例如
预测身高机器学习模型。 - 
在描述字段中添加一个描述。
 - 
在训练时间中选择一个值。
 - 
一旦你选择了保存并训练,Power BI 将开始训练和测试不同的机器学习算法,以找到最适合你数据的最佳模型。
 
你现在已经到达了一个项目阶段,其中所有三个机器学习模型的第一次尝试都已经构建完成。虽然这可能看起来很简单,但在接下来的章节中仍然有许多工作要做!
摘要
在本章中,你使用 Power BI 构建数据流并训练了一个二元预测机器学习模型、一个通用分类模型和一个回归模型。这三个模型都依赖于你在第七章中完成的工作,以识别 FAA 野生动物撞击数据中的特征,为机器学习准备查询,然后将所有内容发布到 Power BI 云服务。
在第九章中,你将回顾机器学习模型的测试结果,并评估测试预测的准确性。需要改进的机器学习模型可以根据需要修改和重新训练,直到获得可接受的结果。
第九章:评估训练和测试的机器学习模型
在本书的第八章中,您在 Power BI 中构建了三个机器学习模型。这些模型使用 FAA 野生动物撞击数据进行训练和测试,并试图预测以下内容:
- 
野生动物撞击飞机是否造成损坏
 - 
撞击飞机的野生动物的大小
 - 
野生动物撞击发生的高度
 
本章将回顾 Power BI 在训练机器学习模型后进行的测试结果。在查看测试结果后,您将更改训练数据,目的是提高机器学习模型的预测能力。在本章结束时,所有三个机器学习模型都准备好部署并配置以供 Power BI 使用。
技术要求
如果您是机器学习的新手,在阅读本章之前,您可能需要研究以下几个关键术语。这里给出的定义直接取自以下链接的文档:learn.microsoft.com/en-us/azure/machine-learning/how-to-understand-automated-ml?view=azureml-api-2#classification-metrics:
- 
曲线下面积(AUC):AUC 可以解释为正确分类样本的比例。更精确地说,AUC 是分类器将随机选择的正样本排名高于随机选择的负样本的概率。
 - 
召回率:召回率是指模型检测所有正样本的能力。
 - 
精度:精度是指模型避免将负样本标记为正样本的能力。
 
与前几章一样,您需要以下内容:
- 
来自 FAA 网站或 Packt GitHub 网站的 FAA 野生动物撞击数据文件
 - 
Power BI Pro 许可证
 - 
以下 Power BI 许可选项之一用于访问 Power BI 数据流:
- 
Power BI Premium
 - 
Power BI Premium 按用户
 
 - 
 - 
将数据导入 Power BI 云服务的以下选项之一:
- 
Microsoft OneDrive(与 Power BI 云服务连接)
 - 
Microsoft Access + Power BI 网关
 - 
Azure 数据湖(与 Power BI 云服务连接)
 
 - 
 
评估 Power BI 中预测损坏 ML 模型的测试结果
在三个机器学习模型完成训练后,您可以使用 Power BI 中的预构建报告查看每个模型的测试结果。训练报告将提供指标,帮助您确定模型是否对预测的价值有一些反馈。您从预测损坏 ML 模型开始,这是一个二元预测机器学习模型。在您的工作区中,按照以下步骤操作:
- 
点击预测损坏 ML 模型数据流。
 - 
在功能区选择机器学习模型。
 - 
在操作列下,点击剪贴板以访问查看训练报告,如下截图所示:
 

图 9.1 – 预测损伤机器学习模型训练报告的导航
- 报告应展开,看起来像以下图示:
 

图 9.2 – 预测损伤机器学习模型的训练报告
注意,由于测试数据的随机抽样以及用于训练和测试的源数据范围的任何变化,此页上的指标可能不同。此外,Power BI ML 将随机将数据分为测试集和训练集,每次运行可能都不同。
预测损伤机器学习模型的模型性能
预测损伤机器学习模型的测试产生了一些有趣的结果。在上面的示例中,你可以看到模型性能,或 AUC,列出的值为 91%。AUC 越接近 100%,机器学习模型在整体正确预测方面的表现就越好。你可能会首先认为这是成功的,但还有一些额外的细节需要考虑。
对于二元预测机器学习模型,预测结果为 1(是)或 0(否)。当预测是否由于野生动物撞击造成损坏时,每行数据有四种可能的预测结果,并与实际结果进行比较:
| 预测 | 实际发生的情况 | 结果 | 
|---|---|---|
| 发生了损坏 | 实际上发生了损坏 | 真阳性 | 
| 发生了损坏 | 没有发生损坏 | 假阳性 | 
| 没有发生损坏 | 实际上发生了损坏 | 假阴性 | 
| 没有发生损坏 | 没有发生损坏 | 真阴性 | 
图 9.3 – 测试机器学习模型与现实的四种可能结果
如图 9.2所示,在报告的右下角有一个滑动条过滤器,称为概率阈值。概率阈值是分配给每个预测的介于零和一之间的值,以表示预测的确定性。99 的概率得分可以解释为“机器学习模型有 99%的确定性认为这一事件造成了损坏。”你能依赖机器学习模型的确定性吗?这个数字反映了现实吗?测试结果可以帮助你找出答案!
你将概率阈值移动到0.50并查看结果。注意页面上的其他值发生变化:

图 9.4 – 将概率阈值设置为 0.50 的模型性能报告
从有四个框的网格开始,你注意到有 484 起事件被正确预测为发生了损坏。然而,有 69 起实际发生损坏的事件被机器学习模型遗漏。484/(484 + 69)大约是0.50,只有30%的标记为造成损坏的事件实际上造成了损坏。
当概率阈值设置为0.80时,指标发生变化:

图 9.5 – 将概率阈值设置为 0.80 的模型性能报告
当设置为 0.80 时,0.80 可能会消除假阳性,但 33%(1 – 召回率 为 0.67)的实际真实损害事件将被遗漏。
总结来说,概率阈值 作为一种截止值,可以影响此二进制预测机器学习模型的四种可能结果,如下面的图表所示。

图 9.6 – 概率阈值对结果与实际测试结果的影响
让我们分解 图 9.6:
- 
左上角的图表显示了每个事件的实际结果,其中 机器学习预测分数 在 x 轴上
 - 
右上角的图表显示了将
0.50设置在 假阴性(FN)、假阳性(FP)、真阴性(TN)和 真阳性(TP)上的影响 - 
左下角的图表显示了将
0.40设置的影响 - 
右下角的图表显示了将
0.70设置的影响 
图 9.7 从实际角度总结了改变 概率阈值 对此机器学习模型的影响:
| 测试结果 | 增加 概率阈值 | 减少 概率阈值 | 
|---|---|---|
| 真阳性 | 更少 | 更多 | 
| 真阴性 | 更多 | 更少 | 
| 假阳性 | 更少 | 更多 | 
| 假阴性 | 更多 | 更少 | 
图 9.7 – 概率阈值对测试结果的影响
你需要回到你的利益相关者那里,请求他们对 图 9.6 和 9.7 中不同可能结果的重要性提供反馈。将这种影响用非技术性语言表达可能是一个挑战。最佳的 概率阈值 将取决于你利益相关者的需求。你需要询问类似以下的问题:
你希望更频繁地标记事件,以尽可能多地捕获有损害的真实事件,但代价是会有更多未造成损害的错误标记事件?还是你希望标记的事件更少,错误标记的事件也更少,但代价是未标记并遗漏一些有损害的事件?
屏幕已被分成两半以提高可见性。图 9.8 展示了屏幕的左侧:

图 9.8 – 预测损害机器学习二进制预测模型的顶级预测因子
在报告页面的右上部分(见 图 9.9),你点击一个标有 查看顶级预测因子 的黄色框。显示了一个顶级预测特征的列表,然后你点击 大小 为小:

图 9.9 – 预测损害机器学习二进制预测模型的顶级预测因子
您可以看到,当您点击一个预测器(特征)值时,右侧会弹出一个图表来可视化该特征。您还可以在这些图表上悬停以获取更多细节。对于尺寸小,图表显示当尺寸大时,损伤发生大约 45%的时间。当尺寸小时,损伤发生大约 2.5%的时间。这差距很大!您可以点击每个顶级预测器并记录发现。
在模型性能页面的底部,您会发现一个带有过滤器的成本效益分析图表,如图图 9.9所示:

图 9.10 – 预测损伤机器学习的成本效益分析
用实际术语总结此图表的最好方法是,它允许您确定不同10,000的影响,预测的成本(1),以及正确预测的相对效益设置为2,那么测试的最大利润将是202.09,如果阈值设置为0.94,那么只有4.73%的人口将被定位。对于这个特定的用例,概率阈值的设置可能需要与您的利益相关者进行讨论。虽然这是一个有趣的讨论点,但还有其他因素需要考虑野生动物撞击飞机的影响,例如乘客安全、对野生动物的影响、最终用户对预测的使用,等等。
预测损伤机器学习模型的准确率报告
接下来,您将转到训练报告的下一页,命名为准确率报告,如下截图所示。

图 9.11 – 预测损伤机器学习二分类预测模型的准确率报告
准确率报告的顶部提供了对累计收益图和ROC 曲线分解的详细解释。向下滚动页面以查看这些图表。累计收益图位于左侧,显示了 ML 模型与完美模型和随机猜测相比的性能。当您悬停在曲线上并向右移动时,您可以看到随着概率阈值的降低,性能的变化:

图 9.12 – 累计收益图(左侧)显示了与完美模型和随机猜测的测试结果
页面右侧的ROC 曲线显示了模型如何将正例预测为正例(真阳性)和负例预测为负例(真阴性)。向上向左升高的曲线表示良好的性能:

图 9.13 – ROC 曲线(右侧)可视化 ML 模型区分目标结果的能力
预测损伤机器学习模型的训练详情
最后,你将翻到报告的最后一页,该页名为训练详情。此页顶部显示有关测试的详细信息,例如样本行数、用于测试的行数、选为最佳结果的模型类型以及用于确定最佳拟合模型的迭代次数。该页面可以在图 9.13中查看:

图 9.14 – 预测损伤 ML 二元预测 ML 模型的训练详情
你还会注意到模型质量随迭代变化图表,显示了迭代训练和测试期间 ML 模型的质量比较。滚动到页面底部,你可以查看有关 ML 模型的详细信息,例如模型中的特征、这些特征的数据类型和插补,以及用于创建模型的参数。以下是截图:

图 9.15 – 包括特征和参数的 ML 模型详情
滚动到训练详情页面的底部三分之一,你会看到一个饼图,显示了作为集成模型一部分使用的不同 ML 算法。将鼠标悬停在算法上,你可以看到有关其使用方式的详细信息。使用 Power BI,你使用 SaaS ML 工具,因此不需要深入了解这些细节。如果数据科学团队想要通过在 Azure ML 等工具中构建自定义 ML 模型来扩展你的发现,这些信息可能对他们规划后续项目时很有价值:

图 9.16 – 预测损伤 ML 模型的集成机器学习模型算法
回顾创建预测损伤 ML模型的过程,你包含了一个长长的特征列表,你考虑了这些特征可能具有预测能力。在第十章中,你将重新审查这个 ML 模型,在部署 ML 模型之前,使用一个更简洁且仔细选择的特征列表对其进行重新训练。现在,你准备好继续本章的下一个 ML 模型。
在 Power BI 中评估预测大小 ML 模型的测试结果
你接下来要审查的下一个 ML 模型是一个用于预测撞击飞机的野生动物大小的分类模型。这些预测并不一定表示实际动物的大小。例如,一大群较小的鸟也可能被视为大型撞击。预测这些值可以帮助理解被认为更严重的意外事件的概率。
预测大小 ML 模型的模型性能
继续到测试结果,以预测动物或动物撞击飞机的大小,你将遵循与上一节类似的步骤来打开报告。从你的 Power BI 工作区,执行以下操作:
- 
点击Predict Size ML 模型数据流。
 - 
在功能区,选择机器学习模型。
 - 
在操作列下,点击剪贴板以访问查看****训练报告。
 - 
报告应该看起来像以下图示,在柱状图上,你可以点击小型类别:
 

图 9.17 – 选择小型类别时 Predict Size ML 分类模型的训练报告
首先,你会注意到这份报告看起来略有不同,因为它是为不同类型的机器学习模型,即分类模型而准备的。报告右上角的 AUC(曲线下面积)为60%。一般来说,AUC 低于 70%并不是很好。AUC 为 50%通常代表随机猜测,而 60%只是略高于这个值。你需要深入查看测试结果以找到改进的机会。
小型类别(你在图 9.16 中点击的)的精确度评分为88%,这意味着当做出小型预测时,88%的情况下结果是正确的。召回率对于小型仅为65%,这意味着只有 65%的实际小型事件被捕捉到。
现在,点击中等类别:

图 9.18 – 选择中等类别时 Predict Size ML 分类模型的训练报告
预测中等的结果并不理想。精确度评分为25%,这意味着大多数中等预测都是错误的。更令人失望的是,只有36%的实际中等打击事件被中等预测捕捉到。
让我们继续到大型类别:

图 9.19 – 选择大型类别时 Predict Size ML 分类模型的训练报告
大型类别的精确度评分为22%,这意味着大型预测只有大约五分之一的时候是正确的。在这些预测中,66%的实际大型事件被捕捉到。总的来说,大型预测通常不准确,但大约三分之二的实际大型事件都被捕捉到。
滚动到模型性能页面的底部,你可以点击预测的不同类别,以查看顶级预测因素。在大型类别中,点击指示损坏条形图,将在右侧弹出图表,显示该特性的详细信息:

图 9.20 – 大类中指示损坏的顶级预测因素细节
当类别是大型时,图 9.18左侧图表中的特性被确定为影响该类别的因素。你点击了指示损坏特性,可以看到当该值为1时,该类别将有 35%的时间是大型。当设置为0时,大型分类的发生率不到 5%。你可以点击不同的类别(大型、中型和小型)来查看顶级影响因素,并为你的下一个机器学习模型迭代做笔记。
预测大小机器学习模型的训练细节
继续浏览到预测大小机器学习的训练细节页面,你会看到一个与预测损坏机器学习相似的页面:

图 9.21 – 训练细节包含有关训练机器学习模型的详细信息
有趣的是,随着迭代次数的增加,机器学习模型的质量有所下降。在机器学习中,更多的数据并不总是更好的,更大的复杂性也不总是能带来更好的结果。作为一个对这些工具的新手,有时,试错是熟悉这些概念的最佳方式。
滚动到训练细节页面的中间,你可以查看机器学习模型中使用的特性和最终参数。同样,这是一个与预测损坏****机器学习报告相似的页面:

图 9.22 – 预测大小机器学习模型的特性和参数
你也可以向下滚动到页面的底部三分之一,查看集成机器学习信息。正如在预测损坏机器学习中所述,这些信息很有趣,但主要对希望将本项目发现扩展到 Azure ML 等工具的数据科学家有用。你将在下一章重新访问这个机器学习模型,但现在你可以继续浏览到预测高度****机器学习模型。
在 Power BI 中评估预测高度机器学习模型的测试结果
最后,你回顾了预测高度机器学习模型的测试结果。这是一个回归模型,试图预测野生动物撞击飞机的高度。此模型不预测是/否答案或分类值,而是预测从地面起的高度数值。
预测高度机器学习模型的模型性能
首先,导航到训练报告的模型性能页面:
- 
点击 预测高度 ML 模型 数据流。
 - 
在功能区选择 机器学习模型。
 - 
在 操作 列下,点击剪贴板以访问 查看 训练报告。
 - 
报告应类似于以下图示:
 

图 9.23 – 预测高度 ML 回归模型的性能
首先,您会注意到页面顶部 模型性能 为 80%。对于回归模型,预测值与实际结果之间的数值差异由这个值表示。特征提供了可预测性,但您希望这个数字更高以获得更好的结果。
页面左侧的图表 预测值与实际高度 绘制了发生撞击的高度处的 实际值 与 预测值。由于不同的飞机型号、天气、物种以及许多其他因素,预期会有变化。完美的可预测性会在图表的红蓝部分之间分离的线上显示点。您可以看到回归线通常贯穿结果。
在页面右侧的 图 9.22 中,残差错误按高度 图表显示了测试的不同值的平均误差。-5% 的值意味着预测通常对于一系列值来说低 5%。您会注意到 x 轴上的第一个气泡接近 0%。当您悬停在它上面时,您会看到值,并且您可以点击它以过滤左侧的图表:

图 9.24 – 最小高度范围内的残差错误数极高
观察到 预测值与实际高度 图表,您可以看到地面以上低高度有 1% 的残差错误。
如果您点击从左数第三个气泡,即 6,500-7,800 英尺的高度,平均残差错误现在为 -40%:

图 9.25 – 覆盖高度为 3,200-4,500 英尺的箱子具有较低的平均残差错误数
在第三箱的 预测高度与实际高度 图表上,当您点击气泡以过滤左侧图表时,会发现许多实际值报告在 6,500、7,000 和 7,500 英尺的高度。研究这种一致性的原因可能有助于您理解源数据中的细微差别。飞行员是在估计野生动物撞击事件的高度吗?当它们不增加或减少高度时,这些是否是飞机飞行计划的常见稳定高度?这种一致性仅仅是巧合吗?这种模式的根本原因只能通过进一步调查来发现。
预测高度 ML 的训练详情
继续查看预测高度机器学习的训练报告最后一页,名为训练细节,您会看到与前两个机器学习模型训练报告相似的报告结构。页面顶部显示了样本行数、用于训练的行数、最终使用的模型以及运行的迭代次数:

图 9.26 – 预测高度机器学习回归模型的训练细节
滚动页面,您将再次看到关于使用的特征、参数以及 Power BI 中自动机器学习使用的算法的类似图表和信息。
完成对所有三个机器学习模型的测试和训练报告的审查后,您就可以进入本书的下一章了。
摘要
本章深入探讨了您预测损伤机器学习、预测尺寸机器学习和预测高度机器学习模型的训练和测试报告。在这个过程中,您回顾了 Power BI 中所有三种类型机器学习模型的报告:二元预测、分类和回归。您通过查看 Power BI 中的测试数据来评估每个模型预测的效果。您还探索了具有高度预测性的特征列表。
在下一章中,您将修改机器学习模型的筛选标准和选定的特征,目标是提高预测能力。迭代训练和测试是提高机器学习模型的最佳方式,这个过程将帮助您为超出本书范围的 Power BI 机器学习项目做好准备。
第十章:迭代 Power BI ML 模型
在 第八章 中,您使用为每个三个 ML 模型(即 预测损害 ML、预测大小 ML 和 预测高度 ML)选择的全部特征,利用 FAA 野生动物撞击数据库中的数据来训练 Power BI ML 模型。在 第九章 中,您评估了 Power BI 自动化训练和测试过程的测试结果。测试结果帮助您了解预测模型的优缺点,以及有助于正确预测的特征的详细信息。
本章将回顾第 9 章 的发现,并使用这些发现来决定您是否需要修改和重新训练 ML 模型,以通过迭代开发获得更好的结果。用于训练这些 ML 模型的特征列表可以缩减,筛选标准可以调整,新的一轮训练和测试的结果可以与第 9 章 的结果进行比较。
技术要求
本章的要求与前面章节相同:
- 
来自 FAA 网站或 Packt GitHub 网站的 FAA 野生动物撞击数据文件
 - 
一个 Power BI Pro 许可证
 - 
以下 Power BI 许可证选项之一用于访问 Power BI 数据流:
- 
Power BI Premium
 - 
Power BI Premium 每用户
 
 - 
 - 
以下选项之一用于将数据导入 Power BI 云服务:
- 
微软 OneDrive(与 Power BI 云服务连接)
 - 
微软 Access 和 Power BI 网关
 - 
Azure 数据湖(与 Power BI 云服务连接)
 
 - 
 
ML 模型迭代的考虑因素
关于机器学习(ML)及其模型表现好坏的原因已经撰写了众多书籍,包括 Packt 出版的书籍。本书的目的是帮助您学习 Power BI,以便您可以探索 FAA 野生动物撞击数据,分析这些数据,然后创建 SaaS ML 模型。在本书的这一部分,您站在一个十字路口。您是否继续在 SaaS 工具中迭代这些 ML 模型?您是否已经证明了足够的价值,可以将 ML 模型项目移交给数据科学团队,他们将通过 Azure ML 或高级工具改进模型?或者您是否回到您的利益相关者那里,报告您的发现,并寻求下一步行动的指导?以下图表显示了您可以考虑的几个下一步选项:

图 10.1 – 您的 Power BI ML 模型的可能下一步
而不是深入探讨机器学习理论的技术细节,您将关注一些可以通过对每个 SaaS Power BI ML 模型进行修改来轻松解决的预测不准确的可能原因。根据您对每个模型的评估,您将根据图 10**.1中显示的选项决定下一步行动。让我们看看您应该考虑的几个话题。
不准确的数据
“垃圾输入,垃圾输出”是数据世界中的一个流行说法。用不良数据训练机器学习模型,或者通过机器学习模型对不良数据进行评分,可能会导致不准确的结果。这个问题可以通过您作为数据专业人士的工作来解决,但如果数据收集机制本身就有问题呢?如果源数据不准确,那么在不改变源数据收集过程的情况下,您能做的就只有这么多来解决这个问题。
预测价值低的特征
在对您的机器学习模型进行第一轮的训练和测试时,您将您从 FAA 野生动物撞击数据库中识别或创建的每个特征都通过 Power BI SaaS ML 工具进行了运行。不过不深入技术细节,对于机器学习来说(尤其是使用像 Power BI 这样的 SaaS 工具),保持小而简单是一个很好的目标。您在机器学习模型中包含的许多特征可能对预测价值贡献很小。您已经记录了被认定为具有预测价值的特征,但可能需要通过新的训练和测试迭代进行试错。您最终可能达到收益递减的点。那将是您能做的最好的吗,或者您应该将机器学习模型转交给拥有先进工具和技能集的数据科学团队?
数据量
讨论数据量对机器学习模型的影响可能需要一整本书。一般来说,具有良好数据的简单机器学习模型比复杂机器学习模型或使用不完美数据进行训练的模型需要的训练数据要少。再次强调,关于机器学习最佳数据量的主题超出了本书的范围,本书旨在创建 Power BI 中的简单 SaaS ML 模型。使用 Power BI SaaS ML 工具,将您的训练数据集保持在数万行或更少是一个很好的经验法则。
数据特性
机器学习模型可能会受到各种数据特性的影响,如下所示:
- 
特征的高基数:一个分类列中过多的唯一值会降低该列的预测价值。例如,在 FAA 野生动物撞击数据库中包含每个机场的机场代码会导致高基数列。
 - 
数据倾斜:结果被捕获在数值范围或少数几个类别中,但其他选项缺失。例如,如果 FAA 野生动物撞击数据缺少高空撞击事件,或者如果大部分数据来自单个机场。如果准确数据自然存在倾斜,那么可以采用超出本书范围的高级技术来解决机器学习模型的倾斜问题。
 - 
其他特征,如 偏差、过拟合、欠拟合 以及许多其他潜在问题都可以进行评估。再次强调,这些主题在专注于机器学习理论的书籍中有详细讨论。
 
在继续之前,你需要明确你的目标和目标。你并不是试图使用 Power BI 机器学习工具创建完美的机器学习模型。相反,你正在证明 FAA 野生动物撞击数据对你预测损害、预测野生动物大小和预测撞击高度的使用案例的预测价值。你对每个这些机器学习模型所做的决定将向利益相关者展示,以展示你项目的结果,以及关于未来迭代机器学习模型和整个项目的建议。
评估预测损害二元预测机器学习模型
在前两章中构建和审查的 预测损害机器学习 模型旨在预测由于野生动物撞击飞机而报告损害的可能性。以下表格显示了该二元预测模型的训练报告中的几个关键指标:
| 指标名称 | 指标值 | 注释 | 
|---|---|---|
| 曲线下面积 (AUC) | 91% | AUC 表示机器学习模型的表现,100% 表示完美。50% 将是随机猜测,而低于 50% 表示预测比随机猜测更差。 | 
| 训练行数 | 23,356 | 用于训练机器学习模型的行数。 | 
| 测试行数 | 5839 | 用于测试训练的机器学习模型的行数。 | 
| 成本效益分析最佳概率阈值 | 0.94 | 考虑精确度和召回率时的最大投资回报概率阈值。 | 
图 10.2 – 初始预测损害机器学习模型的指标
在 第十章 中详细讨论了 预测损害机器学习 模型的测试结果。一般来说,91% 的 AUC 对于你的第一个机器学习模型来说不是一个坏的开始。你能使模型在预测损害方面做得更好吗?如果可以,你可以做出哪些改变?你可以从 概率阈值 设置的角度审查不同的指标:
| 概率阈值设置 | 精确度 – 有多少标记事件 造成了损害? | 召回率 – 有多少实际损害事件被标记为 造成损害? | 注释 | 
|---|---|---|---|
| 0.94 | 67% | 38% | 最大成本效益分析阈值 | 
| 0.70 | 44% | 75% | 不到一半的标记事件有实际损害,但 75% 被捕获 | 
| 0.50 | 30% | 88% | 88% 的所有损害事件都被捕获,但标记的事件有 70% 的时间是误报 | 
| 0.03 | 9% | 100% | 所有损害事件都被捕获,但 91% 的标记事件是误报 | 
图 10.3 – 概率阈值设置对预测损害机器学习模型的影响
通过使用 Power BI 浏览这些特征并搜索本章前面提到的不同考虑因素,你可以权衡你的选项的优缺点。例如,在用于训练和测试的数据集中的 29,195 行中,飞行阶段特征停放仅在六行中使用。这六行中没有任何一行有损坏。从逻辑上讲,这很有道理,因为损坏大型停放飞机需要灰熊或大象的力量。你如何处理这种代表性不足的类别?现在是时候召唤数据科学团队了吗?你的选项已在以下表格中总结:
| 选项 | 考虑因素 | 
|---|---|
| 转交给数据科学团队 | 
- 
可能可以通过更简单的 ML 模型减少大量特征以获得更好的结果
 - 
91%的 AUC 可能难以通过 SaaS ML 工具进行改进
 - 
ML 专家可以审查模型是否存在偏差和倾斜
 
|
| 用于生产 | 
|---|
- 
ML 模型是否足够好,可以为利益相关者提供价值?
 - 
不正确预测的后果是什么?
 - 
你真的能解释是什么导致了预测吗?你需要能够做到这一点吗?
 
|
| 结束项目 | 除非预测提供很少的价值,否则现在结束这个 ML 模型的项目并没有太多意义 | 
|---|---|
| 迭代 ML 模型 | 
- 
你能改进这个 ML 模型吗?
 - 
你能使其变得多好?
 
|
图 10.4 – 预测损坏 ML 模型的选项和考虑因素
最可能的现实世界决策是与利益相关者回过头来审查你的结果。最佳选择可能是将任务转交给能够审查和评估你的发现、改进 ML 模型并为利益相关者量化业务价值的数据科学团队。你也可以迭代现有的 ML 模型,但考虑到 91%的 AUC,你的努力可能更适合于更大的 FAA 野生动物撞击数据项目中的其他工作。
评估预测大小 ML 分类模型
小型、中型或大型。以下表格显示了 ML 模型初始版本的一些关键指标:
| 指标名称 | 指标 值 | 注释 | 
|---|---|---|
| AUC | 60% | AUC 表示 ML 模型的表现,100%表示完美。60%比随机猜测要好,但并不好! | 
| 训练行数 | 11,368 | 用于训练 ML 模型的行数 | 
| 测试行数 | 2,841 | 用于测试训练的 ML 模型的行数 | 
图 10.5 – 预测大小 ML 分类模型的关键指标
这个模型的 AUC 仅为 60%,这并不好。你能做些什么来让它变得更好?首先,查看按类别划分的精确度和召回率指标:
| 类别 | 精确度 – 有多少标记的事件匹配 该类别? | 召回率 – 有多少该类别的真实成员 被捕获? | 注释 | 
|---|---|---|---|
| 小型 | 88% | 65% | 精度良好,但仍有 35%的小型事件被错误分类 | 
| 中型 | 25% | 36% | 精度和召回率指标不佳 | 
| 大型 | 22% | 66% | 精度不高,但 2/3 的所有大型事件都被捕捉到 | 
图 10.6 – 预测尺寸 ML 分类模型按类别划分的精度和召回率指标
虽然对于“小型”类别,对“中型”和“大型”的预测令人失望。在记录了具有强大预测能力的特征后,你可以在进行 ML 模型的第二次迭代时更改一些过滤标准:
| 过滤标准 | 第一个 ML 模型 | 新的 ML 模型迭代 | 注释 | 
|---|---|---|---|
| 日期 | >= 1/1/2010 | >= 1/1/2010 | 相同 | 
| 飞机类别代码 | A | A | 相同 | 
| 机场 ID | 前 10 大机场 | 前 15 大机场 | 样本量更大 | 
| 高度 | 非空且非 0 | 移除预测列中缺失数据的行 | |
| 速度 | 非空且非 0 | 移除缺失数据并移除速度为 0 的值 | |
| 尺寸 | 非空且非空白 | 非空且非空白 | 相同 – 移除缺失数据的行 | 
图 10.7 – 预测尺寸 ML 的过滤标准更改
根据你在审查训练报告时所做的笔记,以及你使用 Power BI 进行数据探索的发现,你可以缩小你为下一次训练预测尺寸 ML 模型的特征列表:
| 在精选 FAA 野生动物碰撞查询中的特征 是否包含在预测尺寸 ML 模型的第一次迭代中? | 是否包含在预测尺寸 ML 模型的第二次迭代中? | 备注 |
| --- | --- | --- | --- |
| 事件日期 |  |  | 值太多,已汇总到月份 |
| 白天时间 |  | 是 |  |
| 机场 ID | 是 | 是 | 过滤到前 15 个以避免基数问题 |
| 机场名称 |  |  | 描述机场 ID |
| 纬度 |  |  | 值太多 |
| 经度 |  |  | 值太多 |
| 跑道 |  |  | 值太多 |
| 州 |  |  | 位置信息由机场 ID 覆盖 |
| FAA 区域 |  |  | 位置信息由机场 ID 覆盖 |
| 运营商 ID |  | 是 |  |
| FLT |  |  | 值太多,无法唯一确定 |
| 飞机 |  | 是 |  |
| 飞机类别代码 |  |  | 两次迭代都过滤到 A |
| 飞机质量代码 | 是 | 是 |  |
| 引擎数量 | 是 | 是 | 第二次迭代过滤到 2 |
| 飞行阶段 | 是 | 是 |  |
| 高度 | 是 | 是 |  |
| 速度 | 是 | 是 |  |
| 距离 |  |  |  |
| 天空 | 是 |  |  |
| 降水量 | 是 |  |  |
| 修复成本调整 |  | 是 |  |
| 吞入其他物体 |  | 是 |  |
| 指示的损坏 | 是 | 是 |  |
| 损坏程度 |  | 是 |  |
| 碰撞随机 | 是 | 是 |  |
| 损坏的随机 | 是 | 是 |  |
| 碰撞挡风玻璃 | 是 | 是 |  |
| 损坏的挡风玻璃 | 是 |  |  |
| 碰撞机头 | 是 | 是 |  |
| 损坏的机头 | 是 | 是 |  |
| 碰撞发动机 1 | 是 |  |  |
| 损坏的发动机 1 | 是 | 是 |  |
| 吞入发动机 1 | 是 |  |  |
| 碰撞发动机 2 | 是 |  |  |
| 损坏引擎 2 | 是 | 是 |  |
| 吞入引擎 2 | 是 |  |  |
| 被击中引擎 3 | 是 |  |  |
| 损坏引擎 3 | 是 |  |  |
| 吞入引擎 3 | 是 |  |  |
| 被击中引擎 4 | 是 |  |  |
| 损坏引擎 4 | 是 |  |  |
| 吞入引擎 4 | 是 |  |  |
| 被击中螺旋桨 | 是 | 是 |  |
| 损坏的螺旋桨 | 是 | 是 |  |
| 被击中机翼或旋翼 | 是 | 是 |  |
| 损坏的机翼或旋翼 | 是 | 是 |  |
| 被击中机身 | 是 |  |  |
| 损坏的机身 | 是 |  |  |
| 被击中起落架 | 是 | 是 |  |
| 损坏的起落架 | 是 | 是 |  |
| 被击中尾部 | 是 | 是 |  |
| 损坏的尾部 | 是 | 是 |  |
| 被击中灯光 | 是 | 是 |  |
| 损坏的灯光 | 是 | 是 |  |
| 被击中其他 | 是 |  |  |
| 损坏其他 | 是 |  |  |
| 对飞行的影响 | 是 | 是 |  |
| 看到的数量 |  | 是 |  |
| 被击中的数量 |  | 是 |  |
| 被击中引擎的数量 | 是 |  |  |
| 被击中引擎的百分比 | 是 |  |  |
| 吞入引擎的数量 | 是 |  |  |
| 吞入引擎的百分比 | 是 |  |  |
| 损坏引擎的数量 | 是 |  |  |
| 吞入引擎的百分比 | 是 |  |  |
| 月份编号 | 是 | 是 |  |
| 总特征 | 50 | 36 |  |
| 总行数 | 7,203 | 4,928 |  |
图 10.8 – 预测大小 ML 模型第一次和第二次迭代的特征选择
您有两个选项来执行预测大小 ML模型的第二次迭代。首先,您可以在ML 查询数据流中更改过滤标准,然后根据图 10.9 编辑并重新训练 ML 模型:

图 10.9 – 如果不需要旧版本的副本,您可以迭代现有的 ML 模型
第二种选择是创建一个用于训练和测试的查询的第二版本,并创建一个新的机器学习模型。您可以选择保持简单,使用单个查询和机器学习模型,或者您更愿意构建多个版本进行比较。如果您保持准确的笔记和文档,每个版本的单份副本可能是最有效的选择。
在重新训练机器学习模型(或为第二次迭代构建新模型)后,检查训练报告。您会发现 AUC(曲线下面积)仅上升到 61%!

10.10 – 预测大小 ML 模型的第二次迭代 AUC 仅略有上升
尽管减少了特征数量并删除了一些缺失数据的行,但您的结果仍然仅略好于随机猜测。请注意,Small类别的精确度为 81%(有多少被标记为Small的是Small)和召回率为 70%(被Small预测捕获的小值总百分比)。
起初,您可能会犹豫向利益相关者报告您的发现,因为结果并不理想。在失望之前,考虑以下要点:
- 
你的机器学习模型的 AUC 为 61%,这仍然比随机猜测要好,而且
Small类别的结果还不错。 - 
Small、Medium和Large类别可能是由填写报告的人主观选择的。不同的人,在不同的地方,参考不同大小的飞机,可能会在不同的背景下使用不同的标准来判断这些标准。如果是这样,一个人的Medium可能是另一个人的Large。 - 
可能使用你正在使用的数据无法实现高度准确的分类机器学习模型。
 
在使用 Power BI 修改预测大小机器学习模型多次尝试后,你将无法显著提高结果。作为下一步,你有几个可行的选择:
- 
聘请一个数据科学团队,他们可以帮助你通过选择不同的特征和使用不同的过滤标准来识别改进的机会。也许你错过了一些只有数据科学专业人士利用先进工具才能发现的东西。
 - 
回到你的利益相关者那里,展示结果,并请他们定义成功。81%的精确度和 70%的召回率对于
Small类别对他们来说有价值吗?如果不是,他们如何定义成功的预测? - 
另一个选择是将这个机器学习模型转换为二元预测机器学习模型。由于
Small类别得到了不错的成果,你可以将Small标记为1,而Medium或Large则标记为0。如果这被利益相关者接受,那么Medium和Large可能可以合并以获得更好的结果。 
接下来,我们将评估另一个模型。
评估预测高度机器学习回归模型
预测高度机器学习模型是一个回归模型,旨在预测飞机被野生动物撞击的高度。回归机器学习模型根据报告中的特征预测一个表示高度(英尺)的数值,该高度是撞击发生时距离地面的高度。速度、距离和飞行阶段等特征被列为顶级预测因素。
测试结果中的 80%的变化由模型解释。80%好吗?这取决于用例和需求!如果变化(R 平方)是 100%,那么机器学习模型将给出完美的预测。80%可能表明预测是好的,但独立和随机变量可能 100%不可能。或者,可能存在更高的值,数据可能缺少重要的特征或测量不准确。
在这个用例中,常识告诉我们解释 100%的变化是不可能的。你可以走出去,观察一只鸭子从水中起飞,升入天空,然后降落。飞机可能在任何这些高度上撞击它!
您决定迭代机器学习模型,以查看是否可以获得更好的预测结果。基于已识别为顶级预测器的特征,使用源数据和 Power BI 进行额外分析,以及一些尝试和错误,可以得到略微更好的结果。以下是对机器学习模型过滤标准的更改:
| 过滤标准 | 第一个机器学习模型 | 新的机器学习模型迭代 | 注释 | 
|---|---|---|---|
| 日期 | >= 1/1/2010 | >= 1/1/2010 | 相同。 | 
| 飞机类别代码 | A | A | 相同。 | 
| 机场 ID | 前 15 个机场 | 前 15 个机场 | 相同。 | 
| 高度 | 非空 | 非空且非 0 | 添加非 0,因为在地面上有太多的可能性。这限制了飞行动物的群体。 | 
| 引擎数量 | = 2 | 新的过滤器限制数据为最常见的商用飞机。 | |
| 飞机质量代码 | 非空 | 新的过滤标准以消除缺失数据的条目。 | |
| 速度 | 非空 | 消除了缺失数据。 | |
| 距离 | 非空 | 消除了缺失数据。 | |
| 物种 | 前 35 种动物物种;移除了“未知”条目 | 允许物种成为特征。 | 
图 10.11 – 新预测高度机器学习模型迭代中过滤标准的更改
根据图 10.7 的最后一行,将物种作为新特征添加到数据中可能对提高预测结果有价值。不同的飞行动物物种偏好巡航高度,这也可以根据地理位置和一年中的时间而变化。
要添加02 Top 40 Species for Height.M。将其粘贴为名为Top 40 Species的新查询。
此查询将创建一个从过滤数据中筛选出的顶级 40 种动物列表,移除了包含“未知”的物种。然后可以为机器学习模型的第二次迭代添加一个新的查询。或者,您可以修改 GitHub 上的现有03 Predict Height v2.M查询,并将其粘贴到Predict Height数据流中。连接是 M 代码的一部分。
您在ML Queries数据流中的查询现在应如下所示:

图 10.12 – 机器学习查询数据流中的查询
用于预测高度的特征更改总结在下表中:
| 在精心整理的 FAA 野生动物碰撞查询中的特征 | 是否包含在预测高度机器学习模型的第一迭代中? | 是否包含在预测高度机器学习模型的第二次迭代中? | 备注 | 
|---|---|---|---|
| 白天时间 | 是 | ||
| 机场 ID | 是 | 是 | 过滤为前 15 个以避免基数问题 | 
| 飞机类别代码 | 过滤为 A,适用于两种情况 | ||
| 飞机质量代码 | 是 | ||
| 引擎数量 | 是 | 第二次迭代中过滤为 2 | |
| 飞行阶段 | 是 | 是 | |
| 高度 | 第二次迭代中移除了 0 | ||
| 速度 | 是 | 是 | |
| 距离 | 是 | 是 | |
| 天空 | 是 | ||
| 降水量 | 是 | ||
| 修复成本调整 | 是 | 是 | |
| 吞入的其他部分 | 是 | ||
| 指示的损伤 | 是 | 是 | |
| 损伤程度 | 是 | 是 | |
| 碰撞的随机部分 | 是 | ||
| 损坏的随机部分 | 是 | 是 | |
| 碰撞的挡风玻璃 | 是 | 是 | |
| 损坏的挡风玻璃 | 是 | ||
| 碰撞的机头 | 是 | ||
| 损坏的机头 | 是 | 是 | |
| 碰撞的发动机 1 | 是 | ||
| 损坏的发动机 1 | 是 | ||
| 吞入的发动机 1 | 是 | ||
| 碰撞的发动机 2 | 是 | ||
| 损坏的发动机 2 | 是 | ||
| 吞入的发动机 2 | 是 | ||
| 碰撞的螺旋桨 | 是 | ||
| 损坏的螺旋桨 | 是 | ||
| 碰撞的机翼或旋翼 | 是 | 是 | |
| 损坏的机翼或旋翼 | 是 | 是 | |
| 碰撞的机身 | 是 | ||
| 损坏的机身 | 是 | ||
| 碰撞的起落架 | 是 | 是 | |
| 损坏的起落架 | 是 | ||
| 碰撞的尾部 | 是 | ||
| 损坏的尾部 | 是 | 是 | |
| 碰撞的灯光 | 是 | ||
| 损坏的灯光 | 是 | ||
| 碰撞的其他部分 | 是 | ||
| 损坏的其他部分 | 是 | ||
| 对飞行的影响 | 是 | 是 | |
| 物种 ID | 是 | 过滤到前 35 个以避免基数问题 | |
| 警告 | 是 | ||
| 看到的数量 | 是 | ||
| 碰撞的次数 | 是 | 是 | |
| 尺寸 | 是 | 是 | |
| 碰撞的发动机数量 | 是 | ||
| 碰撞的发动机百分比 | 是 | ||
| 吞入的发动机数量 | 是 | ||
| 吞入的发动机百分比 | 是 | ||
| 损坏的发动机数量 | 是 | ||
| 损坏的发动机百分比 | 是 | ||
| 发动机代码信息键 | 是 | ||
| 月份 | 是 | 是 | |
| 总特征 | 50 | 20 | |
| 总行数 | 35,169 | 9,751 | 
图 10.13 – 预测高度 ML 模型的第一和第二次迭代的特征
与预测尺寸 ML模型一样,你可以重新训练现有的 ML 模型或构建一个新的模型。再次强调,重新训练现有的 ML 模型将防止你的工作空间中出现伪影扩散(特别是如果你多次重新训练)。使用图 10.11和图 10.13中的标准重新训练后,你将得到一个略好的 AUC 结果——即,第二次尝试的 83%与第一次尝试的 80%:

图 10.14 – 预测高度 ML 第二次迭代的 83%更好的 AUC
83%的 AUC 是好的,但你能否将它提高到 90%甚至更高?当查看残差误差按高度图表时,点击图表左上角最大的气泡,它也有最高的残差误差:

10.15 – 在 100 英尺和 500 英尺增量处的报告高残差误差和聚类
如图 10.15所示,在 0 到 2,000 英尺的高度之间有 136%的残差误差。此外,正如在第九章(B19500_09.xhtml#_idTextAnchor125)中所述,报告仍然似乎以 100 英尺的增量聚集,在 500 英尺的增量上聚集得更强。报告中的高度是否已四舍五入到 100 英尺或 500 英尺的增量?在没有更多关于数据收集过程的信息的情况下,您无法回答这个问题。
在意识到您可以通过减少特征和优化训练和测试数据的过滤标准来实现的改进后,您在前进方向上有几个不错的选择:
- 
如果您能聘请一个数据科学团队,您的测试已经证明在预期范围内预测撞击高度是可能的。数据科学团队可能可以使用高级工具和技术来改进现有模型。
 - 
您可以向您的利益相关者报告,预测身高是一个现实的目标,但务必描述不同身高范围内的残差误差。
 
现在,让我们结束本章。
摘要
在本章中,您回顾了您构建的每个机器学习模型。您决定从数据科学团队或您的利益相关者那里寻求关于预测损坏机器学习模型下一步行动的指导。对于预测尺寸机器学习模型,您发现其预测价值很小,需要寻求下一步行动的指导。当您添加新的过滤标准并缩小特征选择时,预测身高机器学习模型得到了改进,结果很有希望。此时,您必须与数据科学团队合作或与您的利益相关者会面,以获得关于模型未来计划的指导。
在第十一章(B19500_11.xhtml#_idTextAnchor152)中,您将引入来自 FAA 野生动物撞击数据库的新数据,并通过您的预测损坏机器学习模型对其进行测试,以检验结果。这样做时,您将学习如何在 Power BI 数据刷新时使用您的机器学习模型对新数据进行评分。您还将探索通过将 Microsoft OpenAI 功能添加到解决方案中找到新价值的机会。
第十一章:应用 Power BI 机器学习模型
在第十章中,我们回顾了训练和测试您所有三个机器学习模型的结果。我们审查并讨论了您未来迭代和机器学习模型的计划。预测损坏 ML 和预测高度 ML 模型在测试中表现出良好的结果,而预测尺寸 ML 模型还有改进的空间。对于您所有的模型,最佳下一步是审查结果与您的利益相关者,并在可能的情况下与您的数据科学团队会面,以确定是否更高级的工具和技术可以改进您最初的工作。
对于本章,您将应用您构建的机器学习模型来处理来自 FAA 野生动物撞击数据库的新数据。本书到目前为止使用的数据截止到 2022 年 10 月 16 日。本章的新数据将是自该日期至 2023 年 3 月 11 日之间添加到公开数据中的报告。本章的目的将是回顾您可以通过哪些流程引入新数据,并自动化评分过程以及使用机器学习模型进行预测的过程。最后,您将审查新评分数据的成果,以查看结果是否与 Power BI 对机器学习模型进行的测试结果相似。
技术要求
如往常一样,请确保您有权访问以下内容:
- 
来自 FAA 网站或 Packt GitHub 站点的 FAA 野生动物撞击数据文件
 - 
Power BI Pro 许可证
 - 
以下 Power BI 许可选项之一用于访问 Power BI 数据流:
- 
Power BI Premium
 - 
Power BI Premium 按用户许可
 
 - 
 - 
以下选项之一用于将数据导入 Power BI 云服务:
- 
Microsoft OneDrive(与 Power BI 云服务连接)
 - 
Microsoft Access + Power BI 网关
 - 
Azure Data Lake(与 Power BI 云服务连接)
 
 - 
 - 
Power BI 桌面版 2023 年 4 月或更高版本(无需许可证)
 
将新的 FAA 野生动物撞击数据引入 Power BI
与项目利益相关者和数据科学团队的会议将确定您的 Power BI 机器学习模型的最佳下一步。在此期间,您可以将这些机器学习模型应用于新数据,然后比较预测与实际结果。采取这些步骤将帮助您学习如何将您的机器学习模型添加到 Power BI 的自动刷新过程中。
下载和配置新的 FAA 野生动物撞击数据
如第一章中所述,您应该首先下载 FAA 野生动物打击数据的新副本。您迄今为止为此书使用的数据包含到 2022 年 10 月 16 日的数据。现在,您将拉入新的数据,以便与使用历史数据训练和测试的 Power BI ML 模型进行评分。新文件包含到 2023 年 3 月 1 日的数据。您可以在 Packt GitHub 网站上下载用于本书此部分的文本文件的副本,链接如下:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-11/STRIKE_REPORTS_new.txt。
在现实世界的数据项目中,最常见的行动路径是更新源文件以使用文件的较新版本,或者根据计划自动增量刷新从源数据的数据。由于我们只是使用这些数据来测试您的 ML 模型,并且由于这是一个简单的研讨会,本书的说明将作为单独的查询在数据流中提取新数据。作为一个单独的查询,原始源数据将保持不变,以防需要为 ML 模型进行源到目标的比较。
Power BI 可以从许多来源自动提取数据,但 FAA 野生动物打击数据的来源是一个 zip 文件中的 Access 数据库,无法轻松自动将其拉入 Power BI。如果您想自动化从网络下载 FAA 野生动物打击数据的过程以供您未来使用,您需要使用 Azure Data Factory 等工具配置夜间提取。Azure Data Factory 和其他数据移动工具超出了本书的范围,但大量的在线文档应该能够指导您完成夜间提取的过程,该过程提供用于在 Azure Data Lake 或 Azure SQL 数据库等目的地存储的文件。
就书中提供的示例而言,将假设从 Packt GitHub 网站下载并添加到 OneDrive 中的文本文件。如果您使用其他方法,您应该能够轻松调整后续说明中 Power BI 数据流的源。
将新的 FAA 野生动物打击数据添加到打击报告数据流中
一旦新的 FAA 野生动物打击数据文件存入 OneDrive,您就可以使用数据流将其添加到 Power BI 云服务中。首先,打开名为打击报告的数据流,导航到编辑表屏幕。按照以下步骤将新数据添加到原始数据组:
- 
前往获取数据 | 文本/CSV。
 - 
STRIKE_REPORTS_new.txt文件。 - 
点击选择,然后点击下一步。
 - 
点击创建。
 - 
将查询移动到原始数据组。
 - 
如果应用步骤中添加了更改列类型,请将其移除。
 - 
将查询重命名为打击报告 新。
 
现在,你可以将新打击报告查询的一个版本添加到Curated Queries组,该组将准备用于 ML 查询。
- 
右键点击Strike Reports New并选择Reference。
 - 
将新文件移动到Curated Report Queries组。
 - 
重命名文件
Strike Reports Curated New。 
接下来,从 Packt GitHub 网站上的此链接复制02 Curated Data – Strike Reports Curated New.M的逻辑:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-11。
你的Strike Reports数据流现在应该看起来像这样:

图 11.1 – 添加了新数据查询的 Strike Reports 数据流
一旦添加了新查询,继续处理数据流。现在你已准备好进入ML Queries数据流,该数据流将用于准备 Power BI ML 的数据。在运行 ML 模型进行评分之前,你将对新数据应用相同的过滤和转换标准。
将新数据转换为准备与 Power BI ML 查询评分
为了准备新的 FAA 野生动物打击数据,以便由三个 Power BI ML 模型进行评分,首先打开ML Queries数据流的Edit Tables视图。一旦打开,请按照以下步骤操作:
- 
选择Get data | Dataflows,并点击Next。
 - 
选择Strike Reports Curated New,并点击Create。
 - 
将新查询移动到Sources组。
 - 
右键点击Strike Reports Curated New并取消勾选Enable load,这样你就不存储数据的副本。
 
现在你已准备好创建新的查询,这些查询将被转换和过滤以满足你的 Power BI ML 模型的标准!
你的下一步是重新创建为三个 ML 模型创建的逻辑,然后将该逻辑应用于新的 FAA 野生动物打击数据。ML 模型是针对 2022 年 10 月 16 日之前应用于数据行的特定过滤和转换标准进行训练的。你将对 2022 年 10 月 16 日之后添加到数据库中的数据进行相同的过滤和转换步骤,以便它们可以通过 ML 模型进行评分。
而不是从现有查询中剪切和粘贴过程,你可以使用此链接的 Packt GitHub 存储库中的 M 查询:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-11。按照以下步骤操作:
- 
在ML Queries数据流中创建一个新的组,命名为ML Scoring Queries。
 - 
选择Get data | Blank query。
 - 
从 Packt GitHub 网站上标题为
03 ML 评分查询 - 预测损坏ML 评分.M的查询中复制 M 代码。 - 
将该代码粘贴到空白查询字段中并点击下一步。
 - 
重命名查询
预测损坏 ML 评分并将其移动到ML 评分 查询组。 - 
对 Packt GitHub 网站上名为
04 ML 评分查询 - 预测大小 ML 评分.M的查询重复步骤 2-5,并将查询命名为预测大小ML 评分。 - 
对 Packt GitHub 网站上名为
05 ML 评分查询 - 预测高度 ML 评分.M的查询重复步骤 2-5,并将查询命名为预测高度ML 评分。 - 
点击保存并关闭以保存并关闭您的数据流。
 
您的ML 查询数据流现在应该看起来像这样:

图 11.2 – 将用于使用 Power BI ML 模型评分新数据的查询组添加到新查询
现在您已经有了准备使用 Power BI ML 模型评分的新 FAA 野生动物撞击数据!这些新数据未用于训练或测试原始 ML 模型,且是在原始数据之后添加到源数据库中的,现在已准备好评分,以便您可以在使用新生成数据时评估您的 ML 模型的效用。
将 Power BI ML 模型应用于评分新的 FAA 野生动物撞击数据
经过 11 章的工作,您终于准备好将新数据通过您的 Power BI ML 模型运行并评估产生的预测!您将运行将每个 ML 模型应用于新数据的过程,然后浏览评分结果以比较预测与实际结果。
在 Power BI 中应用预测损坏 ML 模型
您现在将引用来自ML 查询数据流的预测损坏 ML 评分数据与预测损坏 ML模型进行对比,以便进行评分。图 11.3 是您用于训练、测试和现在应用预测损坏 ML 模型的数据的快速总结:
| 训练 | 测试 | 应用(新) | |
|---|---|---|---|
| 行数 | 10,165 | 4,326 | 653 | 
| 日期范围 | >= 1/1/2014 & <= 10/16/2022 | >= 1/1/2014 & <= 10/16/2022 | > 10/16/2022 & <= 3/1/2023 | 
图 11.3 – 用于训练、测试和将新数据应用于预测损坏 ML 的数据的详细信息
按照以下步骤将新数据添加到预测损坏 ML数据流的编辑表视图:
- 
选择获取数据 | 数据流,然后点击下一步。
 - 
从ML 查询数据流中选择预测损坏 ML 评分并点击创建。
 - 
点击保存并 关闭。
 - 
刷新预测损坏 ML数据流。
 
现在您可以将预测损坏 ML模型应用于评分新数据。首先,导航到 ML 模型并点击应用模型的图标:

图 11.4 – 应用 ML 模型的图标
接下来,选择要评分的新数据的查询,并输入你希望用作预测损伤截止值的阈值。如你从 第九章 回忆的那样,最大利润的概率阈值是 0.74,但你可以在 0 和 1 之间选择任何值。以下示例显示 0.5:

图 11.5 – 选择应用 ML 模型的输入表和阈值
当你点击 保存并应用 时,Predict Power BI ML 模型将被用于对新数据进行预测!如果新数据以一定的节奏变化,你可以设置数据流以刷新,它将自动按计划评分新数据。
一旦完成数据流的评分,你将能够访问 Predict Damage ML 数据流中的两个新表。在撰写本书的过程中,一些查询需要重新验证。如果你遇到错误,你可能需要遵循带有黄色警告图标的查询中的提示,并再次保存你的凭据。其中一张表将包含新评分的数据,另一张表将包含用于做出预测的特征的解释。从 Power BI Desktop 连接到这些数据流表,你可以看到第一个名为 Predict Damage ML Score enriched Predict Damage ML 的表包含评分的行,基于概率阈值的预测结果,用于与概率阈值比较的评分,关于预测的解释,以及一个索引列,它是第二个表的外键:

图 11.6 – 添加了预测和解释的评分新数据表
第二张表名为 Predict Damage ML Score enriched Predict Damage ML explanations,并为每个用于做出预测的特征包含一个单独的行。在本书的编写过程中,Power BI 服务偶尔会出现一个错误,导致此表在数据流中显示为空白。如果你遇到这个错误,使用 Power BI Desktop 连接到此表将允许你看到数据。贡献字段被加起来以计算第一个表的预测评分值,该值与概率阈值进行比较。负分会降低最终评分,而正分会增加评分:

图 11.7 – 解释每个评分行的特征表
在 Power BI Desktop 模型视图 中,你可以看到这些表之间存在一对一的关系:

图 11.8 – 评分数据和解释之间存在一对一的关系
你可以使用 Power BI 创建交互式报告来探索新数据的 ML 模型评分结果。首先,你审查单行评分数据的各个特征的解释。为了澄清,以下截图是针对一个单一事件,由 索引 7 表示,该事件被赋予了预测分数 18.00,并记录为预测 无损伤,因为预测分数 18 小于 50% 的概率阈值。你可以看到预测分数 18 是通过将表格(右下角)和水下图表(左下角)中的所有 贡献 值相加得到的:

图 11.9 – 左半部分 – 用于预测单一野生动物撞击事件的损伤特征贡献
这张截图已被分成两个图,以确保你可以阅读。

图 11.10 – 右半部分 – 用于预测单一野生动物撞击事件的损伤特征贡献
在分成 图 11.9 和 图 11.10 的瀑布图中,你可以放大查看,可以看到左侧的特征有助于保持预测分数低,而右侧的特征增加了结果:

图 11.11 – 对事件预测分数 18 有贡献的特征
当给定 索引 值为 2 的另一个事件时,你会看到预测是错误的,因为它预测了损伤,但实际上没有报告。在预测得分为 85 的预测分数中,权重较强的特征可以排序到表格的顶部。这种分析可以帮助你识别可能对预测不准确有贡献的特征或特征组合,或者对预测影响较小的特征。例如,查看解释,你可以看到撞击 2-10 只大型动物对高预测分数有贡献:

图 11.12 – 左半部分 – 预测到事件有损伤,但实际上没有
图 11.12 和 图 11.13 各自显示了屏幕的一半,以便更容易阅读。

图 11.13 – 右半部分 – 预测到事件有损伤,但实际上没有
在 Power BI 中使用这些表格,您还可以汇总结果以了解规模差异。例如,在以下报告中,您可以看到按 Size 分解的 Precision % 和 Accuracy 指标,具有可调整的概率阈值,预测分数的分布桶,以及特征解释的汇总值:

图 11.14 – 左半部分 – 新数据行的汇总评分结果
屏幕的另一部分在 图 11.15 中显示。

图 11.15 – 右半部分 – 新数据行的汇总评分结果
点击 Size 下的 Small 以过滤整个页面,您可以看到从平均值和中位数的角度来看,Size 为 Small 强烈地导致预测分数降低:

图 11.16 – 左半部分 – 将 Size 设置为 Small 的报告过滤结果
图 11.17 显示了屏幕的另一部分。

图 11.17 – 右半部分 – 对 Size 为 Small 的报告进行过滤
您可以将一些指标与已审查的模型性能报告中的值进行比较,该报告在 第九章 中已审查。记住,召回率 是可能预测为有损坏的损坏事件的百分比,而 精度 是预测为有损坏且实际上确实有损坏的记录数:
| 测试 | 新数据评分 | |
|---|---|---|
| 概率阈值 .5 下的召回率 | 88% | 80% | 
| 概率阈值 .5 下的精度 | 30% | 29% | 
| 概率阈值 .74 下的召回率 | 67% | 59% | 
| 概率阈值 .74 下的精度 | 49% | 49% | 
图 11.18 – 新数据召回率和精度与原始测试结果比较
新数据的结果似乎与测试结果基本一致,但现在您可以深入数据并自行判断!您现在可以继续进行到 Predict Size ML 模型,以在新数据上对其进行测试。
在 Power BI 中应用 Predict Size ML 模型
将新数据应用于 Predict Size ML 模型将与之前为 Predict Damage ML 所做的操作相比是一个重复的任务。如您从 第十章 中回忆的那样,Predict Size ML 模型在测试期间没有取得很好的结果,AUC 为 61%。ML 模型可能需要数据科学团队的重新评估或进行大量工作以提高 AUC。对新数据进行评分仍然是一项有价值的练习,有助于确定改进领域。
为了减少重复,以下是将新数据添加并应用 ML 模型的步骤摘要。按照以下步骤将新数据添加到 Predict Size ML 数据流的 编辑表格 视图中:
- 
选择 获取数据 | 数据流,然后点击 下一步。
 - 
从 ML 查询 数据流中选择 Predict Size ML Score 并点击 创建。
 - 
点击 保存并关闭。
 - 
刷新 Predict Size ML 数据流。
 - 
导航到 Predict Size ML 模型 屏幕,并点击 应用 ML 模型。
 - 
选择 Predict Size ML Score 输入表并点击 保存并应用。
 
评分完成后,你可以将评分数据和相关的特征贡献表拖入 Power BI Desktop 以查看结果。你可以为 尺寸 预测构建一个与 损害 预测类似的报告:

图 11.19 – 左半部分 – 新数据 Predict Size ML 评分的评估
为了便于查看,图 11.19 展示了屏幕的左半部分,而 图 11.20 展示了右侧。

图 11.20 – 右半部分 – 新数据 Predict Size ML 评分的评估
与该 ML 模型的原始测试一样,结果几乎与随机猜测一样好。只有 119 行数据符合测试标准,这可能是结果不佳的原因之一。你可以将正确分类的结果与原始测试结果进行比较:
| 尺寸 | 测试 | 新数据评分 | 
|---|---|---|
| 小型 | 70% | 66% | 
| 中等 | 36% | 26% | 
| 大型 | 61% | 63% | 
图 11.21 – 比较原始测试结果与 Predict Size ML 新评分数据
虽然新的结果仍然不是很好,但它们似乎与原始测试结果处于同一范围内。你现在可以继续对新数据进行评分,以构建最终的 ML 模型,Predict Height ML!
在 Power BI 中应用 Predict Height ML 模型
正如你对新数据的 Predict Size ML 模型评分所做的那样,你可以从 Predict Height ML 数据流的 编辑表格 视图开始,遵循类似的步骤对新数据进行评分:
- 
选择 获取数据 | 数据流,然后点击 下一步。
 - 
从 ML 查询 数据流中选择 Predict Height ML Score 并点击 创建。
 - 
点击 保存并关闭。
 - 
刷新 Predict Height ML 数据流。
 - 
导航到 Predict Height ML 模型屏幕,并点击 应用 ML 模型。
 - 
选择 Predict Height ML Score 输入表并点击 保存并应用。
 
与前两个机器学习模型一样,你可以将评分数据和相关的特征贡献表拖入 Power BI 桌面以查看结果。在使用回归机器学习模型时,你不是在预测是/否或分类值,而是在预测可以与实际值进行比较的数值。在回归中,不一定有正确或错误答案,而是可以比较预测数值与现实的接近程度。例如,你可以预测飞机在离地面 2,000 英尺处撞到了一只鸟,但如果实际上是在 2,052 英尺处发生,这还是一个好的预测吗?这个问题在现实世界中的答案取决于利益相关者和最终用户的要求!
下图展示了使用预测高度机器学习模型对新数据进行评分的预测高度、实际高度和特征贡献信息:

图 11.22 – 左半部分 – 比较预测高度与实际高度

图 11.23 – 右半部分 – 比较预测高度与实际高度
如本书之前所述,实际高度值往往落在百位或千位的整数上。例如,这里展示的新数据中有 8 份报告记录在 4,000 英尺。这是由于报告提交者的四舍五入吗?是由于靠近机场的飞机的标准高度吗?还是有其他原因?没有更多信息,无法知道原因。在页面左下角的按字段平均贡献图表中,你注意到在汇总级别和筛选级别,距离、速度、机场 ID和飞行阶段特征往往有最大的贡献。
在图 11.24中展开列出每个单个事件的表格,你可以看到预测高度与实际高度之间的残差值:

图 11.24 – 单个事件的预测高度、实际高度和残差值
在图 11.24中,注意预测的准确性范围在事件之间有相当大的变化。可能有许多不同的因素导致了不准确。预测能否更好?或者,由于事件性质和数据记录过程,数据中存在自然变异性?与项目利益相关者、负责记录数据的人员和数据科学专家的对话可以帮助你了解更多关于这个特定用例的信息。
您的项目已经达到一个阶段,您在 Power BI 中设计了 ML 模型,训练了它们,测试了它们,然后将它们应用到 Power BI 中新的数据上,这种方式可以与 Power BI 中的自动化流程协同工作。
摘要
在本章中,您将新的 FAA 野生动物撞击数据引入 Power BI,并将数据转换为与您原始架构设计相匹配。然后,您将数据转换为满足用于训练和测试您的预测损伤 ML、预测尺寸 ML和预测高度 ML模型的数据的过滤和转换要求。接着,您通过应用训练好的 Power BI ML 模型对新数据进行预测。最后,您回顾了预测结果,并将它们与实际结果进行了比较。
第十二章将为您的项目增添一个特别的转折!对于那些身处现实世界中的您,数据项目中的范围和期望的改变是经常发生的事情。当本书正在编写时,OpenAI和微软 OpenAI正迅速成为媒体 sensation。您的利益相关者要求您在项目中找到一些 OpenAI 的应用案例。这是您项目范围的一次改变,但将是一次激动人心的冒险!第十二章将回顾 OpenAI 和微软 OpenAI 的提供内容,因为它们可以应用于此项目以增加价值。
第四部分:将 OpenAI 与 Power BI 集成
在本书的最后一部分,您将了解如何利用 Open AI 和 Azure OpenAI 来增强您的 BI 工作。在最后一章中,您将回顾本书中涵盖的一些关键思想和经验教训,并思考如何将它们应用到您自己的工作中。
以下三个章节构成了第四部分:
- 
第十二章, OpenAI 的应用案例
 - 
第十三章, 在 Power BI 数据流中使用 OpenAI 和 Azure OpenAI
 - 
第十四章, 项目回顾与展望
 
第十二章:OpenAI 的用例
在上一章中,您通过 Power BI ML 模型获取了新鲜数据,并将输出结果与 Power BI 在训练阶段进行的自动化测试进行了比较。FAA 野生动物撞击数据库提供了超出训练和测试数据集范围的真实世界生成的新鲜数据。这些数据有可能作为使用 Power BI ML 模型与数据流协同进行新数据评分的框架。最近评估的数据产生了与测试数据得出的预期结果相对一致的结果。
在本章中,您的利益相关者要求您将 OpenAI 功能集成到解决方案中。OpenAI 在 IT 领域受到了很多关注,而这个项目正是在这一趋势下实施的。尽管这涉及范围的变化,但项目的受益者对这一举措完全支持并持乐观态度。在本章中,您将审查几个与您的项目相关的 OpenAI 用例,然后回顾开始所需的先决条件。
技术要求
本章的要求略有不同:
- 
原始开源 OpenAI 的账户:
openai.com/。 - 
可选 – Azure OpenAI 在您的 Azure 订阅中:
azure.microsoft.com/en-us/products/cognitive-services/openai-service。本书的编写方式使得这一部分是可选的,因为并非所有人都可以在出版时获得。 - 
来自 FAA 网站或 Packt GitHub 网站的 FAA 野生动物撞击数据文件。
 - 
Power BI Pro 许可证。
 - 
以下 Power BI 许可证选项之一用于访问 Power BI 数据流:
- 
Power BI Premium
 - 
Power BI Premium 每用户
 
 - 
 - 
将数据导入 Power BI 云服务的一种选项:
- 
Microsoft OneDrive(与 Power BI 云服务连接)
 - 
Microsoft Access + Power BI 网关
 - 
Azure Data Lake(与 Power BI 云服务连接)
 
 - 
 
OpenAI 和 Azure OpenAI 的简要概述和参考链接
2022 年下半年,全球媒体和信息技术的爱好者们被 ChatGPT 的潜力所吸引。ChatGPT 是一个庞大的 大型语言模型(LLM)聊天机器人,它促进了自然语言交流、代码生成和其他功能,由 OpenAI 开发。
OpenAI
OpenAI 是一个 AI 研究组织,感兴趣的读者可以在此链接中找到更多关于它的信息:openai.com/about。
著名的 ChatGPT 是利用 生成式预训练(GPT)模型构建的,OpenAI 还生产其他类型的 AI 模型,如用于图像生成的 DALL-E。本书避免深入探讨 OpenAI 的复杂细节,因为互联网上已经有了大量相关信息。
OpenAI 平台建立在微软的 Azure 云基础设施之上,为平台多样化的服务提供了强大而可靠的基础。为了利用 Azure 平台强大的安全性、治理和企业集成能力,微软提供了 Azure OpenAI,以便无缝访问 OpenAI 的模型和功能,同时同时受益于 Azure 平台的能力。
Azure OpenAI
要深入了解 Microsoft Azure OpenAI 的众多优势,请访问以下链接:azure.microsoft.com/en-us/products/cognitive-services/openai-service。
接下来的这两章将专注于使用 OpenAI 技术分析 FAA 野生动物撞击数据。在前面章节的基础上,我们将探讨 OpenAI 和 Azure OpenAI 的多种简单用例,这两者都在信息技术行业中迅速发展。具体来说,我们将专注于利用 GPT 模型进行基本摘要和描述技术。虽然会提供 OpenAI 和 Azure OpenAI 的代码片段,但随附的截图将仅展示传统的 OpenAI 示例,因为 Azure OpenAI 目前无法用于本出版物。
作为技术领域的积极参与者,不断评估和改进书面内容非常重要。在本章中,读者可能已经注意到写作风格的变化,这可以归因于 OpenAI ChatGPT 的使用。尽管作者保持不变,但 ChatGPT 的协助显著提高了文本的清晰度和可读性。实际上,你目前正在阅读的段落已经根据随附截图中的修改使用 ChatGPT 进行了优化。随着我们继续将先进技术融入写作过程,了解其潜在优势和局限性对于充分利用其功能至关重要。

图 12.1 – 使用 OpenAI ChatGPT 重写的本书段落
让我们与 OpenAI 一起踏上旅程,探索在 Power BI 解决方案中分析 FAA 野生动物撞击数据的技术!
使用 OpenAI 生成描述
我们的第一步将是确定一个合适的用例,利用 GPT 模型的力量来生成 FAA 野生动物撞击数据的描述。我们的目标是通过对 GPT 模型创建提示,以提供关于我们正在处理的数据的详细信息和洞察力来释放外部数据的潜力。通过这个用例,我们将探讨 GPT 模型在数据分析与解释方面所能带来的价值。
例如,ChatGPT 对 FAA 野生动物撞击数据库的描述可能看起来像这样:

图 12.2 – OpenAI ChatGPT 对 FAA 野生动物撞击数据库的描述
在你使用 FAA 野生动物撞击数据库的解决方案中,你可以使用 GPT 模型将数据与外部数据关联起来。以下是一些示例,包括以下附加信息:
- 
机场
 - 
FAA 区域
 - 
航空运营商
 - 
飞机
 - 
飞机引擎
 - 
动物物种
 - 
年份时间
 
当大量单独行在数据集中的评分过程自动化时,我们可以使用 GPT 模型为每一行生成描述性文本。值得注意的是,ChatGPT 的方法与此不同,因为它作为一个聊天机器人,调用不同的 GPT 模型并将过去的对话整合到未来的答案中。尽管 GPT 模型在解决方案中的使用方式不同,但 ChatGPT 仍然可以作为一个有价值的工具来测试各种用例。
当使用 GPT 模型时,用于提问和给出指示的自然语言提示将影响生成文本的上下文。提示工程是 OpenAI 和 LLMs 中迅速崛起的热门话题。以下提示在使用“狗”作为 GPT 查询主题时将提供不同的答案:
- 
告诉我关于狗的信息 - 
从进化生物学家的角度,告诉我关于狗的信息 - 
告诉我狗的历史 - 
以三年级学生的水平,告诉我关于狗的信息 
在规划在大量数据上使用 OpenAI 时,你应该测试和评估你的提示工程策略。对于这本书,用例将保持简单,因为目标是教授与 Power BI 的工具集成。提示工程专业知识可能会成为今年许多书籍和博客的主题。
你可以在数据中测试对 FAA 区域描述的不同请求:

图 12.3 – 使用 OpenAI ChatGPT 测试描述 FAA 区域的实用性
你也可以结合不同的数据元素以获得更详细的描述。以下示例结合了数据字段和要提出的问题(告诉我关于州 Month 的物种):

图 12.4 – 使用 ChatGPT 测试关于物种、州和月份的数据组合
有许多不同的选项需要考虑。为了同时结合几个数据领域,并提供有关数据的有用背景,你决定为描述飞机和运营商制定一个用例。以下是一个可以使用 OpenAI ChatGPT 进行测试的示例公式:告诉我关于运营商运营的飞机型号 Aircraft 在三句话中。以下是一个使用来自 FAA 野生动物撞击数据库单行数据的示例:

图 12.5 – OpenAI ChatGPT 描述的运营商机队中飞机的信息
从提示工程的角度来看,对 FAA 野生动物撞击数据库中的多份报告提出此问题需要在每一行数据上运行以下自然语言查询(列名在括号内表示):
Tell me about the airplane model [Aircraft] operated by[Operator] in three sentences:
在下一章中,你将使用此提示来处理 FAA 野生动物撞击数据库中的报告,其中飞机和运营商字段已填写。在通过 OpenAI 添加额外信息选择用例之后,建议你获得利益相关者的批准以验证用例的实用性。一旦获得批准,你可以继续探索新的用例,这些用例涉及利用 OpenAI 生成从 FAA 野生动物撞击数据中提取的数据的摘要。
使用 OpenAI 总结数据
你还可以使用 OpenAI GPT 模型来总结数据。许多数据库都有免费文本字段,包括来自各种来源的条目,如调查结果、医生笔记、反馈表以及关于我们在这本书中使用的 FAA 野生动物撞击数据库事件报告的评论。这些文本输入字段代表广泛的内容,从结构化数据到非结构化数据,这使得在没有复杂自然语言处理工具的帮助下从中提取意义变得具有挑战性。
FAA 野生动物撞击数据库中的备注字段包含由填写事件报告表的人员输入的文本。以下截图显示了 Power BI 中最近条目的一些备注示例:

图 12.6 – 来自 FAA 野生动物撞击数据库的备注示例
你会注意到备注在内容格式、内容长度和使用的缩写方面有很大的变化。通过在开头简单添加一个语句“总结以下:”来测试其中一条条目,得到以下结果:

图 12.7 – 使用 ChatGPT 对单一事件的备注进行总结
对较详细的备注字段进行总结得到以下结果:

图 12.8 – 稀疏结果字段的总结
为了从 FAA 野生动物撞击数据的评注字段中获得统一的摘要,必须考虑在稳健性、稀疏性、句子完整性和是否存在缩写和快速笔记方面有所不同的条目。伴随此技术书籍的工作坊是您尝试各种数据字段和探索不同结果的机会。本书和 Packt GitHub 网站都将使用标准化格式作为输入到 GPT 模型的输入,该模型可以结合事件数据并为每一行生成一致的摘要。以下是一个格式示例:
Summarize the following in three sentences: A [Operator] [Aircraft] struck a [Species]. Remarks on the FAA report were: [Remarks].
使用 FAA 野生动物撞击数据库事件的数据在 OpenAI ChatGPT 中测试此方法,如下所示:

图 12.9 – OpenAI ChatGPT 测试评注字段的摘要
接下来,您测试了另一个场景,其中评注字段中的文本更加稳健:

图 12.10 – 使用 OpenAI ChatGPT 测试的另一个具有稳健评注的场景
根据您使用 OpenAI ChatGPT 进行的初步测试结果,您决定继续使用之前使用的文本生成和摘要用例。首先,您将获得利益相关者的批准,然后开始开发。在您开始在 Power BI 中开发用例之前,您需要决定 API 调用中使用的 GPT 模型。OpenAI 和 Azure OpenAI 都支持使用 REST API 调用 GPT 模型。这些 API 将用于为每个您想要用于描述生成和摘要的数据行生成文本。
选择适用于您的用例的 GPT 模型
OpenAI 和 Azure OpenAI 提供多种不同的 GPT 模型,可以通过 API 迭代调用。在撰写本书时,新的 GPT-4 模型的可供性有限,这是最新和最优秀的发布。GPT-3.5 模型在 OpenAI 和 Azure OpenAI 中均有提供,并有一些不同的选项。以下信息是在 2023 年 3 月 26 日从 OpenAI 网站此链接引用的:platform.openai.com/docs/models/gpt-4。
| 最新模型 | 描述 | 最大 token 数 | 训练数据 | 
|---|---|---|---|
| gpt-3.5-turbo | 最强大的 GPT-3.5 模型,以 text-davinci-003 的十分之一成本优化聊天。将使用我们最新的模型迭代进行更新。 | 4,096 个 token | 最多至 2021 年 9 月 | 
| gpt-3.5-turbo-0301 | 2023 年 3 月 1 日的 gpt-3.5-turbo 快照。与 gpt-3.5-turbo 不同,此模型将不会接收更新,并且仅在截至 2023 年 6 月 1 日的 3 个月期间得到支持。 | 4,096 个 token | 最多至 2021 年 9 月 | 
| text-davinci-003 | 可以以更好的质量、更长的输出和更一致的指令遵循性完成任何语言任务,比 Curie、Babbage 或 Ada 模型更好。还支持在文本中插入补全。 | 4,097 tokens | 截至 2021 年 6 月 | 
| text-davinci-002 | 与 text-davinci-003 具有相似的能力,但使用监督微调而不是强化学习进行训练。 | 4,097 tokens | 截至 2021 年 6 月 | 
| code-davinci-002 | 优化用于代码补全任务 | 8,001 tokens | 截至 2021 年 6 月 | 
图 12.11 – 2023 年 3 月 26 日 OpenAI 上可用的 GPT-3.5 模型(信息来自 OpenAI 网站)
GPT-3.5 模型将用于本书和研讨会,因为读者可能无法访问 GPT-4 模型。在考虑模型并将它们与你的用例匹配时,请考虑以下因素:
| 最新模型 | 考虑因素 | 
|---|---|
| gpt-3.5-turbo | 最新的添加,专为速度和低成本构建 | 
| gpt-3.5-turbo-0301 | GPT-3.5-turbo 的前一个版本 | 
| text-davinci-003 | 多功能文本模型,比 gpt-3.5-turbo 更贵且速度更慢 | 
| text-davinci-002 | 与 text-davinci-003 类似,但结果不那么复杂 | 
| code-davinci-002 | 优化用于编写代码 | 
图 12.12 – 选择 GPT 模型的考虑因素
根据你目前的研究,gpt-3.5-turbo 似乎是最好的测试你用例的选择,但 text-davinci-003 在撰写本书时已经存在更长时间,并且有更好的参考文献。你的用例是要做以下事情:
- 
从单独报告的野生动物撞击事件中提供有关飞机的额外信息
 - 
总结用例中的信息
 
替换不同的 GPT 模型是一个相当简单的过程,即重定向 API 调用。对于你自己的项目,你应该测试所有选项,以确定最适合你用例的最佳 GPT 模型。
在本书的下一章中,你决定使用 text-davinci-003 来生成关于飞机的新描述,并总结野生动物撞击事件的评论。这是最佳选择吗?你需要进行广泛的测试,并选择最佳的标准,这些是全新的技术,没有历史标准来设定基线。对于这本书和研讨会,你将做出这个选择,以便使用一个应该提供合理结果的 GPT 模型来推进事情。
API 调用也可以通过额外的设置进行配置。例如,temperature 和 top_p 设置可以改变结果,从倾向于简单和直接的事实到更富有创造性的答案。小心使用这些设置,因为结果中的创造性可能会导致错误答案,这些错误答案被称为 幻觉。
使用 OpenAI API
关于温度、top_p设置和幻觉的更多信息,可以在以下链接中找到:platform.openai.com/docs/api-reference/completions/create#completions/create-temperature.
本书和研讨会不会深入探讨这些设置的细节或进行比较,而是将专注于在 Power BI 中实现这些 GPT 模型的技术实现。
摘要
在本章中,您已经深入探讨了与 OpenAI 和 Microsoft Azure OpenAI 相关的根本概念,以及如何使用这些平台生成和总结文本。此外,您还探讨了将 OpenAI 和 Azure OpenAI 的 GPT 模型集成到您的 Power BI 解决方案中使用的几种选项,这些选项是利用 FAA 野生动物撞击数据。经过仔细的评估过程,确定将使用text-davinci-003 GPT 模型来总结 FAA 野生动物撞击数据报告中的备注,并生成关于报告中飞机的新描述性信息。
第十三章将致力于在 Power BI 数据流中实现功能,使您可以无缝调用 OpenAI 和 Azure OpenAI 的 REST API 进行数据操作。这些 API 将促进您的摘要和描述性生成用例的成功实施,从而为您的解决方案提供新的能力,以应对 FAA 野生动物撞击数据带来的挑战。有了这些高级功能,每次数据流刷新时,都可以轻松高效地调用 OpenAI 或 Azure OpenAI。
在您的项目中集成这些尖端功能无疑将增强其功效,提供一种简化和优化的数据摘要和描述性生成方法。
第十三章:在 Power BI 数据流中使用 OpenAI 和 Azure OpenAI
本书第十二章概述了 OpenAI 和 Azure OpenAI 技术。该章节还探讨了使用 FAA 野生动物撞击数据将这些前沿 AI 技术融入您用例的方法。为了提高第十二章的内容质量,使用了 OpenAI ChatGPT 生成更好的文本。展望未来,ChatGPT 将偶尔作为提高本书其他部分写作质量的工具使用。
此外,本章详细讨论了 OpenAI 和 Azure OpenAI 技术的两个用例。具体来说,您将关注它们在摘要和描述性内容生成中的应用,如第十二章所述。为了说明这些用例,本章包含了一个项目。
在本章中,您将了解如何将 OpenAI(或 Azure OpenAI)集成到您的 Power BI 解决方案中,用于处理 FAA 野生动物撞击数据。通过这种集成,您可以通过向 Power BI 数据流添加新功能来利用 GPT 模型 API。这些功能将使您能够为解决方案中每行的数据生成新的内容。您还将使用 Power BI 中的 认知服务,这是一种在 Power Query 和数据流中存在了几年的 AI 功能。
到本章结束时,您将获得应用 GPT REST API 到 OpenAI 或 Azure OpenAI 以 Power BI 数据流的知识。这些数据流可以按照预定义的日程进行刷新。这种能力将为您提供一套强大的工具集,以最小的努力从数据中生成新的内容和见解。本章提供的逐步说明和示例将使您具备在您自己的项目中实施此解决方案的必要技能。
技术要求
对于本章,您需要以下内容:
- 
原始开源 OpenAI 的账户:
openai.com/。 - 
可选 – 作为您 Azure 订阅的一部分的 Azure OpenAI:
azure.microsoft.com/en-us/products/cognitive-services/openai-service。本书编写时将其设置为可选,因为并非所有人都可以在出版时使用。 - 
来自 FAA 网站或 Packt GitHub 网站的 FAA 野生动物撞击数据文件。
 - 
Power BI Pro 许可证。
 - 
以下 Power BI 许可证选项之一用于访问 Power BI 数据流:
- 
Power BI Premium
 - 
Power BI Premium Per User
 
 - 
 - 
将数据输入 Power BI 云服务的以下选项之一:
- 
Microsoft OneDrive(与 Power BI 云服务连接)
 - 
Microsoft Access + Power BI 网关
 - 
Azure Data Lake(与 Power BI 云服务连接)
 
 - 
 
配置 OpenAI 和 Azure OpenAI 以在您的 Power BI 解决方案中使用
在进行 OpenAI 和 Azure OpenAI 的配置之前,重要的是要注意,截至本书编写时,OpenAI 仍是一种新兴技术。随着技术的进步,OpenAI 与 Power BI 的集成可能会变得更加技术化。然而,本章将演示的使用案例将保持适用。
因此,本章提供的说明将展示如何利用这种集成来增强你在 Power BI 上下文中的数据分析能力。
配置 OpenAI
你可以从此链接创建 OpenAI 账户(如果你还没有的话):chat.openai.com/auth/login。截至本书编写时,新账户将获得试用积分以开始使用 OpenAI。如果你用完了试用积分,或者本书编写后不再提供试用,你可能需要为使用 OpenAI 支付费用。定价详情可以在此链接找到:openai.com/pricing。
一旦你拥有 OpenAI 账户,你需要创建一个 API 密钥,该密钥将用于验证你的 API 调用。API 密钥可以在此链接轻松创建:platform.openai.com/account/api-keys。例如,点击 abc123xyz 作为示例密钥用于示例代码。请确保使用 OpenAI 的实际密钥,而不是密钥名称。
一旦你拥有账户和 API 密钥,你就可以为本书使用 OpenAI 了!
配置 Microsoft Azure OpenAI
OpenAI 也可作为 Microsoft Azure 的一项服务。通过使用 Microsoft Azure OpenAI 服务,用户可以利用 Azure 的优势,例如基于角色的访问安全、私有网络和与 Azure 中的其他 Microsoft 工具集成的全面安全工具,来利用大规模 AI 模型。对于大型组织,账单和治理可以集中化,以确保 AI 的负责任使用。
在本书的范围内,Azure OpenAI 作为原始 OpenAI 的替代品是可选的。由于它是一种需求量大的新技术,Azure OpenAI 可能并非对所有人可用。研讨会中的所有内容都可以使用 OpenAI 或 Azure OpenAI 完成。
设置 Azure OpenAI 的说明可以在以下链接中找到:learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/create-resource/。创建资源后,您也可以根据该链接的说明部署模型。如第十二章中所述,您将使用text-davinci-003模型进行本章相关的工作坊。OpenAI 正在快速发展,您在阅读本书时可能能够选择不同的模型。在执行以下步骤时请注意以下值;它们将在本章的后续部分中需要:
- 
本章的示例使用
PBI_OpenAI_project。 - 
text-davinci-003模型部署。本书将使用davinci-PBIML作为代码示例中部署的名称。 
接下来,您需要为您的 Azure OpenAI API 调用创建一个密钥。以本书为例,从您的 Azure OpenAI 资源,命名为PBI_OpenAI_project,使用abc123xyz作为示例密钥。
一旦您已经设置并准备好 OpenAI 或 Azure OpenAI,您可以使用 FAA 野生动物打击数据为您的项目添加一些新的生成文本功能!
准备 Power BI 数据流以用于 OpenAI 和 Azure OpenAI。
在第十二章中,您决定使用 OpenAI 为您与 FAA 野生动物打击数据库项目相关的两个用例:
- 
为每个事件生成飞机型号和飞机操作员的描述。
 - 
概括报告中每个事件提供的自由文本备注。
 
由于 OpenAI 在撰写本书时仍处于起步阶段,Power BI 尚未在产品中内置连接器。但您仍然可以使用自定义 M 脚本从 Power Query 和 Power BI 数据流中调用 OpenAI 和 Azure OpenAI API。让我们开始吧!
首先,您将为 Power BI 中的 OpenAI 和认知服务创建一个新的数据流:
- 
从您的 Power BI 工作区,在功能区选择新建 | 数据流。
 - 
选择定义新表 | 从其他数据流链接表。
 - 
登录并点击下一步。
 - 
扩展您的 workspace。
 - 
扩展打击报告数据流并检查打击报告****精选新。
 - 
点击转换数据。
 - 
创建一个名为来源的组,并将打击报告精选新移动到该组。
 - 
右键单击打击报告精选新并取消选择启用加载。
 
接下来,您将创建一个用于与 OpenAI 和认知服务一起使用的查询版本:
- 
右键单击打击报告精选新并选择引用。
 - 
将新查询重命名为
打击报告精选New OpenAI。 - 
创建一个名为OpenAI的组,并将打击报告精选新 OpenAI移动到该组。
 
在第十二章中,您决定使用 FAA 野生动物打击UNKNOWN:
- 
对于
UNKNOWN、UNKNOWN COMMERCIAL、BUSINESS和PRIVATELYOWNED值。 - 
对于
未知。 - 
对于
未知鸟类、未知鸟类 - 大型、未知鸟类 - 中型、未知鸟类 - 小型和未知鸟类或蝙蝠。 
对于 (空白)。
最后——这是一个可选步骤——您可以根据测试目的过滤行数。OpenAI 和 Azure OpenAI 都可能产生费用,因此限制此研讨会中的调用次数是有意义的。在本书的示例中,Strike Reports Curated New OpenAI 表将过滤到 2022 年 12 月或之后发生的事件,可以使用 事件 日期 列进行过滤。
现在您已经准备好将 OpenAI 和认知服务内容添加到您的数据中!
在 Power BI 数据流中创建 OpenAI 和 Azure OpenAI 函数
如前所述,将 OpenAI 和 Azure OpenAI 与 Power Query 或数据流集成目前需要自定义 M 代码。为了简化此过程,我们已为 OpenAI 和 Azure OpenAI 提供了 M 代码,让您可以根据具体需求和需求选择要使用的版本。
通过利用提供的 M 代码,您可以无缝地将 OpenAI 或 Azure OpenAI 集成到现有的 Power BI 解决方案中。这将使您能够利用这些强大 AI 技术的独特功能和能力,同时轻松地从数据中获得见解并生成新内容。
OpenAI 和 Azure OpenAI 函数
OpenAI 提供了一个用户友好的 API,可以轻松地从 Power Query 或 Power BI 中的数据流中访问和使用。有关 API 的具体信息,我们建议您查阅官方 OpenAI 文档,该文档可通过以下链接获取:platform.openai.com/docs/introduction/overview。
值得注意的是,优化和调整 OpenAI API 很可能在明年成为一个热门话题。包括 提示工程、最佳令牌使用、微调、嵌入、插件以及修改响应创造性的参数(如温度和 top p)在内的各种概念,都可以进行测试和微调以获得最佳结果。
虽然这些主题很复杂,可能在未来的作品中进行更详细的探讨,但本书将主要关注在 OpenAI 和 Power BI 之间建立连接。具体来说,我们将探讨提示工程和令牌限制,这些是确保最佳性能的关键考虑因素,并将被纳入 API 调用中:
- 
[操作员]和[飞机]作为没有上下文的值,在前一章中添加到请求中的文本,以便 API 能够接收告诉我关于由 [操作员] 运行的飞机型号 [飞机] 的三个句子:。这个提示为传递给 OpenAI 模型的值添加了上下文。 - 
令牌:发送到 OpenAI 模型的单词被分成称为令牌的块。根据 OpenAI 网站的信息,一个令牌包含大约四个英语字符。查看 Power BI 数据集中的 备注 列可以揭示大多数条目最多有 2,000 个字符。(2000 / 4)= 500,因此您将指定 500 作为令牌限制。这是正确的数字吗?您需要做大量的测试来回答这个问题,但这超出了本书的范围。
 
让我们开始构建您的 OpenAI 和 Azure OpenAI API 调用,用于 Power BI 数据流!
为 Power BI 数据流创建 OpenAI 和 Azure OpenAI 函数
您将在数据流中为 OpenAI 创建两个函数,命名为 OpenAI。这两个函数之间的唯一区别将是令牌限制。设置不同令牌限制的主要目的是为了节省成本,因为更大的令牌限制可能会产生更高的账单。按照以下步骤创建一个名为 OpenAIshort 的新函数:
- 
选择 获取数据 | 空白查询。
 - 
将以下 M 代码粘贴进去,并使用您的 OpenAI API 密钥选择
abc123xyz。 
下面是这个函数的代码。该代码也可以在 Packt GitHub 仓库的 github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-13 中的 01 OpenAIshortFunction.M 文件找到:
let
    callOpenAI = (prompt as text) as text =>
        let
            jsonPayload = "{""prompt"": """ & prompt & """,            ""max_tokens"": " & Text.From(120) & "}",
            url = "https://api.openai.com/v1/engines/            text-davinci-003/completions",
            headers = [#"Content-Type"="application/json",             #"Authorization"="Bearer abc123xyz"],
            response = Web.Contents(url, [Headers=headers,             Content=Text.ToBinary(jsonPayload)]),
            jsonResponse = Json.Document(response),
            choices = jsonResponse[choices],
            text = choices{0}[text]
        in
            text
in
    callOpenAI
- 
现在,您可以重命名函数
OpenAIshort。在 查询 面板中右键单击函数并复制它。新函数将具有更大的令牌限制。 - 
将此新函数重命名为
OpenAIlong。 - 
右键单击 OpenAIlong 并选择 高级编辑器。
 - 
将读取
Text.From(120)的代码部分更改为Text.From(500)。 - 
点击 确定。
 
您的屏幕现在应该看起来像这样:

图 13.1 – 添加到 Power BI 数据流的 OpenAI 函数
这两个函数可以用来完成本章剩余部分的研讨会。如果您想使用 Azure OpenAI,请使用带有您的 Azure 资源名称 PBI_OpenAI_project、部署名称 davinci-PBIML 和 API 密钥 abc123xyz 的 M 代码:
let
    callAzureOpenAI = (prompt as text) as text =>
        let
            jsonPayload = "{""prompt"": """ & prompt & """,             ""max_tokens"": " & Text.From(120) & "}"
            url = "https://" & "PBI_OpenAI_project" & ".openai.azure.            com" & "/openai/deployments/" & "davinci-PBIML" & "/            completions?api-version=2022-12-01",
            headers = [#"Content-Type"="application/json",             #"api-key"="abc123xyz"],
            response = Web.Contents(url, [Headers=headers,             Content=Text.ToBinary(jsonPayload)]),
            jsonResponse = Json.Document(response),
            choices = jsonResponse[choices],
            text = choices{0}[text]
        in
            text
in
    callAzureOpenAI
与前一个示例一样,将 Text.From(120) 的令牌限制更改为 Text.From(500),这就是创建一个 500 令牌而不是 120 令牌的 Azure OpenAI 函数所需做的全部工作。创建您的 OpenAI 函数数据流的 M 代码也可以在 Packt GitHub 网站上的此链接找到:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-13。
现在,您已经在 Power BI 数据流中准备好了 OpenAI 和 Azure OpenAI 函数,您可以在 FAA 野生动物撞击数据上测试它们!
在 Power BI 数据流中使用 OpenAI 和 Azure OpenAI 函数
你的下一步是准备 FAA 野生动物撞击数据,以便 OpenAI 或 Azure OpenAI 函数进行内容生成和摘要。如前所述,你需要构建有效的提示,为 OpenAI 模型提供处理上下文。“新整理的 OpenAI 报告”的完成查询,可以复制并粘贴到 Power BI 中,也可在 Packt GitHub 仓库中找到:github.com/PacktPublishing/Unleashing-Your-Data-with-Power-BI-Machine-Learning-and-OpenAI/tree/main/Chapter-13。
回顾第十二章,你决定使用以下组合的新文本与 FAA 野生动物撞击数据库的行级内容:
- 
生成有关飞机和载具的新信息:
告诉我关于由[运营商]在[操作]的飞机型号[Aircraft]的三个句子: - 
摘要每个报告中的备注,包括运营商、飞机和物种:
总结以下内容:一架[运营商] [飞机型号]撞击了一只[物种]。FAA 报告中的备注是:[备注] 
你现在可以向新整理的打击报告查询中添加两个新列。首先,添加一个用于提示文本生成的列:
- 
选择添加列|自定义列。
 - 
设置
文本``生成提示。 - 
粘贴以下文本:“告诉我关于由" & [飞机型号] & " " & [运营商] & "操作的飞机型号在三个句子中的情况:”。然后,选择确定。
 - 
将数据类型更改为
文本。 - 
验证新列创建的文本,这些文本将作为带有内置提示的信息使用,看起来如下:
 

图 13.2 – 与 OpenAI 一起使用的新列
现在创建一个第二列,该列将用于文本摘要,并且包含内置提示:
- 
选择添加列|自定义列。
 - 
设置
文本``摘要提示。 - 
粘贴以下文本:“总结以下内容:一架" & [运营商] & " " & [飞机型号] & "撞击了一只" & [物种] & "。FAA 报告中的备注是:" & [备注]。
 - 
将数据类型更改为
文本。 - 
验证带有内置提示的摘要新列看起来如下:
 

图 13.3 – 带内置提示的摘要新列
现在你已经在 Power BI 数据流查询中创建了两个列,它们已准备好用于 OpenAI 函数!首先,使用OpenAIshort函数调用 OpenAI 进行文本生成:
- 
选择添加列|自定义列。
 - 
设置
OpenAI``飞机描述。 - 
将以下文本粘贴到
OpenAIshort([TextGeneration Prompt])。 - 
点击确定。
 - 
验证 OpenAI 为新的列生成了文本。你可以在新列的字段上悬停以阅读全文:
 

图 13.4 – OpenAI 使用来自 FAA 野生动物撞击数据库之外的新数据为该运营商生成飞机描述
重复前面的步骤,对 OpenAIlong 函数进行文本摘要:
- 
选择 添加列 | 自定义列。
 - 
设置
OpenAI备注摘要。 - 
将以下文本粘贴到
OpenAIlong([文本摘要提示])中。 - 
点击 确定。
 - 
验证 OpenAI 为新列生成了文本,并且你还可以将鼠标悬停在字段上以查看完整的摘要:
 

图 13.5 – 关于飞机撞击野生动物的备注文本摘要
你成功了!OpenAI 成功用于生成有关飞机的新信息,并总结野生动物撞击事件的自由文本备注。你可能想在此时保存你的数据流,以免丢失任何工作。
将认知服务功能添加到解决方案中
最后,你决定通过展示 Power BI 中的认知服务功能来为交付成果增加更多价值。在 Power BI Desktop 和 Power BI 数据流中,认知服务作为 SaaS 工具的一部分内置。有关在 Power BI 中使用认知服务的详细信息,请参阅此链接:learn.microsoft.com/en-us/power-bi/connect-data/service-tutorial-use-cognitive-services。
认知服务是指可以使用 API 调用并使用标准 ML 模型评分数据的 Azure 服务。这些工具可以评分文本的情感,识别图像,提取关键短语,检测图片中的情绪等。以下认知服务功能在撰写本书时是 Power BI 的原生功能:
- 
检测语言
 - 
标记图像
 - 
评分情感
 - 
提取 关键短语
 
对于这个项目的最终补充,你将使用 0 到 1 的 Score Sentiment 函数,其中 0 表示负面,0.5 表示中性,1 表示正面。
打开你的 OpenAI 数据流,导航到 Strike Reports Curated New OpenAI 的查询,并按照以下步骤操作:
- 
高亮显示 备注 列。
 - 
导航到 主页 | 洞察 | AI 洞察。
 - 
登录后,将弹出 AI 洞察 窗口。
 - 
注意,认知服务可用,以及你创建的 Power BI ML 模型!你还可以使用此功能来在不同数据流中重复使用你的 Power BI ML 模型来评分多个数据列。
 

图 13.6 – 认知服务和 Power BI ML 模型可以作为函数调用
- 
选择 CognitiveServices.ScoreSentiment。
 - 
从下拉菜单中选择备注列,然后点击应用。
 - 
将数据类型更改为小数。
 - 
验证情感分数已被评分并添加为新的列:
 

图 13.7 – 备注列的情感分数
你现在可以保存并刷新你的数据流,任务完成!当数据流刷新后,你可以从 Power BI Desktop 连接并浏览你的工作结果:

图 13.8 – 在 Power BI 中查看的 OpenAI 和认知服务的结果
为了便于阅读,图 13.8 被拆分为两张图片。图 13.9 展示了左侧的列。

图 13.9 – 在 Power BI 中查看的 OpenAI 和认知服务的结果
右侧的列在 图 13.10 中展示。

图 13.10 – 在 Power BI 中查看的 OpenAI 和认知服务的结果
一旦你掌握了如何在 Power BI 中实现各种工具和服务的使用方法,例如 OpenAI 或 Azure OpenAI 提供的认知服务,你就可以尝试不同的提示策略,并探索广泛的附加功能。
通过利用本书中获得的知识和技能,你将能够测试新想法,微调你的方法,并优化解决方案的性能。有了这些工具在手,你在 Power BI 中增强数据分析和内容生成能力的可能性几乎是无限的。所以,不要害怕深入探索这些强大技术所能提供的一切!
摘要
本章介绍了 OpenAI 或 Azure OpenAI 与 Power BI 的集成,以及 Power BI 认知服务的用例。通过利用这些高级工具,你能够使用外部数据和 GPT 模型生成飞机的新描述,总结关于野生动物撞击的备注,甚至对备注进行情感分析评分。
接下来,下一章和最后一章将提供一个机会来回顾和反思本书及配套研讨会中完成的工作。我们还将开始探索增强和扩展现有项目的新策略,因为我们认识到,如果仍有实现额外价值的潜力,项目就永远不会真正完成。
第十四章:项目回顾与展望
第十三章 这本书是一次探索技术前沿的冒险,你将 OpenAI 和 Azure OpenAI 集成到你的 Power BI 项目中,使用 FAA 野生动物撞击数据。在这本书的过程中,你走过了从摄取原始数据、转换和准备数据、构建用于分析的 BI 解决方案、使用分析来发现用于预测机器学习模型的数据特征、构建这些机器学习模型、使用机器学习模型评分新数据,以及使用 OpenAI 和 Azure OpenAI 的 LLMs 添加新的、强大的描述性和总结能力到解决方案的全过程。在 第十二章 和 第十三章 中,你也使用了 OpenAI 增强了文本。所有这些都是在 Power BI 的端到端中完成的。
在本章中,你将回顾你在整本书和项目中所取得的成就,修订重要的关键概念,然后发现一些关于项目未来迭代以及作为数据专业人士职业生涯的建议。在现实世界中,大多数项目永远不会真正完成。在某些时候,它们可能会结束,但更常见的是,有机会改进现有解决方案或扩大解决方案的范围,以提供更多价值。理解和阐述通过新迭代工作可以捕捉到的突出价值,并将这一信息传达给利益相关者,以及所需投资的估计,是构建更大、更好、更有影响力的项目的关键。
与前两章不同,本章不是在 OpenAI 的帮助下撰写的,而是以作者的原创声音(在人类编辑和审稿人的帮助下)撰写的。
从书籍和研讨会中学到的经验
在这本书的开头,你开始的目标是为你的领导提供工具,使他们能够进行交互式分析 FAA 野生动物撞击数据,以便发现影响事件的因素,并对未来可能发生的野生动物撞击事件及其相关成本进行预测。你的项目的主要目标,即预测 FAA 野生动物撞击的未来影响,需要构建 Power BI 机器学习模型。通过这本书的章节,你通过 Packt GitHub 仓库的内容,走过了规划并实施端到端项目的过程。在这个项目中,所有的事情都是使用 Power BI 内的工具或与 Power BI 集成的工具完成的。你在 Power BI 中创建的工件的高级总结如图 14**.1 所示:

图 14.1 – 本书中在 Power BI 中创建的工件总结
本书的主要技术培训围绕 Power BI 中的 ML 展开,但还穿插了其他几个概念。如果您参加了微软的Power BI Dashboard in a Day课程(aka.ms/diad),您可能会发现该课程与本书之间存在一些风格上的相似之处,但增加了 ML、AI 和 OpenAI 作为关键成果,同时使用了来自现实世界的 FAA 野生动物撞击数据。
探索 BI、ML、AI 和 OpenAI 的交集
BI、ML、AI 和 OpenAI 涵盖了相互重叠的工具和解决方案架构方法,但也可以被视为独立的学科。在 Power BI 的背景下,许多不同的工具被组合在一个单一的 SaaS 平台之下。多年来,Power BI 已从数据可视化工具演变为将许多不同的 Microsoft 工具 SaaS 化,正如图 14.2所示:

图 14.2 – Power BI 由 SaaS 平台内的许多工具组成
在 Power BI SaaS 工具集的背景下,您完成了以下练习,这些练习提供了对何时何地使用 ML、AI 和 OpenAI 的基线概念理解:
- 
第一章:您审查了用例,浏览了数据,并规划了数据模型,以实现促进数据探索和特征发现的数据设计,同时规划了一个与 ML 兼容的设计。
 - 
第二章和第三章:您在 Power BI 中转换了数据,并为 BI 数据集创建了一个基线设计。您以提供强大基础的方式对数据进行建模。
 - 
第四章:您设计了用于 ML 的数据表。这些表被扁平化,每一行代表一个独特的事件,其中包含描述该事件的特征。
 - 
第五章:您使用 BI 工具和 AI 可视化探索数据集以找到 ML 特征。然后,将这些新特征添加到 ML 查询中。
 - 
第六章:您使用 R 和 Python 的可视化功能找到了新的功能。这些功能也被添加到了 Power BI ML 的查询中。
 - 
第七章:您将您的作品从 Power BI 桌面迁移到 Power BI 云服务。在此章节之后,您所有的作品都是在 Power BI 云服务中完成的。
 - 
第八章至第十一章:您构建并改进了您的 ML 模型。您将扁平化的 ML 查询通过 Power BI ML 运行了三个不同的预测模型,审查了训练和测试结果,然后迭代 ML 模型以改进预测能力。
 - 
第十二章和第十三章:您将 OpenAI 和认知服务添加到解决方案中,以获得更多价值。OpenAI 被用来总结和生成可读性强的数据。
 
你的努力在图 14.3中有直观的展示。除了 OpenAI 的整合,所有工作都是在 Power BI SaaS 工具集中完成的:

图 14.3 – 在 Power BI SaaS 平台中整合 BI、ML、AI 和 OpenAI 工具的项目方法
总结来说,您已经走过了整个项目的过程,从原始的 FAA 野生动物撞击数据开始,到构建机器学习模型结束——所有这些都在 Power BI 的 SaaS 工具中完成。
Power BI 中的机器学习
由于本书的名称是《用 Power BI 机器学习和 OpenAI 释放您的数据》,因此 Power BI ML 工具显然是您已完成的工作坊和故事冒险的基石组件。以下是一些整个书籍没有基于 Power BI ML 的原因:
- 
当正确使用时,Power BI ML 极其容易使用。它是 AutoML 的一个版本,正确准备数据可能非常困难。
 - 
许多 BI 专家从未设计和准备过数据用于机器学习。这些技能的交集是 BI 专业人士使用 Power BI ML 时最困难的部分。
 - 
与本书相关的端到端工作坊旨在尽可能真实地代表现实世界项目。如果你完成了工作坊,即使你通过从 GitHub 剪切和粘贴脚本和内容来缩短了时间,你也应该能够为你的未来项目重复这个过程的变化版本。
 - 
在本书的结尾,您现在应该对如何在 Power BI 中使用机器学习、何时使用以及为什么使用机器学习有了非常深刻的理解。
 
你现在已经在 Power BI 中构建、评估、部署和重新训练了二元预测、通用分类和回归机器学习模型。你不仅完成了这个壮举,而且使用的是 FAA 野生动物撞击数据库的真实数据。这些数据不是人工整理或合成的,以改善你的结果或使过程变得容易。作为额外的奖励,你还在项目中添加了一些 OpenAI 和认知服务的整合,增加了额外的价值。你应该为自己感到骄傲!
但现在真正的考验开始了!你如何确保你的利益相关者欣赏项目的成果?项目是否完成,或者你还能做些什么来让它变得更好?你如何将这些经验应用到你的未来职业规划中?
展望未来
现在你已经从定义需求,到从 FAA 野生动物撞击数据库中转换和探索原始源数据,到构建机器学习模型,再到与 OpenAI 和认知服务合作,下一步是什么?你是发布解决方案给利益相关者和用户,给自己鼓掌,然后转到下一个项目吗?你是继续迭代这个项目以增加价值吗?你是基于本书的教训,进一步深入研究机器学习和 OpenAI 吗?
FAA 野生动物撞击数据解决方案的下一步
本书使用的例子只是触及了使用 FAA 野生动物撞击数据库可以构建的不同用例的表面。在你的实际工作中,大多数人可能永远不会需要使用 FAA 野生动物撞击数据。即便如此,思考可能的下一步行动也是有价值的,这样你就可以将这种思考融入你的解决方案中。在不添加新数据的情况下,一些例子可能包括但不限于以下内容:
- 
预测不同鸟种在不同时间、不同地点的高度
 - 
预测不同类型飞机的损坏可能性
 - 
预测野生动物撞击的季节性风险率
 - 
评估新冠疫情对野生动物撞击的影响(疫情期间航班减少)
 - 
评估装有尾翼发动机和机翼发动机的飞机在野生动物撞击方面的差异
 
引入外部数据也可能为丰富你的解决方案提供机会:
- 
天气数据可以用作预测不同类型野生动物撞击标准的因素
 - 
所有航空公司航班的(大多数没有野生动物撞击)数据可以用来确定野生动物撞击的比率,并添加更多关于航班的稳健信息
 - 
在机场添加有关野生动物和鸟类驱赶措施(如围栏、捕食者诱饵等)的数据,以评估其有效性
 
对现有的 ML 模型进行迭代可能会比工作坊中的结果更好,同样,测试不同的特征、评估不同的日期范围、引入新的数据、测试新的筛选标准也会有所帮助。使用 Power BI,新的测试只需几步点击即可完成。如果你能够得到比工作坊更好的结果,请分享它们!本书中的 ML 模型并非旨在完美,而是为你开始这项技术提供一个起点。
Power BI 和 ML 的下一步
现在你已经在 Power BI 中构建和部署了机器学习模型,接下来你该做什么呢?希望这本书不仅丰富了你使用 Power BI 工具集的技能,还帮助你了解了 BI、ML 和 AI(包括 OpenAI)的概念交汇点。在现代社会,像 Power BI 这样的工具将持续发展和改进。你应该如何规划使用 Power BI ML 的未来?还有哪些其他考虑因素可能是好主意?
如*图 14**.2 所示,Power BI 是一套不断发展和改进的 SaaS 工具。Power BI ML 也将不可避免地发展。本书中涵盖的工具和技术应该为你理解并适应产品套件未来的变化提供基础。你或许已经学到了一种揭示 ML 用例、发现构建 ML 模型的功能以及评估这些用例在 Power BI 环境中 ML 可能用途的方法论。
Power BI ML 是否将是这个项目下一迭代或你下一个 ML 项目的正确工具?也许,也许不是!如前几章所述,本书中开发的 ML 模型的使用案例,如果下一轮改进是在具有企业级 ML 能力的数据科学团队的帮助下进行的,可能会更有影响力,这些能力超越了 Power BI ML 中的 AutoML 能力。或者,也许在 Power BI ML 中进行几轮迭代也可能产生更好的最终产品。从长远来看,本书中的设计和架构概念有望提供比 Power BI ML 的技术培训更持久的价值。
你职业生涯的下一步
完成这本书和相关的研讨会,使用 FAA 野生动物撞击数据,希望你对考虑将 ML 和 AI 作为未来项目的组件感到兴奋。在你阅读这本书的过程中,你从原始数据开始,逐步构建到具有 OpenAI 集成的 Power BI ML。你使用的数据没有经过整理或优化,而是代表了现实世界中的真实数据。那么现在呢?希望这次经历能帮助你找到新的途径来提升你的职业生涯!
如果你是一个 Power BI 和数据分析爱好者,你现在可以将 ML 作为一项新工具添加到你的武器库中。你现在可以利用 Power BI ML 来完成以下工作:
- 
评估使用 ML 模型解决现有项目问题的新想法
 - 
确定数据在更大 ML 项目中的效用
 - 
将 Power BI ML 作为快速原型化 ML 模型的方式,在将项目发送到数据科学团队之前
 - 
急切地期待来自 Microsoft 的 ML 在 Power BI 中的更新和新功能
 
如果你渴望成为一名数据科学专业人士,或者你已经在数据科学领域工作,你可以利用你的所学来完成以下工作:
- 
更好地了解如何与 BI 团队协作解决问题
 - 
在 Power BI 中构建解决方案的 BI 组件
 - 
评估 AutoML 工具与传统数据科学工具箱的优缺点
 - 
深入了解 OpenAI 和 Azure OpenAI 集成在项目中的应用
 
对于一个热情的建筑师来说,解决方案永远不会完美,总有添加新数据、从新角度解决问题、测试新的 AI 和 ML 工具以及改进最终用户体验的机会。
摘要
在本章中,你回顾了书中和附属工作坊的所有课程。在 13 个章节的过程中,你通过一个单一案例穿越了 BI、ML、AI 和 OpenAI 的交汇点。从原始的 FAA 野生动物撞击数据开始,你使用附属的 Packt GitHub 仓库构建了一个端到端的工作坊。特别关注了 Power BI ML,然后是与 OpenAI 和 Azure OpenAI 的集成。讨论了与 FAA 数据一起工作的下一步和选项。然后,在本书内容的背景下,讨论了未来的职业规划。在快速技术演变的时代,希望本书中涵盖的架构设计过程和策略,在工具已经超越本书所涵盖的状态之后,仍能对你有所帮助。
在这本书中学习关于 Power BI ML 的知识,希望这能为你打开通往职业生涯下一步的大门。这可能是一个 Power BI 专业人士、未来的数据科学家、行业分析师,或者是一个项目经理。如果其他什么都没有,那么当你下次从飞机的窗户座位上凝视世界时,你将会有一个不同的周围环境视角。

                    
                
                
            
        
浙公网安备 33010602011771号