다변량 Anomaly Detector API 사용 모범 사례

Important

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

이 문서에서는 다변량 Anomaly Detector(MVAD) API를 사용할 때 따라야 하는 권장 사례에 관한 지침을 제공합니다. 이 자습서에서는 다음을 수행합니다.

  • API 사용: 오류 없이 MVAD를 사용하는 방법을 알아봅니다.
  • 데이터 엔지니어링: MVAD가 더 정확하게 수행되도록 데이터를 가장 잘 준비하는 방법을 알아봅니다.
  • 공통 문제: 고객에게 발생하는 공통 문제를 방지하는 방법을 알아봅니다.
  • FAQ: 자주 묻는 질문에 관해 알아봅니다.

API 사용

이 섹션의 지침에 따라 MVAD를 사용하는 동안 오류를 방지합니다. 그래도 오류가 발생하는 경우 관련 설명과 취할 조치는 오류 코드의 전체 목록을 참조하세요.

입력 매개 변수

필수 매개 변수

다음 세 가지 매개 변수는 학습 및 유추 API 요청에 필요합니다.

  • source - SAS(공유 액세스 서명)가 있는 Azure Blob Storage에 있는 zip 파일에 대한 링크입니다.
  • startTime - 학습 또는 유추에 사용되는 데이터의 시작 시간입니다. 데이터의 가장 이른 실제 타임스탬프보다 이전인 경우 가장 이른 실제 타임스탬프가 시작점으로 사용됩니다.
  • endTime - 학습 또는 유추에 사용되는 데이터의 종료 시간이며, startTime보다 이후이거나 같아야 합니다. endTime이 데이터의 최신 실제 타임스탬프보다 이후인 경우 최신 실제 타임스탬프가 끝점으로 사용됩니다. endTimestartTime과 같으면 스트리밍 시나리오에서 자주 사용되는 단일 데이터 요소를 유추하는 것입니다.

학습 API에 대한 선택적 매개 변수

