你当前正在访问 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 异常检测器 库的常见方案操作。 可以在示例目录下找到更多 示例

其他文档

有关 Azure 异常检测器 的更多文档,请参阅有关 docs.microsoft.com 的异常检测器文档

贡献

本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 cla.microsoft.com

提交拉取请求时,CLA 机器人将自动确定你是否需要提供 CLA,并相应地修饰 PR(例如标签、注释)。 直接按机器人提供的说明操作。 只需使用 CLA 对所有存储库执行一次这样的操作。

此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。