Skip to main content

결측치 대체의 방법

대체의 방법

  • 평균/중앙값 또는 최빈값으로 대체
    • 장점: 간단하고 빠름
    • 단점: 데이터 변동성 감소, 편향 발생 가능
  • 예측 대체
    • 회귀 모형이나 KNN을 사용하여 결측치를 예측하여 대체
    • 장점: 보다 정확한 대체
    • 단점: 데이터 변동성 감소
  • 다중 대체 (Multiple Imputation)
    • 결측치를 여러 번 대체하고, 여러 대체 결과를 결합하여 불확실성을 반영
    • 장점: 불확실성 반영, 보다 정확한 대체.
    • 단점: 복잡도 증가, 계산 비용 증가.

채우기

  • 결측치를 0으로 채우기
dm.fillna(0)
  • 'mileage' 컬럼의 결측치만 0으로 채우기
dm['mileage'].fillna(0)
  • 앞/뒤 값으로 채우기: 시계열 데이터(주식, 날씨 등)에서 유용
dm.fillna(method='ffill') # 바로 앞의 유효한 값으로 채움
dm.fillna(method='bfill') # 바로 뒤의 유효한 값으로 채움

평균으로 대체

  • 평균으로 대체
m = dm['mileage'].mean()
impute_mean = dm['mileage'].fillna(m)
impute_mean.mean()
impute_mean.std()
  • 분포 시각화
sns.kdeplot(df['mileage'], label='original')
sns.kdeplot(impute_mean, label='mean')
plt.legend()

예측 대체

  • 2개의 유사사례로 예측 (KNN, K=2)
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=2, weights="uniform")
X = imputer.fit_transform(dm[['mileage', 'price', 'year']])
impute_knn = X[:, 0]
impute_knn.mean()
impute_knn.std()
  • 분포 시각화
sns.kdeplot(dm['mileage'], label='original')
sns.kdeplot(impute_knn, label='knn')
plt.legend()

다중 대체

import numpy as np
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.neighbors import KNeighborsRegressor
imputer = IterativeImputer(sample_posterior=True, random_state=42)
X1 = imputer.fit_transform(dm[['mileage', 'price', 'year']]) # 첫번째 대체
X2 = imputer.fit_transform(dm[['mileage', 'price', 'year']]) # 두번째 대체
X = np.concatenate([X1, X2], axis=0) # 두번의 대체 결과 합치기
  • 분포 시각화
sns.kdeplot(dm['mileage'], label='original')
sns.kdeplot(X1[:, 0], label='imputation 1')
sns.kdeplot(X2[:, 0], label='imputation 2')
sns.kdeplot(X[:, 0], label='combined')
plt.legend()

inplace

  • dropna(), fillna() 등 많은 pandas 메소드는 원본 데이터를 변경하지 않음
  • 처리된 결과를 새로운 변수에 저장
df_filled = dm.fillna(0)
  • 원본을 직접 수정
dm.fillna(0, inplace=True)

퀴즈

사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.

Q&A