-
데이터 전처리: Missing Data와 Duplicate DataAI 2026. 1. 23. 09:01
이터 분석과 머신러닝 프로젝트에서 가장 먼저 마주하는 난관은 '지저분한 데이터'입니다. "Garbage In, Garbage Out"이라는 말처럼, 품질 낮은 데이터는 아무리 좋은 알고리즘을 써도 나쁜 결과를 낳습니다. 오늘은 전처리의 핵심인 결측치(Missing Data)와 중복 데이터(Duplicate Data) 처리 원리를 정리해 보겠습니다.

Missing Data
현실의 데이터는 수집 과정에서의 누락, 시스템 오류 등으로 인해 비어 있는 경우가 많습니다. 이를 어떻게 다루느냐에 따라 모델의 성능이 극명하게 갈립니다.
💡 결측치 발생 유형 (참고 지식)
단순히 "비어 있다"를 넘어, 왜 비어 있는지 이해하면 더 정교한 처리가 가능합니다.
- MCAR (완전 무작위 결측): 결측이 발생한 원인이 다른 변수와 아무런 상관이 없는 경우.
- MAR (무작위 결측): 특정 변수와 관련하여 결측이 발생했지만, 변수 자체의 값과는 상관없는 경우.
- MNAR (비무작위 결측): 결측된 값 자체가 결측 원인과 직접 연관된 경우 (예: 고소득자가 소득 질문에 응답하지 않음).
✅ 결측치 확인하기
Pandas에서는 isnull()과 sum()을 조합하여 컬럼별 결측치 개수를 파악합니다.
# 컬럼별 결측치 개수 확인 print(trade.isnull().sum()) # 특정 컬럼(기타사항)에 정보가 아예 없다면 과감히 삭제 trade = trade.drop('기타사항', axis=1)✅ 처리 방법 1: 삭제(Deletion)
결측치가 발생한 행이나 열을 제거하는 방법입니다.
- 언제 사용하나? 데이터 양이 충분하고, 특정 행에 결측치가 너무 많아 정보 가치가 없을 때 사용합니다.
- 주의점: 무작위로 삭제할 경우 데이터의 편향(Bias)이 생길 수 있습니다.
# 특정 컬럼들이 모두 결측치인 행만 삭제 (how='all') trade.dropna(subset=['수출건수', '수출금액', '수입건수', '수입금액', '무역수지'], how='all', inplace=True)✅ 처리 방법 2: 대체(Imputation)
결측치를 적절한 값으로 채워 넣는 방법입니다.
- 대표값 사용: 평균(Mean), 중앙값(Median), 최빈값(Mode). (데이터 분산이 왜곡될 수 있음에 유의)
- 예측 모델 활용: 다른 변수들을 독립변수로 활용해 결측치를 예측하여 채움.
- 시계열 보간(Interpolation): 시계열 데이터라면 앞뒤 데이터의 흐름을 고려해 채움.
실무 Tip: 인덱스 191번처럼 특정 국가의 특정 시점 데이터만 빠졌다면, 해당 국가의 전후 달 데이터를 평균 내어 채우는 것이 논리적입니다.
# 전후 데이터의 평균으로 보완 예시 index_191_value = (trade.loc[188, '수출금액'] + trade.loc[194, '수출금액']) / 2 trade.loc[191, '수출금액'] = index_191_value시계열 데이터(Time-Series)는 왜 특별할까?
- 시계열 데이터란? 시간 순서가 생명인 데이터 (주가, 기온, 로그 데이터 등)
- 특징: 흐름(Trend)과 계절성(Seasonality)이 있음
- 보완 기법: 단순 평균 대신 보간법(Interpolation)이나 앞뒤 값(ffill, bfill) 사용하기
중복 데이터(Duplicate Data) 처리
동일한 정보가 여러 번 기록되면 특정 데이터의 영향력이 과도하게 커져 모델이 왜곡될 수 있습니다.
✅ 중복 확인 및 제거
Pandas의 duplicated()는 중복 여부를 True/False로, drop_duplicates()는 중복을 제거한 결과를 반환합니다.
✅ 중복 제거의 핵심 옵션: keep
중복된 데이터 중 어떤 것을 남길지 결정하는 것이 중요합니다.
- keep='first': 첫 번째 데이터만 남김 (기본값).
- keep='last': 마지막 데이터만 남김.
- keep=False: 중복된 모든 데이터를 삭제.
# id가 중복된 경우, 가장 나중에 들어온(마지막) 데이터만 남기기 df.drop_duplicates(subset=['id'], keep='last', inplace=True)🧐 마치며: 어떤 방법을 선택해야 할까?
결측치와 중복 데이터 처리에 정답은 없습니다. 하지만 아래의 기준을 참고해 보세요.
상황 추천 방법 결측치가 전체의 5% 미만일 때 삭제 고려 수치형 데이터인데 이상치가 많을 때 평균 대신 중앙값으로 대체 시계열 데이터일 때 보간법(Interpolation) 또는 전후 값 활용 범주형 데이터일 때 최빈값 또는 'Unknown'이라는 새로운 범주 생성 'AI' 카테고리의 다른 글
Model과 Gradient Descent (0) 2026.01.25 선택 안됨 데이터 전처리: One-Hot Encoding & Binning (0) 2026.01.23 데이터 전처리: Outlier 탐지와 처리: Z-Score부터 IQR까지 (1) 2026.01.23 데이터 전처리: Normalization (0) 2026.01.23 L1, L2 Regularization (0) 2026.01.21