Search
🐤

결측치 처리

데이터 정제(Data Cleansing)

원본 데이터에 포함된 누락된 요소와 관련 없는 요소를 처리하는 활동
결측치 처리, 이상치 처리

결측치란?

데이터 수집 문제 또는 데이터 입력 오류와 같은 다양한 이유로 관측 되어야 할 값을 얻지 못한 데이터
전처리 단계에서 적절한 값으로 처리가 필요한 데이터
결측치가 포함된 데이터( https://www.kaggle.com/c/titanic/data )

결측치가 포함된 데이터의 문제점

누락된 데이터 세트에 따라 특정 값으로 편향될 수 있음
일부 기계학습 알고리즘은 결측치가 포함된 데이터가 있을 경우, 학습이 불가능

결측치 처리

결측치 포함 여부 확인하기

각 컬럼 별 결측치 수 확인

왜 결측치가 발생했는지 생각하기

결측치 발생 원인에 따라 처리 방법을 달리해야 함
데이터 분석가의 도메인 지식 필요

③ 결측치 비율 확인하기

결측치 비율에 따라 처리 방법을 달리함

결측치 처리하기

1) 삭제: 데이터 양이 많은 경우 적합
분류 작업의 클래스 레이블 값이 누락된 경우에 적합
2) 수동으로 채우기
해당 필드에 일반화하여 적용 가능한 값 또는 평균으로 채움
예: 동일한 신용 위험 등급의 사용자들 평균 소득 값으로 대체
베이지안 분류 또는 결정 트리와 같은 방법을 사용하여 값을 유추하는 방법을 사용하여 채움
3) 전역 상수를 사용하여 누락된 값 채우기
특정 상수로 대체 (예: NULL, 알 수 없음, 0)
머신러닝 진행 시, 특정 용어 (예: 알 수 없음)가 중요한 개념을 형성한다고 믿을 수 있기 때문에 문제 발생 할 수 있음
(예시)
Age 컬럼의 경우, Name 컬럼을 참조하여 유추하여 누락된 값을 채우는 방법 고려 가능
Age: 조건기반 대체
Cabin : column 삭제
Embarked : row 삭제

결측치 처리를 위한 파이썬 코드

import pandas as pd from pandas import DataFrame, Series import numpy as np # 누락 값이 포함된 데이터를 읽어 DataFrame 객체 생성 concrete = pd.read_csv('concrete_na.csv’) # 누락 값의 개수 확인 concrete.isnull().sum(0) # 임의로 2번, 3번 행의 모든 데이터가 누락 값이 되도록 변경 concrete.iloc[2:4] = np.nan # 누락 값이 모든 열에 있을 때 데이터를 버림 concrete.dropna(0, how='all', inplace=True) # 누락 값을 특정 값으로 채움 concrete.fillna(100.) # 누락 값을 평균 값으로 채움 concrete.fillna(concrete.mean(0))
Python
복사