데이터분석 전문가(ADP)

데이터분석 전문가(ADP) 시험 노트개념 정리19 MIN

결측값 대치와 이상값 검색

ADP 4과목 데이터 처리의 둘째 자리입니다. MCAR·MAR·NMAR, 완전분석법과 단순대치법, 다중 대치 세 단계와 Amelia 패키지, ESD와 사분위수 규칙, 상자그림 읽기, 이상값을 버릴지 남길지 판단하는 기준을 계산과 함께 정리합니다.

앞 노트에서 데이터 마트를 짰다면 이제 그 안의 빈칸과 튀는 값을 다룰 차례입니다. 둘 다 모델에 넣기 전에 정리하지 않으면 결과가 조용히 틀어지는 자리이고, 시험도 「어떤 방법을 쓰는가」보다 「그 방법이 무엇을 망가뜨리는가」를 묻습니다. 평균으로 채우면 분산이 줄고, 평균과 표준편차로 이상값을 찾으면 이상값이 그 기준을 흔듭니다. 이 노트는 그 부작용을 계산으로 확인하면서 갑니다.

결측값의 유형

MCAR·MAR·NMAR

결측값은 있어야 할 자리에 값이 없는 것이고 R에서는 NA로 나타납니다. 어떻게 대치할지는 왜 비었는가가 정하므로, 먼저 빈 이유를 셋으로 가릅니다.

유형 빈 이유 예
MCAR 어떤 변수와도 무관하게 무작위로 빈다 설문지 한 장이 우편 중에 젖어 못 읽었다
MAR 관측된 다른 변수와 관련해 빈다 나이가 많을수록 소득 문항에 답하지 않는다
NMAR 비어 있는 그 값 자체와 관련해 빈다 소득이 높은 사람일수록 소득을 적지 않는다

MCAR(완전 무작위 결측)은 빈 줄을 빼도 남은 데이터가 여전히 전체를 대표하는 경우입니다. MAR(무작위 결측)은 빈 이유가 관측된 다른 변수로 설명되므로, 그 변수를 써서 채우면 치우침을 줄일 수 있습니다. NMAR(비무작위 결측)은 빈 이유가 보이지 않는 그 값 자체에 있어서 관측된 것만으로는 바로잡을 수 없고, 결측이 생긴 과정을 따로 모형으로 세워야 합니다. MAR과 NMAR을 가르는 질문은 「빈 이유가 다른 열에 보이는가, 비어 있는 그 값에 있는가」입니다.

결측 확인

R에서는 is.na()로 결측 여부를 논리 벡터로 받고, sum(is.na(x))로 개수를 셉니다. complete.cases(df)는 결측이 하나도 없는 행이 TRUE인 벡터이고 na.omit(df)는 그 행만 남깁니다. mean()·sum() 같은 함수는 NA가 하나라도 있으면 NA를 돌려주므로 na.rm = TRUE를 줍니다.

x <- c(4, 6, NA, 8, NA, 10)
sum(is.na(x))            # 2
mean(x)                  # NA
mean(x, na.rm = TRUE)    # 7

단순대치법

완전분석법

결측값을 한 번만 채우거나 빼고 끝내는 방법을 묶어 단순대치법이라 합니다. 그 가운데 가장 단순한 것이 결측이 있는 행을 통째로 지우는 완전분석법입니다. 쉽지만 두 가지를 잃습니다. 행이 줄어 효율성이 떨어지고, MCAR이 아니면 남은 행이 한쪽으로 치우쳐 결과에 편향이 생깁니다. 열이 많으면 열마다 조금씩만 비어도 온전한 행이 급격히 줄어든다는 점도 자주 나옵니다.

평균대치법

비어 있는 자리를 관측된 값의 평균으로 채우는 것이 평균대치법입니다. 전체 평균 하나로 채우면 비조건부 평균대치, 다른 변수로 회귀식을 세워 예측값으로 채우면 조건부 평균대치(회귀대치)입니다.