학습 API에 대한 다른 매개 변수는 선택 사항입니다.

  • slidingWindow - 변칙을 결정하는 데 사용되는 데이터 요소의 수입니다. 28에서 2,880 사이의 정수입니다. 기본값은 300입니다. slidingWindow가 모델 학습에 대해 k인 경우 유효한 결과를 얻으려면 유추하는 동안 원본 파일에서 k개 이상의 요소에 액세스할 수 있어야 합니다.

    MVAD는 데이터 요소의 세그먼트를 사용하여 다음 데이터 요소가 변칙인지 여부를 결정합니다. 세그먼트의 길이는 slidingWindow입니다. slidingWindow 값을 선택하는 경우 다음 두 가지 사항에 주의하세요.

    1. 데이터의 속성: 주기적인지 여부와 샘플링 속도입니다. 데이터가 주기적인 경우 1~3 주기의 길이를 slidingWindow로 설정할 수 있습니다. 데이터가 분 수준 또는 초 수준과 같이 짧은 빈도(작은 세분성)인 경우 slidingWindow를 상대적으로 높은 값으로 설정할 수 있습니다.
    2. 학습/유추 시간과 잠재적인 성능 영향 간의 균형입니다. slidingWindow가 클수록 학습/유추 시간이 길어질 수 있습니다. slidingWindow가 클수록 정확도가 향상된다고 보장하지는 않습니다. slidingWindow가 작은 경우 모델을 최적의 솔루션으로 수렴하기가 어려울 수 있습니다. 예를 들어 slidingWindow에 두 개의 요소만 있는 경우 변칙을 검색하기 어렵습니다.
  • alignMode - 타임스탬프에서 여러 변수(시계열)를 정렬하는 방법입니다. 이 매개 변수에는 InnerOuter의 두 가지 옵션이 있으며, 기본값은 Outer입니다.

    이 매개 변수는 변수의 타임스탬프 시퀀스 간에 잘못 정렬되는 경우에 매우 중요합니다. 모델에서 추가로 처리하기 전에 변수를 동일한 타임스탬프 시퀀스에 정렬해야 합니다.

    Inner는 모델에서 모든 변수의 값이 있는 타임스탬프(즉, 모든 변수의 교집합)에 대해서만 검색 결과를 보고함을 의미합니다. Outer는 모델에서 변수의 값이 있는 타임스탬프(즉, 모든 변수의 합집합)에 대한 검색 결과를 보고함을 의미합니다.

    다양한 alignModel 값을 설명하는 예는 다음과 같습니다.

    Variable-1

    timestamp value
    2020-11-01 1
    2020-11-02 2
    2020-11-04 4
    2020-11-05 5

    Variable-2

    timestamp value
    2020-11-01 1
    2020-11-02 2
    2020-11-03 3
    2020-11-04 4

    두 변수의 Inner 조인

    timestamp Variable-1 Variable-2
    2020-11-01 1 1
    2020-11-02 2 2
    2020-11-04 4 4

    두 변수의 Outer 조인

    timestamp Variable-1 Variable-2
    2020-11-01 1 1
    2020-11-02 2 2
    2020-11-03 nan 3
    2020-11-04 4 4
    2020-11-05 5 nan
  • fillNAMethod - nan을 병합된 테이블에 채우는 방법입니다. 병합된 테이블에 누락된 값이 있을 수 있으며, 적절하게 처리해야 합니다. 이를 채우기 위한 몇 가지 메서드를 제공합니다. 옵션은 Linear, Previous, Subsequent, ZeroFixed이며, 기본값은 Linear입니다.

    옵션 메서드
    Linear nan 값을 선형 보간으로 채웁니다.
    Previous 마지막 유효한 값을 전파하여 간격을 채웁니다. 예: [1, 2, nan, 3, nan, 4] ->[1, 2, 2, 3, 3, 4]
    Subsequent 다음 유효한 값을 사용하여 간격을 채웁니다. 예: [1, 2, nan, 3, nan, 4] ->[1, 2, 3, 3, 4, 4]
    Zero nan 값을 0으로 채웁니다.
    Fixed nan 값을 paddingValue에 제공해야 하는 지정된 유효한 값으로 채웁니다.
  • paddingValue - 패딩 값은 fillNAMethod 메서드가 Fixed일 때 nan을 채우는 데 사용되며, 이 경우 반드시 제공해야 합니다. 다른 경우에는 선택 사항입니다.

  • displayName - 모델을 식별하는 데 사용되는 선택적 매개 변수입니다. 예를 들어 모델 및 해당 입력 데이터에 대한 매개 변수, 데이터 원본 및 기타 메타 데이터를 표시하는 데 사용할 수 있습니다. 기본값은 빈 문자열입니다.

입력 데이터 스키마

MVAD는 메트릭 그룹에서 변칙을 검색하며 각 메트릭을 변수 또는 시계열이라고 합니다.

  • Microsoft에서 샘플 데이터 파일을 다운로드하여 https://aka.ms/AnomalyDetector/MVADSampleData에서 허용되는 스키마를 확인할 수 있습니다.

  • 각 변수에는 timestampvalue라는 두 필드만 있어야 하며 각 변수는 CSV(쉼표로 구분된 값) 파일로 저장해야 합니다.

  • CSV 파일의 열 이름은 대/소문자를 구분하여 정확하게 timestampvalue이어야 합니다.

  • timestamp 값은 ISO 8601을 준수해야 합니다. value는 소수 자릿수가 있는 정수 또는 소수일 수 있습니다. CSV 파일의 콘텐츠에 대한 좋은 예는 다음과 같습니다.

    timestamp value
    2019-04-01T00:00:00Z 5
    2019-04-01T00:01:00Z 3.6
    2019-04-01T00:02:00Z 4
    ... ...

    참고 항목

    타임스탬프에 시간, 분 및/또는 초가 있는 경우 API를 호출하기 전에 타임스탬프가 올바르게 반올림되었는지 확인합니다.

    예를 들어, 데이터 빈도가 30초마다 하나의 데이터 요소여야 하지만 “12:00:01” 및 “12:00:28”과 같은 타임스탬프가 표시되는 경우 이는 타임스탬프를 “12:00:00” 및 “12:00:30”과 같은 새 값으로 전처리해야 한다는 강력한 신호입니다.

    자세한 내용은 모범 사례 문서의 “타임스탬프 반올림” 섹션을 참조하세요.

  • Csv 파일의 이름은 변수 이름으로 사용되며 고유해야 합니다. 예를 들면 "temperature.csv" 및 "humidity.csv"입니다.

  • 학습 관련 변수와 유추 관련 변수는 일관되어야 합니다. 예를 들어 series_1, series_2, series_3, series_4, series_5를 학습에 사용하는 경우 유추를 위해 똑같은 변수를 제공해야 합니다.

  • CSV 파일은 zip 파일로 압축되고 Azure Blob 컨테이너에 업로드되어야 합니다. zip 파일에는 원하는 이름을 사용할 수 있습니다.

