你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于 .NET 的 Azure 认知服务异常检测器客户端库 - 版本 3.0.0-preview.7
异常检测器 是一种具有一组 API 的 AI 服务,使你能够监视和检测时序数据中的异常情况,几乎无需机器学习 (ML) 知识(批处理验证或实时推理)。
源代码 | 包 (NuGet) | API 参考文档 | 产品文档
入门
先决条件
- 需要一个 Azure 订阅 才能使用此包。
- 现有的认知服务异常检测器实例。
安装包
使用 NuGet 安装适用于 .NET 的 Azure 异常检测器 客户端库:
dotnet add package Azure.AI.AnomalyDetector --prerelease
此表显示了 SDK 版本与服务支持的 API 版本之间的关系:
SDK 版本 | 服务支持的 API 版本 |
---|---|
3.0.0-preview.6 | 1.1 |
3.0.0-preview.4、3.0.0-preview.5 | 1.1-preview-1 |
3.0.0-beta.3 | 1.1-preview |
3.0.0-preview.1、3.0.0-preview.2 | 1.0 |
验证客户端
可以使用 Azure 门户或 Azure CLI 查找异常检测器服务资源的终结点:
# Get the endpoint for the Anomaly Detector service resource
az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "properties.endpoint"
获取 API 密钥
可以从 Azure 门户中的 异常检测器 服务资源获取 API 密钥。 或者,可以使用下面的 Azure CLI 代码片段获取资源的 API 密钥。
az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>
使用 AzureKeyCredential 创建 AnomalyDetectorClient
获得 API 密钥的值后,请 AzureKeyCredential
创建 。 使用终结点和密钥凭据,可以创建 AnomalyDetectorClient
:
string endpoint = "<endpoint>";
string apiKey = "<apiKey>";
var credential = new AzureKeyCredential(apiKey);
var client = new AnomalyDetectorClient(new Uri(endpoint), credential);
关键概念
使用 异常检测器,可以使用单变量异常检测来检测一个变量中的异常,或者使用多变量异常检测来检测多个变量中的异常。
功能 | 说明 |
---|---|
单变量异常情况检测 | 检测一个变量(例如收入、成本等)中的异常。模型是根据数据模式自动选择的。 |
多变量异常情况检测 | 检测存在关联的多个变量中的异常,这些变量通常是从设备或其他复杂系统中收集的。 使用的基础模型是图注意力网络。 |
单变量异常情况检测
使用单变量异常情况检测 API,无需了解机器学习方面的知识,就能监视和检测时序数据中的异常。 其算法通过自动标识最佳适配模型并将其应用到数据来进行自适应,并且不限行业、场景或数据量。 使用时序数据,此 API 可以确定异常检测的边界、预期的值,以及哪些数据点异常。
使用异常检测器不需要以前在机器学习方面有任何经验,你可以使用 REST API 轻松地将服务集成到应用程序和进程中。
使用单变量异常情况检测,可以自动检测时序数据中的异常,或者实时检测异常。
功能 | 说明 |
---|---|
流式处理检测 | 检测流式传输数据中的异常,方法是:使用以前见过的数据点来确定最近的数据点是否异常。 此操作使用发送的数据点生成一个模型,然后确定目标点是否异常。 每生成一个新数据点就调用该 API,这样就可以在创建数据时监视数据。 |
批量检测 | 使用时序来检测数据中可能存在的任何异常。 此操作使用整个时序数据生成一个模型,每个点使用同一模型进行分析。 |
更改点检测 | 使用时序来检测数据中存在的趋势更改点。 此操作使用整个时序数据生成一个模型,每个点使用同一模型进行分析。 |
多变量异常情况检测
利用多变量异常情况检测 API,开发人员能够轻松集成高级 AI,从而检测指标组中的异常,并且无需机器学习知识或带标记的数据。 现在,我们会将多达 300 个不同信号之间的依赖关系和相互关联自动视为关键因素。 这一新功能可帮助你主动防止复杂系统发生故障,例如,软件应用程序、服务器、工厂计算机、航天器,或者甚至是业务。
使用多变量异常情况检测,可以自动检测时序数据中的异常,或实时检测异常。 有三个进程可以使用多变量异常情况检测。
- 训练:使用训练模型 API 创建和训练模型,然后使用获取模型状态 API 获取状态和模型元数据。
- 推理:
- 使用异步推理 API 触发异步推理过程,并使用获取推理结果 API 获取一批数据的检测结果。
- 还可以使用同步推理 API 每次在一个时间戳上触发检测。
- 其他操作:多变量异常情况检测模型中支持列表模型 API 和删除模型 API,以便进行模型管理。
线程安全
我们保证所有客户端实例方法都是线程安全的,并且彼此独立 (准则) 。 这可确保重用客户端实例的建议始终是安全的,即使在线程之间也是如此。
其他概念
客户端选项 | 访问响应 | 长时间运行的操作 | 处理失败 | 诊断 | 嘲笑 | 客户端生存期
示例
以下部分提供了几个代码片段,涵盖了一些最常见的异常检测器服务任务,包括:
批量检测
//detect
Console.WriteLine("Detecting anomalies in the entire time series.");
try
{
UnivariateEntireDetectionResult result = client.DetectUnivariateEntireSeries(request);
bool hasAnomaly = false;
for (int i = 0; i < request.Series.Count; ++i)
{
if (result.IsAnomaly[i])
{
Console.WriteLine($"An anomaly was detected at index: {i}.");
hasAnomaly = true;
}
}
if (!hasAnomaly)
{
Console.WriteLine("No anomalies detected in the series.");
}
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Entire detection failed: {ex.Message}");
throw;
}
catch (Exception ex)
{
Console.WriteLine($"Detection error. {ex.Message}");
throw;
}
流式处理检测
//detect
Console.WriteLine("Detecting the anomaly status of the latest point in the series.");
try
{
UnivariateLastDetectionResult result = client.DetectUnivariateLastPoint(request);
if (result.IsAnomaly)
{
Console.WriteLine("The latest point was detected as an anomaly.");
}
else
{
Console.WriteLine("The latest point was not detected as an anomaly.");
}
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Last detection failed: {ex.Message}");
throw;
}
catch (Exception ex)
{
Console.WriteLine($"Detection error. {ex.Message}");
throw;
}
检测更改点
//detect
Console.WriteLine("Detecting the change point in the series.");
UnivariateChangePointDetectionResult result = client.DetectUnivariateChangePoint(request);
if (result.IsChangePoint.Contains(true))
{
Console.WriteLine("A change point was detected at index:");
for (int i = 0; i < request.Series.Count; ++i)
{
if (result.IsChangePoint[i])
{
Console.Write(i);
Console.Write(" ");
}
}
Console.WriteLine();
}
else
{
Console.WriteLine("No change point detected in the series.");
}
多变量异常情况检测示例
若要了解如何使用 异常检测器 库执行多变量异常情况检测,请参阅此示例。
故障排除
设置控制台日志记录
查看日志的最简单方法是启用控制台日志记录。 若要创建将消息输出到控制台的 Azure SDK 日志侦听器,请使用 AzureEventSourceListener.CreateConsoleLogger 方法。
// Setup a listener to monitor logged events.
using AzureEventSourceListener listener = AzureEventSourceListener.CreateConsoleLogger();
若要了解有关其他日志记录机制的详细信息,请参阅 诊断示例。
后续步骤
这些代码示例演示了 Azure 异常检测器 库的常见方案操作。 可以在示例目录下找到更多 示例 。
单变量异常情况检测 - 批处理检测: Sample1_DetectEntireSeriesAnomaly.cs
单变量异常情况检测 - 流式处理检测: Sample2_DetectLastPointAnomaly.cs
单变量异常情况检测 - 更改点检测: Sample3_DetectChangePoint.cs
多变量异常情况检测: Sample4_MultivariateDetect.cs
其他文档
有关 Azure 异常检测器 的更多文档,请参阅有关 docs.microsoft.com 的异常检测器文档。
贡献
本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 cla.microsoft.com。
提交拉取请求时,CLA 机器人将自动确定你是否需要提供 CLA,并相应地修饰 PR(例如标签、注释)。 直接按机器人提供的说明操作。 只需使用 CLA 对所有存储库执行一次这样的操作。
此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。