A.3. 이상 탐지는 이렇게 판정한다
Z-Score·IQR·Isolation Forest·RCF 와 앙상블
"평소와 다르다" 를 무엇으로 판정하는지 다룹니다.
네 가지 한눈에
| 방법 | 기준 | 분포 가정 | 잘 잡는 것 |
|---|---|---|---|
| Z-Score | 평균 · 표준편차 | 필요 (종 모양) | 뚜렷하게 벗어난 값 |
| IQR | 중앙값 · 사분위수 | 불필요 | 치우친 데이터에서 벗어난 값 |
| Isolation Forest | 얼마나 빨리 혼자 남나 | 불필요 | 여러 값이 얽힌 이상 |
| RCF | 넣고 뺄 때 구조 변화량 | 불필요 | 계속 들어오는 데이터에서 벗어난 값 |
기본은 Z-Score 입니다.
1. Z-Score
무엇을 하나
평균에서 표준편차 몇 배만큼 떨어졌는지 셉니다.
Z = (값 − 평균) ÷ 표준편차
표준편차라는 것
값들이 평균에서 얼마나 퍼져 있는지를 나타내는 숫자입니다.
같은 "평균에서 10 벗어남" 이라도 A 에서는 큰일이고 B 에서는 흔한 일입니다. Z-Score 는 그 지표가 평소에 퍼져 있는 정도를 기준으로 재기 때문에 지표마다 다른 잣대를 자동으로 씁니다.
판정 기준
기본은 |Z| > 3 입니다.
정상 데이터의 99.7% 가 ±3 안에 들어옵니다. 그 밖이면 "평소와 다르다" 고 봅니다.
응답시간으로 보면
평소 응답시간 평균 200ms, 표준편차 20ms
210ms → Z = +0.5 정상
250ms → Z = +2.5 경계 — 확인해 볼 만함
320ms → Z = +6.0 이상
한계
- 종 모양 분포를 가정합니다. 응답시간처럼 한쪽으로 긴 꼬리를 가진 지표에는 덜 맞습니다
- 이상치가 많으면 평균 자체가 그쪽으로 이동합니다. 크게 벗어난 값이 평균을 올려 놓으면 정작 그 값이 정상으로 보입니다
두 번째가 실무에서 자주 걸립니다. 장애가 길게 이어진 구간을 통째로 넣고 돌리면 장애가 "평소" 가 되어 버립니다.
2. IQR (사분위 범위)
무엇을 하나
값을 줄 세워 4등분한 뒤, 가운데 절반의 범위를 기준으로 삼습니다.
경계선 계산
하한 = Q1 − 1.5 × IQR = 35 − 52.5 = −17.5
상한 = Q3 + 1.5 × IQR = 70 + 52.5 = 122.5
이 밖에 있으면 이상치입니다.
왜 1.5 인가
통계학자 존 터키(John Tukey) 가 정한 값입니다. 정상 데이터의 약 99.3% 가 이 안에 들어옵니다. 민감도로 조절할 수 있습니다.
Z-Score 와 무엇이 다른가
| Z-Score | IQR | |
|---|---|---|
| 기준 | 평균 · 표준편차 | 중앙값 · 사분위수 |
| 벗어난 값의 영향 | 기준 자체가 이동한다 | 거의 이동하지 않는다 |
| 분포 가정 | 종 모양 필요 | 없음 |
| 최소 데이터 | 3개 | 더 필요 |
중앙값은 몇 개가 크게 벗어나도 잘 움직이지 않습니다. 그래서 이미 이상치가 섞인 구간이나 한쪽으로 치우친 지표에는 IQR 이 낫습니다.
3. Isolation Forest
무엇을 하나
값들을 무작위로 갈라 나가면서, 각 값이 몇 번 만에 혼자 남는지 셉니다.
빨리 혼자 남으면 이상치입니다.
동작 순서
① 나무 하나 만들기 무작위 지점에서 값을 둘로 가르기를 반복
② 숲 만들기 이런 나무를 100그루 (매번 다른 무작위 기준)
③ 경로 길이 각 값이 혼자 남기까지 걸린 평균 횟수
④ 점수 매기기 빨리 남을수록 높은 점수 (0~1)
100그루를 만드는 이유는 한 번의 무작위 결과에 좌우되지 않기 위해서입니다. 운 나쁘게 정상 값이 빨리 갈라질 수도 있지만, 100번 평균 내면 그 영향이 없어집니다.
민감도와 잡히는 양
| 민감도 | 대략 몇 %를 이상으로 보나 | 쓰는 상황 |
|---|---|---|
| 1.0 (높음) | 약 30% | 의심스러운 것은 다 보겠다 |
| 3.0 (중간) | 약 5% | 균형 |
| 5.0 (낮음) | 약 1% | 확실한 것만 |
미리 "몇 %가 이상" 이라고 정해 놓고 그만큼 잡는 방식입니다. 정상만 있는 구간에 돌려도 뭔가는 잡힌다는 뜻이므로, 잡혔다고 곧 문제인 것은 아닙니다.
다른 둘과 무엇이 다른가
| Z-Score · IQR | Isolation Forest | |
|---|---|---|
| 방식 | 통계 공식 | 기계학습 |
| 분포 가정 | Z-Score 는 필요 | 불필요 |
| 여러 지표 동시 | 어려움 | 가능 |
"CPU 도 높고 메모리도 높고 응답시간도 긴" 조합처럼 하나씩 보면 정상인데 같이 보면 이상한 경우를 잡아냅니다.
4. RCF (Random Cut Forest)
Isolation Forest 와 바탕이 되는 생각은 같지만 셋이 다릅니다. Amazon 이 2016년에 발표한 방법입니다.
| Isolation Forest | RCF | |
|---|---|---|
| 가르는 축 | 무작위로 고름 | 넓게 퍼진 축을 더 자주 고름 |
| 점수 | 혼자 남기까지의 경로 길이 | 넣고 뺄 때 구조가 얼마나 바뀌나 |
| 처리 | 한꺼번에 (배치) | 들어오는 대로 바로 (스트리밍) |
첫 번째 차이 — 넓은 축을 먼저 가른다
값이 넓게 퍼진 축일수록 갈랐을 때 정보가 많습니다. 무작정 무작위로 고르는 것보다 의미 있게 나뉩니다.
두 번째 차이 — 구조 변화량으로 점수를 낸다
어떤 값을 넣었을 때 나무 모양이 크게 달라지면 그 값은 기존 것들과 이질적입니다. 빼도 마찬가지입니다.
"몇 번 만에 갈라지나" 보다 주변에 미치는 영향을 보는 셈입니다.
세 번째 차이 — 계속 들어오는 데이터에 맞다
한 점을 넣고 빼는 비용이 작아, 시간이 흐르며 계속 들어오는 지표에 맞습니다. 오래된 구간을 밀어내면서 최근 창만 유지할 수 있습니다.
5. 앙상블 — 여러 방법을 함께 쓴다
왜 필요한가
방법마다 못 보는 것이 다릅니다.
| 이런 상황 | 놓치는 방법 | 잡는 방법 |
|---|---|---|
| 한쪽으로 치우친 분포 | Z-Score | IQR |
| 이상치가 이미 많이 섞임 | Z-Score | IQR · Isolation Forest |
| 여러 지표가 얽힌 이상 | Z-Score · IQR | Isolation Forest · RCF |
| 정상만 있는 구간 | Isolation Forest (억지로 잡음) | Z-Score · IQR |
마지막 줄이 중요합니다. Isolation Forest 는 비율로 잡기 때문에 정상만 있어도 뭔가를 내놓습니다. 혼자 쓰면 오탐이 됩니다.
어떻게 합치나
| 방식 | 판정 |
|---|---|
| 투표 (기본) | 정해진 수 이상이 동의해야 이상 |
| 합집합 | 하나라도 이상이라고 하면 이상 |
기본 동의 수는 쓴 방법 수의 3분의 2(올림)입니다.
2개 방법 → 2개 동의 필요
3개 방법 → 2개 동의 필요
4개 방법 → 3개 동의 필요
혼자만 잡은 것은 이상으로 보지 않습니다. Isolation Forest 가 억지로 잡은 것도 Z-Score 와 IQR 이 반대하면 제외됩니다.
민감도와 방향
민감도
1.0 ~ 5.0 사이로 조절합니다. 낮출수록 더 많이 잡습니다.
빌더 화면에는 이 칸이 없습니다. 필요하면 자유 질문으로 요청하십시오.
"조금 더 민감하게 다시 봐 줘" "여러 방법으로 교차 확인해 줘"
방향
어느 쪽으로 벗어난 것을 잡을지 정합니다.
| 설정 | 잡는 것 | 맞는 지표 |
|---|---|---|
both | 양쪽 다 | 트래픽 — 급증도 급감도 문제 |
upper | 위로만 | 에러율 · CPU · 응답시간 |
lower | 아래로만 | Apdex · 처리량 |
시나리오가 지표에 맞게 알아서 정합니다 (404 장).
더 자세한 것
Z-Score · IQR · Isolation Forest 의 수식은 Forecast MCP 서버 문서의
알고리즘 가이드(600-algorithm_guide.md) §2 에 있습니다. RCF 는 그 문서에
없으며 구현(pkg/engine/detector/rcf.go)이 근거입니다.
다음으로
- 결과 읽는 기준 — 부록: 결과를 읽는 법
- 이상 탐지 시나리오 — 이상 탐지
- 얼마나 믿을 수 있나 — 부록: 믿어도 되는가