폴더 구조

데이터 준비 시 일반적인 실수는 zip 파일에 추가 폴더가 있는 것입니다. 예를 들어, zip 파일의 이름이 series.zip이라고 가정합니다. 새 폴더 ./series에 파일의 압축을 푼 후 CSV 파일의 올바른 경로는 ./series/series_1.csv이며 잘못된 경로는 ./series/foo/bar/series_1.csv일 수 있습니다.

Windows에서 zip 파일의 압축을 푼 후 디렉터리 트리의 올바른 예제

.
└── series
    ├── series_1.csv
    ├── series_2.csv
    ├── series_3.csv
    ├── series_4.csv
    └── series_5.csv

Windows에서 zip 파일의 압축을 푼 후 디렉터리 트리의 잘못된 예제

.
└── series
    └── series
        ├── series_1.csv
        ├── series_2.csv
        ├── series_3.csv
        ├── series_4.csv
        └── series_5.csv

데이터 엔지니어링

이제 오류 없이 MVAD API를 사용하여 코드를 실행할 수 있습니다. 모델 정확도를 향상하기 위해 수행할 수 있는 작업은 무엇인가요?

데이터 품질

  • 모델이 기록 데이터에서 정상 패턴을 학습할 때 학습 데이터는 시스템의 전체적인 정상 상태를 나타내야 합니다. 학습 데이터가 변칙으로 가득 찬 경우 모델은 이 유형의 패턴을 학습하기 어렵습니다. 양호한 정확도를 보장하려면 비정상적인 비율의 경험적 임계값은 1% 이하입니다.
  • 일반적으로 학습 데이터의 누락된 값 비율은 20% 미만이어야 합니다. 누락된 데이터가 너무 많으면 자동으로 채워진 값(일반적으로 선형 값이나 상수 값)이 일반 패턴으로 학습될 수 있습니다. 이로 인해 실제(누락되지 않은) 데이터 포인트가 변칙으로 검색될 수 있습니다.

데이터 수량

  • MVAD의 기본 모델에는 수백만 개의 매개 변수가 있습니다. 최적 매개 변수 세트를 학습하려면 최소 개수의 데이터 포인트가 필요합니다. 경험적 규칙은 양호한 정확도를 보장하기 위해 변수당 5,000개 이상의 데이터 포인트(타임스탬프)를 제공하여 모델을 학습시켜야 한다는 것입니다. 일반적으로 학습 데이터가 많을수록 정확도가 향상됩니다. 그러나 많은 데이터를 누적할 수 없는 경우에도 적은 데이터로 실험하고 손상된 정확도가 허용되는지 확인하는 것이 좋습니다.

  • 유추 API를 호출할 때마다 원본 데이터 파일에 충분한 데이터 포인트가 포함되는지 확인해야 합니다. 이는 일반적으로 slidingWindow + 실제로 유추 결과가 필요한 데이터 포인트 수입니다. 예를 들어, 하나의 새 타임스탬프에서 유추하려고 할 때마다 데이터 파일에 선행 slidingWindow + 하나의 데이터 포인트가 포함될 수 있는 스트리밍 사례에서는 계속 이동하고, 데이터 포인트 수는 동일하지만(slidingWindow + 1) 하나의 단계를 “오른”쪽으로 이동하여 또 다른 zip 파일을 만들고, 또 다른 유추 작업을 위해 제출할 수 있습니다.

    해당 값을 초과하는 항목이나 선행 슬라이딩 윈도우 “이전” 항목은 유추 결과에 전혀 영향을 주지 않으며 성능 다운그레이드만 발생시킬 수 있습니다. 아래의 항목은 NotEnoughInput 오류로 이어질 수 있습니다.

타임스탬프 반올림

