Captain's Log
← Observatory
Observatory·

데이터 전처리 — 결측값 처리와 얕은/깊은 복사

Kaggle House Prices 데이터로 결측값을 수치형/범주형에 맞게 다르게 채우고, 얕은 복사와 깊은 복사의 차이를 직접 확인하며 전처리 파이프라인을 구성한 기록.

TrainingDataPreprocessing

"모델보다 전처리"

House Prices 데이터셋으로 전처리를 단계별로 연습했다. 학습 목표는 명확했다 — 결측값 탐색·처리, 수치형/범주형별 다른 전략, 복사의 이해, 이상치 제거, 전/후 비교.

결측값을 다르게 채우기

먼저 결측 현황을 파악한다.

df.isnull().sum().sort_values(ascending=False)
  • 결측 개수비율(%) 을 계산해 상위 컬럼을 barh 로 시각화
  • 수치형 (LotFrontage): 평균 vs 중앙값을 비교하고 중앙값으로 채움 (이상치에 덜 민감)
  • 범주형 (GarageType): 결측이 '차고 없음'을 뜻할 수 있으니 'None' 문자열로 채움

같은 결측이라도 컬럼의 의미에 따라 처리가 달라진다는 게 핵심이었다.

얕은 복사 vs 깊은 복사

가장 헷갈렸지만 중요한 개념.

  • 얕은 복사(shallow): 겉만 복사, 내부는 원본과 연결 → 한쪽을 바꾸면 다른 쪽도 바뀔 수 있음
  • 깊은 복사(deep, df.copy()): 완전히 독립된 사본

전처리 중 원본을 실수로 오염시키지 않으려면, "지금 내가 다루는 게 사본인가 원본인가"를 늘 의식해야 한다는 걸 배웠다.

이상치 제거 (IQR)

Q1, Q3, IQR = Q3 - Q1 을 구하고 Q1 - 1.5*IQR ~ Q3 + 1.5*IQR 범위를 벗어나는 값을 이상치로 판단해 처리했다.

정리

전처리는 "데이터를 깨끗하게 만드는 일"이 아니라 "의미에 맞게 판단하는 일" 이었다. 왜 중앙값인지, 왜 'None'인지, 왜 이 행을 지우는지 — 각 결정에 이유를 붙이는 연습이 됐다.