한 병원의 수술 대기일이 다음과 같다고 하자.
| 환자 | 대기일 |
|---|---|
| 1 | 1일 |
| 2 | 2일 |
| 3 | 2일 |
| 4 | 2일 |
| 5 | 3일 |
| 6 | 3일 |
| 7 | 3일 |
| 8 | 4일 |
| 9 | 4일 |
| 10 | 100일 |
대부분의 환자는 1일에서 4일 안에 수술을 받았다. 그러나 한 환자는 100일을 기다렸다.
이 자료의 평균 대기일은 12.4일이다.
\[
\bar{x}=\frac{1+2+2+2+3+3+3+4+4+100}{10}=12.4
\]
중앙값은 3일이다.
평균만 보면 이 병원의 일반적인 수술 대기시간이 12일 정도인 것처럼 보인다. 하지만 실제로 환자 10명 가운데 9명은 4일 이내에 수술을 받았다.
그렇다면 100일이라는 값을 제거해야 할까?
답은 그 값이 왜 발생했는지에 따라 달라진다.
- 10일을 100일로 잘못 입력했다면 수정해야 한다.
- 환자가 개인 사정으로 수술을 연기했다면 분석목적에 따라 별도로 분류할 수 있다.
- 병원 시스템의 심각한 실패로 실제 100일을 기다렸다면 가장 중요한 관측값일 수 있다.
- 희귀질환 환자에게만 발생한 대기라면 별도의 집단을 나타낼 수 있다.
이상치는 단순히 크거나 작은 숫자가 아니다. 현재 자료의 분포나 분석모형에서 다른 관측값들과 매우 다른 특성을 보이는 값이다.
그리고 이상치는 그 자체로 오류를 뜻하지 않는다.
이상치는 제거해야 할 대상이 아니라 확인해야 할 대상이다.
이상치는 데이터에 고정된 꼬리표가 아니다
어떤 값이 이상치인지 여부는 분석맥락에 따라 달라진다.
신생아의 체중이 4.5kg이라면 비교적 큰 값일 수 있다. 성인의 체중이 4.5kg이라면 측정이나 입력 오류를 의심해야 한다.
기온 35도는 서울의 여름에는 가능하지만 겨울철 관측값이라면 장비오류나 날짜기록 오류일 수 있다.
일일 매출 1억 원은 소형매장에서는 극단적이지만 대형 백화점에서는 평범할 수 있다.
따라서 이상치는 다음 요소에 의존한다.
- 비교하는 모집단
- 측정단위
- 시간과 계절
- 연구대상의 특성
- 분석모형
- 관심 있는 결과변수
- 데이터 수집과정
- 연구목적
같은 관측값도 한 분석에서는 이상치이고 다른 분석에서는 정상값일 수 있다.
Aguinis 등(2013)은 이상치의 정의와 처리방법이 연구결론을 바꿀 수 있으므로, 이상치를 분석 후 임의로 제거하지 말고 정의·탐지·처리 과정을 투명하게 보고해야 한다고 강조한다.
극단값과 오류는 같은 말이 아니다
이상치를 발견했을 때 가장 먼저 해야 할 일은 통계적 제거가 아니라 원자료 확인이다.
관측값은 크게 다음과 같이 구분할 수 있다.
| 유형 | 예 | 기본 대응 |
|---|---|---|
| 입력오류 | 키 170cm를 1,700cm로 입력 | 원자료 확인 후 수정 |
| 단위오류 | 체중 일부는 kg, 일부는 lb | 단위를 통일 |
| 측정오류 | 센서 오작동으로 비정상 값 발생 | 장비 기록 확인 |
| 중복기록 | 같은 환자가 여러 번 입력 | 중복기준에 따라 정리 |
| 구조적 차이 | 성인자료에 소아환자 포함 | 모집단 정의 재검토 |
| 실제 극단값 | 실제로 100일 대기한 환자 | 원칙적으로 유지 |
| 희귀사건 | 금융사기, 재난, 희귀질환 | 연구의 핵심일 수 있음 |
| 모형 부적합 | 비선형 관계를 선형으로 분석 | 모형 변경 검토 |
명백한 입력오류라면 가능한 경우 원자료를 찾아 올바른 값으로 수정해야 한다.
원래 값을 확인할 수 없다면 해당 값을 임의의 정상값으로 바꾸기보다 결측으로 처리하고, 결측자료 처리원칙을 적용하는 편이 타당할 수 있다.
반면 실제로 관찰된 극단값을 단지 분석결과에 큰 영향을 준다는 이유로 삭제해서는 안 된다.
이상치는 왜 분석결과를 바꾸는가
이상치는 모든 통계량에 같은 방식으로 영향을 주지 않는다.
평균은 극단값에 민감하다
평균은 모든 값을 더해 계산하므로 극단값이 직접 반영된다.
\[
\bar{x}=\frac{\sum_{i=1}^{n}x_i}{n}
\]
앞의 대기시간 자료에서 100일을 포함한 평균은 12.4일이다.
100일을 제외하면 평균은 약 2.7일이다.
\[
\frac{1+2+2+2+3+3+3+4+4}{9}\approx2.7
\]
관측값 하나가 평균을 약 4.6배로 바꾼 셈이다.
중앙값은 상대적으로 안정적이다
중앙값은 자료를 순서대로 정렬했을 때 가운데 위치한 값이다. 극단값의 크기보다 순서에 의존하므로 한두 개의 극단값에 상대적으로 강하다.
앞의 자료에서 100일이 1,000일로 바뀌어도 중앙값은 여전히 3일이다.
이러한 특성을 강건성이라고 한다. Huber와 Ronchetti(2009)는 평균과 최소제곱 추정량이 극단값에 민감한 반면, 중앙값과 여러 강건추정량은 일부 오염된 관측값이 존재해도 비교적 안정적인 결과를 제공한다고 설명한다.
표준편차도 크게 변한다
표준편차는 평균에서 떨어진 거리를 제곱해 계산한다.
\[
s=\sqrt{\frac{\sum_{i=1}^{n}(x_i-\bar{x})^2}{n-1}}
\]
극단값의 편차가 제곱되므로 표준편차는 이상치에 매우 민감하다.
앞의 대기시간 자료에서 표본표준편차는 약 30.8일이다. 대부분의 환자가 1일에서 4일 사이에 있는데도 하나의 100일 값 때문에 변동성이 매우 큰 자료처럼 보인다.
상관계수도 달라질 수 있다
두 변수의 상관관계는 극단적인 관측값 하나 때문에 강해지거나 약해질 수 있다.
원래 거의 관계가 없는 두 변수에 멀리 떨어진 점 하나가 추가되면 강한 양의 상관이 나타날 수 있다. 반대로 실제로 강한 관계가 있더라도 반대 방향의 관측값 하나가 상관계수를 크게 낮출 수 있다.
상관계수만 보고 관계를 판단하기 전에 산점도를 확인해야 하는 이유다.
회귀선의 방향을 바꿀 수 있다
최소제곱 회귀는 잔차의 제곱합을 최소화한다.
\[
\sum_{i=1}^{n}(y_i-\hat{y}_i)^2
\]
큰 잔차는 제곱되므로 회귀선에 강한 영향을 줄 수 있다.
특히 설명변수 값이 다른 관측값들과 멀리 떨어져 있으면서 결과변수도 회귀경향에서 벗어나 있다면 회귀계수와 예측값이 크게 달라질 수 있다(Cook, 1977; Belsley et al., 1980).
이상치와 영향력 있는 관측값은 다르다
회귀분석에서는 다음 개념을 구분해야 한다.
| 개념 | 의미 |
|---|---|
| 이상치 | 결과변수가 모형의 예상에서 크게 벗어난 관측값 |
| 높은 레버리지 관측값 | 설명변수 조합이 다른 사례들과 멀리 떨어진 관측값 |
| 영향력 있는 관측값 | 해당 관측값을 제외했을 때 회귀결과가 크게 달라지는 값 |
세 개념은 서로 관련되지만 같지 않다.
잔차가 큰 관측값
잔차는 관찰값과 모형의 예측값 차이다.
\[
e_i=y_i-\hat{y}_i
\]
잔차가 크면 결과변수 방향의 이상치를 의심할 수 있다.
그러나 설명변수 값이 자료의 중심에 가까우면 회귀선 전체를 크게 움직이지 않을 수도 있다.
레버리지가 큰 관측값
레버리지는 설명변수 공간에서 관측값이 얼마나 멀리 떨어져 있는지를 나타낸다.
광고비가 대부분 100만 원에서 1,000만 원 사이인데 한 기업만 1억 원을 지출했다면 그 기업은 높은 레버리지를 가질 수 있다.
높은 레버리지 관측값이 회귀선에 정확히 놓여 있다면 회귀결과를 크게 왜곡하지 않을 수 있다.
영향력이 큰 관측값
높은 레버리지와 큰 잔차가 함께 나타나면 회귀선이 크게 움직일 수 있다.
Cook의 거리 등은 한 관측값을 제외했을 때 전체 적합값이나 회귀계수가 얼마나 달라지는지를 평가한다(Cook, 1977).
따라서 상자그림에서 튀어나온 값이 반드시 회귀분석에서 가장 영향력 있는 관측값은 아니다. 반대로 단일 변수의 상자그림에서는 평범해 보이는 값이 여러 설명변수의 조합에서는 강한 영향력을 가질 수 있다.
IQR 방식은 이상치 후보를 찾는 간단한 방법이다
상자그림에서 널리 사용하는 방법은 사분위범위를 이용한다.
제1사분위수를 \(Q_1\), 제3사분위수를 \(Q_3\)라고 하면 사분위범위는 다음과 같다.
\[
IQR=Q_3-Q_1
\]
일반적인 하한과 상한은 다음과 같다.
\[
L=Q_1-1.5IQR
\]
\[
U=Q_3+1.5IQR
\]
\(L\)보다 작거나 \(U\)보다 큰 값은 이상치 후보로 표시한다.
장점
- 계산이 간단하다.
- 평균과 표준편차를 사용하지 않는다.
- 상자그림과 직접 연결된다.
- 한두 개의 극단값에 비교적 안정적이다.
- 분포를 빠르게 살펴보기에 유용하다.
주의할 점
1.5라는 값은 이상치 여부를 증명하는 절대적 경계가 아니다.
오른쪽 꼬리가 긴 소득, 매출, 입원비와 같은 자료에서는 많은 정상 관측값이 상한을 넘을 수 있다. 반대로 표본이 작으면 실제 오류값이 경계 안에 들어올 수도 있다.
표본이 매우 크면 정상적인 분포에서도 꼬리 부분의 관측값이 자연스럽게 다수 나타난다.
따라서 IQR 방식은 삭제규칙이 아니라 검토대상을 찾는 선별규칙으로 사용해야 한다.
Z점수 방식은 평균과 표준편차의 영향을 받는다
Z점수는 각 값이 평균에서 몇 표준편차만큼 떨어져 있는지를 나타낸다.
\[
z_i=\frac{x_i-\bar{x}}{s}
\]
절댓값이 3보다 큰 관측값을 이상치 후보로 보는 관행이 있다.
하지만 평균과 표준편차 자체가 이상치의 영향을 받는다.
극단값이 평균을 끌어당기고 표준편차를 크게 만들면, 극단값 자신의 Z점수가 예상보다 작아질 수 있다.
여러 이상치가 서로를 숨기는 현상을 마스킹이라고 한다. 반대로 극단값 때문에 정상 관측값이 이상치로 표시되는 현상을 스와핑이라고 한다(Rousseeuw & Hubert, 2011).
Leys 등(2013)은 평균과 표준편차가 이상치에 민감하므로 단순한 평균 기준 Z점수만으로 이상치를 판단하지 말고 중앙값과 중앙절대편차 같은 강건한 측도를 고려할 것을 권고했다.
수정 Z점수는 중앙값과 MAD를 사용한다
평균 대신 중앙값을 사용하고 표준편차 대신 중앙절대편차를 사용할 수 있다.
중앙값을 \(m\)이라고 할 때 중앙절대편차는 각 값과 중앙값의 절대차이에 대한 중앙값이다.
수정 Z점수는 다음과 같이 계산할 수 있다.
\[
M_i=\frac{0.6745(x_i-m)}{MAD}
\]
절댓값이 3.5보다 큰 값을 이상치 후보로 보는 기준이 자주 사용된다.
수정 Z점수는 일반 Z점수보다 일부 극단값에 덜 민감하다. 그러나 이 역시 자동 삭제규칙은 아니다.
다음 상황에서는 별도 판단이 필요하다.
- 자료의 절반 이상이 같은 값일 때
- MAD가 0일 때
- 표본이 매우 작을 때
- 분포가 여러 집단의 혼합일 때
- 시간적 추세나 계절성이 있을 때
Rousseeuw와 Croux(1993)는 MAD를 포함한 강건한 산포측도의 특성과 대안을 비교하며, 이상치가 존재하는 자료에서 분산을 안정적으로 측정하기 위해서는 자료구조에 맞는 강건측도가 필요하다고 설명한다.
시각화는 하나가 아니라 여러 개를 사용한다
이상치는 한 종류의 그래프로 완전히 발견할 수 없다.
| 시각화 | 확인할 수 있는 내용 |
|---|---|
| 히스토그램 | 분포의 비대칭성과 여러 봉우리 |
| 상자그림 | 중앙값, 사분위범위와 극단값 후보 |
| 점도표 | 개별 관측값의 위치 |
| 산점도 | 두 변수의 관계에서 벗어난 값 |
| Q-Q 그림 | 가정한 분포에서 벗어나는 꼬리 |
| 시계열 그림 | 추세, 계절성과 갑작스러운 변화 |
| 잔차 그림 | 모형이 설명하지 못한 패턴 |
| 영향력 그림 | 레버리지와 잔차의 결합 |
상자그림 하나만 보면 값의 시간적 순서나 집단구조를 알 수 없다.
예를 들어 매출 1억 원이 전체 자료에서는 이상치처럼 보이지만 연말 할인행사 기간만 따로 보면 정상적인 값일 수 있다.
분석 전에 전체분포, 집단별 분포와 시간적 흐름을 함께 확인해야 한다.
비대칭 분포에서는 큰 값이 정상일 수 있다
소득, 기업매출, 병원비, 웹사이트 방문수와 대기시간은 오른쪽 꼬리가 긴 경우가 많다.
이러한 자료에서는 평균에서 멀리 떨어진 큰 값이 발생하는 것이 분포의 자연스러운 특징일 수 있다.
상자그림에서 많은 값이 상한을 넘었다고 모두 삭제하면 실제 모집단의 상위 꼬리가 사라진다.
이 경우 다음 방법을 검토할 수 있다.
- 중앙값과 사분위범위를 함께 보고한다.
- 로그척도에서 분포를 살펴본다.
- 감마분포나 로그정규분포 같은 적절한 모형을 사용한다.
- 분위수회귀를 고려한다.
- 강건회귀를 사용한다.
- 하위집단이 혼합되어 있는지 확인한다.
로그변환은 단지 이상치를 없애기 위한 기술이 아니다.
원래 현상이 절대차이보다 비율변화로 작동하고, 분산이 평균과 함께 증가하는 경우에 적절할 수 있다.
변환 후 분석결과의 의미도 달라지므로 연구질문과 해석을 함께 검토해야 한다.
다변량 이상치는 한 변수씩 보면 보이지 않을 수 있다
각 변수에서는 정상범위에 있지만 변수들의 조합이 비정상적일 수 있다.
예를 들어 다음 값들을 생각해 보자.
- 연령 25세
- 경력 20년
- 월급 300만 원
각 값만 따로 보면 불가능하지 않을 수 있다. 그러나 25세에 경력 20년이라는 조합은 기록오류일 가능성이 높다.
키와 몸무게도 각각 정상범위에 있더라도 두 값의 조합이 매우 이례적일 수 있다.
다변량 이상치를 탐지하는 대표적인 방법은 마할라노비스 거리다. 마할라노비스 거리는 변수들의 분산과 상관관계를 고려해 자료 중심에서 떨어진 정도를 측정한다.
하지만 일반적인 평균과 공분산행렬로 계산한 마할라노비스 거리도 이상치의 영향을 받을 수 있다.
여러 이상치가 공분산구조를 바꾸면 자신들을 정상처럼 보이게 할 수 있다. 이를 해결하기 위해 최소공분산결정량과 같은 강건한 다변량 방법을 사용할 수 있다(Rousseeuw & Van Zomeren, 1990; Rousseeuw & Hubert, 2011).
차원이 높아질수록 거리의 의미가 달라지고 정상과 이상을 구분하기 어려워질 수 있으므로, 단순한 거리 임계값을 기계적으로 적용해서는 안 된다.
시계열에서는 계절성과 추세를 먼저 제거해야 한다
여름철 전력사용량이 겨울보다 높다고 해서 여름 자료가 이상치는 아니다.
온라인 쇼핑몰의 블랙프라이데이 매출이 평소보다 높다고 해서 반드시 오류인 것도 아니다.
시계열 이상치는 다음과 같이 구분할 수 있다.
- 한 시점의 갑작스러운 급등
- 일정 기간 지속되는 수준 변화
- 추세의 변화
- 계절패턴의 변화
- 분산의 변화
- 센서가 일정한 값에 고정되는 현상
시계열 자료에 전체기간의 IQR 기준을 적용하면 계절적 최고점이나 장기추세를 이상치로 잘못 표시할 수 있다.
먼저 추세와 계절성을 반영한 모형을 적합한 뒤 잔차에서 비정상적인 값을 탐지하는 편이 적절하다.
정상적인 행사효과와 시스템장애를 구분하려면 달력정보, 프로모션 기록과 장비 로그 같은 외부정보도 필요하다.
R로 이상치가 평균과 표준편차에 미치는 영향 확인하기
앞에서 사용한 대기시간 자료를 만든다.
wait_data <- data.frame(
patient = paste0(
"P",
1:10
),
wait_days = c(
1, 2, 2, 2, 3,
3, 3, 4, 4, 100
)
)
wait_dataR평균, 중앙값과 표준편차를 비교한다.
c(
mean = mean(
wait_data$wait_days
),
median = median(
wait_data$wait_days
),
sd = sd(
wait_data$wait_days
),
iqr = IQR(
wait_data$wait_days
)
)R100일 값을 제외했을 때 결과를 비교한다.
without_extreme <- wait_data$wait_days[
wait_data$wait_days != 100
]
comparison <- rbind(
with_extreme = c(
mean = mean(
wait_data$wait_days
),
median = median(
wait_data$wait_days
),
sd = sd(
wait_data$wait_days
)
),
without_extreme = c(
mean = mean(
without_extreme
),
median = median(
without_extreme
),
sd = sd(
without_extreme
)
)
)
round(
comparison,
2
)R100일 관측값을 포함하면 평균과 표준편차가 크게 증가하지만 중앙값은 비교적 안정적이다.
이 비교는 100일을 삭제하라는 뜻이 아니다. 한 관측값이 요약통계에 얼마나 큰 영향을 주는지 확인하는 민감도 분석이다.
R로 IQR 방식의 이상치 후보 찾기
제1사분위수와 제3사분위수를 계산한다.
q1 <- quantile(
wait_data$wait_days,
probs = 0.25,
names = FALSE
)
q3 <- quantile(
wait_data$wait_days,
probs = 0.75,
names = FALSE
)
iqr_value <- q3 - q1R하한과 상한을 계산한다.
lower_fence <- q1 -
1.5 * iqr_value
upper_fence <- q3 +
1.5 * iqr_value
c(
lower = lower_fence,
upper = upper_fence
)R이상치 후보를 표시한다.
wait_data$iqr_flag <-
wait_data$wait_days <
lower_fence |
wait_data$wait_days >
upper_fence
wait_dataR상자그림을 그린다.
boxplot(
wait_data$wait_days,
horizontal = TRUE,
main = "수술 대기일의 상자그림",
xlab = "대기일"
)R상자그림 밖에 표시된 값은 검토대상이다. 오류로 확정된 값은 아니다.
R로 일반 Z점수와 수정 Z점수 비교하기
일반 Z점수를 계산한다.
wait_data$z_score <- as.numeric(
scale(
wait_data$wait_days
)
)R중앙값과 보정하지 않은 중앙절대편차를 계산한다.
center <- median(
wait_data$wait_days
)
mad_raw <- median(
abs(
wait_data$wait_days -
center
)
)R수정 Z점수를 계산한다.
if (mad_raw == 0) {
wait_data$modified_z <- NA_real_
} else {
wait_data$modified_z <-
0.6745 *
(
wait_data$wait_days -
center
) /
mad_raw
}
wait_dataR두 방식의 후보를 비교한다.
wait_data$z_flag <-
abs(
wait_data$z_score
) > 3
wait_data$modified_z_flag <-
abs(
wait_data$modified_z
) > 3.5
wait_data[
c(
"patient",
"wait_days",
"z_score",
"modified_z",
"z_flag",
"modified_z_flag"
)
]R일반 Z점수는 100일 값 때문에 평균과 표준편차가 함께 커진다. 수정 Z점수는 중앙값과 MAD를 사용하므로 극단값의 영향을 상대적으로 덜 받는다.
그러나 어느 기준을 사용하든 후보를 자동으로 삭제해서는 안 된다.
R로 회귀분석의 영향력 있는 관측값 확인하기
광고비와 매출의 관계를 분석하는 가상자료를 만들어보자.
marketing <- data.frame(
campaign = paste0(
"C",
1:13
),
ad_spend = c(
10, 20, 30, 40, 50,
60, 70, 80, 90, 100,
50, 200, 220
),
sales = c(
24, 41, 63, 79, 102,
119, 143, 161, 181, 198,
300, 398, 780
)
)R일반 선형회귀모형을 적합한다.
ordinary_fit <- lm(
sales ~ ad_spend,
data = marketing
)
summary(
ordinary_fit
)R학생화 잔차, 레버리지와 Cook의 거리를 계산한다.
diagnostics <- data.frame(
campaign = marketing$campaign,
ad_spend = marketing$ad_spend,
sales = marketing$sales,
studentized_residual = rstudent(
ordinary_fit
),
leverage = hatvalues(
ordinary_fit
),
cooks_distance = cooks.distance(
ordinary_fit
)
)RCook의 거리가 큰 순서로 확인한다.
diagnostics[
order(
diagnostics$cooks_distance,
decreasing = TRUE
),
]R흔히 사용하는 선별기준을 추가할 수 있다.
sample_size <- nrow(
marketing
)
parameter_count <- length(
coef(
ordinary_fit
)
)
diagnostics$large_residual <-
abs(
diagnostics$studentized_residual
) > 3
diagnostics$high_leverage <-
diagnostics$leverage >
2 *
parameter_count /
sample_size
diagnostics$large_cook <-
diagnostics$cooks_distance >
4 /
sample_size
diagnosticsR다음 기준들은 모두 검토를 위한 경험적 기준이다.
- 학생화 잔차의 절댓값이 2 또는 3보다 큼
- 레버리지가 \(2p/n\) 또는 \(3p/n\)보다 큼
- Cook의 거리가 \(4/n\)보다 큼
- Cook의 거리가 1보다 큼
어떤 기준도 관측값을 삭제하라는 명령은 아니다.
표본크기와 모형구조에 따라 기준의 의미가 달라질 수 있으며, 여러 진단지표와 원자료를 함께 확인해야 한다(Belsley et al., 1980; Fox, 2019).
회귀진단 그림 확인하기
R의 기본 진단그림을 사용할 수 있다.
par(
mfrow = c(
2,
2
)
)
plot(
ordinary_fit
)
par(
mfrow = c(
1,
1
)
)R네 개의 그림은 다음 정보를 제공한다.
| 그림 | 주요 확인사항 |
|---|---|
| Residuals vs Fitted | 비선형성, 이분산성, 큰 잔차 |
| Normal Q-Q | 잔차분포의 꼬리와 극단값 |
| Scale-Location | 잔차분산의 변화 |
| Residuals vs Leverage | 레버리지와 영향력 |
Q-Q 그림에서 한 점이 벗어났다는 이유만으로 삭제해서는 안 된다. 비대칭 분포, 이분산성이나 잘못된 함수형태가 원인일 수도 있다.
관측값 하나를 뺐을 때 결론이 달라지는지 확인하기
Cook의 거리가 가장 큰 관측값을 찾는다.
most_influential <- which.max(
cooks.distance(
ordinary_fit
)
)
marketing[
most_influential,
]R해당 관측값을 제외한 모형을 비교한다.
reduced_fit <- lm(
sales ~ ad_spend,
data = marketing[
-most_influential,
]
)
coefficient_comparison <- rbind(
all_data = coef(
ordinary_fit
),
without_case = coef(
reduced_fit
)
)
round(
coefficient_comparison,
3
)R회귀계수의 크기나 부호가 크게 달라진다면 연구결론이 한 관측값에 민감하다는 뜻이다.
이때 필요한 질문은 “어느 결과가 마음에 드는가?”가 아니다.
다음을 확인해야 한다.
- 해당 관측값은 정확하게 기록되었는가?
- 연구대상 모집단에 속하는가?
- 별도의 하위집단인가?
- 비선형관계를 나타내는가?
- 분석모형이 부적절한가?
- 결론이 이 관측값에 얼마나 의존하는가?
전체자료 결과와 민감도 분석을 함께 보고하는 것이 가장 투명하다.
강건회귀로 결과를 비교할 수 있다
일반 최소제곱회귀와 강건회귀를 비교할 수 있다.
R의 MASS 패키지에는 M추정 기반의 rlm() 함수가 포함되어 있다.
library(MASS)
robust_fit <- rlm(
sales ~ ad_spend,
data = marketing
)
comparison <- rbind(
ordinary_least_squares = coef(
ordinary_fit
),
robust_regression = coef(
robust_fit
)
)
round(
comparison,
3
)R강건회귀는 잔차가 큰 관측값에 일반 최소제곱보다 작은 가중치를 부여해 일부 극단값의 영향을 줄인다(Rousseeuw & Leroy, 1987).
하지만 강건회귀 결과가 자동으로 정답이 되는 것은 아니다.
- 고레버리지 관측값에 충분히 강건한가?
- 사용한 손실함수와 조정상수는 무엇인가?
- 연구대상과 모형이 적절한가?
- 표준오차 계산방법은 타당한가?
- 하위집단 차이를 단순히 눌러버리지 않았는가?
일반 회귀, 강건회귀와 민감도 분석 결과를 함께 비교하면 결론의 안정성을 더 잘 평가할 수 있다.
강건 표준오차와 강건회귀는 다르다
회귀분석에서 이분산성 강건 표준오차를 사용하면 이상치 문제도 해결된다고 생각하기 쉽다.
그러나 강건 표준오차는 주로 표준오차 계산을 조정한다. 회귀계수 자체는 일반 최소제곱 추정치와 같다.
영향력 있는 관측값이 회귀계수를 크게 바꾸었다면 강건 표준오차만 사용해도 회귀선은 그대로 남아 있다.
| 방법 | 회귀계수 변화 | 표준오차 변화 | 이상치 영향 완화 |
|---|---|---|---|
| 일반 최소제곱 | 기준 | 기준 | 낮음 |
| 이분산성 강건 표준오차 | 없음 | 있음 | 계수에는 없음 |
| 강건회귀 | 있음 | 방법에 따라 있음 | 일부 완화 |
| 관측값 삭제 | 있음 | 있음 | 근거가 필요 |
| 변수변환 | 있음 | 있음 | 모형 타당성 필요 |
강건이라는 단어가 붙었다고 모두 같은 문제를 해결하는 것은 아니다.
이상치를 처리하는 방법
이상치 처리에는 하나의 정답이 없다. 값의 원인과 연구목적에 따라 선택해야 한다.
원자료를 확인하고 수정한다
입력오류나 단위오류가 확인되면 올바른 값으로 수정한다.
수정과정은 기록으로 남겨야 한다.
- 원래 입력값
- 오류를 확인한 근거
- 수정된 값
- 수정일
- 수정 담당자
- 원자료 위치
분석자가 추측으로 값을 바꾸면 안 된다.
실제 관측값이면 유지한다
극단적이지만 실제로 발생한 값이고 연구대상에 포함된다면 원칙적으로 유지해야 한다.
다만 평균과 최소제곱회귀처럼 민감한 방법만 사용하지 말고 중앙값, 분위수와 강건방법을 함께 제시할 수 있다.
모집단이 다르면 별도로 분석한다
극단값이 다른 생성과정에서 나온 집단일 수 있다.
예를 들어 일반 수술환자와 희귀질환 응급환자의 대기시간을 하나의 분포로 요약하면 중요한 차이가 가려질 수 있다.
이 경우 하위집단 분석이나 혼합모형을 고려할 수 있다.
하위집단 분리는 결과를 본 뒤 임의로 수행해서는 안 되며 임상적·제도적 근거가 필요하다.
변환을 고려한다
오른쪽으로 심하게 치우친 양수자료에는 로그변환을 고려할 수 있다.
[
y_i^*=\log(y_i)
]
로그변환은 큰 값을 압축하지만 극단값을 삭제하지 않는다.
그러나 0이나 음수 값이 있는 경우와 결과해석을 함께 검토해야 한다.
절사평균을 사용할 수 있다
절사평균은 양쪽 꼬리에서 일정 비율의 관측값을 제외한 뒤 평균을 계산한다.
R에서는 다음처럼 10% 절사평균을 계산할 수 있다.
mean(
wait_data$wait_days,
trim = 0.10
)R절사평균은 극단값에 대한 민감도를 줄이지만 일반 평균과 다른 모수를 추정한다.
절사비율은 분석결과를 본 뒤 유리하게 선택하지 말고 사전에 정해야 한다.
윈저화를 사용할 수 있다
윈저화는 극단값을 제거하지 않고 정해진 경계값으로 바꾼다.
예를 들어 상위 1%보다 큰 값을 99번째 백분위수로 바꿀 수 있다.
이 방법은 극단값의 영향력을 제한하지만 실제 꼬리분포를 인위적으로 변경한다.
다음 상황에서는 특히 주의해야 한다.
- 상위 매출고객이 연구의 핵심일 때
- 손실위험과 재난 같은 꼬리현상이 중요할 때
- 경계값을 결과를 본 뒤 정했을 때
- 윈저화된 값을 실제 관측값처럼 보고할 때
윈저화를 사용했다면 경계, 근거와 원자료 분석결과를 함께 보고해야 한다.
오류값을 결측으로 처리할 수 있다
값이 잘못되었다는 사실은 확인되었지만 정확한 원값을 복구할 수 없다면 결측으로 바꿀 수 있다.
그 이후에는 완전사례분석, 다중대체나 적절한 결측자료 모형을 적용해야 한다.
극단적이라는 이유만으로 정상값을 결측으로 바꾸는 것은 적절하지 않다.
이상치를 무조건 대체하면 안 된다
이상치 처리표에서 대체가 일반적인 방법처럼 제시되기도 하지만, 실제 극단값을 평균이나 중앙값으로 바꾸는 것은 자료를 조작하는 결과가 될 수 있다.
대체가 타당하려면 최소한 다음 조건이 필요하다.
- 해당 값이 오류라는 근거가 있다.
- 올바른 값을 복구할 수 없다.
- 결측으로 전환하는 절차가 사전에 정의되어 있다.
- 결측자료 처리방법이 타당하다.
- 민감도 분석을 실시한다.
값이 드물거나 분석에 불편하다는 이유만으로 대체해서는 안 된다.
삭제 전후 결과를 함께 비교해야 한다
이상치가 실제값이지만 영향력이 큰 경우에는 전체자료 분석을 주분석으로 유지하고 다음 민감도 분석을 추가할 수 있다.
- 전체자료 분석
- 사전에 정의한 오류값 제외 분석
- 영향력이 큰 관측값 제외 분석
- 강건통계 분석
- 로그변환 분석
- 중앙값 또는 분위수 분석
- 윈저화 분석
결과가 일관되면 결론이 특정 처리방법에 크게 의존하지 않는다는 근거가 된다.
결과가 달라지면 어느 분석이 맞다고 단정하기보다 다음처럼 보고해야 한다.
전체자료에서는 평균차이가 8.4였으나 영향력이 큰 한 관측값을 제외하면 3.1로 감소했다. 해당 관측값은 원자료 확인 결과 실제 사례였으므로 주분석에는 포함했으며, 결론이 이 사례에 민감하다는 점을 함께 보고하였다.
이러한 보고가 극단값을 조용히 삭제하는 것보다 과학적으로 타당하다.
이상치 제거는 p값을 바꾸는 분석자 선택이 될 수 있다
이상치를 제거하면 평균, 표준편차, 회귀계수와 p값이 달라진다.
분석자가 다음 과정을 반복하면 거짓양성 위험이 증가할 수 있다.
- 전체자료를 분석한다.
- 결과가 유의하지 않으면 이상치 기준을 바꾼다.
- 일부 관측값을 제외한다.
- 다시 분석한다.
- 유의한 결과만 보고한다.
이는 이상치 처리가 연구자의 분석 자유도로 작동하는 사례다.
이상치 기준은 가능한 한 다음 시점에 정해야 한다.
- 데이터 수집 전
- 분석 전
- 결과변수를 확인하기 전
- 연구계획서 또는 사전등록 단계
예상하지 못한 이상치가 나타났다면 처리과정과 모든 주요 분석결과를 투명하게 공개해야 한다.
Osborne과 Overbay(2004), Aguinis 등(2013)은 이상치 처리방식이 효과크기와 유의성 판단을 크게 바꿀 수 있으므로, 제거 전후 결과와 판단근거를 보고할 것을 권고한다.
이상치가 많다면 모형이 잘못되었을 수 있다
자료의 많은 부분이 이상치로 표시된다면 관측값의 문제가 아니라 분석모형의 문제일 수 있다.
예를 들어 다음 상황을 생각할 수 있다.
- 두 집단이 섞여 있는데 하나의 정규분포를 가정했다.
- 곡선 관계를 직선으로 분석했다.
- 분산이 평균에 따라 커지는데 등분산을 가정했다.
- 계절성이 있는 자료에 전체평균을 적용했다.
- 개수자료에 정규분포를 가정했다.
- 군집자료의 집단차이를 무시했다.
- 0이 많은 자료를 일반 연속형 자료로 처리했다.
이상치가 반복적으로 나타난다면 개별 사례를 삭제하기보다 자료생성과정과 모형을 재검토해야 한다.
Cousineau와 Chartier(2010)는 이상치가 단순한 데이터 오류뿐 아니라 모형부적합, 모집단 혼합과 측정과정의 문제를 드러낼 수 있다고 설명한다.
머신러닝에서 이상치 탐지는 목적에 따라 달라진다
머신러닝에서는 이상치 탐지가 전처리일 수도 있고 연구목적 자체일 수도 있다.
전처리로 사용하는 경우
회귀나 분류모형의 안정성을 높이기 위해 비정상적인 관측값을 확인할 수 있다.
이 경우에도 훈련자료와 시험자료를 분리한 뒤 훈련자료에서 탐지기준을 학습해야 한다.
전체자료에서 이상치 경계를 정하면 시험자료 정보가 학습과정에 들어갈 수 있다.
이상현상 탐지가 목적인 경우
신용카드 사기, 네트워크 침입, 장비고장과 희귀질환 탐지에서는 이상치가 제거대상이 아니라 예측대상이다.
대표적인 방법에는 다음이 있다.
- 거리 기반 방법
- 밀도 기반 방법
- One-Class SVM
- Isolation Forest
- 오토인코더 기반 방법
- 확률모형
- 시계열 잔차 기반 방법
Isolation Forest는 관측값을 무작위 분할했을 때 적은 수의 분할만으로 고립되는 사례를 이상치로 판단한다(Liu et al., 2008).
하지만 비지도 이상치 탐지 알고리즘이 높은 이상점수를 부여했다고 실제 사기나 오류가 확정되는 것은 아니다.
알고리즘은 드문 패턴을 찾을 뿐 그 이유를 설명하지 못할 수 있다.
도메인 전문가의 검토, 실제 라벨과 비용기반 평가가 필요하다.
평균 대신 무엇을 함께 보고해야 하는가
이상치가 존재하거나 분포가 비대칭이라면 평균 하나만 보고해서는 자료구조를 충분히 설명하기 어렵다.
다음 값을 함께 제시할 수 있다.
| 통계량 | 보여주는 정보 |
|---|---|
| 평균 | 모든 값을 반영한 중심 |
| 중앙값 | 순서 기준 중심 |
| 표준편차 | 평균 주변의 산포 |
| 사분위범위 | 가운데 50%의 범위 |
| 최솟값·최댓값 | 전체 관찰범위 |
| 절사평균 | 꼬리 영향을 줄인 중심 |
| 분위수 | 분포의 여러 위치 |
| 표본크기 | 정보량 |
| 이상치 개수 | 후보의 규모 |
수술 대기시간 사례는 다음처럼 보고할 수 있다.
수술 대기시간의 평균은 12.4일, 표준편차는 30.8일이었다. 중앙값은 3일이고 사분위범위는 2.0일에서 3.75일이었다. 한 환자의 대기시간이 100일로 확인되었으며, 해당 사례는 실제 장기대기 사례였기 때문에 주분석에 포함하고 제외분석을 민감도 분석으로 제시하였다.
이 보고는 평균 12.4일이라는 숫자만 제시하는 것보다 훨씬 많은 정보를 제공한다.
이상치 처리 결과를 어떻게 보고해야 하는가
연구보고서에는 다음 내용을 포함하는 것이 좋다.
- 이상치를 어떻게 정의했는가?
- 기준은 분석 전에 정했는가?
- 어떤 변수에서 몇 개가 발견되었는가?
- IQR, Z점수, 잔차 또는 Cook의 거리 중 무엇을 사용했는가?
- 사용한 임계값은 무엇인가?
- 원자료를 확인했는가?
- 입력·단위·측정 오류가 있었는가?
- 수정하거나 제외한 값은 무엇인가?
- 실제 극단값은 어떻게 처리했는가?
- 전체자료와 제외자료 결과가 어떻게 달랐는가?
- 강건방법이나 변환분석을 실시했는가?
- 이상치 처리가 효과크기와 신뢰구간에 어떤 영향을 주었는가?
- 삭제된 관측값이 특정 집단에 집중되었는가?
- 코드와 판단기준을 재현할 수 있는가?
다음과 같이 작성할 수 있다.
연속형 변수의 분포를 히스토그램과 상자그림으로 확인하고, IQR 경계를 벗어난 관측값을 검토대상으로 표시하였다. 회귀분석에서는 학생화 잔차, 레버리지와 Cook의 거리를 함께 확인하였다. 원자료 검토에서 단위오류 2건을 수정했으며 실제 극단사례는 제외하지 않았다. 전체자료 분석을 주분석으로 제시하고, 영향력이 큰 관측값을 제외한 분석과 강건회귀 결과를 민감도 분석으로 보고하였다.
이상치 분석에서 자주 발생하는 오류
상자그림 밖에 있으면 모두 삭제한다
상자그림 경계는 후보를 표시하는 경험적 기준이다. 오류를 확정하는 기준이 아니다.
Z점수의 절댓값이 3보다 크면 무조건 이상치라고 판단한다
평균과 표준편차는 이상치에 민감하며, 분포가 정규적이지 않으면 기준이 적절하지 않을 수 있다.
극단값을 평균으로 대체한다
실제 관측값을 평균으로 바꾸면 분포와 변수 간 관계가 왜곡된다.
이상치를 제거하면 데이터가 정규분포가 된다고 생각한다
정규분포와 맞지 않는 이유가 모집단의 비대칭성이나 혼합분포일 수 있다. 정상적인 꼬리값을 제거해 정규성을 억지로 만드는 것은 적절하지 않다.
회귀잔차가 크면 영향력도 크다고 생각한다
잔차가 커도 설명변수의 중심에 가까우면 회귀계수에 미치는 영향이 제한적일 수 있다.
레버리지가 크면 반드시 문제라고 생각한다
높은 레버리지 관측값이 회귀경향과 잘 맞는다면 유용한 정보를 제공할 수 있다.
강건 표준오차가 이상치 문제를 해결한다고 생각한다
강건 표준오차는 일반적으로 회귀계수 자체를 바꾸지 않는다.
이상치를 삭제한 결과만 보고한다
제거 전후 결과와 판단근거를 함께 보고해야 한다.
큰 표본에서는 이상치를 무시해도 된다고 생각한다
큰 표본에서도 영향력 있는 관측값, 데이터 오류와 희귀 하위집단은 중요한 문제다.
실제 희귀사건을 오류로 처리한다
사기, 재난, 중증 부작용처럼 드문 사건이 연구의 핵심일 수 있다.
이상치를 발견했을 때의 분석 순서
| 단계 | 확인할 내용 |
|---|---|
| 1단계 | 단위, 입력, 중복과 측정오류 확인 |
| 2단계 | 전체·집단별·시점별 분포 시각화 |
| 3단계 | IQR, 수정 Z점수 등으로 후보 표시 |
| 4단계 | 회귀에서는 잔차·레버리지·영향력 확인 |
| 5단계 | 실제값, 오류값, 다른 모집단 여부 분류 |
| 6단계 | 연구목적에 맞는 처리방법 선택 |
| 7단계 | 전체자료와 대안분석 비교 |
| 8단계 | 기준, 제외 사례와 결과변화를 보고 |
이 순서에서 가장 중요한 단계는 값을 제거하는 단계가 아니라 그 값이 생긴 이유를 확인하는 단계다.
분석 전에 확인할 질문
- 이 값은 실제로 가능한 값인가?
- 측정단위가 다른 자료와 섞이지 않았는가?
- 입력오류나 중복기록은 아닌가?
- 연구대상 모집단에 속하는가?
- 특정 집단이나 시점에만 나타나는가?
- 단일 변수에서만 극단적인가?
- 여러 변수의 조합에서 이상한가?
- 회귀잔차가 큰가?
- 레버리지가 높은가?
- Cook의 거리가 큰가?
- 이 값을 제외하면 계수와 결론이 달라지는가?
- 분포가 원래 비대칭적인 것은 아닌가?
- 비선형 관계를 잘못 분석한 것은 아닌가?
- 별도의 하위집단이 섞여 있는가?
- 강건통계나 변환이 더 적절한가?
- 이상치 기준은 사전에 정했는가?
- 제거 전후 결과를 모두 보고할 수 있는가?
- 극단값 자체가 연구의 핵심 신호는 아닌가?
튄 값은 방해물이 아니라 질문입니다
이상치는 자료의 다른 값들과 매우 다른 관측값이다.
하지만 다른 값과 다르다는 사실만으로 오류가 되지는 않는다.
비전공자는 다음 다섯 문장으로 기억하면 된다.
이상치는 자동 삭제 대상이 아니다.
입력오류와 실제 극단값을 먼저 구분해야 한다.
상자그림과 Z점수는 후보를 찾는 도구이지 판결기준이 아니다.
회귀에서는 잔차, 레버리지와 영향력을 구분해야 한다.
전체자료와 민감도 분석을 함께 보고해야 한다.
앞의 수술 대기시간 100일이 입력오류라면 수정해야 한다.
그러나 실제로 한 환자가 100일을 기다렸다면 그 값은 병원의 평균을 불편하게 만드는 숫자가 아니라 시스템의 실패를 드러내는 중요한 기록일 수 있다.
좋은 분석가는 이상치를 보고 곧바로 삭제 버튼을 누르지 않는다.
그 값이 어디에서 왔는지, 어떤 분석을 바꾸는지, 현실의 어떤 구조를 보여주는지를 먼저 묻는다.
대다수의 평범한 숫자는 일반적인 경향을 알려준다. 그러나 때로는 하나의 튄 값이 평균이 숨기고 있던 가장 중요한 사실을 말해준다.
참고문헌
Aguinis, H., Gottfredson, R. K., & Joo, H. (2013). Best-practice recommendations for defining, identifying, and handling outliers. Organizational Research Methods, 16(2), 270–301. https://doi.org/10.1177/1094428112470848
Belsley, D. A., Kuh, E., & Welsch, R. E. (1980). Regression diagnostics: Identifying influential data and sources of collinearity. Wiley. https://doi.org/10.1002/0471725153
Cook, R. D. (1977). Detection of influential observation in linear regression. Technometrics, 19(1), 15–18. https://doi.org/10.1080/00401706.1977.10489493
Cousineau, D., & Chartier, S. (2010). Outliers detection and treatment: A review. International Journal of Psychological Research, 3(1), 58–67. https://doi.org/10.21500/20112084.844
Fox, J. (2019). Regression diagnostics: An introduction (2nd ed.). SAGE. https://doi.org/10.4135/9781071878499
Huber, P. J., & Ronchetti, E. M. (2009). Robust statistics (2nd ed.). Wiley. https://doi.org/10.1002/9780470434697
Leys, C., Ley, C., Klein, O., Bernard, P., & Licata, L. (2013). Detecting outliers: Do not use standard deviation around the mean, use absolute deviation around the median. Journal of Experimental Social Psychology, 49(4), 764–766. https://doi.org/10.1016/j.jesp.2013.03.013
Liu, F. T., Ting, K. M., & Zhou, Z.-H. (2008). Isolation forest. 2008 Eighth IEEE International Conference on Data Mining, 413–422. https://doi.org/10.1109/ICDM.2008.17
Osborne, J. W., & Overbay, A. (2004). The power of outliers and why researchers should always check for them. Practical Assessment, Research, and Evaluation, 9, Article 6. https://doi.org/10.7275/qv07-2r77
Rousseeuw, P. J., & Croux, C. (1993). Alternatives to the median absolute deviation. Journal of the American Statistical Association, 88(424), 1273–1283. https://doi.org/10.1080/01621459.1993.10476408
Rousseeuw, P. J., & Hubert, M. (2011). Robust statistics for outlier detection. Wiley Interdisciplinary Reviews: Data Mining and Knowledge Discovery, 1(1), 73–79. https://doi.org/10.1002/widm.2
Rousseeuw, P. J., & Leroy, A. M. (1987). Robust regression and outlier detection. Wiley. https://doi.org/10.1002/0471725382
Rousseeuw, P. J., & Van Zomeren, B. C. (1990). Unmasking multivariate outliers and leverage points. Journal of the American Statistical Association, 85(411), 633–639. https://doi.org/10.1080/01621459.1990.10474920