변수 그룹(시계열)에서 각 변수는 독립적인 원본에서 수집될 수 있습니다. 서로 다른 변수의 타임스탬프가 서로 일치하지 않고 알려진 빈도와 일치하지 않을 수 있습니다. 다음은 간단한 예제입니다.

Variable-1

timestamp value
12:00:01 1.0
12:00:35 1.5
12:01:02 0.9
12:01:31 2.2
12:02:08 1.3

Variable-2

timestamp value
12:00:03 2.2
12:00:37 2.6
12:01:09 1.4
12:01:34 1.7
12:02:04 2.0

30초마다 데이터 포인트를 하나 전송하는 센서 두 개에서 수집된 변수 두 개가 있습니다. 그러나 센서는 정확하게 균일한 빈도로 데이터 포인트를 전송하는 것이 아니라 경우에 따라 더 이르게 전송하고 더 늦게 전송합니다. MVAD는 서로 다른 변수 간 상관 관계를 고려하므로 메트릭이 시스템의 조건을 올바르게 반영할 수 있도록 타임스탬프를 올바르게 정렬해야 합니다. 위 예제에서 변수 1과 변수 2의 타임스탬프는 정렬 전 빈도로 올바르게 ‘반올림’되어야 합니다.

전처리되지 않은 경우 어떻게 되는지 살펴보겠습니다. alignModeOuter(두 세트의 합집합을 의미함)로 설정하면 병합된 테이블은 다음과 같습니다.

timestamp Variable-1 Variable-2
12:00:01 1.0 nan
12:00:03 nan 2.2
12:00:35 1.5 nan
12:00:37 nan 2.6
12:01:02 0.9 nan
12:01:09 nan 1.4
12:01:31 2.2 nan
12:01:34 nan 1.7
12:02:04 nan 2.0
12:02:08 1.3 nan

nan은 누락된 값을 나타냅니다. 물론 병합된 테이블은 예상과 다를 수 있습니다. 변수 1과 변수 2가 인터리빙되고 MVAD 모델은 변수 간 상관 관계에 관한 정보를 추출할 수 없습니다. alignModeInner로 설정하면 변수 1과 변수 2에 공통 타임스탬프가 없으므로 병합된 테이블이 비게 됩니다.

따라서 변수 1과 변수 2의 타임스탬프는 전처리되어야 하며(가장 가까운 30초 타임스탬프로 반올림됨) 새 시계열은 다음과 같습니다.

Variable-1

timestamp value
12:00:00 1.0
12:00:30 1.5
12:01:00 0.9
12:01:30 2.2
12:02:00 1.3

Variable-2

timestamp value
12:00:00 2.2
12:00:30 2.6
12:01:00 1.4
12:01:30 1.7
12:02:00 2.0

이제 병합된 테이블이 더 적절합니다.

timestamp Variable-1 Variable-2
12:00:00 1.0 2.2
12:00:30 1.5 2.6
12:01:00 0.9 1.4
12:01:30 2.2 1.7
12:02:00 1.3 2.0

가까운 타임스탬프의 서로 다른 변수 값이 잘 정렬되며 이제 MVAD 모델이 상관 관계 정보를 추출할 수 있습니다.

제한 사항

학습 및 유추 API에는 몇 가지 제한 사항이 있습니다. 오류를 방지하려면 이러한 제한 사항을 알고 있어야 합니다.

일반적인 제한 사항

  • 슬라이딩 윈도우: 28-2880 타임스탬프, 기본값은 300입니다. 주기적인 데이터의 경우 2-4주기의 길이를 슬라이딩 윈도우로 설정합니다.
  • 변수 번호: 학습 및 일괄 처리 유추의 경우 최대 301개의 변수

학습 제한 사항

  • 타임스탬프: 최대 1000000. 타임스탬프가 너무 적으면 모델 품질이 저하할 수 있습니다. 5,000개를 초과하는 타임스탬프를 사용하는 것이 좋습니다.
  • 세분성: 최소 세분성은 per_second입니다.

일괄 처리 유추 제한 사항

  • 타임스탬프: 최대 20000, 슬라이딩 윈도우 길이가 1개 이상입니다.

스트리밍 유추 제한 사항

  • 타임스탬프: 최대 2880, 슬라이딩 윈도우 길이가 1개 이상입니다.
  • 타임스탬프 검색: 1에서 10까지입니다.

