탐색적 데이터 분석(EDA)의 첫 단계는 "데이터를 깨끗하게 만드는 것"이다. MLS-C01의 Domain 2(탐색적 데이터 분석)는 시험의 약 24%를 차지하고, 그 중심에 데이터 정제가 있다. 아무리 훌륭한 모델이라도 결측·이상치·중복이 섞인 데이터를 먹이면 "garbage in, garbage out"이다.
결측치를 처리하기 전에 왜 비었는지부터 알아야 한다. 통계학은 결측 메커니즘을 세 가지로 나눈다.
메커니즘
의미
예
단순 삭제의 결과
MCAR (Missing Completely At Random)
결측이 완전히 무작위, 다른 변수와 무관
센서 오작동에 의한 무작위 누락
편향 거의 없음
MAR (Missing At Random)
결측이 관측된 다른 변수에 의존
고소득자가 소득 응답을 더 자주 거부
다른 변수를 쓰면 보정 가능
MNAR (Missing Not At Random)
결측이 값 자체에 의존
신용점수가 아주 낮은 사람이 점수를 숨김
심각한 편향
결측 메커니즘 분류(MCAR/MAR/MNAR)는 통계학자 Donald Rubin이 1976년에 제안한 틀이다. 핵심 통찰은 "결측 처리의 타당성은 왜 비었는지에 달려 있다"는 것이다. 단순 평균 대치는 MCAR 가정에서만 편향이 없고, MNAR 데이터에 적용하면 분포를 왜곡한다. 그래서 무작정 fillna(mean)을 쓰기 전에 결측 패턴을 시각화(결측 히트맵 등)하는 것이 EDA의 정석이다.
MICE(Multiple Imputation by Chained Equations)는 결측 변수 각각을 다른 변수들로 반복 회귀해, 단일 대치가 무시하는 "대치의 불확실성"까지 담는다. 평균 대치가 분산을 인위적으로 줄이고 신뢰구간을 좁게 만드는 문제를 다중 대치가 보정한다. 시험 수준에서는 "변수 간 관계가 강하면 단순 대치보다 KNN·모델 기반 대치가 정확하다"만 이해해도 충분하다.
⚠️ 함정: 대치는 학습 데이터에만 fit하고, 그 통계량을 검증·테스트에 적용해야 한다. 전체 데이터로 평균을 계산하면 테스트 정보가 학습에 새어 들어가는 데이터 누수가 생겨 성능이 부풀려진다. scikit-learn이 학습셋에 fit_transform, 테스트셋에 transform만 쓰는 이유가 이것이다.
IQR이 Z-score보다 강건한 이유는 붕괴점(breakdown point) 개념 때문이다. 평균과 표준편차는 이상치 하나에도 흔들리지만(붕괴점 0%), 중앙값과 사분위수는 데이터의 최대 25%가 오염돼도 안정적이다. 이상치를 탐지하는 도구 자체가 이상치에 휘둘리면 안 되므로 강건 통계(중앙값, IQR)가 선호된다. 사기 탐지나 이상 탐지처럼 이상치가 곧 정답인 문제에서는 제거가 아니라 "그 이상치를 학습하는 것"이 핵심이다.
⚠️ 함정: "이상치 = 제거 대상"으로 외우면 사기 탐지 문제에서 반드시 틀린다. 지문에 "사기", "장비 고장", "이상 탐지"가 보이면 극단값은 잡아야 할 신호다.
결측을 만났다
├─ 결측률이 압도적으로 높다(예: 90%+) → 컬럼 제거 또는 "결측 여부" 플래그만 남김
├─ 결측 자체가 신호다(MNAR) → 지시 변수 추가 + 대치
├─ 다른 변수와 상관이 강하다(MAR) → KNN·모델 기반 대치
└─ 무작위로 보이고 비율이 낮다(MCAR) → 중앙값(치우침) / 평균(대칭) / 최빈값(범주형)
이상치를 만났다
├─ 명백한 입력 오류다 → 삭제 또는 논리 필터
├─ 분포가 오른쪽으로 길다 → 로그 변환
├─ 극단 영향만 줄이고 싶다 → 윈저라이징(클리핑)
└─ 이상치가 곧 정답이다 → 유지, 이상 탐지 문제로 접근