你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用单变量异常检测器客户端库

重要

从 2023 年 9 月 20 日开始,将无法创建新的异常检测器资源。 异常检测器服务将于 2026 年 10 月 1 日停用。

库参考文档 |库源代码 | 包 (NuGet) |在 GitHub 上查找代码示例

开始使用适用于 C# 的异常检测器客户端库。 请按照以下步骤操作,以使用服务提供的算法安装软件包。 通过异常检测器服务,可以对时序数据自动使用最佳适配模型,从而查找器其中的异常,不限行业、场景或数据量。

使用适用于 C# 的异常检测器客户端库,可实现以下操作:

  • 以批请求的形式检测整个时序数据集中的异常
  • 在时序中检测最新数据点的异常状态
  • 检测数据集中的趋势更改点。

先决条件

设置

创建新的 .NET Core 应用程序

在控制台窗口(例如 cmd、PowerShell 或 Bash)中,使用 dotnet new 命令创建名为 anomaly-detector-quickstart 的新控制台应用。 此命令将创建包含单个 C# 源文件的简单“Hello World”项目:Program.cs

dotnet new console -n anomaly-detector-quickstart

将目录更改为新创建的应用文件夹。 可使用以下代码生成应用程序:

dotnet build

生成输出不应包含警告或错误。

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

安装客户端库

在应用程序目录中,使用以下命令安装适用于 .NET 的异常检测器客户端库:

dotnet add package Azure.AI.AnomalyDetector --prerelease

检索密钥和终结点

若要成功对异常检测器服务发出调用,需要使用以下值:

变量名称
ANOMALY_DETECTOR_ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 终结点示例:https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到 API 密钥值。 可以使用 KEY1KEY2
DATA_PATH 本快速入门使用 request-data.csv 文件,可从我们的 GitHub 示例数据下载此文件。 示例路径:c:\\test\\request-data.csv

在 Azure 门户中转到你的资源。 可以在“资源管理”部分找到“终结点和密钥”。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1KEY2。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

创建环境变量

为密钥和终结点创建和分配持久环境变量。

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

下载示例数据

本快速入门使用 request-data.csv 文件,可从我们的 GitHub 示例数据下载此文件

还可以通过运行以下命令来下载示例数据:

curl "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/anomalydetector/azure-ai-anomalydetector/samples/sample_data/request-data.csv" --output request-data.csv

检测异常

从项目目录中,打开 Program.cs 文件,并将其内容替换为以下代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Azure;
using Azure.AI.AnomalyDetector;
using static System.Environment;

namespace anomaly_detector_quickstart
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string endpoint = GetEnvironmentVariable("ANOMALY_DETECTOR_ENDPOINT");
            string apiKey = GetEnvironmentVariable("ANOMALY_DETECTOR_API_KEY");

            var endpointUri = new Uri(endpoint);
            var credential = new AzureKeyCredential(apiKey);

            //create client
            AnomalyDetectorClient client = new AnomalyDetectorClient(endpointUri, credential);

            //read data
            //example: string datapath = @"c:\test\request-data.csv";
            string datapath = @"REPLACE_WITH_YOUR_LOCAL_SAMPLE_REQUEST_DATA_PATH";

            List<TimeSeriesPoint> list = File.ReadAllLines(datapath, Encoding.UTF8)
                .Where(e => e.Trim().Length != 0)
                .Select(e => e.Split(','))
                .Where(e => e.Length == 2)
                .Select(e => new TimeSeriesPoint(float.Parse(e[1])) { Timestamp = DateTime.Parse(e[0]) }).ToList();

              //create request
            UnivariateDetectionOptions request = new UnivariateDetectionOptions(list)
            {
                Granularity = TimeGranularity.Daily
            };

            UnivariateEntireDetectionResult result = client.DetectUnivariateEntireSeries(request);

            bool hasAnomaly = false;
            for (int i = 0; i < request.Series.Count; ++i)
            {
                if (result.IsAnomaly[i])
                {
                    Console.WriteLine("Anomaly detected at index: {0}.", i);
                    hasAnomaly = true;
                }
            }
            if (!hasAnomaly)
            {
                Console.WriteLine("No anomalies detected in the series.");
            }
        }
    }
}