평균대치는 평균을 그대로 두지만 분산을 줄입니다. 위의 x에서 관측값 4·6·8·10의 평균은 7이고, 두 칸을 7로 채우면 평균은 여전히 7입니다. 그런데 표본분산은 관측값만으로 9+1+1+93≈6.67\frac{9 + 1 + 1 + 9}{3} \approx 6.67 이던 것이, 편차가 0인 두 값이 더해져 205=4\frac{20}{5} = 4 로 줄어듭니다. 분산이 작아지면 표준오차도 작아져 검정이 실제보다 유의하게 나옵니다. 평균대치의 약점은 이것입니다.

단순확률대치법

평균대치가 분산을 줄이는 문제를 덜려고 확률적으로 값을 뽑아 채우는 것이 단순확률대치법입니다. 비슷한 응답자의 값을 가져오는 핫덱(hot-deck) 대치, 가장 가까운 이웃의 값을 쓰는 최근접 대치가 여기에 듭니다. 값이 흩어진 채로 채워져 분산이 덜 줄지만, 채운 값을 참값처럼 다루므로 대치에서 생긴 불확실성은 여전히 추정에 반영되지 않습니다. 이 한계를 푸는 것이 다음 절의 다중 대치입니다.

다중 대치

세 단계

다중 대치는 결측값을 한 번이 아니라 여러 번 채워 완성된 데이터셋을 여러 벌 만들고, 그 벌들 사이의 차이로 대치의 불확실성까지 추정에 담는 방법입니다. 세 단계를 밟습니다.

  1. 대치 — 확률적으로 채운 완성 데이터셋을 m개 만든다
  2. 분석 — m개 데이터셋 각각에 같은 분석을 돌린다
  3. 결합 — m개 결과를 하나로 합친다

결합 단계에서 추정값은 m개의 평균을 쓰고, 분산에는 각 데이터셋 안의 분산과 데이터셋 사이의 분산을 함께 넣습니다. 단순대치가 놓치던 「채운 값이 얼마나 불확실한가」가 이 사이 분산으로 들어옵니다. 단계 이름과 순서를 바꾼 보기(분석 → 대치 → 결합)가 오답으로 나옵니다.

Amelia 패키지

R에서 다중 대치를 하는 대표 도구가 Amelia 패키지입니다. 붓스트랩과 EM 알고리즘을 묶은 방식으로 대치하며, 데이터가 다변량 정규분포를 따르고 결측이 MAR이라고 가정합니다. 시계열·횡단면 자료를 위해 시간 변수(ts)와 개체 변수(cs)를 지정할 수 있습니다.

library(Amelia)
data(freetrade)
a.out <- amelia(freetrade, m = 5, ts = "year", cs = "country")
length(a.out$imputations)   # 5 — 완성된 데이터셋 다섯 벌
head(a.out$imputations[[1]])
missmap(a.out)              # 결측 위치를 그림으로 본다

이상값 검색

ESD

이상값은 다른 값들과 동떨어진 값입니다. 가장 흔한 판정 기준이 ESD로, 평균에서 표준편차의 세 배보다 멀리 떨어진 값, 곧 xˉ±3s\bar{x} \pm 3s 밖의 값을 이상값으로 봅니다. 평균 50, 표준편차 4라면 38 미만이나 62 초과가 이상값입니다.

ESD에는 약점이 있습니다. 평균과 표준편차가 이상값 자신에게 끌려가기 때문입니다. 값 10, 14, 16, 18, 19, 21, 22, 25, 60 아홉 개의 평균은 약 22.8이고 표준편차는 약 14.7이라, 기준선이 약 66.7까지 올라가 60은 이상값으로 잡히지 않습니다. 60 하나가 표준편차를 부풀려 제 자리를 가린 셈이고, 표본이 작을수록 이런 일이 잦습니다.

사분위수 규칙

평균 대신 순서에 기대는 기준이 사분위수 규칙입니다. 1사분위수 Q1Q_1 과 3사분위수 Q3Q_3 의 거리인 사분위수 범위 IQR=Q3−Q1IQR = Q_3 - Q_1 을 구해 Q1−1.5×IQRQ_1 - 1.5 \times IQR 보다 작거나 Q3+1.5×IQRQ_3 + 1.5 \times IQR 보다 큰 값을 이상값으로 봅니다.

같은 아홉 개에서 R의 quantile() 기본 방식으로 구하면 Q1=16Q_1 = 16, Q3=22Q_3 = 22 이고 IQR은 6입니다. 경계는 16−9=716 - 9 = 7 과 22+9=3122 + 9 = 31 이라 60이 이상값으로 잡힙니다. 사분위수는 끝값 하나에 흔들리지 않아 ESD가 놓친 것을 찾습니다.

x <- c(10, 14, 16, 18, 19, 21, 22, 25, 60)
q <- quantile(x, c(0.25, 0.75))     # 16 22
x[x < q[1] - 1.5 * IQR(x) | x > q[2] + 1.5 * IQR(x)]   # 60

상자그림

사분위수 규칙을 그림으로 옮긴 것이 상자그림입니다. 상자의 아래·위 변이 Q1Q_1 과 Q3Q_3 이고, 안의 굵은 선이 중앙값입니다. 상자에서 뻗은 수염은 1.5 IQR 경계 안쪽의 가장 먼 관측값까지 가고, 그 밖의 값은 점으로 따로 찍힙니다. 그 점이 이상값 후보입니다.

위 데이터라면 상자가 16에서 22, 중앙값 선이 19, 아래 수염이 10, 위 수염이 경계 31 안쪽의 가장 큰 값인 25까지 가고, 60이 점으로 섭니다. 수염 끝을 경계값 31로 읽는 것이 흔한 실수입니다. R에서는 boxplot(x)$out이 점으로 찍힌 값을, boxplot(x)$stats가 수염과 상자의 다섯 값을 돌려줍니다.

이상값 처리

판단 기준

찾은 이상값을 지울지 남길지는 그 값이 어디서 왔는가가 정합니다. 입력 실수, 센서 오류, 단위 착오처럼 의도하지 않게 생긴 값이면 잘못된 값이므로 고치거나 지웁니다. 반면 실제로 일어난 극단적인 사건이면 그 값이 분석의 목적일 수 있습니다. 부정 사용 탐지와 설비 이상 탐지에서는 튀는 값을 찾아내는 것이 과제 자체이므로 지우면 분석이 성립하지 않습니다.

그래서 통계 기준은 후보를 뽑는 데까지만 쓰고, 최종 판단은 업무 맥락으로 합니다. 나이 250세처럼 불가능한 값은 망설일 것이 없지만, 연 매출이 다른 고객의 스무 배인 법인 고객은 실재하는 고객일 수 있습니다.

절단과 조정

남기기로 한 이상값이 모델을 지나치게 끌어당기면 처리합니다. 이상값이 든 행을 빼는 것이 절단이고, 이상값을 정한 경계값으로 바꿔 행은 남기는 것이 조정입니다. 조정은 상한·하한을 넘는 값을 그 경계로 끌어내리는 방식이라 표본 수를 지키면서 영향만 줄입니다. 로그 변환처럼 분포 자체를 눌러 튀는 정도를 줄이는 방법도 함께 씁니다.

연습 문제

  1. 「소득이 높은 응답자일수록 소득 문항을 비워 둔다」는 결측의 유형은?
    ① MCAR
    ② MAR
    ③ NMAR
    ④ 결측이 아니다
    ③. 빈 이유가 비어 있는 소득 값 자체에 있으므로 비무작위 결측입니다. 빈 이유가 나이처럼 관측된 다른 변수로 설명된다면 MAR입니다.
  2. 관측값이 2, 4, 6, 8이고 결측이 둘인 변수를 평균으로 대치했다. 대치 전후의 표본분산으로 옳은 것은?
    ① 약 6.67 → 약 6.67
    ② 약 6.67 → 4
    ③ 5 → 4
    ④ 5 → 약 6.67
    ②. 평균은 5이고 편차 제곱합은 9+1+1+9=209 + 1 + 1 + 9 = 20 이라 대치 전 분산은 20÷3≈6.6720 \div 3 \approx 6.67 입니다. 5로 채운 두 값은 편차가 0이라 제곱합은 그대로 20이고 자유도만 5가 되어 20÷5=420 \div 5 = 4 입니다. 평균은 그대로이고 분산만 줄어듭니다.
  3. 다중 대치의 단계를 바르게 나열한 것은?
    ① 분석 → 대치 → 결합
    ② 대치 → 결합 → 분석
    ③ 대치 → 분석 → 결합
    ④ 결합 → 대치 → 분석
    ③. 완성 데이터셋을 여러 벌 만들고, 벌마다 같은 분석을 돌린 뒤, 결과를 합칩니다. 합치는 단계에서 벌 사이의 분산이 대치의 불확실성으로 들어갑니다.
  4. 값 3, 5, 7, 8, 9, 10, 12, 13, 30에 대해 R의 quantile() 기본 방식으로 사분위수 규칙을 적용할 때 이상값은?
    ① 없다
    ② 3
    ③ 30
    ④ 3과 30
    ③. 아홉 개라 Q1Q_1 은 셋째 값 7, Q3Q_3 은 일곱째 값 12이고 IQR은 5입니다. 경계는 7−7.5=−0.57 - 7.5 = -0.5 와 12+7.5=19.512 + 7.5 = 19.5 이므로 30만 바깥입니다.
  5. 평균이 120, 표준편차가 15인 변수에 ESD를 적용할 때 이상값이 되는 값은?
    ① 70
    ② 90
    ③ 150
    ④ 160
    ①. 경계는 120±3×15120 \pm 3 \times 15 곧 75와 165이고, 이 범위 밖에 있는 것은 70 하나입니다. 160은 평균에서 표준편차의 약 2.7배 떨어져 멀어 보여도 경계 안쪽입니다.
  6. 상자그림에 대한 설명으로 옳지 않은 것은?
    ① 상자의 아래·위 변은 1사분위수와 3사분위수다
    ② 상자 안의 선은 평균이다
    ③ 수염 밖에 점으로 찍힌 값이 이상값 후보다
    ④ 수염은 1.5 IQR 경계 안쪽의 가장 먼 관측값까지 뻗는다
    ②. 상자 안의 선은 중앙값입니다. 상자그림은 순서에 기대는 요약이라 평균을 쓰지 않고, 그래서 끝값 하나에 흔들리지 않습니다.
  7. 카드 거래 데이터에서 사분위수 규칙으로 이상값을 찾았더니 대부분이 실제로 승인된 고액 해외 결제였다. 부정 사용 탐지 모델을 만드는 상황에서 가장 알맞은 처리는?
    ① 이상값이므로 모두 지운다
    ② 평균으로 대치한다
    ③ 실제로 일어난 거래이므로 남기고, 탐지의 대상으로 다룬다
    ④ 상한값으로 조정해 분포를 매끄럽게 만든다
    ③. 입력 실수가 아니라 실재하는 극단값이고, 부정 사용 탐지는 바로 그런 튀는 거래를 찾는 것이 목적입니다. 지우거나 조정하면 모델이 배워야 할 신호를 없앱니다.
  8. 서술형 연습입니다. 고객 설문 데이터에서 연 소득 열이 18% 비어 있고, 빈 응답자는 대체로 나이가 많습니다. 결측 유형을 짚고, 완전분석법과 평균대치법을 쓰면 각각 무엇이 틀어지는지, 권하는 방법과 R 도구를 5줄 이내로 쓰시오.
    채점 기준은 셋입니다. (1) 유형을 짚었는가 — 빈 이유가 관측된 나이로 설명되므로 MAR입니다. 소득 값 자체가 이유라는 근거가 없으므로 NMAR로 단정하면 감점합니다. (2) 두 방법의 부작용을 적었는가 — 완전분석법은 행이 18% 줄어 효율성이 떨어지고, 나이 많은 응답자가 빠져 표본이 젊은 쪽으로 치우칩니다. 평균대치법은 평균은 지키지만 분산이 줄어 표준오차가 작게 나오고, 나이와 소득의 관계도 흐려집니다. (3) 방법과 도구를 골랐는가 — 나이를 설명변수로 쓰는 다중 대치가 표준 답이고, Amelia 패키지의 amelia(df, m = 5)로 완성 데이터셋을 여러 벌 만든 뒤 분석하고 결합한다고 적으면 됩니다. 나이로 회귀식을 세우는 조건부 평균대치도 부분 점수입니다. 방법만 들고 부작용을 적지 않으면 배점의 3분의 1만 붙습니다.
데이터분석 전문가(ADP) 시험 노트 전체 보기