데이터 분석을 하다 보면 피할 수 없는 문제가 하나 있습니다. 바로 결측값(Missing Values)입니다. 모델 학습 전에 데이터를 어떻게 정제하느냐가 결과에 큰 영향을 미치는데, 그중에서도 결측값 처리는 그 시작점이자 핵심 중 하나입니다.
이번 포스트에서는 결측값의 유형인 MCAR, MAR, MNAR의 개념을 쉽게 설명하고, 각각에 맞는 실무 적용 전략까지 정리해보고자 합니다.
왜 결측값 처리가 중요한가요?
결측값은 단순한 빈칸이 아닙니다. 이를 무시하거나 잘못 처리하면 모델의 성능이 떨어지고, 인사이트가 왜곡될 수 있습니다. 예를 들어 고객 이탈 예측 모델을 만든다고 할 때, 일부 고객의 나이 정보가 빠져 있다고 가정해봅시다. 이 나이가 단순 실수로 누락됐는지, 아니면 특정 나이대에서만 빠진 건지에 따라 처리 방법은 완전히 달라집니다.

결측값 유형: MCAR, MAR, MNAR 차이 쉽게 이해하기
1. MCAR (Missing Completely at Random)
말 그대로 완전히 랜덤하게 결측된 경우입니다. 다시 말해, 결측이 발생한 이유가 어떤 변수와도 관련이 없는 경우입니다.
예: 설문지 작성 중 일부 사람이 마지막 질문을 그냥 실수로 안 했을 때
처리 전략:
- 단순 삭제 (listwise deletion)
- 평균, 중앙값 등 단순 대체(imputation)
주의할 점: 실제로 MCAR인 경우는 드뭅니다.
2. MAR (Missing At Random)
다른 관측된 변수와는 관련 있지만, 결측된 변수 자체와는 관련이 없는 경우입니다.
쉽게 말해, 특정 그룹에서만 결측이 생긴 상황이라고 보면 됩니다.
예: 나이 많은 응답자가 수입 관련 질문을 더 많이 생략한 경우
처리 전략:
- 다중 대체(Multiple Imputation)
- 예측 기반 대체(예: 회귀모델, k-NN)
- 그룹 간의 불균형이 생길 수 있기 때문에 단순 삭제는 위험
포인트: 관측된 다른 변수로부터 결측 패턴을 예측할 수 있는 경우에 해당합니다.
3. MNAR (Missing Not At Random)
결측이 해당 변수 자체와 관련되어 발생하는 경우입니다. 가장 까다로운 상황이며, 결측 패턴이 데이터에 의존하고 있는 경우입니다.
예: 소득이 매우 낮거나 높은 사람들이 소득을 숨기는 경우
처리 전략:
- 모델링에 포함하여 누락 자체를 변수로 사용
- 센서스 데이터를 통한 보완
- 전문가 지식 기반 대체
- 임의로 대체하는 방식은 오히려 편향을 키울 수 있음
포인트: MNAR은 처리하기 가장 어렵습니다. 데이터 자체를 바꾸기보다는, 누락을 의미로 받아들이는 전략이 더 적절한 경우도 많아요.

실무에서 자주 쓰는 결측값 처리 방법
| 방법 | 설명 | 사용 예시 |
|---|---|---|
| 삭제 (Listwise/Pairwise) | 결측값 포함 행/열 제거 | MCAR 데이터 |
| 평균/중앙값 대체 | 수치형 변수에 많이 사용 | 성능이 낮은 모델이나 탐색 단계 |
| 예측모델 기반 대체 | 회귀모델, KNN 등으로 대체 | MAR 데이터에서 효과적 |
| 다중 대체 (MICE 등) | 다양한 값을 샘플링하여 불확실성 반영 | 통계 분석에서 신뢰도 높음 |
| 결측 여부를 변수로 추가 | 결측 자체가 의미를 가진다고 판단될 때 | MNAR 가능성이 있는 경우 |
결측값 전략을 선택하는 기준은?
- 데이터의 크기와 품질
- 결측 비율이 높은 변수인지 여부
- 분석 목표가 예측인지 설명인지
- 결측 패턴이 명확히 보이는지
처음부터 “완벽하게 처리해야지”라는 생각보다는, 일단 데이터를 잘 살펴보면서 조금씩 전략을 세워나가는 게 현실적입니다.
결측값도 중요한 ‘데이터’입니다
결측값을 제거해야 할 ‘문제’라고만 보지 말고, 그 안에 숨겨진 패턴과 의미를 들여다보세요. 오히려 그 정보가 예측력을 높이는 힌트가 될 수 있습니다. 요즘은 MICE, KNNImputer, Deep Learning 기반 Imputer 등 다양한 도구도 많아졌으니, 실무 상황에 따라 유연하게 대응하면 됩니다.
참고하면 좋은 도구들
- Scikit-learn의 Imputer 모듈
- MICE (Multiple Imputation by Chained Equations) in Python
- MissForest (랜덤 포레스트 기반 결측 대체)
- Kaggle Missing Data 핸들링 예제