重要

对于生产来说,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关凭据安全性的详细信息,请参阅 Azure AI 服务安全性一文。

dotnet run program.cs

输出

Anomaly detected at index:      3
Anomaly detected at index:      18
Anomaly detected at index:      21
Anomaly detected at index:      22
Anomaly detected at index:      23
Anomaly detected at index:      24
Anomaly detected at index:      25
Anomaly detected at index:      28
Anomaly detected at index:      29
Anomaly detected at index:      30
Anomaly detected at index:      31
Anomaly detected at index:      32
Anomaly detected at index:      35
Anomaly detected at index:      44

代码详细信息

理解结果

在上面的代码中,将读取示例数据并将其转换为 DetectRequest 对象。 我们使用文件路径调用 File.ReadAllLines,创建 TimeSeriesPoint 对象列表,并去除所有换行符。 提取值并将时间戳与其数值分开,然后将它们添加到新的 TimeSeriesPoint 对象。 DetectRequest 对象由一系列数据点组成,其中 TimeGranularity.Daily 表示数据点的粒度(或周期性)。 接下来,我们使用 DetectRequest 对象调用客户端的 DetectEntireSeriesAsync 方法,并以 EntireDetectResponse 对象的形式等待响应。 然后我们循环访问响应的 IsAnomaly 值并输出所有为 true 的值。 如果找到任何此类值,这些值对应于异常数据点的索引。

清理资源

如果你想要清理和删除异常检测器资源,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。 如果你不再打算使用已创建的环境变量,可能还需要考虑删除环境变量

库参考文档 |库源代码 | 包 (npm) |在 GitHub 上查找示例代码

适用于 JavaScript 的异常检测器客户端库入门。 请按照以下步骤安装软件包并开始使用服务提供的算法。 通过异常检测器服务,可以对时序数据自动使用最佳适配模型,从而查找器其中的异常,不限行业、场景或数据量。

使用适用于 JavaScript 的异常检测器客户端库,可实现以下操作:

  • 以批请求的形式检测整个时序数据集中的异常
  • 在时序中检测最新数据点的异常状态
  • 检测数据集中的趋势更改点。

先决条件

  • Azure 订阅 - 免费创建订阅
  • 最新版本的 Node.js
  • 拥有 Azure 订阅后,可在 Azure 门户中创建异常检测器资源来获取密钥和终结点。 等待其部署并选择“转到资源”按钮。
    • 需要从创建的资源获取密钥和终结点,以便将应用程序连接到异常检测器 API。 你将使用密钥和终结点创建环境变量。 可以使用免费定价层 (F0) 试用该服务,然后再升级到付费层进行生产。

设置

创建新的 Node.js 应用程序

在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为应用创建一个新目录并导航到该目录。

mkdir myapp && cd myapp

创建具有以下内容的 package.json 文件:

{
  "dependencies": {
    "@azure/ai-anomaly-detector": "next",
    "@azure-rest/ai-anomaly-detector": "next",
    "@azure/core-auth": "^1.3.0",
    "csv-parse": "^5.3.0"
  }
}

安装客户端库

从与 package.json 文件相同的目录运行以下命令来安装所需的 npm 包:

npm install

检索密钥和终结点

若要成功对异常检测器服务发出调用,需要使用以下值:

变量名称
ANOMALY_DETECTOR_ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 终结点示例:https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到 API 密钥值。 可以使用 KEY1KEY2
datapath 本快速入门使用 request-data.csv 文件,可从我们的 GitHub 示例数据下载此文件。

在 Azure 门户中转到你的资源。 可以在“资源管理”部分找到“终结点和密钥”。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1KEY2。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

创建环境变量

为密钥和终结点创建和分配持久环境变量。

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

下载示例数据

本快速入门使用 request-data.csv 文件,可从我们的 GitHub 示例数据下载此文件

还可以通过运行以下命令来下载示例数据:

curl "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/anomalydetector/azure-ai-anomalydetector/samples/sample_data/request-data.csv" --output request-data.csv

检测异常

创建一个名为 index.js 的文件并替换为以下代码:

