코딜기
[Python/ML] 결측치(Missing Value) 처리 fillna/SimpleImputer/IterativeImputer(MICE) 본문
ML & DL/Data Preprocessing
[Python/ML] 결측치(Missing Value) 처리 fillna/SimpleImputer/IterativeImputer(MICE)
코딜기 2022. 2. 26. 20:00반응형
데이터 전처리 과정에서 결측치 처리는 왜 해야 할까요??
- 데이터의 결측은 모델 학습과정에서 문제를 일으킬 수 있습니다. (결측치를 고려하여 예측을 하는 모델도 있습니다.)
- 이를 해결하기 위해 여러 방법으로 결측치 처리를 해줘야 합니다.
- 결측치 처리 방법으로 크게 제거(Deletion)와 대치(Imputation)가 있습니다.
이전 포스팅에서 결측치를 확인하는 방법과 제거를 통한 처리 방법을 포스팅했으므로 이어서 대치를 통한 처리 방법을 포스팅하겠습니다.
대치 (Imputation)
1. 평균을 이용한 대치
- 평균은 중심에 대한 경향성을 알 수 있는 척도입니다.
- 하지만 평균은 모든 관측치의 값을 모두 반영하므로 이상치의 영향을 많이 받기 때문에 주의하여 사용해야 합니다.
- 평균을 이용하기 때문에 수치형 변수만 이 방식을 사용할 수 있습니다.
from sklearn.impute import SimpleImputer
# 평균으로 Imputer 선언
imputer_mean = SimpleImputer(strategy='mean')
imputer_mean.fit(numeric_data)
# 데이터 변환 (array로 반환하기 때문에 필요에 맞는 형태로 변환 후 사용)
numeric_data = imputer_mean.transform(numeric_data)
2. 중간값을 이용한 대치
- 중간값은 데이터의 정중앙에 위치한 관측값을 말합니다.
- 데이터 샘플의 수가 짝수일 때는 중간에 위치한 두 값의 평균을 사용합니다.
- 중간값은 모든 관측치의 값을 모두 반영하지 않으므로 이상치의 영향을 덜 받습니다.
- 중간값을 이용한 이 방식 또한 수치형 변수에만 사용할 수 있습니다.
from sklearn.impute import SimpleImputer
# 중간값으로 Imputer 선언
imputer_mid = SimpleImputer(strategy='median')
imputer_mid.fit(numeric_data)
# 데이터 변환 (array로 반환하기 때문에 필요에 맞는 형태로 변환 후 사용)
numeric_data = imputer_mid.transform(numeric_data)
3. 최빈값을 이용한 대치
- 최빈값은 범주 내에서 가장 자주 등장한 관측값을 말합니다.
- 최빈값을 이용한 이 방식은 빈도수를 사용하기 때문에 범주형 변수에만 사용할 수 있습니다.
from sklearn.impute import SimpleImputer
# 최빈값으로 Imputer 선언
imputer_mode = SimpleImputer(strategy='most_frequent')
imputer_mode.fit(categorical_data)
# 데이터 변환 (array로 반환하기 때문에 필요에 맞는 형태로 변환 후 사용)
categorical_data = imputer_mode.transform(categorical_data)
4. MICE를 이용한 자동 대치
- Round robin 방식을 반복하여 결측 값을 회귀하는 방식으로 결측치를 처리합니다.
- 결측 값을 회귀하는 방식으로 처리하기 때문에 이 방식은 수치형 변수에 자주 사용합니다.
- 범주형 변수에도 사용이 가능하지만 조금 더 복잡하고 먼저 인코딩됩니다.
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
# random_state값은 원하시는 숫자 아무거나 넣으시면 됩니다.
imputer_mice = IterativeImputer(random_state=83)
numeric_data = imputer_mice.fit_transform(numeric_data)
- MICE Reference : https://ichi.pro/ko/deiteo-seteueseo-gyeol-cheuggabs-eul-daechihaneun-mice-algolijeum-217004654686142
5. fillna()를 이용한 대치
- 결측치에 특정 값을 채워주는 pandas 함수입니다.
# 데이터 프레임의 전체 결측치를 특정 값으로 일괄 대치
data.fillna(0, inplace=True)
# 특정 열의 결측치를 특정 값으로 일괄 대치
data['champion'].fillna('Rakan', inplace=True)
# 결측치 바로 이전의 값으로 대치하기
data.fillna(method = 'ffill', inplace=True)
# 결측치 바로 이후의 값으로 대치하기
data.fillna(method = 'bfill', inplace=True)
결측치를 확인하는 과정에서는 데이터의 도메인 지식이 필요합니다.
- 결측치가 유의미한 데이터일 수도 있기 때문에 도메인 지식을 잘 파악하는 것이 중요합니다.
결측치를 삭제하는 방법으로 처리를 하는 것은 많은 리스크가 따릅니다.
- 데이터의 삭제는 데이터의 누락으로 이어질 수 있기 때문에 꼭 신중하게 진행해야 한다.
반응형
'ML & DL > Data Preprocessing' 카테고리의 다른 글
[Python/ML] 머신러닝 데이터 셋 나누기 train_test_split/reset_index (2) | 2022.03.02 |
---|---|
[Python/ML] 범주형 변수 인코딩(Encoding)처리 Label Encoding/One-hot Encoding (0) | 2022.02.27 |
[Python/ML] 결측치(Missing Value) 처리 isna/missingno/dropna (0) | 2022.02.26 |
[Python/ML] 스케일링(Scaling) Min-Max Scaling / Standard Scaling (0) | 2022.02.24 |
Comments