anomalies¶
개요¶
주어진 input 데이터에서 일반적인 범위를 벗어난 비정상적인 값을 찾아내는 기능입니다.
설명¶
Input 으로 받은 Data 를 대상으로 anomaly 한 값을 찾습니다. 옵션으로 입력한 이상탐지 알고리즘(basic / robust) 을 적용하여 anomal 여부를 알 수 있는 컬럼을 추가하여 Dataframe 형식의 data를 결과로 반환합니다.
옵션으로 명령어 실행 결과에서 anomalies 로 판명된 값만 따로 뽑아내는 것도 가능합니다.
Examples¶
데이터 샘플 : time, host, value 컬럼
time | host | value |
---|---|---|
2011-11-1 | h1 | 5 |
2011-11-2 | h1 | 10 |
2011-11-3 | h1 | 15 |
2011-11-4 | h1 | 20 |
. | . | . |
. | . | . |
. | . | . |
2011-11-16 | h3 | 95 |
2011-11-17 | h3 | 300 |
2011-11-18 | h3 | 105 |
. | . | . |
. | . | . |
2011-11-29 | h3 | 160 |
2011-11-30 | h3 | 165 |
basic 알고리즘을 사용 하는 예
... | anomalies time value
... | anomalies time value by=host
... | anomalies time value alg=basic bound=2 direct=below
by 가 없을 때
time | host | value | upper | lower | anomaly |
---|---|---|---|---|---|
2011-11-1 | h1 | 5 | threshold | threshold | False |
2011-11-2 | h1 | 10 | threshold | threshold | False |
2011-11-3 | h1 | 15 | threshold | threshold | False |
2011-11-4 | h1 | 20 | threshold | threshold | False |
. | . | . | . | . | . |
2011-11-17 | h3 | 300 | threshold | threshold | True |
2011-11-18 | h3 | 105 | threshold | threshold | False |
. | . | . | . | . | . |
robust 알고리즘을 사용 하는 예
... | anomalies time value alg=robust
명령어 이후 DataFrame
time | value | residuals | upper | lower | anomaly |
---|---|---|---|---|---|
2011-11-1 | 5 | NaN | threshold | threshold | False |
2011-11-2 | 10 | NaN | threshold | threshold | False |
2011-11-3 | 15 | 1.062 | threshold | threshold | False |
2011-11-4 | 20 | 1.053 | threshold | threshold | False |
. | . | . | . | . | . |
. | . | . | . | . | . |
. | . | . | . | . | . |
2011-11-16 | 95 | 0.690 | 1.229 | 0.567 | False |
2011-11-17 | 300 | 1.716 | 1.361 | 0.700 | True |
2011-11-18 | 105 | 0.717 | 1.333 | 0.672 | False |
. | . | . | . | . | . |
. | . | . | . | . | . |
2011-11-29 | 160 | NaN | threshold | threshold | False |
2011-11-30 | 165 | NaN | threshold | threshold | False |
alert_window 옵션으로 수행 했을 때, 설정 기간동안 나온 이상 값 만 반환.
... | anomalies time value alg=basic alert_window=last_100s
명령어 결과 Dataframe
time | value | upper | lower | anomaly |
---|---|---|---|---|
2011-11-17 | 300 | 282.8897323 | 23.1286923 | True |
... | anomalies time value alg=basic direct=below alert_window=last_60s
- detection 방향이 below 일때, lower 값 보다 낮은 anomaly 값만을 찾고 Last_60s 기준으로 anomaly 한 값이 없으므로 빈 dataframe반환
명령어 결과 Dataframe
| time | value | upper | lower | anomaly |
| :---: | :---: | :---: | :---: | :-----: |
| Empty | Empty | Empty | Empty | Empty |
Parameters¶
anomalies_command : index target params
이름 | 설명 | 필수/옵션 |
---|---|---|
index | 시계열 데이터에서 시간 필드명 입니다. | 필수 |
target | anomaly 탐지할 대상 데이터 필드명 입니다. | 필수 |
params | *옵션을 지정합니다. | 옵션 |
*옵션
이름 | 설명 | 기본값 |
---|---|---|
alg | *basic, *robust 알고리즘을 선택합니다. 각각 기본통계, STL decomposition을 수행합니다. 예 : alg=robust |
basic |
by | 그룹으로 각각의 이상탐지를 시행할 수 있습니다. 예 : by=fieldA |
None |
bound | 임계값 범위의 scale을 지정합니다. 위의 수식에 z값의 배수값으로 bound가 커지면 upper / lower limit 의 범위가 늘어납니다. | 2 |
direct | anomaly 한 값을 판정할 때 limit 를 below / above / both 로 선택할 수 있습니다. | both |
alert_window | 이 옵션이 설정되면 설정된 시간동안 발생한 anomaly 값만 return 합니다. 실정된 기간동안 anomaly 한 값이 없으면 빈 값이 반환됩니다. 최근 시간 범위 내 이상치 값을 탐지합니다. 예 : last_60s 이면 최근 60초 이내 데이터 중 이상치를 탐지합니다. 예 : last_1m 이면 최근 1분 이내 데이터 중 이상치를 탐지합니다. 예 : last_1h 이면 최근 1시간 이내 데이터 중 이상치를 탐지합니다. |
last_60s |
alg
: basic, robust 알고리즘을 선택합니다. 각각 기본통계, STL decomposition을 수행합니다. 기본값 = basic.
*basic : 단순 통계적 방법을 사용하였습니다. 1.959964는 신뢰구간 95% z상수 값입니다. z상수 값으로 upper limit와 lower limit 를 구하여 이상치를 판단합니다. $$ bar x pm frac{1.959964 times s}{sqrt n} $$
*robust : Seasonal_Decomposition을 사용한 알고리즘입니다. 계절성, 추세, 잔차 값을 구별하여 잔차 값으로 임계값을 구하여 이상치를 판단합니다.
Parameters BNF¶
anomalies_command : index target params
index : WORD
target : WORD
params : param
| params param
|
param : WORD EQUALS WORD
| WORD EQUALS NUMBER
| WORD EQUALS double
double : NUMBER DOT NUMBER
WORD = \w+
EQUALS = \=
DOT = \.
NUMBER = \d+