const AnomalyDetector = require("@azure-rest/ai-anomaly-detector").default,
  { isUnexpected } = require("@azure-rest/ai-anomaly-detector");
const { AzureKeyCredential } = require("@azure/core-auth");

const { parse } = require("csv-parse/sync");
const fs = require("fs");

// You will need to set this environment variables or edit the following values
const apiKey = process.env["ANOMALY_DETECTOR_API_KEY"] || "";
const endpoint = process.env["ANOMALY_DETECTOR_ENDPOINT"] || "";
const timeSeriesDataPath = "./request-data.csv";

function read_series_from_file(path) {
  let result = Array();
  let input = fs.readFileSync(path).toString();
  let parsed = parse(input, { skip_empty_lines: true });
  parsed.forEach(function (e) {
    result.push({ timestamp: new Date(e[0]), value: Number(e[1]) });
  });
  return result;
}

async function main() {
  // create client
  const credential = new AzureKeyCredential(apiKey);
  const client = AnomalyDetector(endpoint, credential);

  // construct request
  const options = {
    body: {
      granularity: "daily",
      imputeMode: "auto",
      maxAnomalyRatio: 0.25,
      sensitivity: 95,
      series: read_series_from_file(timeSeriesDataPath),
    },
    headers: { "Content-Type": "application/json" },
  };

  // get last detect result
  const result = await client.path("/timeseries/entire/detect").post(options);
  if (isUnexpected(result)) {
    throw result;
  }

  if (result.body.isAnomaly) {
    result.body.isAnomaly.forEach(function (anomaly, index) {
      if (anomaly === true) {
        console.log(index);
      }
    });
  } else {
    console.log("There is no anomaly detected from the series.");
  }

}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

module.exports = { main };

运行应用程序

在快速入门文件中使用 node 命令运行应用程序。

node index.js

输出

Anomalies were detected from the series at index:
3
18
21
22
23
24
25
28
29
30
31
32
35
44

理解结果

在上面的代码中,我们调用 Anomaly Detector API 以使用客户端的 detectEntireSeries() 方法批量检测整个时间序列中的异常。 我们存储返回的 AnomalyDetectorDetectEntireSeriesResponse 对象。 然后,我们循环访问响应的 isAnomaly 列表,并输出任何 true 值的索引。 如果找到任何此类值,这些值对应于异常数据点的索引。

清理资源

如果你想要清理和删除异常检测器资源,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。 如果你不再打算使用已创建的环境变量,可能还需要考虑删除环境变量

库参考文档 |库源代码 | 包 (PyPi) |在 GitHub 上查找示例代码

适用于 Python 的异常检测器客户端库入门。 请按照以下步骤安装软件包并开始使用服务提供的算法。 通过异常检测器服务,可以对时序数据自动使用最佳适配模型,从而查找器其中的异常,不限行业、场景或数据量。

使用适用于 Python 的异常检测器客户端库,可实现以下操作:

  • 以批请求的形式检测整个时序数据集中的异常
  • 在时序中检测最新数据点的异常状态
  • 检测数据集中的趋势更改点。

先决条件

设置

安装客户端库。 可使用以下方式安装客户端库:

pip install --upgrade azure.ai.anomalydetector

检索密钥和终结点

若要成功对异常检测器服务发出调用,需要使用以下值:

变量名称
ANOMALY_DETECTOR_ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 终结点示例:https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到 API 密钥值。 可以使用 KEY1KEY2
DATA_PATH 本快速入门使用 request-data.csv 文件,可从我们的 GitHub 示例数据下载此文件。 示例路径:c:\\test\\request-data.csv

在 Azure 门户中转到你的资源。 可以在“资源管理”部分找到“终结点和密钥”。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1KEY2。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

创建环境变量

为密钥和终结点创建和分配持久环境变量。

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

下载示例数据

本快速入门使用 request-data.csv 文件,可从我们的 GitHub 示例数据下载此文件

还可以通过运行以下命令来下载示例数据:

curl "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/anomalydetector/azure-ai-anomalydetector/samples/sample_data/request-data.csv" --output request-data.csv

