Anomaly result mapping
출처: 문서
본문
이상 결과 매핑
Custom result index 패널에서 Enable custom result index 체크 박스를 선택하면, Anomaly Detection 플러그인이 결과를 여러분이 선택한 인덱스에 저장해요. 디텍터가 이상을 탐지하지 않은 경우 결과 형식은 다음과 같아요.
{
"detector_id": "kzcZ43wBgEQAbjDnhzGF",
"schema_version": 5,
"data_start_time": 1635898161367,
"data_end_time": 1635898221367,
"feature_data": [
{
"feature_id": "processing_bytes_max",
"feature_name": "processing bytes max",
"data": 2322
},
{
"feature_id": "processing_bytes_avg",
"feature_name": "processing bytes avg",
"data": 1718.6666666666667
},
{
"feature_id": "processing_bytes_min",
"feature_name": "processing bytes min",
"data": 1375
},
{
"feature_id": "processing_bytes_sum",
"feature_name": "processing bytes sum",
"data": 5156
},
{
"feature_id": "processing_time_max",
"feature_name": "processing time max",
"data": 31198
}
],
"execution_start_time": 1635898231577,
"execution_end_time": 1635898231622,
"anomaly_score": 1.8124904404395776,
"anomaly_grade": 0,
"confidence": 0.9802940756605277,
"entity": [
{
"name": "process_name",
"value": "process_3"
}
],
"model_id": "kzcZ43wBgEQAbjDnhzGF_entity_process_3",
"threshold": 1.2368549346675202
}
{% include copy-curl.html %}
응답 본문 필드
| 필드 | 설명 |
|---|---|
detector_id |
디텍터를 식별하는 고유 ID예요. |
schema_version |
결과 인덱스의 매핑 버전이에요. |
data_start_time |
집계된 데이터의 탐지 범위 시작 시점이에요. |
data_end_time |
집계된 데이터의 탐지 범위 종료 시점이에요. |
feature_data |
data_start_time과 data_end_time 사이에 있는 집계 데이터 포인트들의 배열이에요. |
execution_start_time |
이상 결과를 만들어내는 특정 실행에서 디텍터의 실제 시작 시간이에요. 이 시작 시간에는 데이터 수집을 지연시키기 위해 설정할 수 있는 window delay 파라미터가 포함돼요. window delay는 execution_start_time과 data_start_time의 차이예요. |
execution_end_time |
이상 결과를 만들어내는 특정 실행에서 디텍터의 실제 종료 시간이에요. |
anomaly_score |
이상의 상대적인 심각도를 나타내요. 점수가 높을수록 해당 데이터 포인트가 더 이상적이라는 뜻이에요. |
anomaly_grade |
anomaly_score를 0과 1 사이 척도로 정규화한 값이에요. |
confidence |
anomaly_score 정확성에 대한 확률이에요. 이 숫자가 1에 가까울수록 정확도가 높아요. 실행 중인 디텍터의 probation 기간에는 노출되는 데이터가 제한적이기 때문에 confidence가 낮아요(< 0.9). |
entity |
엔티티는 특정 카테고리 필드 값들의 조합이에요. 카테고리 필드의 이름과 값을 포함해요. 앞선 예제에서는 process_name이 카테고리 필드이고, process_3 같은 프로세스 중 하나가 그 필드의 값이에요. entity 필드는 high-cardinality 디텍터(카테고리 필드를 선택한 경우)에만 존재해요. |
model_id |
모델을 식별하는 고유 ID예요. 디텍터가 single-stream 디텍터(카테고리 필드 없음)라면 모델은 하나만 있어요. 디텍터가 high-cardinality 디텍터(카테고리 필드가 하나 이상)라면 여러 개의 모델을 가질 수 있고, 엔티티마다 모델이 하나씩 존재해요. |
threshold |
디텍터가 데이터 포인트를 이상으로 분류하는 기준 중 하나는 anomaly_score가 동적 임계값을 넘어야 한다는 거예요. 이 필드에는 현재 임계값이 기록돼요. |
imputation 옵션이 활성화되어 있으면 이상 결과에 feature_imputed 배열이 포함되어 결측 데이터로 인해 수정된 피처를 보여줘요. imputation된 피처가 없으면 이 배열은 포함되지 않아요.
다음 이상 결과 출력 예제에서는 imputed: true 상태에서 볼 수 있듯이 processing_bytes_max 피처가 imputation되었어요.
{
"detector_id": "kzcZ43wBgEQAbjDnhzGF",
"schema_version": 5,
"data_start_time": 1635898161367,
"data_end_time": 1635898221367,
"feature_data": [
{
"feature_id": "processing_bytes_max",
"feature_name": "processing bytes max",
"data": 2322
},
{
"feature_id": "processing_bytes_avg",
"feature_name": "processing bytes avg",
"data": 1718.6666666666667
},
{
"feature_id": "processing_bytes_min",
"feature_name": "processing bytes min",
"data": 1375
},
{
"feature_id": "processing_bytes_sum",
"feature_name": "processing bytes sum",
"data": 5156
},
{
"feature_id": "processing_time_max",
"feature_name": "processing time max",
"data": 31198
}
],
"execution_start_time": 1635898231577,
"execution_end_time": 1635898231622,
"anomaly_score": 1.8124904404395776,
"anomaly_grade": 0,
"confidence": 0.9802940756605277,
"entity": [
{
"name": "process_name",
"value": "process_3"
}
],
"model_id": "kzcZ43wBgEQAbjDnhzGF_entity_process_3",
"threshold": 1.2368549346675202,
"feature_imputed": [
{
"feature_id": "processing_bytes_max",
"imputed": true
},
{
"feature_id": "processing_bytes_avg",
"imputed": false
},
{
"feature_id": "processing_bytes_min",
"imputed": false
},
{
"feature_id": "processing_bytes_sum",
"imputed": false
},
{
"feature_id": "processing_time_max",
"imputed": false
}
]
}
{% include copy-curl.html %}
이상이 탐지되면 결과는 다음 형식으로 제공돼요.
{
"detector_id": "fylE53wBc9MCt6q12tKp",
"schema_version": 0,
"data_start_time": 1635927900000,
"data_end_time": 1635927960000,
"feature_data": [
{
"feature_id": "processing_bytes_max",
"feature_name": "processing bytes max",
"data": 2291
},
{
"feature_id": "processing_bytes_avg",
"feature_name": "processing bytes avg",
"data": 1677.3333333333333
},
{
"feature_id": "processing_bytes_min",
"feature_name": "processing bytes min",
"data": 1054
},
{
"feature_id": "processing_bytes_sum",
"feature_name": "processing bytes sum",
"data": 5032
},
{
"feature_id": "processing_time_max",
"feature_name": "processing time max",
"data": 11422
}
],
"anomaly_score": 1.1986675882872033,
"anomaly_grade": 0.26806225550178464,
"confidence": 0.9607519742565531,
"entity": [
{
"name": "process_name",
"value": "process_3"
}
],
"approx_anomaly_start_time": 1635927900000,
"relevant_attribution": [
{
"feature_id": "processing_bytes_max",
"data": 0.03628638020431366
},
{
"feature_id": "processing_bytes_avg",
"data": 0.03384479053991436
},
{
"feature_id": "processing_bytes_min",
"data": 0.058812549572819096
},
{
"feature_id": "processing_bytes_sum",
"data": 0.10154576265526988
},
{
"feature_id": "processing_time_max",
"data": 0.7695105170276828
}
],
"expected_values": [
{
"likelihood": 1,
"value_list": [
{
"feature_id": "processing_bytes_max",
"data": 2291
},
{
"feature_id": "processing_bytes_avg",
"data": 1677.3333333333333
},
{
"feature_id": "processing_bytes_min",
"data": 1054
},
{
"feature_id": "processing_bytes_sum",
"data": 6062
},
{
"feature_id": "processing_time_max",
"data": 23379
}
]
}
],
"threshold": 1.0993584705913992,
"execution_end_time": 1635898427895,
"execution_start_time": 1635898427803
}
{% include copy-curl.html %}
결과에는 다음과 같은 추가 필드가 포함되어 있어요.
| 필드 | 설명 |
|---|---|
relevant_attribution |
각 입력 변수의 기여도를 나타내요. 기여도의 합은 1로 정규화돼요. |
expected_values |
각 피처의 기대값이에요. |
디텍터가 이상을 늦게 탐지할 수도 있어요. 예를 들어 볼게요. 디텍터가 "한가한 주"(트리플 {1, 2, 3}으로 표현)와 "바쁜 주"(트리플 {2, 4, 5}로 표현)가 번갈아 나오는 데이터 시퀀스를 관찰한다고 해볼게요. 디텍터가 {2, 2, X} 패턴을 마주쳤는데 X가 어떤 값이 될지 아직 본 적이 없다면, 디텍터는 이 패턴이 이상하다고 추론해요. 하지만 두 2 중 어느 쪽이 원인인지는 판단할 수 없어요. X = 3이라면 첫 번째 2가 이상이에요. X = 5라면 두 번째 2가 이상이에요. 만약 첫 번째 2가 원인이라면 디텍터는 이상 탐지가 늦어져요.
디텍터가 이상을 늦게 탐지하면 결과에 다음과 같은 추가 필드가 포함돼요.
| 필드 | 설명 |
|---|---|
past_values |
이상을 유발한 실제 입력이에요. past_values가 null이면 기여도나 기대값은 현재 입력에서 온 거예요. past_values가 null이 아니면 기여도나 기대값은 과거 입력(예: 데이터 [1,2,3]의 이전 두 스텝)에서 온 거예요. |
approx_anomaly_start_time |
이상을 유발한 실제 입력의 대략적인 시간이에요. 이 필드는 디텍터가 이상을 표시하는 시점을 이해하는 데 도움이 돼요. single-stream 디텍터와 high-cardinality 디텍터 모두 이전 이상 결과를 쿼리하지 않는데, 이런 쿼리는 비용이 많이 드는 작업이기 때문이에요. 엔티티가 많을 수 있는 high-cardinality 디텍터의 경우 이 비용이 특히 커요. 데이터가 연속적이지 않으면 이 필드의 정확도가 낮아지고, 디텍터가 이상을 실제로 탐지하는 시간은 더 이를 수도 있어요. |
{
"detector_id": "kzcZ43wBgEQAbjDnhzGF",
"confidence": 0.9746820962328963,
"relevant_attribution": [
{
"feature_id": "deny_max1",
"data": 0.07339452532666227
},
{
"feature_id": "deny_avg",
"data": 0.04934972719948845
},
{
"feature_id": "deny_min",
"data": 0.01803003656061806
},
{
"feature_id": "deny_sum",
"data": 0.14804918212089874
},
{
"feature_id": "accept_max5",
"data": 0.7111765287923325
}
],
"task_id": "9Dck43wBgEQAbjDn4zEe",
"threshold": 1,
"model_id": "kzcZ43wBgEQAbjDnhzGF_entity_app_0",
"schema_version": 5,
"anomaly_score": 1.141419389056506,
"execution_start_time": 1635898427803,
"past_values": [
{
"feature_id": "processing_bytes_max",
"data": 905
},
{
"feature_id": "processing_bytes_avg",
"data": 479
},
{
"feature_id": "processing_bytes_min",
"data": 128
},
{
"feature_id": "processing_bytes_sum",
"data": 1437
},
{
"feature_id": "processing_time_max",
"data": 8440
}
],
"data_end_time": 1635883920000,
"data_start_time": 1635883860000,
"feature_data": [
{
"feature_id": "processing_bytes_max",
"feature_name": "processing bytes max",
"data": 1360
},
{
"feature_id": "processing_bytes_avg",
"feature_name": "processing bytes avg",
"data": 990
},
{
"feature_id": "processing_bytes_min",
"feature_name": "processing bytes min",
"data": 608
},
{
"feature_id": "processing_bytes_sum",
"feature_name": "processing bytes sum",
"data": 2970
},
{
"feature_id": "processing_time_max",
"feature_name": "processing time max",
"data": 9670
}
],
"expected_values": [
{
"likelihood": 1,
"value_list": [
{
"feature_id": "processing_bytes_max",
"data": 905
},
{
"feature_id": "processing_bytes_avg",
"data": 479
},
{
"feature_id": "processing_bytes_min",
"data": 128
},
{
"feature_id": "processing_bytes_sum",
"data": 4847
},
{
"feature_id": "processing_time_max",
"data": 15713
}
]
}
],
"execution_end_time": 1635898427895,
"anomaly_grade": 0.5514172746375128,
"entity": [
{
"name": "process_name",
"value": "process_3"
}
],
"approx_anomaly_start_time": 1635883620000
}
{% include copy-curl.html %}
평탄화된 이상 결과 매핑
Custom result index 패널에서 Enable flattened custom result index 옵션을 선택하면, Anomaly Detection 플러그인이 모든 중첩 필드를 평탄화한 형태로 인덱스에 결과를 저장해요.
인덱스에 저장되는 중첩 필드에는 다음과 같은 평탄화 규칙이 적용돼요.
| 필드 | 평탄화 규칙 | 중첩 입력 예시 | 평탄화된 출력 예시 |
|---|---|---|---|
relevant_attribution |
relevant_attribution_$FEATURE_NAME_data: $RELEVANT_ATTRIBUTION_FEATURE_DATA |
relevant_attribution : [{"feature_id": "deny_max1", "data": 0.07339452532666227}] |
relevant_attribution_deny_max1_data: 0.07339452532666227 |
past_values |
past_values_$FEATURE_NAME_data: $PAST_VALUES_FEATURE_DATA |
"past_values": [{"feature_id": "processing_bytes_max", "data": 905}] |
past_values_processing_bytes_max_data: 905 |
feature_data |
feature_data_$FEATURE_NAME_data: $FEATURE_DATA_FEATURE_NAME_DATA |
"feature_data": [{"feature_id": "processing_bytes_max", "feature_name": "processing bytes max", "data": 1360}] |
feature_data_processing_bytes_max_data: 1360 |
expected_values |
expected_values_$FEATURE_NAME_data: $EXPECTED_VALUES_FEATURE_DATA |
"expected_values": [{"likelihood": 1, "value_list": [{"feature_id": "processing_bytes_max", "data": 905}]}] |
expected_values_processing_bytes_max_data: 905 |
entity |
entity_$NAME_value: $ENTITY_VALUE |
"entity": [{"name": "process_name", "value": "process_3"}] |
entity_process_name_value: process_3 |
예를 들어 디텍터가 이상을 늦게 탐지하면, 평탄화된 결과는 다음 형식으로 나타나요.
{
"detector_id": "kzcZ43wBgEQAbjDnhzGF",
"confidence": 0.9746820962328963,
"relevant_attribution": [
{
"feature_id": "deny_max1",
"data": 0.07339452532666227
},
{
"feature_id": "deny_avg",
"data": 0.04934972719948845
},
{
"feature_id": "deny_min",
"data": 0.01803003656061806
},
{
"feature_id": "deny_sum",
"data": 0.14804918212089874
},
{
"feature_id": "accept_max5",
"data": 0.7111765287923325
}
],
"relevant_attribution_deny_max1_data": 0.07339452532666227,
"relevant_attribution_deny_avg_data": 0.04934972719948845,
"relevant_attribution_deny_min_data": 0.01803003656061806,
"relevant_attribution_deny_sum_data": 0.14804918212089874,
"relevant_attribution_deny_max5_data": 0.7111765287923325,
"task_id": "9Dck43wBgEQAbjDn4zEe",
"threshold": 1,
"model_id": "kzcZ43wBgEQAbjDnhzGF_entity_app_0",
"schema_version": 5,
"anomaly_score": 1.141419389056506,
"execution_start_time": 1635898427803,
"past_values": [
{
"feature_id": "processing_bytes_max",
"data": 905
},
{
"feature_id": "processing_bytes_avg",
"data": 479
},
{
"feature_id": "processing_bytes_min",
"data": 128
},
{
"feature_id": "processing_bytes_sum",
"data": 1437
},
{
"feature_id": "processing_time_max",
"data": 8440
}
],
"past_values_processing_bytes_max_data": 905,
"past_values_processing_bytes_avg_data": 479,
"past_values_processing_bytes_min_data": 128,
"past_values_processing_bytes_sum_data": 1437,
"past_values_processing_bytes_max_data": 8440,
"data_end_time": 1635883920000,
"data_start_time": 1635883860000,
"feature_data": [
{
"feature_id": "processing_bytes_max",
"feature_name": "processing bytes max",
"data": 1360
},
{
"feature_id": "processing_bytes_avg",
"feature_name": "processing bytes avg",
"data": 990
},
{
"feature_id": "processing_bytes_min",
"feature_name": "processing bytes min",
"data": 608
},
{
"feature_id": "processing_bytes_sum",
"feature_name": "processing bytes sum",
"data": 2970
},
{
"feature_id": "processing_time_max",
"feature_name": "processing time max",
"data": 9670
}
],
"feature_data_processing_bytes_max_data": 1360,
"feature_data_processing_bytes_avg_data": 990,
"feature_data_processing_bytes_min_data": 608,
"feature_data_processing_bytes_sum_data": 2970,
"feature_data_processing_time_max_data": 9670,
"expected_values": [
{
"likelihood": 1,
"value_list": [
{
"feature_id": "processing_bytes_max",
"data": 905
},
{
"feature_id": "processing_bytes_avg",
"data": 479
},
{
"feature_id": "processing_bytes_min",
"data": 128
},
{
"feature_id": "processing_bytes_sum",
"data": 4847
},
{
"feature_id": "processing_time_max",
"data": 15713
}
]
}
],
"expected_values_processing_bytes_max_data": 905,
"expected_values_processing_bytes_avg_data": 479,
"expected_values_processing_bytes_min_data": 128,
"expected_values_processing_bytes_sum_data": 4847,
"expected_values_processing_time_max_data": 15713,
"execution_end_time": 1635898427895,
"anomaly_grade": 0.5514172746375128,
"entity": [
{
"name": "process_name",
"value": "process_3"
}
],
"entity_process_name_value": "process_3",
"approx_anomaly_start_time": 1635883620000
}