Posts List

[Data Mining] 2. Data Preprocessing

Data Preprocessing

전체 Data Mining Process에서 데이터 전처리(preprocessing)에 소모되는 시간은 90% 이상이지만 특별한 테크닉이 필요하다기 보다는 많은 경험(domain knowledge)이 필요하다. 이번 챕터에서는 데이터 전처리가 필요한 다양한 경우와 접근법에 대해서 대략적으로 알아볼 예정이다. 

※ 각 테크닉에 대한 자세한 설명은 추후에 회귀/분류 모형을 개발하면서 더욱 자세히 다룰 예정이기 때문에 이번 챕터에서는 introduction 개념으로 가볍게 정리한다.

먼저 real world의 데이터의 유형을 보면 대개 아래의 양상을 띌 수 있다.

  • incomplete : 데이터가 누락되어 있는 경우
  • noisy : outlier가 포함되어 있는 경우
  • inconsistent : 잘못된 데이터가 기입된 경우

위와 같은 상황을 해결하기 위한 방법으로 아래의 대표적인 전처리 과정이 있는데 어떤 방법으로 접근하는지 하나씩 살펴보도록 하자.

data cleaning / data integration 
 data reduction / data transformation


1. Data cleaning

1) missing data

missing data는 장비의 오동작, 데이터베이스 서버 에러 등 여러가지 원인으로 발생할 수 있는 가장 흔한 incomplete 타입 중 하나다. 가장 쉬운 방법은 무시하거나 직접 수작업으로 채우는 것이지만 정보의 손실이나 너무 많은 시간을 소비하게 된다. 

따라서 정답은 자동으로(automatically) 채워주는 방법을 택해야하는데, 자동으로 채우는데도 아래와 같은 다양한 방법이 있다. 하지만 이런 형태의 일은 정답이 정해져 있는 것이 아니라 Domain knowledge가 충분히 있는 사람이 잘 결정해야함을 기억하자.

위 표에서 mean(평균), median(중앙값), mode(최빈값)으로 missing data를채우는 것은 직관적으로 이해가 되는데, K-NN imputation이란 방법도 있다. K-NN에 대해서 잠시 알아보자.

k-NN은 가장 근접한 k개의 sample을 가져와서 그 sample들의 대표값으로 분류하는 알고리즘이다. 데이터 전처리 과정에서도 이 효과를 활용할 수 있는데, 가장 근접한 k개 sample의 대표값을 missing value에 채웠을 경우 좋은 효과를 내는 경우가 있다.

ex) Age / Height / Weight data에서 Weight에 missing data가 있는 경우 Age, Height가 가장 유사한 데이터 3개를 가져와 평균을 취하면 신뢰있는 Weight값으로 채울 수 있다.

regression(회귀) 함수를 만들어 missing data를 채울 수도 있다. 효과적인 regression 함수를 구하는 것은 추후에 다루기로 한다. 필요한 경우 chained equation으로 재귀적 regression 함수를 활용하기도 한다. 

ex) Weight = 0.3(age) + (0.9)Height - 110

그 외에도 columns가 많은 경우, matrix factorization라는 방법을 활용할 수 있다. matrix factorization은 차원이 작은 2개 행렬의 곱으로 missing data를 계산해 내는 방법이다. 결국 위 그림의 P, Q matrix를 잘 만들어야 효과가 있을 텐데, 그 방법에 따라 MF12, AMMC(alternating min for matrix completation), Soft-impute 등의 알고리즘이 있다. (통상 soft-impute가 가장 powerful한 방법으로 여겨진다)

2) Noisy data

noisy data 역시 자주 보이는 데이터 타입이다. 원인은 굉장히 다양해서 열거하기 어렵지만, 결과 도출에 상당한 부정적 영향을 끼치므로 전처리가 필요하며, 통상 smoothing 시키기 위해 filter를 취하곤 한다.

3) Outlier

noisy data와 outlier를 혼용해서 쓰긴 하는데, 엄연히 다르다. noisy가 문제 있는 데이터라면 outlier는 잘못된 데이터라기 보다는 분석 목적에 방해되는 데이터라고 이해해야한다. 예를 들어 통상적인 Age / Height / Weight를 너무 많이 벗어나는 체격을 가진 사람이 outlier라고 할 수 있다.

이런 outlier를 감지 하는 방법은 히스토그램을 그려서 벗어나는 데이터를 찾거나(statistical), 실제로 데이터를 그래프에 찍어보고 분류하거나(proximity-based), 혹은 군집(clustering-based)알고리즘을 활용하는 등 graphical하게 찾아낼 수 있다. 그 외에도 다양한 방법이 아래와 같이 있으니 참고하도록 하자.



2. Data integration

위 그림처럼 분석하고자 하는 column들이 여기저기 흩어져 있을 때는 병합해서 분석이 필요한데, 이 경우 필요한 것이 data integration이다.


3. Data Reduction

변수가 너무 많은 경우 분석하기가 매우 어렵다. 주요 전략은 아래와 같다.

Dimensionality reduction / Numerosity reduction / Data compression

1) Dimensionality reduction


차원이 늘어나면 예측에 도움이 될 것 같지만 너무 많이 늘어나면예측 성능이 떨어진다. (차원의 저주 : Curse of dimensionality)

차원을 축소시키는 방법은 크게 2가지로 나눌 수 있으며, 추후에 자세히 알아보도록 한다.

  • Feature selection : feature 중 연관성이 높은 feature를 추려낸다.(CART, LASSO)
  • Feature extraction: feature를 가공해서 새로운 feature를 생성해낸다. (PCA, PLS)


4. Data Transformation

  • smoothing : noise를 제거
  • feature construction : 새로운 feature를 생성
  • aggregation
  • normalization : 항목별로 scale을 맞춘다. (min-max / z-score normalization)
  • discretization 
    [이산 데이터의 종류]
     - norminal : 순서가 없는 범주형 데이터 (ex. 코일명)
     - ordinal : 순서가 있는 범주형 데이터 (ex. 품질 grade)
     - continuous : 연속적 이산 데이터 (ex. 온도)
    다양한 이산 데이터가 있는데, 때론 연속형 데이터를 범주형 데이터와 같이 discrete한 value로 변경시켜야 할 수 있다.



댓글 쓰기

0 댓글