결측값 대체(Imputation)란? AI 데이터의 빈칸을 다루는 방법
TL;DR
결측값 대체(Imputation)는 데이터에서 빠진 값을 그대로 두거나 행을 버리는 대신, 정해진 규칙으로 받아들일 수 있는 대체값을 넣는 전처리 방법입니다. 숫자는 평균이나 중앙값, 범주는 가장 자주 나온 값이나 별도 범주로 채울 수 있고, 주변 데이터나 다른 특성을 이용해 추정하기도 합니다. 하지만 채운 값은 관측된 사실이 아니라 계산한 추정값입니다. 대체 규칙은 훈련 데이터에서만 정하고, 어떤 값이 원래 비어 있었는지 기록하며, 삭제했을 때와 비교해 모델 품질과 편향을 확인해야 합니다.
핵심 3줄 요약
- 핵심 1
결측값 대체는 빈칸에 그럴듯한 값을 넣어 데이터를 사용할 수 있게 만드는 과정입니다. 평균·중앙값·최빈값·고정값·이웃 기반 추정처럼 여러 방법이 있습니다. - 핵심 2
빈칸, 0, 알 수 없음은 같은 뜻이 아닙니다. 먼저 값이 왜 빠졌는지와 각 열의 의미를 확인해야 대체값이 실제 의미를 왜곡하지 않습니다. - 핵심 3
대체값은 훈련 데이터로만 계산해야 합니다. 전체 데이터의 평균을 미리 쓰면 검증·테스트 정보가 학습 과정에 섞이는 데이터 누수가 생길 수 있습니다.
이 글에서 다룰 내용
- 결측값 대체의 한 문장 정의
- 배송 시간 데이터로 이해하는 쉬운 예시
- 평균·중앙값·최빈값·이웃 기반 대체 방법
- 삭제, 보간, 데이터 증강과의 차이
- AI 제품과 개발에서 쓰는 방법
- 데이터 누수, 편향, 기록 관리 주의점
결측값 대체를 한 문장으로 정의하면 무엇인가요?
한 문장 정의: 결측값 대체는 데이터에서 관측되지 않거나 빠진 값을 평균, 중앙값, 최빈값, 고정값 또는 다른 데이터로 추정한 값으로 바꾸는 전처리 과정입니다.
Google Machine Learning Glossary는 값 대체(Value Imputation)를 빠진 값을 받아들일 수 있는 대체값으로 바꾸는 과정이라고 정의합니다. 값이 없을 때 해당 행을 버릴 수도 있지만, 대체값을 넣으면 불완전한 행을 남겨 활용할 수 있습니다.
여기서 가장 중요한 단어는 추정입니다. 대체값은 원래 존재했던 값을 복원한 사실이 아닙니다. 관측된 데이터와 업무 규칙을 이용해 분석이나 모델 학습이 가능하도록 만든 값입니다. 따라서 실제 값과 대체값을 구분할 수 있어야 합니다.
결측값은 빈 셀, NULL, NaN, 특정 기호처럼 여러 형태로 저장됩니다. 반면 0은 실제 측정값일 수 있습니다. 매출 0원과 매출 미집계는 전혀 다른 상태이므로, 숫자 0을 일괄적으로 결측값으로 처리하면 안 됩니다.
한 줄 정리: 결측값 대체는 빈칸을 숨기는 작업이 아니라, 왜 비었는지 확인한 뒤 검증 가능한 규칙으로 추정값을 넣는 작업입니다.
왜 AI를 사용할 때 중요한가요?
첫째, 현실의 데이터에는 빈칸이 자주 생깁니다. 센서가 잠시 멈추고, 설문 응답자가 문항을 건너뛰고, 시스템 연결이 늦어지고, 수집 규칙이 바뀌면 일부 값이 빠질 수 있습니다. 이런 행을 모두 삭제하면 쓸 수 있는 데이터가 크게 줄어듭니다.
둘째, 많은 분석 도구와 머신러닝 모델은 결측값을 그대로 처리하지 못합니다. scikit-learn 문서는 실제 데이터가 빈칸이나 NaN 같은 표시를 포함할 수 있으며, 이를 지원하지 않는 추정기에 넣기 전에 행을 버리거나 값을 대체해야 한다고 설명합니다.
셋째, 대체 방식이 모델 결과를 바꿀 수 있습니다. 평균으로 채우면 값이 가운데로 몰릴 수 있고, 최빈값으로 채우면 이미 많은 범주가 더 커질 수 있습니다. 결측이 특정 고객군이나 지역에 집중돼 있다면 단순 대체가 집단별 차이를 감출 수도 있습니다.
넷째, 챗GPT나 데이터 분석 AI에 파일을 맡길 때도 같은 원칙이 필요합니다. AI가 빈칸을 자동으로 제외했는지, 0으로 바꿨는지, 평균으로 채웠는지 모르면 요약 수치와 차트를 믿기 어렵습니다. 분석 전에 결측값 개수와 처리 규칙을 먼저 요청해야 합니다.
다섯째, 재현 가능한 자동화를 만들 수 있습니다. 사람이 스프레드시트의 빈칸을 눈대중으로 채우면 다음 실행에서 같은 결과를 만들기 어렵습니다. 대체 규칙을 데이터 파이프라인에 넣고 버전과 기준을 기록하면 반복 작업을 점검하기 쉬워집니다.
핵심 인사이트: 결측값을 어떻게 채웠는지는 사소한 정리 과정이 아니라 모델과 보고서의 결론을 바꾸는 분석 가정입니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 쇼핑몰 배송 시간을 예측하는 AI를 만든다고 가정해 보겠습니다. 데이터에는 주문 금액, 상품 수, 배송 거리, 실제 배송 시간이 들어 있습니다. 그런데 일부 주문은 배송 거리 값이 비어 있습니다.
가장 단순한 방법은 배송 거리가 없는 행을 모두 지우는 것입니다. 하지만 특정 택배사나 일부 지역에서만 거리 수집이 누락됐다면, 행을 지우는 순간 그 지역의 사례가 데이터에서 과도하게 사라질 수 있습니다.
두 번째 방법은 관측된 배송 거리의 평균을 빈칸에 넣는 것입니다. 계산은 쉽지만 매우 먼 지역이 섞여 있으면 평균이 크게 흔들릴 수 있습니다. 이때는 중앙값이 더 안정적인 후보가 될 수 있습니다.
세 번째 방법은 주문 지역, 물류센터, 우편번호처럼 관련 있는 다른 특성을 이용해 거리를 추정하는 것입니다. 더 정교해 보이지만 잘못된 관계를 학습할 수 있으므로 별도의 검증이 필요합니다.
어떤 방식을 쓰든 distance_was_missing 같은 표시 열을 함께 두면 원래 값이 비어 있었는지 모델과 검토자가 알 수 있습니다. scikit-learn도 결측 여부를 이진 표시로 보존하는 MissingIndicator를 제공합니다.
쉬운 비유: 결측값 대체는 출석부의 빈칸을 지우는 일이 아니라, “결석”, “미확인”, “기록 오류”를 구분하고 필요한 경우에만 임시 값을 적는 일과 비슷합니다.
결측값은 어떤 순서로 대체하나요?
1. 결측값의 표시와 원인을 확인합니다
빈 셀, NULL, NaN, -1, 미입력 가운데 무엇이 결측을 뜻하는지 데이터 사전과 수집 시스템에서 확인합니다. 0이나 빈 문자열이 실제 값인지도 열별로 구분합니다.
2. 삭제와 대체를 먼저 비교합니다
결측 행이 매우 적고 무작위로 빠졌다면 삭제가 간단할 수 있습니다. 반대로 삭제 때문에 특정 기간, 지역, 고객군이 사라지거나 데이터가 크게 줄어든다면 대체를 검토합니다.
3. 열의 성격에 맞는 방법을 고릅니다
숫자형 데이터에는 평균이나 중앙값을 자주 씁니다. 범주형 데이터에는 최빈값이나 알 수 없음 같은 별도 범주를 사용할 수 있습니다. scikit-learn의 SimpleImputer는 평균, 중앙값, 최빈값, 고정값 방식 등을 지원합니다.
4. 복잡한 관계가 필요하면 다른 특성을 함께 봅니다
KNNImputer는 가까운 사례의 값을 이용하고, 다변량 방식은 다른 특성과의 관계를 사용해 빈 값을 추정합니다. 복잡한 방법이 항상 더 정확한 것은 아니므로 단순한 기준선과 비교해야 합니다.
5. 훈련 데이터에서 규칙을 학습합니다
평균, 중앙값, 최빈값 같은 통계는 훈련 세트에서만 계산합니다. 검증·테스트 세트에는 훈련에서 정한 같은 값을 적용합니다. 전체 데이터로 값을 계산한 뒤 나누면 미래 정보를 미리 본 것과 같은 데이터 누수가 생길 수 있습니다.
6. 결측 표시와 평가 결과를 남깁니다
원래 결측이었던 위치를 별도 열로 표시하고, 대체 전후의 분포와 모델 성능을 비교합니다. 결측이 많은 열, 완전히 비어 있는 열, 집단별 결측률도 함께 기록합니다.
실전 팁: 먼저 중앙값이나 최빈값처럼 설명하기 쉬운 기준선을 만들고, 더 복잡한 대체 방식이 실제 검증 성능과 집단별 결과를 개선하는지 확인하세요.
비슷한 용어와 무엇이 다른가요?
결측값과 0의 차이
결측값은 관측되지 않았거나 저장되지 않은 상태입니다. 0은 관측 결과가 실제로 0일 수 있습니다. 광고 클릭 0회와 클릭 수 미집계는 분석 의미가 다르므로 같은 값으로 처리하면 안 됩니다.
결측값 대체와 삭제의 차이
삭제는 결측이 포함된 행이나 열을 데이터에서 제거합니다. 대체는 행을 남겨 두고 빈 값에 추정값을 넣습니다. 삭제는 단순하지만 정보 손실과 표본 편향이 생길 수 있고, 대체는 데이터를 보존하지만 추정 오차를 가져옵니다.
결측값 대체와 보간의 차이
보간(Interpolation)은 시간이나 위치처럼 순서가 있는 데이터에서 앞뒤 값을 이용해 사이 값을 추정하는 방식입니다. 결측값 대체는 평균, 최빈값, 이웃, 다변량 모델 등 더 넓은 방법을 포함합니다. 시간 간격이 불규칙하거나 급격히 변하는 데이터에는 단순 선형 보간이 맞지 않을 수 있습니다.
결측값 대체와 데이터 증강의 차이
결측값 대체는 기존 행의 빈 값을 채웁니다. 데이터 증강은 기존 데이터를 변형하거나 새 학습 사례를 만들어 데이터의 다양성을 늘립니다. 목적과 결과물이 다르므로 같은 전처리로 보면 안 됩니다.
결측값 대체와 합성 데이터의 차이
합성 데이터는 실제 데이터의 특성을 참고해 새로운 행이나 전체 데이터셋을 만들 수 있습니다. 결측값 대체는 원래 있던 행 안의 빠진 값을 채우는 데 초점을 둡니다. 둘 다 생성된 값을 포함하지만 사용 범위와 검증 기준이 다릅니다.
비교 정리: 삭제는 빈 행을 버리고, 대체는 빈 값을 채우며, 보간은 순서가 있는 값 사이를 추정하고, 데이터 증강과 합성 데이터는 새로운 사례를 만듭니다.
AI 제품과 개발에서는 어디에 쓰이나요?
스프레드시트와 CSV 분석
챗GPT나 다른 분석 도구에 파일을 넣기 전에 열별 결측 개수, 비율, 표시 방식을 확인합니다. 분석 결과에는 제외한 행 수와 대체 방법을 함께 적어야 숫자의 기준을 다시 검토할 수 있습니다.
전통적인 머신러닝 파이프라인
전처리와 모델을 하나의 파이프라인으로 묶어 훈련 세트에서 대체 규칙을 학습하고, 검증·테스트·실서비스 입력에 같은 규칙을 적용합니다. 교차 검증을 할 때도 각 훈련 폴드 안에서 대체값을 다시 계산해야 합니다.
자동화된 머신러닝 제품
일부 제품은 결측값을 자동으로 처리합니다. 예를 들어 BigQuery ML 공식 문서는 훈련과 예측에서 열의 데이터 유형에 따라 NULL 값을 다른 방식으로 대체한다고 설명합니다. 자동 처리 여부와 규칙은 제품 문서에서 확인해야 합니다.
운영 데이터 품질 점검
결측률이 갑자기 높아지면 데이터 수집기, API 연결, 센서, 입력 화면에 문제가 생겼다는 신호일 수 있습니다. 값을 자동으로 채우기 전에 결측률 자체를 모니터링하면 장애를 더 일찍 발견할 수 있습니다.
사람이 검토하는 고위험 업무
의료, 채용, 금융, 보험처럼 사람에게 큰 영향을 주는 업무에서는 대체 방식이 집단별 결과를 어떻게 바꾸는지 따로 평가합니다. 규정과 업무 기준에 따라 결측이 있는 사례를 자동 결정에서 제외하고 사람에게 보내야 할 수도 있습니다.
한 줄 정리: 좋은 결측값 처리는 빈칸을 없애는 데서 끝나지 않고, 원인 확인·규칙 기록·누수 방지·성능 검증까지 이어집니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 대체값을 실제 관측값처럼 다루지 않습니다. 대체는 합리적인 추정일 뿐 원래 값을 복구했다는 뜻이 아닙니다. 원본 데이터와 대체된 데이터를 구분할 수 있게 표시합니다.
둘째, 결측 원인을 무시하지 않습니다. 특정 지역에서만 센서가 끊기거나 특정 소득대가 설문 응답을 피했다면 결측은 무작위가 아닐 수 있습니다. 전체 평균으로 채우면 그 차이를 숨길 수 있습니다.
셋째, 전체 데이터로 대체값을 미리 계산하지 않습니다. 훈련·검증·테스트를 나눈 뒤 훈련 데이터에서만 통계를 계산합니다. 교차 검증에서는 각 폴드 안에서 같은 원칙을 지킵니다.
넷째, 0이나 빈 문자열을 무조건 결측으로 바꾸지 않습니다. 데이터 사전과 수집 규칙을 확인해 실제 0, 미입력, 해당 없음, 측정 실패를 구분합니다.
다섯째, 복잡한 방법이 항상 낫다고 생각하지 않습니다. 이웃이나 다변량 모델로 만든 추정값은 설명하기 어렵고 새로운 오류를 만들 수 있습니다. 평균·중앙값·삭제 같은 단순 기준선과 비교합니다.
여섯째, 결측률과 집단별 분포를 함께 봅니다. 전체 결측률이 낮아도 특정 기간이나 집단에 집중될 수 있습니다. 대체 전후의 성능과 오류를 집단별로 점검합니다.
일곱째, 자동 처리 기능의 세부 규칙을 확인합니다. 제품마다 숫자, 범주, 완전히 빈 열, 처음 보는 값의 처리 방식이 다릅니다. 기본값을 모른 채 같은 결과가 재현될 것이라고 가정하지 않습니다.
주의: 결측값 대체는 데이터 품질 문제를 지우는 기술이 아닙니다. 빠진 값의 원인과 불확실성을 기록한 채 분석 가능성을 높이는 방법입니다.
자주 묻는 질문
Q1. 결측값은 모두 평균으로 채우면 되나요?
아닙니다. 평균은 극단값의 영향을 받고 범주형 데이터에는 맞지 않습니다. 숫자의 분포, 결측 원인, 업무 의미를 보고 중앙값·최빈값·고정값·삭제·다른 추정 방법과 비교해야 합니다.
Q2. 결측값과 NULL, NaN은 같은 말인가요?
결측값은 값이 빠진 상태를 뜻하는 개념입니다. NULL과 NaN은 시스템이나 데이터 형식에서 그 상태를 나타내는 표기일 수 있습니다. 제품마다 빈 문자열이나 특정 숫자를 결측 표시로 쓰기도 하므로 데이터 사전을 확인해야 합니다.
Q3. 결측값을 채우기 전에 데이터를 나눠야 하나요?
네. 모델 평가가 목적이라면 먼저 훈련·검증·테스트 세트를 나누고, 대체 규칙은 훈련 데이터에서만 계산합니다. 그래야 평가용 정보가 학습 과정에 들어가는 데이터 누수를 막을 수 있습니다.
Q4. 결측값을 채운 사실을 모델에 알려야 하나요?
항상 필요한 것은 아니지만 도움이 될 수 있습니다. 결측 여부 자체가 의미 있는 신호라면 별도 표시 열을 추가하고, 표시가 없는 방식과 성능·편향을 비교합니다.
Q5. 챗GPT로 결측값을 자동 대체해도 되나요?
가능하지만 원본을 보존하고 규칙을 먼저 명시해야 합니다. 열별 결측 개수, 사용할 방법, 제외 조건, 대체 전후 요약을 요청하고 계산 결과를 원본 데이터나 재현 가능한 코드로 확인하세요. 고위험 의사결정에는 사람의 검토가 필요합니다.
출처
마무리
결측값 대체는 데이터에서 빠진 값을 받아들일 수 있는 추정값으로 채워 분석과 모델 학습을 이어 가는 전처리 방법입니다. 평균이나 중앙값처럼 단순한 방식부터 이웃과 다른 특성을 이용하는 방법까지 선택지는 다양합니다.
감자나라ai님이 AI로 표나 CSV를 다룰 때는 “빈칸을 어떻게 채울까”보다 “왜 비었고, 어떤 규칙으로 채웠으며, 결과가 얼마나 달라졌나”를 먼저 확인하세요. 이 세 가지를 기록하면 데이터의 불확실성을 숨기지 않으면서도 반복 가능한 분석 흐름을 만들 수 있습니다.
