본문 바로가기
ML | DL | Big data/Data Science

누락 데이터(Missing value)를 처리하는 7가지 방법 / Data Imputation

by 썽하 2020. 8. 14.

누락 데이터를 통계적으로 처리하는 유명한 방법들

 

photo by Campaign Creators on unsplash

 

실세계 데이터는 다양한 원인 때문에 누락 데이터를 포함하고 있다. 데이터에서 None, NaN, 빈칸으로 표시되는 것들이 누락 데이터이다. 이러한 누락된 값이 많은 데이터셋으로 머신러닝 모델을 학습시키면 모델의 품질에 큰 영향을 미친다. Scikit-learn Estimator 같은 일부 알고리즘은 모든 값이 의미 있는 값을 가지고 있다고 가정하기 때문이다.

Missing value는 다음과 같은 3가지 타입이 있다.

  • Missing completely at random (MCAR)
  • Missing at random (MAR)
  • Not missing at random (NMAR)

이 글에서는 cross-sectional 데이터셋의 missing value를 처리하는 7가지 방법을 중점적으로 다룬다.

(Time-series 데이터는 해당 안됨)

 


1. 아무것도 하지 않기

가장 쉬운 방법이다. 그냥 알고리즘이 누락된 데이터를 처리하게 놔두면 된다. 일부 알고리즘( xgboost)은 결측 값을 고려해서 잘 학습한다. 결측 값을 무시할 수 있는 파라미터를 넣는 알고리즘(LightGBM의 use_missng=false)도 있다. 그러나 처리하는 로직이 없는 알고리즘(sklearn의 LinearRegression)은 누락된 데이터 때문에 엉망진창이 된다. 그런 모델에는 데이터셋을 넣기 전에 누락된 데이터를 처리해야 한다.

 

2. 누락된 데이터를 제거하기

Missing value를 처리하는 또 다른 한 가지 방법은 누락된 데이터를 제거하는 것이다. 하지만 중요한 정보를 가진 데이터를 잃을 위험이 있다. 상황에 따라 데이터 tuple을 제거하기도 하고 missing value가 많은 feature(column)를 제거하기도 한다.


조금 더 좋은 방법은 누락된 값을 유추하는 것이다. 데이터의 다른 값들로부터 누락된 값을 유추해볼 필요가 있다.

 

3. Mean/Median Imputation

한 컬럼에 있는 missing value를 결측 되지 않은 다른 값들의 평균(mean)이나 중앙값(median)으로 대체하는 것이다. 다른 feature는 고려되지 않는다. 또한 숫자형 데이터에만 사용할 수 있다.

 

 

장점

  • 쉽고 빠르다
  • 작은 크기의 숫자형 데이터셋에 잘 동작한다.

단점

  • 다른 feature 간의 상관관계가 고려되지 않는다. 단순히 결측지가 존재하는 컬럼만 고려된다.
  • 인코딩 된 범주형 feature에 대해 안 좋은 결과를 제공한다.(절대 범주형 feature에 사용하지 말 것)
  • 정확하지 않다.
  • 불확실성에 반대된다.(동일한 값이므로)

 

4. Most Frequent Value / Zero / Constant Imputation

Most Frequent Value Imputation : 가장 빈번히 나온 값으로 대체한다. 이건 범주형 feature에도 잘 동작한다.
Zero Imputation : 말 그대로 0으로 대체한다.
Constant Imputation : 지정한 상수값으로 대체한다.

 


장점

  • 이것도 쉽고 빠름
  • categorical(범주형) feature에 잘 동작함

단점

  • 이것 또한 다른 feature 간의 상관관계가 고려되지 않는다.
  • 데이터에 bias를 만들 수 있다.

 

5. K-NN Imputation

K-NN(k nearest neighbours) 이란 classification에 사용되는 간단한 알고리즘이다. 'feature similarity'를 이용해 가장 닮은(근접한) 데이터를 K개를 찾는 방식이다. KNN을 사용하는 간단한 방법은 impyute 라이브러리를 사용하는 것이다. 다음 예제를 보자.

 

어떻게 동작 할까?

