실제 데이터는 우리가 모델에 편하게 넣을 수 있도록 생기지 않았다. 빈칸, None, NaN 등으로 표시되어 있는 이런 데이터를 그대로 머신러닝 모델에 학습시키면 성능이 엉망이 된다.
https://www.kaggle.com/code/parulpandey/a-guide-to-handling-missing-values-in-python/notebook
median() 이나 mean()를 사용해서 대체하는 방법
단점
범주형 데이터에도 가능하다
단점
from impyute.imputation.cs import fast_knn
# KNN 학습
np_imputed = fast_knn(df.values, k=5)
df_imputed = pd.DataFrame(np_imputed)
KDTree를 생성한 후 가장 가까운 이웃을 찾는다. K개의 NN을 찾은 뒤에 거리에 따라 가중 평균을 취한다
장점 : 평균, 중앙값보다 정확한 경우가 있다.
단점 : 이상치에 민감
누락된 데이터를 여러번 채우는 방식으로 여러 결측치 대치 세트를 만들어 with함수로 특정 통계모델링을 수행하고 pool함수로 생성한 m개의 대치세트를 평균하여 결과를 도출한다. 연속형, 이진형, 범위형 패턴도 처리할 수 있다.
imputation : distribution을 토대로 m개의 데이터셋을 imputation
Analysis : m개의 완성된 데이터셋을 분석
Pooling : 평균, 분산, 신뢰 구간을 계산하여 결과를 종합
from impyute.imputation.cs import mice
# MICE 학습
np_imputed=mice(df.values)
df_imputed = pd.DataFrame(np_immputed)
import datawig
imputer = datawig.SimpleImputer(
input_columns = ['X_1', 'X_2', 'X_3'], # impute에 사용할 col 지정
output_column = 'X_5') # 컬럼 X_5의 결측치를 채운다
imputer.fit(train_df=df_null, num_epochs=50)
df_null_only = df_null[df_null['X_5'].isnull()]
np_imputed = imputer.predict(df_null_only)
df_imputed = pd.DataFrame(np_imputed)