모델 품질

실제 시나리오에서 가양성 및 가음성을 처리하는 방법

변칙의 중요성을 나타내는 심각도를 제공했습니다. 심각도에 대한 임계값을 설정하여 가양성을 필터링할 수 있습니다. 유추 데이터에 패턴 이동이 있을 때 너무 많은 가양성이 나타날 수도 있습니다. 이러한 경우 모델을 새 데이터에 대해 다시 학습해야 할 수 있습니다. 학습 데이터에 너무 많은 변칙이 포함된 경우 검색 결과에 가음성이 있을 수 있습니다. 이는 모델이 학습 데이터에서 패턴을 학습하고 변칙이 모델에 편향을 가져올 수 있기 때문입니다. 따라서 적절한 데이터 정리는 가음성을 줄이는 데 도움이 될 수 있습니다.

학습 손실 및 유효성 검사 손실에 따라 가장 적합한 모델을 예측하는 방법은 무엇인가요?

일반적으로 레이블이 지정된 데이터 세트가 없으면 어떤 모델이 가장 적합한지 결정하기가 어렵습니다. 그러나 학습 및 유효성 검사 손실을 활용하여 대략적인 추정을 수행하고 해당 잘못된 모델을 삭제할 수 있습니다. 첫째, 학습 손실이 수렴되는지 여부를 관찰해야 합니다. 분산 손실은 종종 모델의 품질이 좋지 않은 것을 나타냅니다. 둘째, 손실 값은 과잉 맞춤 또는 과잉 맞춤이 발생하는지 여부를 식별하는 데 도움이 될 수 있습니다. 과잉 맞춤 또는 과잉 맞춤되는 모델에서는 원하는 성능을 얻지 못할 수 있습니다. 셋째, 손실 함수의 정의가 검색 성능을 직접 반영하지는 않지만 손실 값은 모델 품질을 예측하는 보조 도구가 될 수 있습니다. 낮은 손실 값은 좋은 모델의 필수 조건이므로 손실 값이 높은 모델을 삭제할 수 있습니다.

공통 문제

오류 코드 테이블 외에도 고객으로부터 MVAD API를 사용하는 동안 몇 가지 공통 문제를 알아보았습니다. 이 테이블은 해당 문제를 방지하는 데 도움이 됩니다.

문제 결과 설명 및 해결 방법
학습 데이터 및/또는 유추 데이터의 타임스탬프가 각 변수의 개별 데이터 빈도에 맞게 반올림되지 않았습니다. 유추 결과의 타임스탬프가 예상과 달리 타임스탬프가 너무 적거나 너무 많습니다. 타임스탬프 반올림을 참조하세요.
학습 데이터에 변칙 데이터 포인트가 너무 많음 모델 정확도는 학습 중 변칙 데이터 포인트를 일반 패턴으로 처리하기 때문에 부정적인 영향을 받습니다. 경험적으로 비정상 비율을 1% 이하로 유지하면 도움이 됩니다.
학습 데이터가 너무 적음 모델 정확도가 손상되었습니다. 경험적으로 양호한 정확도를 유지하기 위해 MVAD 모델을 학습시키는 데는 변수당 15,000개 이상의 데이터 포인트(타임스탬프)가 필요합니다.
isAnomaly=true가 있는 모든 데이터 포인트를 변칙으로 간주 가양성이 너무 많음 isAnomalyseverity(또는 score)를 둘 다 사용하여 심각하지 않은 변칙을 선별하고 선택적으로 그룹화를 통해 변칙 기간을 확인하여 임의 노이즈를 억제해야 합니다. severityscore 간 차이점은 아래 FAQ 섹션을 참조하세요.
하위 폴더는 학습 또는 유추를 위해 데이터 파일로 압축됩니다. 하위 폴더 내의 csv 데이터 파일은 학습 및/또는 유추 중에 무시됩니다. Zip 파일에는 하위 폴더가 허용되지 않습니다. 자세한 내용은 폴더 구조를 참조하세요.
유추 데이터 파일에 데이터가 너무 많음: 예를 들어, 유추 데이터 zip 파일에서 모든 기록 데이터 압축 오류가 표시되지 않을 수 있지만, 유추를 실행하려는 경우뿐 아니라 Azure Blob에 zip 파일을 업로드하려는 경우 성능이 저하됩니다. 자세한 내용은 데이터 수량을 참조하세요.
아직 MVAD를 지원하지 않는 Azure 지역에서 Anomaly Detector 리소스를 만들고 MVAD API 호출 MVAD API를 호출하는 동안 “리소스를 찾을 수 없음” 오류가 표시됩니다. 미리 보기 단계 중에는 MVAD를 제한된 지역에서만 사용할 수 있습니다. MVAD 지역 롤아웃에 대해 최신 상태를 유지하려면 Anomaly Detector의 새로운 기능에 책갈피를 설정하세요. GitHub 문제를 제출하거나 AnomalyDetector@microsoft.com으로 연락하여 특정 지역을 요청할 수도 있습니다.

