결측치 처리
결측치(Missing Value)는 실무 데이터에서 피할 수 없는 문제입니다. 센서 오류, 사용자 미입력, 시스템 장애 등 다양한 이유로 발생하며, 대부분의 ML 모델은 결측치를 처리하지 못합니다. 올바른 결측치 처리는 모델 성능에 직접적인 영향을 미칩니다.학습 목표
- 결측치를 탐지하고 패턴을 파악할 수 있다
- 삭제 전략(dropna)의 기준을 설정할 수 있다
- 대체 전략(fillna)을 상황에 맞게 선택할 수 있다
- 결측치 처리가 분석 결과에 미치는 영향을 이해한다
왜 중요한가
결측치를 무시하면 통계량이 왜곡되고, 시각화가 불완전하며, 모델 학습이 실패할 수 있습니다. 반대로 잘못된 대체 값을 사용하면 데이터 분포가 변형되어 모델 성능이 저하됩니다. 결측치의 유형(MCAR, MAR, MNAR)을 파악하고 적절한 전략을 선택하는 것이 중요합니다.결측치 탐지
삭제 전략 (dropna)
대체 전략 (fillna)
| 방법 | 적합한 상황 | 장점 | 단점 |
|---|---|---|---|
| 평균 대체 | 정규분포 수치형 | 단순, 빠름 | 분산 축소, 이상치 영향 |
| 중앙값 대체 | 편향된 수치형 | 이상치에 강건 | 분산 축소 |
| 최빈값 대체 | 범주형 | 단순 | 빈도 편향 강화 |
| 전후 값 대체 | 시계열 | 연속성 유지 | 비시계열에 부적합 |
| 그룹별 대체 | 그룹 패턴 있을 때 | 정확도 높음 | 구현 복잡 |
AI/ML에서의 활용
- 전처리 파이프라인: sklearn의
SimpleImputer로 결측치 처리를 자동화합니다 - 피처 생성: 결측 여부 자체를
is_missing피처로 활용할 수 있습니다 - 데이터 품질 보고: 결측치 비율로 데이터 신뢰도를 평가합니다
- 고급 대체: KNN Imputer, IterativeImputer는 전처리 섹션에서 다룹니다
NaN과 None의 차이는 무엇인가요?
NaN과 None의 차이는 무엇인가요?
np.nan은 float 타입의 결측치이고, None은 Python 객체입니다. Pandas에서는 둘 다 결측치로 인식하지만, 수치형 열에서는 np.nan, 문자열/객체 열에서는 None이 자연스럽습니다. Pandas 2.0+에서는 pd.NA가 모든 타입의 범용 결측치로 도입되었습니다.결측치를 무시하는 것이 나을 때도 있나요?
결측치를 무시하는 것이 나을 때도 있나요?
일부 모델(XGBoost, LightGBM)은 결측치를 자체적으로 처리할 수 있습니다. 이 경우 무리한 대체보다 결측치를 그대로 두는 것이 더 나은 성능을 보이기도 합니다.
체크리스트
- isna().sum()으로 열별 결측치를 파악할 수 있다
- dropna의 how, subset, thresh 파라미터를 활용할 수 있다
- 수치형에는 평균/중앙값, 범주형에는 최빈값 대체를 적용할 수 있다
- 시계열 데이터에 ffill/bfill/interpolate를 사용할 수 있다
- 그룹별 대체를 수행할 수 있다

