빠른 시작: Univariate Anomaly Detector 클라이언트 라이브러리 사용
Important
2023년 9월 20일부터 새로운 Anomaly Detector 리소스를 만들 수 없습니다. Anomaly Detector 서비스는 2026년 10월 1일에 사용 중지됩니다.
라이브러리 참조 설명서 |라이브러리 소스 코드 | 패키지(NuGet) |GitHub에서 샘플 코드 찾기
C#용 Anomaly Detector 클라이언트 라이브러리를 시작합니다. 서비스에서 제공하는 알고리즘을 사용하여 패키지 시작을 설치하려면 다음 단계를 따르세요. Anomaly Detector 서비스를 사용하면 업계, 시나리오 또는 데이터 양에 관계없이 가장 적합한 모델을 자동으로 사용하여 시계열 데이터의 변칙을 찾을 수 있습니다.
C#용 Anomaly Detector 클라이언트 라이브러리를 사용하여 다음을 수행합니다.
- 일괄 요청으로 시계열 데이터 세트 전체에서 변칙 검색
- 시계열에서 최신 데이터 요소의 변칙 상태 검색
- 데이터 세트에서 추세 변화 포인트 검색
필수 조건
- Azure 구독 - 체험 구독 만들기
- 최신 버전의 .NET Core
- Azure 구독이 있으면 Azure Portal에서 Anomaly Detector 리소스를 만들어 키와 엔드포인트를 가져옵니다. 배포될 때까지 기다렸다가 리소스로 이동 단추를 선택합니다. 평가판 가격 책정 계층(
F0
)을 통해 서비스를 사용해보고, 나중에 프로덕션용 유료 계층으로 업그레이드할 수 있습니다.
설정
새 .NET Core 애플리케이션 만들기
콘솔 창(예: cmd, PowerShell 또는 Bash)에서 dotnet new
명령을 사용하여 anomaly-detector-quickstart
라는 새 콘솔 앱을 만듭니다. 이 명령은 program.cs라는 단일 C# 원본 파일을 사용하여 간단한 "Hello World" 프로젝트를 만듭니다.
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
를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.
환경 변수 만들기
키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.
Important
API 키를 사용하는 경우 Azure Key Vault와 같은 다른 위치에 안전하게 저장하세요. API 키를 코드에 직접 포함하지 말고, 공개적으로 게시하지 마세요.
AI 서비스 보안에 대한 자세한 내용은 Azure AI 서비스에 대한 요청 인증을 참조하세요.
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.");
}
}
}
}
다음 명령을 사용하여 애플리케이션을 실행합니다.
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 리소스를 만들어 키와 엔드포인트를 가져옵니다. 배포될 때까지 기다렸다가 리소스로 이동 단추를 선택합니다. 평가판 가격 책정 계층(
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
를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.
환경 변수 만들기
키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.
Important
API 키를 사용하는 경우 Azure Key Vault와 같은 다른 위치에 안전하게 저장하세요. API 키를 코드에 직접 포함하지 말고, 공개적으로 게시하지 마세요.
AI 서비스 보안에 대한 자세한 내용은 Azure AI 서비스에 대한 요청 인증을 참조하세요.
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");
// Retrieve the endpoint and key from the environment variables.
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 };
애플리케이션 실행
quickstart 파일의 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 클라이언트 라이브러리를 사용하여 다음을 수행할 수 있습니다.
- 일괄 요청으로 시계열 데이터 세트 전체에서 변칙 검색
- 시계열에서 최신 데이터 요소의 변칙 상태 검색
- 데이터 세트에서 추세 변화 포인트 검색
필수 조건
- Azure 구독 - 체험 구독 만들기
- Python 3.x
- Pandas 데이터 분석 라이브러리
- Azure 구독이 있으면 Azure Portal에서 Anomaly Detector 리소스를 만들어 키와 엔드포인트를 가져옵니다. 배포될 때까지 기다렸다가 리소스로 이동 단추를 선택합니다. 평가판 가격 책정 계층(
F0
)을 통해 서비스를 사용해보고, 나중에 프로덕션용 유료 계층으로 업그레이드할 수 있습니다.
설정
클라이언트 라이브러리를 설치합니다. 다음을 사용하여 클라이언트 라이브러리를 설치할 수 있습니다.
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
를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.
환경 변수 만들기
키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.
Important
API 키를 사용하는 경우 Azure Key Vault와 같은 다른 위치에 안전하게 저장하세요. API 키를 코드에 직접 포함하지 말고, 공개적으로 게시하지 마세요.
AI 서비스 보안에 대한 자세한 내용은 Azure AI 서비스에 대한 요청 인증을 참조하세요.
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
변칙 검색
quickstart.py라는 새 Python 파일을 만듭니다. 선호하는 편집기 또는 IDE에서 이 파일을 엽니다.
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 서비스 보안 문서를 참조하세요.
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를 사용합니다.
라이브러리를 설치합니다.
pip install matplotlib
다음 코드로 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 서비스 보안 문서를 참조하세요.
quickstart 파일에서
python
명령을 사용하여 애플리케이션을 실행합니다.python quickstart.py
출력
이 코드 예제에서는 일반 데이터 포인트를 시각화하고 변경 지점 및 변칙에서 쉽게 구분할 수 있도록 matplotlib
라이브러리를 추가했습니다. 변경 지점은 파란색 사각형으로 표시되고, 변칙은 빨간색 삼각형으로 표시되고, 일반 데이터 포인트는 녹색 원입니다. 날짜는 matplotlib
의 date2num
메서드를 사용하여 차트 y축에 대한 친숙한 그래프 값을 제공하는 숫자로 변환됩니다.
리소스 정리
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
를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.
환경 변수 만들기
키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.
Important
API 키를 사용하는 경우 Azure Key Vault와 같은 다른 위치에 안전하게 저장하세요. API 키를 코드에 직접 포함하지 말고, 공개적으로 게시하지 마세요.
AI 서비스 보안에 대한 자세한 내용은 Azure AI 서비스에 대한 요청 인증을 참조하세요.
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 셸에서 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 서비스 구독을 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제할 수 있습니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다.
다음 단계
개념:
자습서: