데이터 정제
데이터 정제(Data Cleaning)는 결측치, 이상치, 중복 등 데이터 품질 문제를 해결하는 과정입니다. 모델의 성능은 데이터 품질에 직접적으로 의존합니다.학습 목표
- 결측치의 유형을 파악하고 적절한 처리 전략을 선택할 수 있습니다.
- 이상치를 탐지하고 처리하는 방법을 적용할 수 있습니다.
- 중복 데이터를 식별하고 제거할 수 있습니다.
결측치 처리
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer, KNNImputer
df = pd.read_csv("data/sample.csv")
# 결측치 비율 확인
missing = df.isnull().sum()
missing_pct = (missing / len(df) * 100).round(1)
missing_info = pd.DataFrame({
"결측 수": missing,
"비율(%)": missing_pct
}).sort_values("비율(%)", ascending=False)
print(missing_info[missing_info["결측 수"] > 0])
# 전략 1: 행 삭제 (결측이 소수인 경우)
df_dropped = df.dropna(subset=["critical_column"])
# 전략 2: 통계값으로 대체
# 수치형 → 중앙값 (이상치에 강건)
imputer_num = SimpleImputer(strategy="median")
df[num_cols] = imputer_num.fit_transform(df[num_cols])
# 범주형 → 최빈값
imputer_cat = SimpleImputer(strategy="most_frequent")
df[cat_cols] = imputer_cat.fit_transform(df[cat_cols])
# 전략 3: KNN 기반 대체 (변수 간 관계 활용)
knn_imputer = KNNImputer(n_neighbors=5)
df[num_cols] = knn_imputer.fit_transform(df[num_cols])
# 전략 4: 결측 여부를 새 특성으로 추가
df["column_is_missing"] = df["column"].isnull().astype(int)
# 방법 1: IQR (사분위수 범위) 기반
def detect_outliers_iqr(df, column):
"""IQR 방법으로 이상치를 탐지합니다."""
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outliers = df[(df[column] < lower) | (df[column] > upper)]
return outliers, lower, upper
outliers, lower, upper = detect_outliers_iqr(df, "price")
print(f"이상치 수: {len(outliers)}")
print(f"정상 범위: [{lower:.2f}, {upper:.2f}]")
# 방법 2: Z-score 기반
from scipy import stats
z_scores = np.abs(stats.zscore(df[num_cols]))
outlier_mask = (z_scores > 3).any(axis=1)
print(f"Z-score 이상치: {outlier_mask.sum()}건")
# 전략 1: 제거
df_clean = df[~outlier_mask]
# 전략 2: 클리핑 (경계값으로 대체)
df["price"] = df["price"].clip(lower=lower, upper=upper)
# 전략 3: 로그 변환 (왜곡된 분포 정규화)
df["price_log"] = np.log1p(df["price"]) # log(1+x)로 안전하게 변환
Q: 결측치를 항상 채워야 하나요?
Q: 결측치를 항상 채워야 하나요?
아닙니다. 결측 자체가 정보를 담고 있을 수 있습니다. 예를 들어 설문조사에서 소득을 비워둔 경우, “응답 거부”라는 의미가 있을 수 있습니다. 이 경우 결측 여부를 별도 특성으로 추가하는 것이 효과적입니다.
Q: 이상치는 항상 제거해야 하나요?
Q: 이상치는 항상 제거해야 하나요?
아닙니다. 이상치가 측정 오류인지 실제 희귀 패턴인지 먼저 판단해야 합니다. 사기 탐지에서는 이상치가 오히려 탐지 대상입니다. 알고리즘 중 트리 기반 모델은 이상치에 강건하므로 제거하지 않아도 됩니다.
체크리스트
- 결측치의 비율에 따라 적절한 처리 전략을 선택할 수 있다
- IQR 또는 Z-score로 이상치를 탐지할 수 있다
- 데이터 누수를 방지하면서 결측치를 처리할 수 있다
- 중복 데이터를 식별하고 제거할 수 있다

