在 Power BI 中使用 PyCaret 进行异常检测
使用 PyCaret 在 Power BI 中构建您的第一个异常检测器
逐步教程:在 Power BI 中实现异常检测
作者:Moez Ali
在我们上一篇文章《在 Power BI 中使用 PyCaret 进行机器学习》中,我们介绍了如何在 Power BI 中集成 PyCaret 的逐步教程,使分析师和数据科学家能够在他们的仪表板和报告中添加机器学习的层次,而无需额外的许可费用。
在本文中,我们将深入探讨如何使用 PyCaret 在 Power BI 中实现异常检测。如果您之前没有听说过 PyCaret,请阅读这篇公告以了解更多信息。
本教程的学习目标
- 什么是异常检测?异常检测的类型有哪些?
- 在 Power BI 中训练和实现无监督的异常检测器。
- 分析结果并在仪表板中可视化信息。
- 如何在 Power BI 生产环境中部署异常检测器?
开始之前
如果您之前使用过 Python,那么您的计算机上可能已经安装了 Anaconda 发行版。如果没有,请点击这里下载带有 Python 3.7 或更高版本的 Anaconda 发行版。
设置环境
在我们开始在 Power BI 中使用 PyCaret 的机器学习功能之前,我们需要创建一个虚拟环境并安装 pycaret。这是一个三步骤的过程:
✅ 第一步 - 创建一个 Anaconda 环境
从开始菜单打开 Anaconda Prompt 并执行以下代码:
conda create --name myenv python=3.7
✅ 第二步 - 安装 PyCaret
在 Anaconda Prompt 中执行以下代码:
pip install pycaret
安装可能需要 15-20 分钟。如果安装遇到问题,请参阅我们的GitHub页面上的已知问题和解决方法。
✅第三步 - 在 Power BI 中设置 Python 目录
创建的虚拟环境必须与 Power BI 关联。可以使用 Power BI Desktop 中的全局设置来完成此操作(文件 → 选项 → 全局 → Python 脚本)。Anaconda 环境默认安装在以下位置:
C:\Users*username*\AppData\Local\Continuum\anaconda3\envs\myenv
什么是异常检测?
异常检测是一种机器学习技术,用于识别与大多数数据明显不同的罕见项、事件或观察结果。
通常,异常项会导致一些问题,例如银行欺诈、结构缺陷、医疗问题或错误。实现异常检测有三种方法:
**(a) 监督式:**当数据集具有标签,用于标识哪些交易是异常的,哪些是正常的时使用(类似于监督分类问题)。
**(b) 半监督式:**半监督式异常检测的思想是仅在正常数据上训练模型(不包含任何异常)。然后,当使用训练好的模型对未见过的数据点进行预测时,它可以根据训练模型中数据的分布来判断新数据点是否正常。
**(c) 无监督式:**顾名思义,无监督式意味着没有标签,因此没有训练和测试数据集。在无监督学习中,模型在完整数据集上进行训练,并假设大多数实例是正常的,同时寻找似乎与其余实例最不匹配的实例。有几种无监督式异常检测算法,例如孤立森林或单类支持向量机。每种算法都有自己的方法来识别数据集中的异常。
本教程是关于在 Power BI 中使用名为 PyCaret 的 Python 库实现无监督式异常检测。本教程不涉及这些算法背后的具体细节和数学原理。
设置业务背景
许多公司向员工发放企业信用卡(也称为采购卡或 P 卡),以有效管理运营采购。通常,员工需要通过电子方式提交这些报销请求。收集到的数据通常是交易性的,可能包括交易日期、供应商名称、费用类型、商家和金额。
在本教程中,我们将使用美国特拉华州教育部门 2014 年至 2019 年的州雇员信用卡交易数据。这些数据可以在他们的开放数据平台上在线获取。
免责声明:本教程演示了在 Power BI 中使用 PyCaret 构建异常检测器。本教程中构建的示例仪表板绝不反映实际异常,也不旨在识别异常。
👉 让我们开始吧
现在您已经设置了 Anaconda 环境,安装了 PyCaret,了解了异常检测的基础知识,并具备了本教程的业务背景,让我们开始吧。
1. 获取数据
第一步是将数据集导入到 Power BI Desktop 中。您可以使用 Web 连接器加载数据(Power BI Desktop → 获取数据 → 从 Web)。
CSV 文件链接:https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/delaware_anomaly.csv
2. 模型训练
要在 Power BI 中训练异常检测器,我们需要在 Power Query Editor 中执行 Python 脚本(Power Query Editor → 转换 → 运行 Python 脚本)。运行以下代码作为 Python 脚本:
from pycaret.anomaly import *
dataset = get_outliers(dataset, ignore_features=['DEPT_NAME', 'MERCHANT', 'TRANS_DT'])
我们通过将它们传递到 ignore_features 参数下来忽略数据集中的一些列。有许多原因可能导致您不希望使用某些列来训练机器学习算法。
PyCaret 允许您隐藏而不是删除数据集中不需要的列,因为您可能需要这些列进行后续分析。例如,在这种情况下,我们不想使用交易日期来训练算法,因此我们将其传递给 ignore_features。
PyCaret 中有超过 10 种现成的异常检测算法。
默认情况下,PyCaret 使用 5% 的比例训练 K-最近邻异常检测器(即表中总行数的 5% 将被标记为异常值)。默认值可以轻松更改:
- 要更改比例值,可以在 get_outliers( ) 函数内使用 fraction 参数。
- 要更改模型类型,请在 get_outliers( ) 内使用 model 参数。
以下是使用 0.1 比例训练 孤立森林 检测器的示例代码:
from pycaret.anomaly import *
dataset = get_outliers(dataset, model = 'iforest', fraction = 0.1, ignore_features=['DEPT_NAME', 'MERCHANT', 'TRANS_DT'])
输出:
原始表格附加了两列。标签(1 = 异常值,0 = 正常值)和分数(具有较高分数的数据点被归类为异常值)。应用查询以在 Power BI 数据集中查看结果。
3. 仪表板
一旦在 Power BI 中有异常值标签,这里是如何在仪表板中可视化的示例:
您可以从我们的GitHub下载 PBIX 文件和数据集。