检测异常

  1. 创建名为 quickstart.py 的新 Python 文件。 然后在你偏好的编辑器或 IDE 中打开该文件。

  2. 将 quickstart.py 的内容替换为以下代码。 修改代码以添加你的键、终结点和时间序列数据路径的环境变量名称:

    from azure.ai.anomalydetector import AnomalyDetectorClient
    from azure.ai.anomalydetector.models import *
    from azure.core.credentials import AzureKeyCredential
    import pandas as pd
    import os
    
    API_KEY = os.environ['ANOMALY_DETECTOR_API_KEY']
    ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']
    DATA_PATH = "REPLACE_WITH_YOUR_LOCAL_SAMPLE_REQUEST_DATA_PATH" #example: c:\\test\\request-data.csv
    
    client = AnomalyDetectorClient(ENDPOINT, AzureKeyCredential(API_KEY))
    
    series = []
    data_file = pd.read_csv(DATA_PATH, header=None, encoding='utf-8', date_parser=[0])
    for index, row in data_file.iterrows():
        series.append(TimeSeriesPoint(timestamp=row[0], value=row[1]))
    
    request = UnivariateDetectionOptions(series=series, granularity=TimeGranularity.DAILY)
    
    change_point_response = client.detect_univariate_change_point(request)
    anomaly_response = client.detect_univariate_entire_series(request)
    
    for i in range(len(data_file.values)):
        if (change_point_response.is_change_point[i]):
            print("Change point detected at index: "+ str(i))
        elif (anomaly_response.is_anomaly[i]):
            print("Anomaly detected at index:      "+ str(i))
    

    重要

    对于生产来说,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关凭据安全性的详细信息,请参阅 Azure AI 服务安全性一文。

  3. 使用快速入门文件中的 python 命令运行应用程序

    python quickstart.py
    

输出

Anomaly detected at index:      3
Anomaly detected at index:      18
Change point detected at index: 20
Anomaly detected at index:      21
Anomaly detected at index:      22
Anomaly detected at index:      23
Anomaly detected at index:      24
Anomaly detected at index:      25
Change point detected at index: 27
Anomaly detected at index:      28
Anomaly detected at index:      29
Anomaly detected at index:      30
Anomaly detected at index:      31
Anomaly detected at index:      32
Anomaly detected at index:      35
Anomaly detected at index:      44

理解结果

在上面的代码中,我们两次调用异常检测器 API。 第一次调用将使用 detect_change_point 方法检查我们的样本数据系列中的趋势变化点。 此调用返回一个 ChangePointDetectResponse,我们将其存储在我们命名为 change_point_request 的变量中。 然后我们循环访问响应的 is_change_point 列表,并使用布尔值 true 打印任何值的索引。

第二次调用将使用 detect_entire_series 方法检查整个示例数据系列是否存在异常。 此调用返回一个 EntireDetectResponse,我们将其存储在我们命名为 anomaly_response 的变量中。 我们循环访问响应的 is_anomaly 列表,并使用布尔值 true 打印任何值的索引。 或者,我们可以使用 detect_last_point 方法,该方法更适合检测实时数据异常。 若要了解详细信息,请参阅最佳做法指南

将结果可视化

为了可视化与样本数据系列相关的异常和变化点,我们将使用流行的开源库 matplotlib

  1. 安装该库。

    pip install matplotlib
    
  2. 使用以下代码修改你的 quickstart.py 文件:

    from azure.ai.anomalydetector import AnomalyDetectorClient
    from azure.ai.anomalydetector.models import *
    from azure.core.credentials import AzureKeyCredential
    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import os
    
    API_KEY = os.environ['ANOMALY_DETECTOR_API_KEY']
    ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']
    DATA_PATH = "REPLACE_WITH_YOUR_LOCAL_SAMPLE_REQUEST_DATA_PATH" #example: c:\\test\\request-data.csv
    
    client = AnomalyDetectorClient(ENDPOINT, AzureKeyCredential(API_KEY))
    
    series = []
    data_file = pd.read_csv(DATA_PATH, header=None, encoding='utf-8', date_parser=[0])
    for index, row in data_file.iterrows():
        series.append(TimeSeriesPoint(timestamp=row[0], value=row[1]))
    
    request = UnivariateDetectionOptions(series=series, granularity=TimeGranularity.DAILY)
    
    change_point_response = client.detect_univariate_change_point(request)
    anomaly_response = client.detect_univariate_entire_series(request)
    
    for i in range(len(data_file.values)):
        temp_date_to_num = mdates.date2num(data_file.values[i])
        date= temp_date_to_num[0]
        if (change_point_response.is_change_point[i]):
            plt.plot(date,data_file.values[i][1], 's', color ='blue')
            print("Change point detected at index: "+ str(i))
        elif (anomaly_response.is_anomaly[i]):
            plt.plot(date,data_file.values[i][1], '^', color="red")
            print("Anomaly detected at index:      "+ str(i))
        else:
            plt.plot(date,data_file.values[i][1], 'o', color ='green')
    plt.show()
    

    重要

    对于生产来说,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关凭据安全性的详细信息,请参阅 Azure AI 服务安全性一文。

  3. 使用快速入门文件中的 python 命令运行应用程序

    python quickstart.py
    

