본문 바로가기
Machine Learning

ML #4 : 머신러닝 데이터 준비 방법 (데이터 누락 값 처리, 정규화, 분할)

by 무적물리 2020. 4. 6.

데이터 준비 필요 이유

머신러닝에 활용하기 위한 데이터는 다양한 환경에서 수집되기 때문에 다양한 문제점이 발생합니다. 불완전한 데이터, 손상된 데이터, 일치하는 값이 없는 데이터 등 문제점이 있는 데이터가 수집되게 되는데 데이터의 품질이 나쁘면 머신러닝의 수행 결과도 나빠지게 됩니다. 즉, 머신러닝 결과를 통해 우수한 예측 시스템을 만들려면 데이터가 우수해야 합니다. 따라서, 좋은 데이터를 얻기 위한 데이터 준비가 필요합니다. 머신러닝을 위한 좋은 데이터는 아래와 같습니다.


- 머신러닝 목적에 맞는 데이터

- 손상되지 않은 데이터

- 충돌하는 레코드가 없는 데이터

- 누락 값이 없는 데이터

- 충분한 양의 데이터




데이터 준비 절차

우수한 품질의 입력 데이터를 위해 데이터 정리, 데이터 변환, 데이터 감소, 데이터 분할, 데이터 문자 정리 등과 같은 방법이 선행되어야 합니다. 데이터 감소는 머신러닝 목적에 맞지 않는 데이터를 제거해서 머신러닝이 빠르고 정확하게 학습을 수행하도록 합니다. 


- 데이터 정리 : 누락된 값 채우기, 이상 값 제거

- 데이터 변환 : 정규화로 노이즈 감소

- 데이터 감소 : 데이터 특성 샘플링

- 데이터 분할 : 연속 특성 → 범주 형태로 변환

- 데이터 문자 정리 : 데이터 정렬 문제 제거


데이터 문자 정리는 의미 없는 공백이나 콤마 같은 기호를 통일된 방법으로 구분함으로써 머신러닝을 수행함에 있어 발생할 수 있는 오류를 사전에 방지할 수 있습니다. 특히, 데이터를 정리하면서 가장 신경써야하는 것이 누락 값 처리입니다. 누락 값 처리는 아래 절에서 자세히 설명하겠습니다.


데이터 누락 값 처리

실제로 머신러닝에서 데이터 준비하는 방법에 대해 알아보겠습니다. 먼저, 필요한 데이터가 없을 때 혹은 데이터가 잘못된 값으로 입력되었을 때에 대한 처리 방법입니다. 누락 값은 그 상황에 따라 매우 중요한 정보일 수 있습니다. 이 때 취할 수 있는 방법은 아래와 같습니다.


- 삭제 : 값이 누락된 레코드 제거

- 더미 대체 : 누락 값 → 임의 값(0) 대체

- 평균 대체 : 다른 값의 평균으로 대체 (숫자)

- 빈도 대체 : 빈도가 높은 항목으로 대체 (범주)

- 회귀 대체 : 회귀 함수 사용으로 누락 값 대체


더미 대체의 방법에서 누락 값을 0으로 대체한다면 오류가 커지기 때문에 평균, 빈도, 회귀 대체를 해주는 것이 좋습니다. 특히, 회귀 대체의 경우가 가장 좋은 방법입니다. 예를 들어, 특정 회원 정보에 키 정보가 없다면 다른 회원들의 몸무게, 나이에 따른 회귀 분석을 실시해서 임의로 키를 입력해주면 됩니다. 평균이나 빈도로써 누락 값을 대체하는 것보다 정확한 값을 입력해줌으로써 머신러닝을 수행하면서 발생하는 오류는 최소화할 수 있습니다. 회귀 대체 방법은 누락 값 대체 방법 중 가장 복잡하지만 가장 정확한 방법 입니다.



데이터 정규화

데이터 변환을 위한 방법에 정규화가 있습니다. 데이터 정규화는 세가지 방법으로 나눌 수 있는데 최대-최소 정규화, Z점수 정규화, 소수점 배열입니다. 머신러닝 수행 전 데이터 정규화를 통해 정확도 높은 머신러닝을 수행할 수 있습니다. 개인적으로 최대-최소 정규화 방법을 주로 사용하고 있습니다. 이유는 데이터 변환 관점에서 사용하기 편해서 입니다.


- 최대-최소 정규화 : 0~1 사이 값으로 변환

- Z점수 정규화 : 평균, 표준편차 기반 정규화

- 소수점 배열 : 특성 값의 소수점 이동


데이터 분할 방법

연속 값을 조건에 맞게 데이터를 분할 할 수 있습니다. 특성에 따른 분할 방법은 해당 값이 속하는 범주에 따라 연속 값을 분할하는 방법이며, 간격에 따른 분할 방법은 1~9, 10~19와 같이 동일 간격에 따라 데이터를 분할할 수 있습니다. 데이터 분할 방법에는 이와 같은 두가지 방법이 있지만 제 경험에 따르면 정확한 값을 예측 목적의 머신러닝에서는 데이터 분할이 좋은 성능을 발휘하지 못했습니다.


- 특성에 따른 분할 : 속하는 범주 기반

- 간격에 따른 분할 : 특정 간격 분할


댓글