KDTree를 생성한 후 이를 이용해 가장 가까운 이웃(NN)을 찾는다.

K개의 NN을 찾은 뒤에는 거리에 따라 가중 평균을 취한다.

 

장점

  • mean, median이나 most frequent 보다 정확할 때가 많다.(데이터셋에 따라 다르다.)

단점

  • 메모리가 많이 필요하다. 전체 데이터 세트를 메모리에 올려야 한다.
  • outlier에 민감하다.

 

6. MICE(Multivariate Imputation by Chained Equation) Imputation

이 방식은 누락된 데이터를 여러 번 채우는 방식으로 작동한다. Multiple Implutation(MI)는 불확실성을 고려했을 때 Single Imputation 보다 훨씬 낫다. chained equeation 접근 법은 매우 유연해서 연속형, 이진형, 범위형, survey skip 패턴도 처리할 수 있다.

  • Imputation : distribution을 토대로 m개의 데이터셋을 imputation 한다.
  • Analysis : m개의 완성된 데이터셋을 분석한다.
  • Pooling : 평균, 분산, 신뢰 구간을 계산하여 결과를 합친다.

알고리즘 메커니즘에 대해서 자세히 알고 싶다면, 여기를 참고.

 

 

7. Deep Learning을 이용한 Imputation / Datawig

categorical혹은 non numerical feature에 매우 효과적이다. DNN을 이용해서 머신러닝 모델을 학습하고 누락된 값을 유추하는 것이다. 뭐... 그냥 누락된 컬럼에 대해 딥러닝을 돌리는 것이다.


장점

  • 다른 방법에 비에 꽤나 정확하다.
  • 범주형 데이터(Feature Encoder)를 처리할 수 있는 기능이 있다.
  • CPU, GPU를 지원한다.

단점

  • 한 번에 한 개의 칼럼만 대체 가능하다.
  • 대규모 데이터 셋의 경우에 속도가 상당히 느릴 수 있다.(닭 잡는데 소 잡는 칼을 쓰게 될 수도)
  • 유추할 피쳐에 관련된 정보가 들어있는 다른 피쳐들을 직접 지정해야 한다.

 

다른 방법들

Stochastic regression imputation

동일 데이터셋에 있는 관련된 다른 피쳐에서 missing value를 예측하는 것이다.

 

Extrapolation and Interpolation

이산형 범위 내에 있는 다른 데이터들로부터 값을 추정한다.
예를 들어, 어떤 사람이 20살일 때 키와 40살에서의 키를 보고 30살에서의 키를 추측하는 것은 interpolation이고
1살 때부터 현재 나이까지의 키를 보고 앞으로 10년 후의 키를 예측하는 것은 extrapolation이다. 또 다른 예로는 한 달간의 주가 동향을 보고 내일의 주가를 예측하는 것이 extrapolation이다.
extrapolation은 interpolation에 비해 훨씬 안정성이 떨어지는 예측 방법이다.

 

Hot-Deck imputation

관련된 비슷한 데이터 셋에서 랜덤 하게 선택한다.(비슷한 것 중 랜덤)

 


 

결론적으로 누락된 값을 대체하는 완벽한 방법은 없다. 각각의 방법은 데이터 유형에 따라 더 나은 성능을 나타내기도 하고 더 나쁜 성능을 발휘하기도 한다. 한 피쳐에 누락된 데이터가 너무 많다면 해당 피쳐를 없애기도 하고, 어떤 때에는 피쳐는 상수값으로 대체하기도 한다. missing data를 역 추산하는 시간에 너무 큰 시간을 들여서 모델을 한 번도 못 만들어보고 김이 샐 수도 있으니 적당히 빠른 것으로 시도한 뒤 하나씩 대체해나가는 것도 좋은 방법이다. 나중에 설명된 방법들이 더 좋은 방법이라고 생각할 수도 있지만, 상황에 따라 좋은 방법이 다르다. 어떤 것들을 사용해야 할지 규칙도 있지만, 결국 어떤 게 가장 적합한지는 모델을 통해 실험하고 확인해야 한다. 그때그때 적합한 방법을 사용하자.

 

Reference

댓글