Skip to main content
결측치 대체는 한 가지 정답이 아니라 데이터 타입 + 결측 패턴 + 모델 특성의 조합으로 결정합니다. 이 문서는 실무에서 바로 적용할 수 있는 선택 기준을 제공합니다.

선택 프레임

조건우선 전략보조 전략
수치형 + 이상치 많음중앙값 대체그룹 중앙값 대체
범주형 + 클래스 불균형최빈값 대체Unknown 신설
시계열 + 연속 신호ffill/bfill선형 보간
모델이 결측 자체 처리 가능(XGBoost 등)원본 결측 유지결측 플래그 추가

컬럼별 대체 예시

num_cols = ["age", "income"]
cat_cols = ["city", "job"]

for c in num_cols:
    df[c] = df[c].fillna(df[c].median())

for c in cat_cols:
    df[c] = df[c].fillna("Unknown")

# 결측 플래그 피처
for c in ["income", "job"]:
    df[f"{c}_is_missing"] = df[c].isna().astype(int)

그룹별 대체

df["income"] = (
    df.groupby(["region", "segment"])["income"]
      .transform(lambda s: s.fillna(s.median()))
)
그룹별 분포 차이가 큰 데이터(권역, 상품군, 사용자 등급)에서 안정적으로 동작합니다.

검증 포인트

  • 대체 전/후 평균, 분산, 분위수 변화를 비교합니다.
  • 모델 성능뿐 아니라 캘리브레이션/에러 분포도 함께 확인합니다.
  • 운영 로그에서 결측률이 급변하는지 모니터링합니다.

이어서 볼 문서