일상/공부할것들

데이터 분석 시 결손값 처리 방법

TTUTTO 2020. 7. 29. 20:05

서론

최근 이직에 대한 열망과 개인의 실력에 대한 의구심, 커리어 개발과 같은 고민이 폭발하고 있다. 그렇게 속으로 여러 복잡한 생각들을 쌓아두고 있던 중 우연한 기회에 원하던 회사에 원하는 직무로 면접을 볼 수 있는 기회가 생겼다. 참 아이러니하다.

실무 면접에서 근엄한 표정을 한 4명의 면접관 중 한 분이 내게 물었다.

"데이터 결손이 발생했을 때 어떻게 처리를 해야합니까?"

긴장감과 떨리는 순간에 질문이 들어오자 앞에서 말했던 것들도 뒤에서 말할 것들도 뒤죽박죽 되 버렸고, 머리가 새하얘져 제대로된 답을 하지 못했다.

이 글은 그 상황에서 바보같던 내 자신을 반성하기 위함이자 질문을 한 면접관에게 바치는 글이다.

데이터 결손이란?

위키피디아에서는 다음과 같이 정의하고 있다.

In statistics, missing data, or missing values, occur when no data value is stored for the variable in an observation. Missing data are a common occurrence and can have a significant effect on the conclusions that can be drawn from the data.

즉, 내가 관찰하고자 하는 변수가 제대로 저장되지 못한 경우 '결손 데이터' 또는 '데이터 결손값' 이라는 것이다.

여기서 '제대로 저장되지 못한 경우'는 두 가지로 나눠 볼 수 있을 것이다.

1. 데이터가 물리적으로 저장되지 않은 경우

다음과 같은 문제가 생겼을 확률이 높다.

  • 장비의 물리적 손상
  • 저장 장치의 허용 용량 초과
  • 통신 에러
  • 데이터베이스 트랜잭션 오류
  • 기타...

2. 데이터가 물리적 저장에 성공했지만, 이상(異常)치가 계측된 경우

아래처럼 정리할 수 있을 것 같다.

  • 데이터 계측 환경의 변화
  • 장비의 오작동
  • 계측자의 실수

내 경험상 1번의 경우는 그 사례가 적었다. 오히려 2번의 경우에서 더 많은 오류가 생기곤 했다. 물론 각각의 직업과 직무 그리고 계측 대상과 장비에 따라 바뀔 수 있다는 점을 말해둔다.

또한 2번의 경우 잘못된 데이터가 아닌 계측 대상이 변화함에 따라 오차 범위안에 들어올 수 있는 데이터일 가능성도 있어 데이터 분석을 할 때 단순 계측 오류로 받아들이는 것은 위험할 수 있다.

데이터 결손의 구분

구글링을 해보니 다양한 내용이 나온다. 대충 내용을 취합해보니, 보통 데이터 결측값이 생길 경우 3가지 범주로 분류한다고 한다.

1. Missing Completely at Random(MCAR)

우연히 발생된 결손값들. 예를 들면, 다음과 같다.

  • 확률적으로 발생되는 에러
  • 장비 유지보수 실패로 인한 결손
  • raw 데이터의 물리적 분실
  • 샘플의 손실

이 경우 완전히 계측된 데이터 그룹 X와 결손이 발생한 데이터 그룹 Y는 아무런 관련이 없다.

2. Missing at Random(MAR)

결손된 데이터 그룹 Y가 완전히 계측된 데이터 그룹 X와 관련이 있지만, 그룹 Y자체의 값과는 관련이 없을때.

3. Missing not at Random(MNAR)

결손된 데이터 그룹 Y와 연관된 결손일 때이다. 또한, 다른 데이터 그룹과도 연관이 있을 수 있다. 이 경우 결손된 데이터를 보완하기 위해서 데이터 그룹에 대한 모형화를 통해 채워줘야 한다. 해당 데이터에 대한 domain 지식이 필요하다. (domain 지식을 가지고 있어야 하는 이유이기도 하다.)

결손 데이터 처리 방법

데이터 분석에 있어서 원본 데이터에 대한 정확성은 매우 중요하다. 하지만 어떤 것이든 완벽한 것은 없고, 늘 문제점은 발견된다.

따라서 데이터 전처리(pre-processing)를 통해 raw 데이터의 정확성을 높이는 노력을 할 필요가 있다. 참고한 사이트에서는 몇가지 방법을 소개하고 있다.

삭제

결국 데이터의 결손이 발생하면 전체 데이터에 대한 정확성이 낮아지게 되므로 이후 분석 과정에서 영향을 미칠 수 밖에 없다. 이 경우 문제되는 데이터를 '삭제' 하는 것이 가장 빠른 방법일 것이다.

  • 결손이 발생한 데이터의 행(row)를 삭제한다.
  • 결손값들만 삭제한다.
  • 결손이 발생한 전체 데이터 그룹을 삭제한다.

보완

데이터 삭제를 거쳐도 정확성에 큰 영향이 없다면 다행이지만, 너무 많은 데이터가 유실되어 분석에 큰 영향을 미친다면 삭제된 데이터를 '보완'(채워줄 필요)가 있다.

  • 평균값, 중간값, 빈도수가 높은 값으로 채운다.
  • 결손된 데이터 이전의 값을 그대로 가져온다.
  • 결손된 데이터 이후의 값을 그대로 가져온다.
  • 보간법을 사용한다. (가장 많이 쓰이는 방법은 선형 보간이다.)
    • ‘linear’, ‘time’, ‘index’, ‘values’, ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘polynomial’, ‘spline’, ‘piece wise polynomial’
  • 가장 보편적인 값으로 대치한다.
  • 결손 데이터를 하나의 그룹으로서 묶는다.
  • 결손 데이터를 가장 빈번한 카테고리로 묶는다.
  • 결손 데이터를 식별할 수 있는 새로운 그룹을 생성하고 사라진 값들을 위의 보완 방법 중 하나로 대치한다.
  • 결손 데이터 그룹에서 무작위적으로 값을 선택하여 대치한다.
  • 결손 데이터 그룹의 분포도를 분석하여 거기로부터 얻은 값으로 대치한다.

이 밖에도 인공신경망을 통한 예측 방법을 사용하거나 더 효과적인 통계적 계산 방법을 통해 결손된 데이터를 대치할 수 있다.

하지만 항상 생각해야하는 것은 결손 데이터를 채움으로서 얻을 수 있는 결과와 거기에 소비되는 시간을 제대로 파악해야 한다는 점일 것이다.

만약 시간을 투자했는데 만족할 만한 결과가 나오지 않는다면, 그 자체로 프로젝트나 일정에 큰 영향을 미칠 수 있다는 점을 간과해선 안된다.

결론

데이터가 가지는 중요도, 독립성, 의존성을 비롯하여 각 그룹과의 상관관계를 제대로 파악하는 것이 중요하다. 결국 해당 데이터에 대한 충분한 domain 지식이 바탕이 되어야 정확성 높은 데이터를 얻어낼 수 있다.

aka 늘 공부하는 자세를 가지자.

Reference