FAQ

MVAD 슬라이딩 윈도우는 어떻게 작동하나요?

두 가지 예제를 사용하여 MVAD의 슬라이딩 윈도우 작동 방식을 알아보겠습니다. slidingWindow = 1,440을 설정하고 입력 데이터가 1분 단위로 세분화된다고 가정합니다.

  • 스트리밍 시나리오: “2021-01-02T00:00:00Z”에서 하나의 데이터 포인트가 변칙인지 여부를 예측하려고 합니다. startTimeendTime은 동일한 값(“2021-01-02T00:00:00Z”)입니다. 그러나 유추 데이터 원본에는 최소 1,440 + 1개의 타임스탬프가 포함되어야 합니다. 이로 인해 MVAD는 대상 데이터 포인트(“2021-01-02T00:00:00Z”) 이전 선행 데이터를 사용하여 대상이 변칙인지 여부를 결정합니다. 이 경우 필요한 선행 데이터의 길이는 slidingWindow 또는 1,440입니다. 1,440 = 60 * 24이므로 입력 데이터는 최신 “2021-01-01T00:00:00Z”에서 시작해야 합니다.

  • 일괄 처리 시나리오: 예측할 대상 데이터 포인트가 여러 개 있습니다. endTimestartTime보다 큽니다. 이 시나리오의 유추는 “이동 창” 방식으로 수행됩니다. 예를 들어, MVAD는 2021-01-01T00:00:00Z~2021-01-01T23:59:00Z(포함) 사이 데이터를 사용하여 2021-01-02T00:00:00Z의 데이터가 변칙인지 여부를 확인합니다. 그런 다음, 앞으로 이동하고 2021-01-01T00:01:00Z~2021-01-02T00:00:00Z(포함) 사이 데이터를 사용하여 2021-01-02T00:01:00Z의 데이터가 변칙인지 여부를 확인합니다. endTime에 지정된 마지막 타임스탬프(또는 실제 최신 타임스탬프)까지 동일한 방식으로(비교에 1,440개 데이터 포인트 사용) 계속 이동합니다. 따라서 유추 데이터 원본에는 startTime - slidingWindow 사이 데이터가 포함되어야 하며 이상적으로는 slidingWindow + (endTime - startTime)의 총 크기가 포함됩니다.

severityscore의 차이는 무엇인가요?

일반적으로 severity를 필터로 사용하여 비즈니스에 중요하지 않은 ‘변칙’을 선별하는 것이 좋습니다. 시나리오와 데이터 패턴에 따라 덜 중요한 변칙은 종종 비교적 더 낮은 severity 값이나 무작위 급증과 같은 독립적인(불연속) 높은 severity 값을 가집니다.

연속적인 높은 severity 값의 기간 또는 severity에 대해 임계값보다 더 정교한 규칙이 필요한 경우 score를 사용하여 더 강력한 필터를 빌드하는 것이 좋습니다. MVAD가 score를 사용하여 변칙을 확인하는 방법을 이해하면 도움이 될 수 있습니다.

데이터 포인트가 전역 및 로컬 관점에서 변칙인지 여부를 고려합니다. 타임스탬프의 score가 특정 임계값보다 높으면 타임스탬프는 변칙으로 표시됩니다. score가 임계값보다 낮지만 세그먼트에서 비교적 더 높은 경우에도 변칙으로 표시됩니다.

다음 단계