머신러닝

[머신러닝] 데이터 전처리 - 결측 데이터 처리

서노리 2022. 6. 7. 01:44
반응형

데이터 전처리

1. 수치형 데이터

  • 결측 데이터 처리
  • 이상치 제거(대체)
  • 스케일링

2. 문자열 데이터

  • 결측 데이터 처리
  • 라벨 인코딩 / 원핫 인코딩

결측 데이터 처리 방법

1. 결측 데이터가 포함된 column을 제거
- 해당 컬럼에 데이터보다 결측치가 더 많은 경우 고려 가능

 

2. 결측 데이터가 포함된 레코드(행)를 제거

 

3. 기초 통계로 결측치 대체

- 수치형 데이터인 경우 평균, 중심값, 최빈값 등 사용

- 문자열 데이터인 경우 최빈값 사용

 

4. 지도학습 기반의 머신러닝 모델을 구축하여 예측값으로 결측 데이터 대치

 

5. 준지도학습, 비지도 학습 기반의 머신러닝 모델을 구축하여 예측값으로 결측 데이터 대치


결측 데이터 제거

일반적인 경우 1, 2번 방법을 사용하여 결측 데이터를 제거하는 것이 이상적이다.

 

※ 1번 방법(column 제거) 예제

data = pd.read_csv(fname_input) # 데이터 불러옴
print(data.isnull().sum()) # 결측 데이터의 개수 확인

not_nan_series = data.isnull().sum() # 결측 데이터 개수를 확인하는 Series 변수
not_nan_series = not_nan_series[not_nan_series == 0] # 결측 데이터가 존재하지 않는 컬럼만 추출
not_nan_columns = not_nan_series.index.tolist() # 컬럼명 추출

data = data[not_nan_columns] # 결측 데이터가 존재하지 않는 컬럼을 대상으로 데이터프레임을 재구축

※ 2번 방법(record 제거) 예제

data = pd.read_csv(fname_input)
# 해당 컬럼이 결측인 레코드 삭제
data = data.dropna(subset=['컬럼명1', '컬럼명2' ... ])

결측 데이터 대치 - SimpleImputer

결측 데이터를 지워버리기에는 데이터 개수가 너무 적은 경우 기초 통계를 이용하여 결측치를 대체하는 방법을 사용한다.

SimpleImputer 클래스를 이용하면 이를 쉽게 작업할 수 있다.

 

SimpleImputer 예제

from sklearn.impute import SimpleImputer

# 수치형 데이터는 평균값으로 결측치 처리
imputer_num = SimpleImputer(
    missing_values=np.nan,
    strategy='mean')
    
# 문자열 데이터는 최빈값으로 결측치 처리
imputer_obj = SimpleImputer(
    missing_values=None,
    strategy='most_frequent')

수치형에서 결측치는 nan, 문자형 데이터에서 결측치는 None으로 표시되므로 missing_values로 이를 설정해주고 strategy를 통해 결측치를 어떤 값으로 대체할 것인지 설정해준다.

 


 

반응형