输出

在此代码示例中,我们添加了 matplotlib 库以允许我们可视化并轻松区分正常数据点与变化点和异常。 更改点由蓝色方块表示,异常为红色三角形,普通数据点为绿色圆圈。 将使用 matplotlibdate2num 方法将日期转换为数字,以便为图表 y 轴提供图形友好值。

Screenshot of results with indexes of anomalies and change points on a scatter plot. Different shapes and colors are used for different data types..

清理资源

如果你想要清理和删除异常检测器资源,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。 如果你不再打算使用已创建的环境变量,可能还需要考虑删除环境变量

在本快速入门中,你将学习如何使用异常检测器服务和 cURL 在一批时序数据中检测异常。

若要深入了解“异常检测器”的概念,请参阅概述一文。

先决条件

  • Azure 订阅 - 免费创建订阅
  • 拥有 Azure 订阅后,可在 Azure 门户中创建异常检测器资源来获取密钥和终结点。 等待其部署并选择“转到资源”按钮。 可以使用免费定价层 (F0) 试用该服务,然后再升级到付费层进行生产。
  • 时序数据的有效 JSON 文件,用于测试异常。 如果你自己没有文件,可从请求正文示例创建一个 sample.json 文件

检索密钥和终结点

若要成功对异常检测器服务发出调用,需要使用以下值:

变量名称
ANOMALY_DETECTOR_ENDPOINT 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 终结点示例:https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY 从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到 API 密钥值。 可以使用 KEY1KEY2

在 Azure 门户中转到你的资源。 可以在“资源管理”部分找到“终结点和密钥”。 复制终结点和访问密钥,因为在对 API 调用进行身份验证时需要这两项。 可以使用 KEY1KEY2。 始终准备好两个密钥可以安全地轮换和重新生成密钥,而不会导致服务中断。

创建环境变量

为密钥和终结点创建和分配持久环境变量。

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

检测异常

请在命令提示符处运行以下命令。 需要将以下值插入到命令中。

  • 你的异常检测器服务订阅密钥。
  • 你的异常探测器终结点地址。
  • 时序数据的有效 JSON 文件,用于测试异常。 如果你自己没有文件,可从请求正文示例创建一个 sample.json 文件。
curl -v POST "%ANOMALY_DETECTOR_ENDPOINT%/anomalydetector/v1.0/timeseries/entire/detect"
-H "Content-Type: application/json"
-H "Ocp-Apim-Subscription-Key: %ANOMALY_DETECTOR_API_KEY%"
-d "@path_to_sample_file.json" 

完整命令作为单行的示例:

curl -v POST "%ANOMALY_DETECTOR_ENDPOINT%/anomalydetector/v1.0/timeseries/entire/detect" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: %ANOMALY_DETECTOR_API_KEY%" -d "@c:\test\rest.json"

或者,如果从 Bash shell 运行 cURL 命令,则命令会略有不同:

curl -v POST "$ANOMALY_DETECTOR_ENDPOINT/anomalydetector/v1.0/timeseries/entire/detect" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: $ANOMALY_DETECTOR_API_KEY" -d "@c:\test\rest.json"

如果你使用了先决条件中的示例数据,则应收到包含以下结果的响应 200:

{
  "expectedValues": [
    827.7940908243968,
    798.9133774671927,
    888.6058431807189,
    900.5606407986661,
    962.8389426378304,
    933.2591606306954,
    891.0784104799666,
    856.1781601363697,
    809.8987227908941,
    807.375129007505,
    764.3196682448518,
    803.933498594564,
    823.5900620883058,
    794.0905641334288,
    883.164245249282,
    894.8419000690953,
    956.8430591101258,
    927.6285055190114,
    885.812983784303,
    851.6424797402517,
    806.0927886943216,
    804.6826815312029,
    762.74070738882,
    804.0251702513732,
    825.3523662579559,
    798.0404188724976,
    889.3016505577698,
    902.4226124345937,
    965.867078532635,
    937.3200495736695,
    896.1720524711102,
    862.0087368413656,
    816.4662342097423,
    814.4297745524709,
    771.8614479159354,
    811.859271346729,
    831.8998279215521,
    802.947544797165,
    892.5684407435083,
    904.5488214533809,
    966.8527063844707,
    937.3168391003043,
    895.180003672544,
    860.3649596356635,
    814.1707285969043,
    811.9054862686213,
    769.1083769610742,
    809.2328084659704
  ],
  "upperMargins": [
    41.389704541219835,
    39.94566887335964,
    44.43029215903594,
    45.02803203993331,
    48.14194713189152,
    46.66295803153477,
    44.55392052399833,
    42.808908006818484,
    40.494936139544706,
    40.36875645037525,
    38.215983412242586,
    40.196674929728196,
    41.17950310441529,
    39.70452820667144,
    44.1582122624641,
    44.74209500345477,
    47.84215295550629,
    46.38142527595057,
    44.290649189215145,
    42.58212398701258,
    40.30463943471608,
    40.234134076560146,
    38.137035369441,
    40.201258512568664,
    41.267618312897795,
    39.90202094362488,
    44.46508252788849,
    45.121130621729684,
    48.29335392663175,
    46.86600247868348,
    44.80860262355551,
    43.100436842068284,
    40.82331171048711,
    40.721488727623544,
    38.593072395796774,
    40.59296356733645,
    41.5949913960776,
    40.14737723985825,
    44.62842203717541,
    45.227441072669045,
    48.34263531922354,
    46.86584195501521,
    44.759000183627194,
    43.01824798178317,
    40.70853642984521,
    40.59527431343106,
    38.45541884805371,
    40.46164042329852
  ],
  "lowerMargins": [
    41.389704541219835,
    39.94566887335964,
    44.43029215903594,
    45.02803203993331,
    48.14194713189152,
    46.66295803153477,
    44.55392052399833,
    42.808908006818484,
    40.494936139544706,
    40.36875645037525,
    38.215983412242586,
    40.196674929728196,
    41.17950310441529,
    39.70452820667144,
    44.1582122624641,
    44.74209500345477,
    47.84215295550629,
    46.38142527595057,
    44.290649189215145,
    42.58212398701258,
    40.30463943471608,
    40.234134076560146,
    38.137035369441,
    40.201258512568664,
    41.267618312897795,
    39.90202094362488,
    44.46508252788849,
    45.121130621729684,
    48.29335392663175,
    46.86600247868348,
    44.80860262355551,
    43.100436842068284,
    40.82331171048711,
    40.721488727623544,
    38.593072395796774,
    40.59296356733645,
    41.5949913960776,
    40.14737723985825,
    44.62842203717541,
    45.227441072669045,
    48.34263531922354,
    46.86584195501521,
    44.759000183627194,
    43.01824798178317,
    40.70853642984521,
    40.59527431343106,
    38.45541884805371,
    40.46164042329852
  ],
  "isAnomaly": [
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    true,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false
  ],
  "isPositiveAnomaly": [
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    true,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false
  ],
  "isNegativeAnomaly": [
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false,
    false
  ],
  "period": 12
}

有关详细信息,请参阅异常情况检测 REST 参考

清理资源

如果想要清理并移除 Azure AI 服务订阅,则可以删除资源或资源组。 删除资源组同时也会删除与资源组相关联的任何其他资源。

后续步骤

概念:

教程: