빠른 시작: Univariate Anomaly Detector 클라이언트 라이브러리 사용

Important

2023년 9월 20일부터 새 Anomaly Detector 리소스를 만들 수 없습니다. Anomaly Detector 서비스는 2026년 10월 1일에 사용 중지됩니다.

라이브러리 참조 설명서 |라이브러리 소스 코드 | 패키지(NuGet) |GitHub에서 샘플 코드 찾기

C#용 Anomaly Detector 클라이언트 라이브러리를 시작합니다. 다음 단계에 따라 서비스에서 제공하는 알고리즘을 사용하여 패키지를 설치합니다. Anomaly Detector 서비스를 사용하면 업계, 시나리오 또는 데이터 볼륨에 관계없이 가장 적합한 모델을 자동으로 사용하여 시계열 데이터에서 이상을 찾을 수 있습니다.

C#용 Anomaly Detector 클라이언트 라이브러리를 사용하여 다음을 수행합니다.

  • 일괄 요청으로 시계열 데이터 세트 전체에서 변칙 검색
  • 시계열에서 최신 데이터 요소의 변칙 상태 검색
  • 데이터 집합에서 추세 변경 지점을 검색합니다.

필수 조건

설정

새 .NET Core 애플리케이션 만들기

콘솔 창(예: cmd, PowerShell 또는 Bash)에서 dotnet new 명령을 사용하여 anomaly-detector-quickstart라는 새 콘솔 앱을 만듭니다. 이 명령은 단일 C# 소스 파일인 Program.cs 사용하여 간단한 "헬로 월드" 프로젝트를 만듭니다.

dotnet new console -n anomaly-detector-quickstart

디렉터리를 새로 만든 앱 폴더로 변경합니다. 다음을 사용하여 애플리케이션을 빌드할 수 있습니다.

dotnet build

빌드 출력에는 경고 또는 오류가 없어야 합니다.

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

클라이언트 라이브러리 설치

애플리케이션 디렉터리 내에서 다음 명령을 사용하여 .NET용 Anomaly Detector 클라이언트 라이브러리를 설치합니다.

dotnet add package Azure.AI.AnomalyDetector --prerelease

키 및 엔드포인트 검색

Anomaly Detector 서비스를 성공적으로 호출하려면 다음 값이 필요합니다.

변수 이름
ANOMALY_DETECTOR_ENDPOINT 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 엔드포인트 예: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY API 키 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.
DATA_PATH 이 빠른 시작에서는 GitHub 샘플 데이터에서 다운로드할 수 있는 request-data.csv 파일을 사용합니다. 예제 경로: c:\\test\\request-data.csv

Azure Portal에서 해당 리소스로 이동합니다. 엔드포인트 및 키리소스 관리 섹션에서 찾을 수 있습니다. 엔드포인트 및 액세스 키를 복사합니다. API 호출을 인증하는 데 모두 필요합니다. KEY1 또는 KEY2를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

환경 변수 만들기

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

샘플 데이터 다운로드

이 빠른 시작에서는 GitHub 샘플 데이터에서 다운로드할 수 있는 request-data.csv 파일을 사용합니다.

다음을 실행하여 샘플 데이터를 다운로드할 수도 있습니다.

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.");
            }
        }
    }
}


Important

프로덕션의 경우 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인 값을 출력합니다. 이러한 값은 변칙 데이터 요소의 인덱스와 일치합니다(발견된 경우).

리소스 정리

Anomaly Detector 리소스를 정리하고 제거하려는 경우 리소스 또는 리소스 그룹을 삭제할 수 있습니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다. 더 이상 사용하지 않으려는 경우 만든 환경 변수 삭제를 고려할 수도 있습니다.

라이브러리 참조 설명서 |라이브러리 소스 코드 | 패키지(npm) |GitHub에서 샘플 코드 찾기

JavaScript용 Anomaly Detector 클라이언트 라이브러리를 시작합니다. 다음 단계에 따라 패키지를 설치하고 서비스에서 제공하는 알고리즘을 사용합니다. Anomaly Detector 서비스를 사용하면 업계, 시나리오 또는 데이터 양에 관계없이 가장 적합한 모델을 자동으로 사용하여 시계열 데이터의 변칙을 찾을 수 있습니다.

JavaScript용 Anomaly Detector 클라이언트 라이브러리를 사용하여 다음을 수행합니다.

  • 일괄 요청으로 시계열 데이터 세트 전체에서 변칙 검색
  • 시계열에서 최신 데이터 요소의 변칙 상태 검색
  • 데이터 집합에서 추세 변경 지점을 검색합니다.

필수 조건

  • Azure 구독 - 체험 구독 만들기
  • 현재 버전의 Node.js
  • Azure 구독 이 있으면 Azure Portal에서 Anomaly Detector 리소스 를 만들어 키와 엔드포인트를 가져옵니다. 배포할 때까지 기다렸다가 리소스이동 단추를 선택합니다.
    • 애플리케이션을 Anomaly Detector 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 서비스를 성공적으로 호출하려면 다음 값이 필요합니다.

변수 이름
ANOMALY_DETECTOR_ENDPOINT 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 엔드포인트 예: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY API 키 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.
datapath 이 빠른 시작에서는 GitHub 샘플 데이터에서 다운로드할 수 있는 request-data.csv 파일을 사용합니다.

Azure Portal에서 해당 리소스로 이동합니다. 엔드포인트 및 키리소스 관리 섹션에서 찾을 수 있습니다. 엔드포인트 및 액세스 키를 복사합니다. API 호출을 인증하는 데 모두 필요합니다. KEY1 또는 KEY2를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

환경 변수 만들기

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

샘플 데이터 다운로드

이 빠른 시작에서는 GitHub 샘플 데이터에서 다운로드할 수 있는 request-data.csv 파일을 사용합니다.

다음을 실행하여 샘플 데이터를 다운로드할 수도 있습니다.

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 값의 인덱스를 출력합니다. 이러한 값은 변칙 데이터 요소의 인덱스와 일치합니다(발견된 경우).

리소스 정리

Anomaly Detector 리소스를 정리하고 제거하려는 경우 리소스 또는 리소스 그룹을 삭제할 수 있습니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다. 더 이상 사용하지 않으려는 경우 만든 환경 변수 삭제를 고려할 수도 있습니다.

라이브러리 참조 설명서 |라이브러리 소스 코드 | 패키지(PyPi) |GitHub에서 샘플 코드 찾기

Python용 Anomaly Detector 클라이언트 라이브러리를 시작합니다. 다음 단계에 따라 패키지를 설치하고 서비스에서 제공하는 알고리즘 사용을 시작합니다. Anomaly Detector 서비스를 사용하면 업계, 시나리오 또는 데이터 볼륨에 관계없이 가장 적합한 모델을 자동으로 사용하여 시계열 데이터에서 이상을 찾을 수 있습니다.

Python용 Anomaly Detector 클라이언트 라이브러리를 사용하여 다음을 수행합니다.

  • 일괄 요청으로 시계열 데이터 세트 전체에서 변칙 검색
  • 시계열에서 최신 데이터 요소의 변칙 상태 검색
  • 데이터 집합에서 추세 변경 지점을 검색합니다.

필수 조건

설정

클라이언트 라이브러리를 설치합니다. 다음을 사용하여 클라이언트 라이브러리를 설치할 수 있습니다.

pip install --upgrade azure.ai.anomalydetector

키 및 엔드포인트 검색

Anomaly Detector 서비스를 성공적으로 호출하려면 다음 값이 필요합니다.

변수 이름
ANOMALY_DETECTOR_ENDPOINT 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 엔드포인트 예: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY API 키 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.
DATA_PATH 이 빠른 시작에서는 GitHub 샘플 데이터에서 다운로드할 수 있는 request-data.csv 파일을 사용합니다. 예제 경로: c:\\test\\request-data.csv

Azure Portal에서 해당 리소스로 이동합니다. 엔드포인트 및 키리소스 관리 섹션에서 찾을 수 있습니다. 엔드포인트 및 액세스 키를 복사합니다. API 호출을 인증하는 데 모두 필요합니다. KEY1 또는 KEY2를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

환경 변수 만들기

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"

샘플 데이터 다운로드

이 빠른 시작에서는 GitHub 샘플 데이터에서 다운로드할 수 있는 request-data.csv 파일을 사용합니다.

다음을 실행하여 샘플 데이터를 다운로드할 수도 있습니다.

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))
    

    Important

    프로덕션의 경우 Azure Key Vault와 같은 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용합니다. 자격 증명 보안에 대한 자세한 내용은 Azure AI 서비스 보안 문서를 참조하세요.

  3. quickstart 파일에서 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

결과 해석

위의 코드에서는 Anomaly Detector API를 두 번 호출합니다. 첫 번째 호출은 detect_change_point 메서드를 사용하여 샘플 데이터 계열의 추세 변경 지점을 확인합니다. 이 호출은 change_point_request라는 변수에 저장한 ChangePointDetectResponse를 반환합니다. 그런 다음, 응답의 is_change_point 목록을 반복하고 부울 true인 모든 값의 인덱스를 인쇄합니다.

두 번째 호출은 detect_entire_series 메서드를 사용하여 전체 샘플 데이터 계열에서 변칙을 검사합니다. 이 호출은 anomaly_response라는 변수에 저장한 EntireDetectResponse를 반환합니다. 응답의 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()
    

    Important

    프로덕션의 경우 Azure Key Vault와 같은 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용합니다. 자격 증명 보안에 대한 자세한 내용은 Azure AI 서비스 보안 문서를 참조하세요.

  3. quickstart 파일에서 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..

리소스 정리

Anomaly Detector 리소스를 정리하고 제거하려는 경우 리소스 또는 리소스 그룹을 삭제할 수 있습니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다. 더 이상 사용하지 않으려는 경우 만든 환경 변수 삭제를 고려할 수도 있습니다.

이 빠른 시작에서는 Anomaly Detector 서비스 및 cURL을 사용하여 시계열 데이터 일괄 처리에서 변칙을 검색하는 방법을 알아봅니다.

Anomaly Detector 개념에 대한 대략적인 내용은 개요 문서를 참조하세요.

필수 조건

  • Azure 구독 - 체험 구독 만들기
  • Azure 구독 이 있으면 Azure Portal에서 Anomaly Detector 리소스 를 만들어 키와 엔드포인트를 가져옵니다. 배포할 때까지 기다렸다가 리소스이동 단추를 선택합니다. 무료 가격 책정 계층(F0)을 사용하여 서비스를 사용해 볼 수 있으며 나중에 프로덕션용 유료 계층으로 업그레이드할 수 있습니다.
  • 변칙을 테스트할 시계열 데이터의 유효한 JSON 파일입니다. 사용자 고유의 파일이 없는 경우 요청 본문 샘플에서 sample.json 파일을 만들 수 있습니다.

키 및 엔드포인트 검색

Anomaly Detector 서비스를 성공적으로 호출하려면 다음 값이 필요합니다.

변수 이름
ANOMALY_DETECTOR_ENDPOINT 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 엔드포인트 예: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/
ANOMALY_DETECTOR_API_KEY API 키 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.

Azure Portal에서 해당 리소스로 이동합니다. 엔드포인트 및 키리소스 관리 섹션에서 찾을 수 있습니다. 엔드포인트 및 액세스 키를 복사합니다. API 호출을 인증하는 데 모두 필요합니다. KEY1 또는 KEY2를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

환경 변수 만들기

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

변칙 검색

명령 프롬프트에서 다음 명령을 실행합니다. 명령에 다음 값을 삽입해야 합니다.

  • Anomaly Detector 서비스 구독 키입니다.
  • 변칙 탐지기 엔드포인트 주소입니다.
  • 변칙을 테스트할 시계열 데이터의 유효한 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 셸에서 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 서비스 구독을 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제할 수 있습니다. 리소스 그룹을 삭제하면 리소스 그룹과 연결된 다른 리소스도 삭제됩니다.

다음 단계

개념:

자습서: