결측 데이터 (Missing Data)
핵심 요약: 빠진 데이터를 어떻게 처리하느냐가 모델 성능을 좌우한다. 핵심은 왜 빠졌는지를 파악하는 것 — 무작위로 빠진 것과 의도적으로 빠진 것은 처리 방법이 완전히 다르다.
초보자를 위한 핵심 용어
섹션 제목: “초보자를 위한 핵심 용어”- 결측(Missing Data): 데이터셋에서 값이 비어 있는 셀. 엑셀에서 빈 칸, pandas에서 NaN으로 표시된다.
- MCAR / MAR / MNAR: 결측이 발생한 이유를 분류하는 세 가지 메커니즘. 완전 랜덤(MCAR), 다른 변수에 의존(MAR), 결측값 자체에 의존(MNAR).
- 대체(Imputation): 결측된 값을 추정하여 채워 넣는 것. 평균 대체, KNN 대체 등 다양한 방법이 있다.
- 결측 지표(Missingness Indicator): “이 값이 비어 있었다”는 사실 자체를 0/1로 기록한 새 특성. 결측 여부가 예측에 도움이 될 수 있다.
숫자로 보는 결측 처리의 차이
섹션 제목: “숫자로 보는 결측 처리의 차이”병원 데이터에서 “검사 수치” 열의 30%가 결측이라고 하자:
| 처리 방법 | 결과 |
|---|---|
| 행 삭제 (Listwise Deletion) | 학습 데이터 30% 손실 → 정확도 74% |
| 전체 평균으로 대체 | 분포 왜곡 → 정확도 79% |
| 성별/연령대별 중앙값 대체 | 그룹 특성 반영 → 정확도 84% |
| MICE (반복 다중 대체) | 변수 간 관계 보존 → 정확도 87% |
“검사를 받지 않았다”는 사실 자체가 건강 상태의 단서일 수 있으므로, 결측 지표를 추가하면 추가로 1~2%p 향상되는 경우가 많다.
결측 데이터(Missing Data)는 실제 데이터셋에서 거의 항상 존재하는 문제이다. 결측이 발생하는 메커니즘을 이해하고, 적절한 전략을 선택하는 것이 모델 성능과 분석의 신뢰성에 직접적인 영향을 미친다. 무작정 행을 삭제하거나 평균으로 대체하는 것은 심각한 편향이나 정보 손실을 유발할 수 있다.
비유: 결측 데이터는 퍼즐의 빠진 조각과 같다. 빠진 조각 자체보다 왜 빠졌는지가 훨씬 중요하다. 바람에 날아간 것(MCAR)인지, 누군가 일부러 숨긴 것(MNAR)인지에 따라 퍼즐을 완성하는 전략이 완전히 달라진다.
탄생 배경
섹션 제목: “탄생 배경”결측 데이터를 체계적으로 다루는 이론적 프레임워크는 Roderick Little과 Donald Rubin이 1987년에 출간한 저서 *“Statistical Analysis with Missing Data”*에서 확립되었다. 이 책에서 Little과 Rubin은 결측 메커니즘을 MCAR, MAR, MNAR의 세 가지로 분류하는 체계를 제안했으며, 이 분류는 오늘날까지 결측 데이터 처리의 근간이 되고 있다.
이 분류 체계가 혁신적이었던 이유는, 결측을 단순히 “빠진 값”으로 보는 것이 아니라 결측이 발생한 메커니즘에 따라 적절한 처리 방법이 완전히 달라진다는 점을 수학적으로 증명했기 때문이다. 이전에는 대부분의 연구자가 결측 행을 삭제(listwise deletion)하거나 평균으로 대체하는 단순한 방법만 사용했지만, Little-Rubin 프레임워크 이후 MICE(Multiple Imputation by Chained Equations)와 같은 정교한 대체 기법이 발전할 수 있는 이론적 토대가 마련되었다.
핵심 개념
섹션 제목: “핵심 개념”1. 결측 데이터 메커니즘
섹션 제목: “1. 결측 데이터 메커니즘”| 메커니즘 | 영문 | 정의 | 예시 | 처리 난이도 |
|---|---|---|---|---|
| MCAR | Missing Completely At Random | 결측이 완전히 랜덤 | 설문지 일부 페이지 누락 | 쉬움 |
| MAR | Missing At Random | 다른 관측 변수에 의존 | 남성이 체중을 덜 기입 | 중간 |
| MNAR | Missing Not At Random | 결측값 자체에 의존 | 고소득자가 소득 미기입 | 어려움 |
진단 방법:
- Little’s MCAR test: MCAR 여부 통계 검정
- 결측 패턴 시각화: missingno 라이브러리
- 결측 여부와 다른 변수 간 상관관계 분석
2. 대체 전략 (Imputation Strategies)
섹션 제목: “2. 대체 전략 (Imputation Strategies)”단순 대체 (Simple Imputation)
섹션 제목: “단순 대체 (Simple Imputation)”| 방법 | 적합한 경우 | 주의점 |
|---|---|---|
| 평균 (Mean) | MCAR, 정규 분포 | 분포의 분산 축소, 왜곡 |
| 중앙값 (Median) | 왜도 있는 분포, 이상치 | 분포 왜곡 |
| 최빈값 (Mode) | 범주형 변수 | 빈도 편향 |
| 상수 (0 또는 -999) | 결측 자체가 의미 | 모델이 특수값으로 학습 |
고급 대체
섹션 제목: “고급 대체”| 방법 | 원리 | 장점 | 단점 |
|---|---|---|---|
| KNN Imputation | k개 유사 샘플의 가중 평균 | 지역적 패턴 반영 | 계산 비용, 차원의 저주 |
| MICE (Iterative) | 각 변수를 다른 변수의 함수로 반복 대체 | 변수 간 관계 반영 | 수렴 불확실, 느림 |
| Model-based | 결측을 예측 문제로 접근 (RF, 회귀) | 비선형 관계 포착 | 구현 복잡 |
트리 모델의 내장 처리
섹션 제목: “트리 모델의 내장 처리”XGBoost, LightGBM은 결측값을 직접 처리한다. 학습 중 결측이 있는 샘플을 왼쪽 또는 오른쪽 분기 중 최적 방향으로 보낸다.
3. 삭제 전략
섹션 제목: “3. 삭제 전략”행 삭제 (Listwise Deletion):
- 결측이 있는 행을 제거
- MCAR에서만 편향 없음
- 데이터가 충분하고 결측 비율이 낮을 때만 적합
열 삭제:
- 결측 비율이 매우 높은 특성 제거 (보통 80% 이상)
- 남은 정보가 충분한지 확인
결측 지표 (Missingness Indicator):
- 결측 여부 자체를 이진 특성(0/1)으로 추가
- “이 값이 결측이라는 사실” 자체가 예측에 유용할 수 있음
숫자로 이해하기
섹션 제목: “숫자로 이해하기”타이타닉 데이터 1,000행에서 세 열의 결측률이 이렇다고 하자.
열 결측률 온전한 비율 나이 20% 0.80 객실 번호 77% 0.23 승선항 0.2% 0.998 세 열이 모두 온전한 행만 남기면(listwise deletion) 몇 행이 남을까? (결측이 서로 독립이라 가정)
1,000행 중 약 184행만 남는다. 81.6%를 버린 것이다.
그런데 결측률 77%짜리 “객실 번호” 열을 통째로 버리면:
교훈: 결측이 심한 열 하나 때문에 행 전체를 버리는 일이 흔하다. 행을 지울지 열을 지울지부터 따져야 한다.
상세 내용
섹션 제목: “상세 내용”결측 처리 워크플로우
섹션 제목: “결측 처리 워크플로우”MICE (Multiple Imputation by Chained Equations) 상세
섹션 제목: “MICE (Multiple Imputation by Chained Equations) 상세”- 각 결측 변수에 초기값(예: 평균) 대입
- 변수 의 결측을 나머지 변수로 예측 (회귀)
- 변수 의 결측을 나머지 변수로 예측 (업데이트된 포함)
- 모든 변수에 대해 반복
- 수렴할 때까지 2~4 반복
핵심: 변수 간의 상관관계를 보존하면서 결측을 대체한다.
언제 사용하는가
섹션 제목: “언제 사용하는가”| 상황 | 추천 전략 |
|---|---|
| 결측 < 5%, MCAR | 단순 대체 또는 삭제 |
| 결측 5~30%, 변수 간 관계 중요 | MICE, KNN Imputation |
| 트리 모델 사용 | 내장 처리 + 결측 지표 |
| MNAR 의심 | 도메인 전문가 상담, 결측 지표 필수 |
| 결측 자체가 정보 | 결측 지표 특성 추가 |
실전 사례
섹션 제목: “실전 사례”Titanic 데이터셋: 결측 처리가 생존 예측을 바꾸다
섹션 제목: “Titanic 데이터셋: 결측 처리가 생존 예측을 바꾸다”Kaggle의 대표적 입문 데이터셋인 Titanic 생존 예측에서, Age(나이) 변수의 결측 비율은 약 20%에 달한다. 이 결측을 어떻게 처리하느냐에 따라 예측 정확도가 최대 10%p까지 변동한 사례가 보고되었다:
- 단순 평균 대체: 전체 평균 나이(약 29.7세)로 대체하면, 어린이(생존율 높음)와 노인(생존율 낮음)의 구분이 무너져 정확도가 하락했다
- Listwise deletion: 결측 행을 삭제하면 학습 데이터의 20%가 손실되어, 남은 데이터에 과적합(overfitting)되고 3등석 승객이 과소 대표되는 편향까지 발생했다
- 그룹별 중앙값 대체: 성별(Sex)과 객실 등급(Pclass)별 나이 중앙값으로 대체하면, “1등석 여성”과 “3등석 남성”의 나이 분포 차이를 반영하여 정확도가 유의미하게 개선되었다
- MICE 적용: 다른 변수(요금, 동반 가족 수 등)를 활용한 반복 대체로 가장 높은 정확도를 달성했다
이 사례는 결측 메커니즘을 이해하지 않은 단순 처리가 모델 성능에 심각한 영향을 미칠 수 있음을 보여준다. Titanic의 Age 결측은 MAR에 가까웠다 — 3등석 승객의 나이 기록이 더 자주 누락되었기 때문이다.
직접 해보기
섹션 제목: “직접 해보기”import numpy as nprng = np.random.default_rng(0)n = 1000age = np.where(rng.random(n) < 0.20, np.nan, rng.normal(30, 12, n))cabin = np.where(rng.random(n) < 0.77, np.nan, rng.random(n))embark = np.where(rng.random(n) < 0.002, np.nan, rng.random(n))X = np.c_[age, cabin, embark]complete = (~np.isnan(X)).all(axis=1).sum()print(f"세 열 모두 온전한 행: {complete} / {n} ({complete/n:.1%})")X2 = np.c_[age, embark] # 결측 심한 cabin 열을 통째로 제거complete2 = (~np.isnan(X2)).all(axis=1).sum()print(f"cabin 열 제거 후 : {complete2} / {n} ({complete2/n:.1%})")print("\n행을 지울지 열을 지울지부터 정해야 한다")
# 실행 결과:# 세 열 모두 온전한 행: 186 / 1000 (18.6%)# cabin 열 제거 후 : 802 / 1000 (80.2%)세 열을 모두 요구하면 18.6%만 살아남는다. 그런데 결측률 77%짜리 열 하나를 통째로 버리면 80.2%가 남는다. 행을 지울지 열을 지울지의 판단이 데이터 양을 4배 이상 바꾼다.
흔한 오해와 함정
섹션 제목: “흔한 오해와 함정”-
Listwise deletion의 남용: 결측 비율이 높을 때 행을 무작정 삭제하면 데이터의 대량 손실과 편향이 발생한다. MAR/MNAR에서는 특히 위험하다.
-
평균 대체가 무해하다: 평균 대체는 분포의 분산을 축소하고, 변수 간 상관관계를 왜곡한다. 결측 비율이 높을수록 문제가 심각해진다.
-
결측 처리를 전체 데이터에서 수행: 대체 값(평균, KNN 등)을 전체 데이터에서 계산하면 데이터 누수가 발생한다. 학습 데이터에서만 계산해야 한다.
-
MCAR을 가정: 대부분의 실제 데이터에서 결측은 MCAR이 아니다. 결측 메커니즘을 검증하지 않으면 잘못된 처리가 편향된 결과를 초래한다.
-
결측의 정보적 가치 무시: “이 환자가 검사를 받지 않았다”는 사실 자체가 건강 상태에 대한 정보일 수 있다. 결측 지표 특성의 추가를 항상 고려하라.
스스로 점검하기
섹션 제목: “스스로 점검하기”1. MCAR, MAR, MNAR 중 가장 다루기 어려운 것은?
정답 보기
MNAR이다. 결측 여부가 관측되지 않은 값 자체에 달려 있어(고소득자가 소득을 안 밝히는 등), 데이터만으로는 보정할 수 없고 도메인 지식이나 추가 정보가 필요하다.
2. 결측 자체가 정보일 수 있다는 것은 무슨 뜻인가?
정답 보기
“값이 없다”는 사실이 의미를 담고 있을 수 있다. 예를 들어 신용 조회 기록이 없는 것은 금융 이력이 없다는 신호다. 그래서 결측 여부를 별도 이진 특성으로 남기는 것이 유용할 때가 많다.
3. 평균 대체의 가장 큰 부작용은?
정답 보기
분산을 인위적으로 줄이고 변수 간 상관관계를 왜곡한다. 모든 결측을 같은 값으로 채우니 데이터가 실제보다 균질해 보인다.
다른 주제와의 연결
섹션 제목: “다른 주제와의 연결”- 특성 공학: 결측 처리는 특성 공학의 첫 단계
- 데이터 누수: 결측 대체 시 학습/테스트 분리 필수
- ML 파이프라인 설계: 결측 처리를 파이프라인에 통합
- 흔한 실수: 부적절한 결측 처리
- 불균형 데이터: 결측과 불균형이 동시에 존재하는 경우