在 Power BI 中使用 PyCaret 进行异常检测
最后更新
这有帮助吗?
最后更新
这有帮助吗?
什么是异常检测?异常检测的类型?
在 Power BI 中训练并实施无监督异常检测器。
分析结果并在仪表板中可视化信息。
如何在 Power BI 生产环境中部署异常检测器?
在开始使用 PyCaret 在 Power BI 中的机器学习功能之前,我们必须创建一个虚拟环境并安装 PyCaret。这是一个三步过程
从开始菜单打开 Anaconda Prompt 并执行以下代码
在 Anaconda Prompt 中执行以下代码
创建的虚拟环境必须与 Power BI 链接。这可以在 Power BI Desktop 的全局设置中完成(文件 → 选项 → 全局 → Python 脚本)。Anaconda 环境默认安装在
C:\Users\*用户名*\AppData\Local\Continuum\anaconda3\envs\myenv
异常检测****是机器学习中用于识别稀有项、事件或观测值的技术,它们因与大多数数据显著不同而引起怀疑。
通常,异常项将转化为某种问题,例如银行欺诈、结构缺陷、医疗问题或错误。有三种实现异常检测器的方法
(a) 监督式: 用于数据集有标签标识哪些交易是异常的,哪些是正常的。(这类似于监督分类问题)。
(b) 半监督式: 半监督异常检测背后的想法是仅在正常数据上训练模型(不包含任何异常)。当训练好的模型用于未见过的数据点时,它可以预测新的数据点是否正常(基于训练模型中数据的分布)。
(c) 无监督式: 正如字面意思,无监督意味着没有标签,因此没有训练集和测试集。在无监督学习中,模型在完整数据集上进行训练,并假设大多数实例是正常的。同时寻找与其余部分最不拟合的实例。有几种无监督异常检测算法,例如 Isolation Forest 或 One-Class Support Vector Machine。每种算法都有其识别数据集中异常的方法。
本教程是关于在 Power BI 中使用名为 PyCaret 的 Python 库实现无监督异常检测。关于这些算法的具体细节和数学原理不在本教程的讨论范围之内。
许多公司向员工发放公司信用卡(也称为采购卡或 p-卡),以有效管理运营采购。通常有一个流程供员工电子提交这些报销申请。收集的数据通常是事务性的,可能包括交易日期、供应商名称、费用类型、商户和金额。
免责声明: 本教程演示了在 Power BI 中使用 PyCaret 构建异常检测器。本教程中构建的示例仪表板绝不反映实际异常,也不旨在识别异常。
现在你已经设置了 Anaconda 环境,安装了 PyCaret,了解了异常检测的基础知识,并且对本教程的业务背景有了了解,让我们开始吧。
第一步是将数据集导入 Power BI Desktop。你可以使用 Web 连接器加载数据(Power BI Desktop → 获取数据 → 从 Web)。
要在 Power BI 中训练异常检测器,我们必须在 Power Query 编辑器中执行一个 Python 脚本(Power Query 编辑器 → 转换 → 运行 Python 脚本)。将以下代码作为 Python 脚本运行
我们通过在 ignore_features 参数下传递它们来忽略数据集中的一些列。你可能出于多种原因不希望使用某些列来训练机器学习算法。
PyCaret 允许你隐藏而不是删除数据集中不需要的列,因为你可能需要这些列用于后续分析。例如,在本例中,我们不想使用事务日期来训练算法,因此我们将其传递到了 ignore_features 参数下。
PyCaret 中有超过 10 种即用型异常检测算法。
默认情况下,PyCaret 训练一个K-近邻异常检测器,分数为 5%(即表中总行数的 5% 将被标记为离群值)。默认值可以轻松更改
要更改分数(fraction)值,可以在 get_outliers( ) 函数中使用 ***fraction ***参数。
要更改模型类型,可以在 get_outliers() 函数中使用 ***model ***参数。
请参阅使用 0.1 分数训练 Isolation Forest 检测器的示例代码
输出
原始表格附加了两个新列。Label(1 = 离群值,0 = 正常值)和 Score(分数高的数据点被归类为离群值)。应用查询可在 Power BI 数据集中查看结果。
在 Power BI 中获得离群值标签后,以下是一个如何在仪表板中将其可视化的示例
上面演示的是在 Power BI 中实现异常检测的一种简单方法。然而,重要的是要注意,上面展示的方法每次刷新 Power BI 数据集时都会重新训练异常检测器。这可能会带来两个问题
当模型使用新数据重新训练时,异常标签可能会改变(一些之前标记为离群值的交易可能不再被视为离群值)
你不希望每天花费数小时重新训练模型。
在 Power BI 中实现异常检测的另一种方法,尤其是在生产环境中使用时,是将预训练模型传递给 Power BI 进行标记,而不是直接在 Power BI 中训练模型。
你可以使用任何集成开发环境(IDE)或 Notebook 来训练机器学习模型。在本例中,我们使用了 Visual Studio Code 来训练异常检测模型。
然后将训练好的模型保存为 pickle 文件,并导入到 Power Query 中以生成异常标签(1 或 0)。
如果你想了解更多关于在 Jupyter Notebook 中使用 PyCaret 实现异常检测的信息,请观看这个 2 分钟的视频教程
将以下代码作为 Python 脚本执行,以从预训练模型生成标签。
其输出将与我们上面看到的相同。然而,区别在于当你使用预训练模型时,标签是在新数据集上使用相同的模型生成的,而不是每次刷新 Power BI 数据集时都重新训练模型。
将 .pbix 文件上传到 Power BI 服务后,还需要几个步骤才能实现机器学习 Pipeline 与数据 Pipeline 的无缝集成。这些步骤包括
截至第一个版本 1.0.0,PyCaret 提供了以下可用的模块。点击下方链接可查看文档和 Python 工作示例。
PyCaret Notebook 入门教程
在我们上一篇文章中,,我们提供了一个分步教程,介绍了如何将 PyCaret 集成到 Power BI 中,从而允许分析师和数据科学家为他们的仪表板和报告添加一层机器学习功能,而无需额外的许可费用。
在这篇文章中,我们将深入探讨并使用 PyCaret 在 Power BI 中实现一个异常检测器。如果你之前没有听说过 PyCaret,请阅读此处以了解更多信息。
如果你之前使用过 Python,你的计算机上很可能已经安装了 Anaconda Distribution。如果还没有,请点击此处下载包含 Python 3.7 或更高版本的 Anaconda Distribution。
步骤 1 — 创建 anaconda 环境
步骤 2 — 安装 PyCaret
安装可能需要 15–20 分钟。如果安装遇到问题,请参阅我们的页面了解已知问题和解决方案。
步骤 3 — 在 Power BI 中设置 Python 目录
在本教程中,我们将使用美国特拉华州教育部门 2014-2019 年的州雇员信用卡交易数据。该数据可在其平台上在线获取。
**csv 文件链接
你可以从我们的.
启用数据集的计划刷新 — 要为包含 Python 脚本数据集的工作簿启用计划刷新,请参阅,其中也包括关于 个人网关 的信息。
安装个人网关 — 你需要在文件所在且 Python 已安装的机器上安装 个人网关;Power BI 服务必须能够访问该 Python 环境。你可以获取更多关于如何.
如果你对了解更多关于异常检测感兴趣,请查看我们的
我们收到了来自社区的巨大支持和反馈。我们正在积极努力改进 PyCaret 并准备发布下一个版本。PyCaret 1.0.1 将更强大、更好。如果你想分享你的反馈并帮助我们进一步改进,你可以在此处在网站上,或者在我们的或页面上留言。
关注我们的并订阅我们的频道,了解更多关于 PyCaret 的信息。
PyCaret 是一个开源项目。欢迎所有人贡献。如果你想贡献,请随时处理。dev-1.0.1 分支接受带有单元测试的 Pull Request。
如果你喜欢 PyCaret,请在我们的给我们 ⭐️。
Medium