본문 바로가기
데이터 분석/Analytics

[행동데이터분석] 결측 데이터 처리

by 친절한 휘저씨 2024. 1. 3.

 

 

결측 데이터 처리가 필요한 이유

빅데이터 시대인 만큼 데이터가 풍부하기 때문에 실무에서는 결측 데이터를 사소한 방해꾼으로 여기고 결측 데이터가 있는 행만 필터링하곤 합니다. 안타깝게도 결측 데이터가 있는 행을 필터링하면 분석에 상당한 편향이 생길 수 있습니다. 일반적으로 결측값이 있는 변수의 평균값을 사용하는 등 특정값으로 결측값을 대체하는 방법이 사용되기도 합니다. 하지만 이것도 고유한 편향이 생길 수 있습니다. 여기서는 기존의 방법보다 편향이 훨씬 적거나 심지어 거의 없는 결측 데이터 처리 방법을 다룹니다.

 

 

결측 데이터 시각화

데이터셋을 처음 마주했을 때 데이터의 현황을 대략적으로 파악하는 단계를 거칩니다. 이 과정에서 데이터가 ‘어떻게’ 누락되었는지 파악합니다.

 

 

 

첫 번째 결과 테이블에서는 각 변수별 총 결측값 갯수를 확인할 수 있습니다. 두 번째는 결측 데이터 패턴의 세부 정보를 나타냅니다. 예시에서는 결측값이 존재하는 4개 변수 모두 결측값이 있는 케이스가 총 18건인 것으로 나타납니다.

 

 

결측 데이터의 양

가장 먼저 살펴볼 것은 결측 데이터의 양과 결측 데이터의 비율이 가장 높은 변수입니다. 결측 데이터의 양이 매우 한정적인 경우, 예를 들어 1,000만행의 데이터 셋에서 결측값이 존재하는 케이스가 수십 건이라면 다중 대체법 등으로 결측값을 처리하는 것은 다소 과합니다. 이럴 때는 결측 데이터가 있는 모든 행을 삭제하고 넘어가도 괜찮습니다. 그럼 결측값이 얼마나 존재해야 많다고 할 수 있을까요?

 

1. 결측값이 가장 많은 변수를 가지고 2개의 새로운 데이터셋을 생성

하나는 모든 결측값을 해당 변수의 최솟값으로 대체, 다른 하나는 최댓값으로 대체

 

2. 원본 데이터셋, 새로 생성한 2개의 데이터셋에 대해 가장 중요한 관계의 회귀 분석을 실행

 

3. 회귀계수가 세 회귀에서 크게 차이가 없는 경우, 결측값의 양은 삭제하기에 적합

 

4. 그렇지 않다면 결측값의 종류를 분류하고 적절하게 대체

 

 

결측의 요인 - 루빈의 분류

통계학자 도널드 루빈의 분류에 의하면 상호배타적인 세 가지 변수 결측 요인이 있습니다. 

 

1. 완전 무작위 결측 (MCAR, missing completely at random)

 

변수의 결측이 무작위 요인과 같이 데이터 외부 변수에만 영향을 받는 경우입니다. 

 

 

결측을 진단할 때는 로지스틱 회귀를 사용합니다. 변수의 결측 여부가 다른 어떤 변수와도 통계적으로 유의미한 계수를 갖고 있지 않다면 MCAR로 취급합니다. 이것은 해당 변수의 결측 원인이 순전히 무작위라는 것을 의미하기 때문입니다.

 

2. 무작위 결측 (MCR, missing at random)

 

데이터의 변수 중 하나라도 변수의 결측에 영향을 미치는 경우입니다. 아래 그림에서 아이스크림을 구매한 고객만 인터뷰했다면 ‘맛 선호도의 결측 여부’에 영향을 주었을 것입니다. 이렇게 ‘아이스크림 구매 여부’라는 다른 관찰된 변수가 결측 여부에 영향을 주는 경우  MCR로 분류합니다. 

 

 

MCR를 분류할 때도 회귀 분석을 사용합니다. 어떠한 변수로 결측값이 있는 변수의 결측을 예측할 수 있다면 MNAR이라는 충분한 증거가 없는 한 해당 변수를 MCR로 보는 것이 기본 가설입니다.  

 

3. 무작위가 아닌 결측 (MNAR, missing not at random)

 

변수의 값이 그 변수의 결측에 영향을 미칠 때 MNAR이라고 합니다. 아래 그림에서는 ‘바닐라 맛 선호도’가 실제 공개된 ‘맛 선호도’와 ‘맛 선호도 결측 여부’에 모두 영향을 주는 케이스입니다. 

 

 

MNAR를 분류하는 것은 MCR 분류 방법과 유사하지만 좀 더 까다롭습니다. 앞에서 MCR을 분류할 때 특정 변수의 결측 여부와 유의미하게 상관이 있는 다른 변수가 있는지를 확인했습니다. 그런데 이때 상관이 있는 변수가 상식과 논리에 의해 관심 변수의 결측에 영향을 주었다고 보기 어려운 경우, 예를 들어 상관이 있는 변수가 결측 여부 변수의 자식 변수라면 결측값은 MNAR일 가능성이 높습니다.

 

정리하면 결측 데이터를 진단하는 의사결정 트리는 아래와 같은 형태를 띄게 됩니다.

 

   

 

결측 데이터 처리

인과관계 분석에서 결측 데이터의 처리는 결측 데이터가 없는 데이터셋을 완성하는 것이 목적이 아닙니다. 인과관계에 대해 편향되지 않은 정확한 추정치를 얻는 것이 목적이기 때문에 다중대체법(MI, multiple imputation)과 회귀분석을 함께 사용합니다. 앞서 살펴본 루빈의 결측 유형별로 정해진 다중대체법의 알고리즘이 있는 것은 아닙니다. 여기서는 다중대체법 중에서도 예측 평균 매칭(predictive mean matching) 알고리즘을 주로 다루겠습니다.

 

다중대체법과 예측 평균 매칭

 

전통적인 결측값 처리 방법은 결측값을 모두 특정값으로 대체합니다. 이런 방법은 분석에 편향을 일으킬 수 있기 때문에 근본적으로 문제가 있습니다. 다중대체법은 결측값을 서로 다른 값으로 대체하는 여러 개의 데이터셋을 구축한 다음 각 데이터를 분석하고 마지막에 결과 계수를 집계합니다.  

 

 

Python에서는 statsmodels.imputation 패키지로 mice(연쇄 방정식을 통한 다중대체) 알고리즘을 사용할 수 있습니다. 결과는 아래 그림처럼 보여지게 됩니다. 

 

 

이때 사용된 대체 방법은 예측 평균 매칭(PMM, predictive mean matching)입니다. PMM은 결측값이 있는 레코드와 가장 가까운 레코드를 선택하고 결측값을 이웃한 레코드 중 하나의 값으로 대체하는 방법입니다. PMM 알고리즘은 일부 무작위성이 있기 때문에 데이터셋마다 결과가 조금씩 다를 수 있습니다. 

 

PMM은 보간법(interpolation)을 사용합니다. 즉, PMM은 기존 값 사이에 있는 값을 생성합니다. 이렇게 하면 터무니없는 변수로 결측값을 대체할 위험을 최소화할 수 있습니다. 이 접근법은 변수가 이상한 분포를 보일 때도 잘 작동합니다. 그러나 PMM에는 몇 가지 단점이 있습니다. PMM은 속도가 느리고 대규모 데이터셋에 적용하기 어렵습니다. 레코드 사이의 거리를 지속적으로 다시 계산해야 하기 때문입니다. 또한 변수가 많거나 결측값이 많을 때 가장 가까운 이웃이 ‘멀리’ 있을 수 있고 이런 경우에 이웃 값이 대체값으로 적절하지 않을 수 있습니다. 

 

따라서 변수의 분포 정보가 있는 경우에는 PMM을 사용하지 않고 정규분포 대체법을 사용하는 경우가 많습니다. 다만 정규분포 대체법은 Python에서는 패키지로 제공되지 않습니다. 

 

하지만 기본적인 대체 방법, 즉 예측 평균 매칭을 사용하더라도 결측값이 있는 모든 행을 삭제하거나 일괄적으로 특정값으로 대체하는 것보다는 분석 성능을 높일 수 있습니다. 

 

 

 

이 글은 <행동 데이터 분석> 책을 읽고 주요 내용과 제 생각을 정리한 글입니다.

Part 3 견고한 데이터 분석

Chapter 6 결측 데이터 처리 

 

반응형

댓글