series_decompose_anomalies()
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
변칙 검색은 계열 분해를 기반으로 합니다. 자세한 내용은 series_decompose()를 참조하세요.
함수는 계열(동적 숫자 배열)이 포함된 식을 입력으로 사용하고 점수가 있는 비정상적인 점을 추출합니다.
구문
series_decompose_anomalies (
계열,
[ 임계값,
계절성 ,
추세 ,
Test_points ,
AD_method,
Seasonality_threshold ])
구문 규칙에 대해 자세히 알아봅니다.
매개 변수
이름 | Type | 필수 | 설명 |
---|---|---|---|
Series | dynamic |
✔️ | 숫자 값의 배열로, 일반적으로 메이크 계열 또는 make_list 연산자의 결과 출력입니다. |
Threshold | real |
변칙 임계값입니다. 기본값은 1.5, k 값으로, 온화하거나 더 강력한 변칙을 검색합니다. | |
계절 | int |
계절 분석을 제어합니다. 가능한 값은 다음과 같습니다. - -1 : series_periods_detect 사용하여 계절성을 자동으로 검색합니다. 기본값입니다.- 정수 기간: 예상 기간을 bin 수로 지정하는 양의 정수입니다. 예를 들어 계열이 bin에 있는 1h 경우 주별 기간은 168개 bin입니다.- 0 : 계절성이 없으므로 이 구성 요소 추출을 건너뜁니다. |
|
추세 | string |
추세 분석을 제어합니다. 가능한 값은 다음과 같습니다. - avg : 추세 구성 요소를 .로 average(x) 정의합니다. 기본값입니다.- linefit : 선형 회귀를 사용하여 추세 구성 요소를 추출합니다.- none : 추세가 없으므로 이 구성 요소 추출을 건너뜁니다. |
|
Test_points | int |
학습 또는 회귀 프로세스에서 제외할 계열의 끝에 있는 점 수를 지정하는 양의 정수입니다. 이 매개 변수는 예측 목적으로 설정해야 합니다. 기본값은 0입니다. | |
AD_method | string |
다음 값 중 하나를 포함하는 잔차 시계열의 변칙 검색 방법을 제어합니다. - ctukey : 사용자 지정 10번째-90번째 백분위수 범위가 있는 Tukey의 펜스 테스트 입니다. 기본값입니다.- tukey : 표준 25번째-75번째 백분위수 범위가 있는 Tukey의 펜스 테스트 입니다.잔차 시계열에 대한 자세한 내용은 series_outliers 참조하세요. |
|
Seasonality_threshold | real |
계절성이 자동 검색으로 설정된 경우 계절성 점수의 임계값입니다. 기본 점수 임계값은 0.6입니다. 자세한 내용은 series_periods_detect 참조하세요. |
반품
이 함수는 다음 각 계열을 반환합니다.
ad_flag
: (+1, -1, 0)을 각각 업/다운/비정상으로 표시하는 3항 계열ad_score
: 변칙 점수baseline
: 분해에 따른 계열의 예측 값입니다.
알고리즘
이 함수는 다음 단계를 수행합니다.
- 각 매개 변수를 사용하여 series_decompose()를 호출하여 기준 및 잔차 계열을 만듭니다.
- 잔차 계열에서 선택한 변칙 검색 방법을 사용하여 series_outliers()를 적용하여 ad_score 계열을 계산합니다.
- ad_score 임계값을 적용하여 ad_flag 계열을 계산하여 각각 변칙을 표시/축소/표시하지 않습니다.
예제
주간 계절성에서 변칙 검색
다음 예제에서는 매주 계절성이 있는 계열을 생성한 다음, 여기에 몇 가지 이상값을 추가합니다. series_decompose_anomalies
계절성을 자동으로 검색하고 반복 패턴을 캡처하는 기준을 생성합니다. 추가한 이상값은 ad_score 구성 요소에서 명확하게 확인할 수 있습니다.
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 10.0, 15.0) - (((t%24)/10)*((t%24)/10)) // generate a series with weekly seasonality
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y)
| render timechart
추세가 있는 주간 계절성에서 변칙 검색
이 예제에서는 이전 예제의 계열에 추세를 추가합니다. 먼저 추세 기본값이 평균만 사용하고 추세를 avg
계산하지 않는 기본 매개 변수를 사용하여 실행 series_decompose_anomalies
합니다. 생성된 기준은 추세를 포함하지 않으며 이전 예제에 비해 정확도가 낮습니다. 따라서 데이터에 삽입한 일부 이상값은 분산이 높기 때문에 검색되지 않습니다.
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y)
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart
다음으로, 동일한 예제를 실행하지만 계열에서 추세가 예상되므로 추세 매개 변수를 지정합니다 linefit
. 기준이 입력 계열에 훨씬 더 가깝다는 것을 알 수 있습니다. 삽입된 모든 이상값이 검색되고 일부 가양성도 검색됩니다. 임계값 조정에 대한 다음 예제를 참조하세요.
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y, 1.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart
변칙 검색 임계값 조정
이전 예제에서 몇 가지 시끄러운 지점이 변칙으로 검색되었습니다. 이제 변칙 검색 임계값을 기본값인 1.5에서 2.5로 늘입니다. 더 강력한 변칙만 검색되도록 이 중간 범위를 사용합니다. 이제 데이터에 삽입한 이상값만 검색됩니다.
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and onlgoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y, 2.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart