우노
[ML] Data Preprocessing - Missing Value (결측치 처리) 본문
결측치란?
- 대부분의 머신러닝 알고리즘은 Missing feature, 즉 누락된 데이터가 있을 때, 제대로 역할을 하지 못합니다. 그래서 먼저 Missing feature에 대해 처리해주어야 합니다.
- Missing feature, NA(Not Available) : '결측치'라고 하며 값이 표기되지 않은 값
결측치의 종류
- Random : 패턴이 없는 무작위 값
- No Random : 패턴을 가진 결측치
결측치 처리 전략
- 제거 (Deletion)
- 대치 (Imputation)
- 예측 모델 (Prediction model)
결측치 확인
결측치 여부 확인
df["col"].isnull()
결측치 개수 확인
df["col"].isnull().value_counts()
제거 (Deletion)
결측치의 특성이 '무작위로 손실' 되지 않았다면, 대부분의 경우 가장 좋은 방법은 제거하는 것이다.
제거하는 방식은 목록 삭제(Listwist) 단일값 삭제(Pairwise) 방식으로 다시 구분된다.
사용함수 : dropna()
- pandas에서 제공하는 Na/NaN과 같은 누락 데이터를 제거하는 함수입니다.
- axis: 파라미터 값으로 0을 주면 행 제거, 1을 주면 열 제거입니다. default값은 0입니다.
- subset: array, 특정 feature를 지정하여 해당 Feature의 누락 데이터 제거가 가능합니다.
목록삭제(Listwise)
결측치가 있는 행은 전부 삭제
df = df.dropna()
결측치가 있는 열은 전부 삭제
df = df.dropna(axis = 1)
단일값 삭제(Pairwise)
행 전체가 결측치인 행만 삭제
df = df.dropna(how = 'all')
행의 결측치가 2개 초과인 행만 삭제
df = df.dropna(thresh = 2)
특정 열들중에 결측치가 있을 경우에 해당 행을 삭제
df = df.dropna(subset=['col1', 'col2', 'col3']) # 특정열 모두가 결측치일 경우 해당 행 삭제 df = df.dropna(subset=['col1', 'col2', 'col3'], how = 'all') # 특정열에 1개 초과의 결측치가 있을 경우 해당 행 삭제 df = df.dropna(subset=['col1', 'col2', 'col3'], thresh = 1 )
결측치 삭제 상태 바로 적용하기
결측치를 제거한 상태를 함수 사용 시에 바로 적용하려면 inplace 옵션을 True로 설정해주면 따로 데이터프레임을 지정해서 저장하지 않고도 바로 적용된다.
df.dropna(inplace = True)
대치 (Imputation)
결측치를 특정 값으로 대치하는 것이다.
대치 값 종류
- 최빈값(mode)
- 범주형에서 결측값이 발생시, 범주별 빈도가 가장 높은 값으로 대치한다.
- 중앙값(median)
- 숫자형(연속형)에서 결측값을 제외한 중앙값으로 대치방법
- 평균(mean)
- 숫자형(연속형)에서 결측값제외한 평균으로 대치방법
- Similar case Imputation
- 조건부 대치
- Generalized Imputation
- 회귀분석을 이용한 대치
- 최빈값(mode)
사용함수 : fillna(), replace(), interpolate()
- pandas에서 제공하는 누락 데이터에 특정 값을 채우는 함수이다.
- 각 함수의 기준에 맞게 NaN 값을 지정한 값으로 바꾸는 역할을 하게 된다.
fillna()
전체 결측치를 특정 단일값으로 대체하기
df.fillna(0)
특정열에 결측치가 있을 경우 다른 값으로 대체하기
# 0으로 대체하기 df['col'] = df['col'].fillna(0) # 컬럼의 평균으로 대체하기 df['col'] = df['col'].fillna(df['col'].mean())
결측치 바로 이전 값으로 채우기
df.fillna(method = 'pad')
결측치 바로 이후 값으로 채우기
df.fillna(method = 'bfill')
replace()
# 결측치 값을 -50으로 채운다. df.replace(to_replace = np.nan, value = -50)
interpolate()
interpolate는 인덱스를 무시하고 값들을 선형적으로 같은 간격으로 처리하게 된다.
df.interpolate(method = 'linear' , limit_direction = 'forward')
예측 모델 (Prediction model)
- 예측 기법을 사용한 결측치 추정은 결측치들의 특성이 패턴을 가진다고 가정하고 진행하게 된다.
- 결측값이 없는 컬럼들로 구성된 dataset으로 결측값이 있는 컬럼을 예측한다.
- 회귀 분석 기술을 활용하거나 SVM과 같은 기계 학습 방법 또는 이러한 결측치를 채우는 데이터 마이닝 방법과 같은 다양한 통계 방법이 있다.
결측치 처리 가이드 라인
- 10% 미만
- 삭제 or 대치
- 10% ~ 50%
- regression or model based imputation
- 50% 이상
- 해당 컬럼(변수) 자체 제거
'AI > Machine Learning' 카테고리의 다른 글
[ML] 교차검증 (CV, Cross Validation) 이란? (8) | 2020.08.14 |
---|---|
[ML] 의사결정트리(Decision Tree) 란? (11) | 2020.08.13 |
[ML] 베이지안 최적화 (Bayesian Optimization) (29) | 2020.08.10 |
[ML] 이상값(outlier)과 로버스트(robust) (2) | 2020.08.06 |
[ML] Model compile() - 학습과정 설정 (0) | 2020.08.06 |
Comments