정형데이터에서 결측치를 처리하는 방법

boston data에서 임의로 15~25% 결측치를 생성했음

 

 

1. pattern을 통한 결측치 처리

 

결측치의 pattern을 대략적으로 파악하면 어떤 식으로 처리할지 감이 올 수 있음

 

 

x축을 개별 변수, y축을 변수의 value로 하고 heatmap을 그림

 

전체 dataset의 x축을 feature, y축을 feature의 value라고 하여 pattern을 그려보면

 

왼쪽과 같이 random하게 결측치가 있을 수 있고

 

오른쪽 처럼 어떤 규칙을 보일수도 있음

 

boston dataset의 결측치 패턴

 

위와 같이 boston dataset의 pattern을 그려보니 결측치가 random하게 분포하는 것 같음

 

random하게 15~25% 결측치를 만들었으니까

 

 

가상의 dataset의 결측치 pattern

 

가상으로 만든 dataset의 pattern이 위와 같다면 결측치가 어떤 규칙을 가지고 분포하는 것 같다는 생각이 듦

 

가상의 dataset의 실제 모습

 

pattern이 보이는 것 같아 실제로 파고들어가보니 위의 그림과 같이 나타남

 

모든 value가 같게 나타나니까 NaN에도 다른 값들과 같은 값으로 채우면 적절할 것 같음

 

 

2. Univariate

 

random하게 결측치가 발생한 경우 단일 변수에 대해 결측치를 처리하는 방법

 

단순히 제거하거나 변수 value들의 평균, 중위수, 혹은 어떤 상수를 채워넣거나

 

결측치를 단순히 제거하는 방법에도 결측치가 발생한 row만 제거하거나 결측치가 발생한 변수를 제거하거나

 

결측치가 발생한 row만 제거하는 방법에도 전체적인 데이터가 불충분하다면 데이터가 제거되므로 오히려 안좋을 수 있음

 

특히 test 데이터에도 동일한 포인트로 결측치가 존재하면 단순히 제거하는 경우 사실상 test에 대한 예측이 어려워짐

 

결측치가 발생한 변수를 제거하는 방법은 해당 변수 전체에서 결측치가 발생한 row의 비율이 너무 많은 경우 사용

 

그럴 경우 억지로 그 변수를 쓰려고 해봤자 별로 도움이 안돼

 

결측치를 채워넣고자 한다면 어떤 평균, 중위수, 상수로 채우는 것은 어떤가?

 

신중하게 접근할 필요가 있음

 

결측치를 평균으로 채우기 예시

 

완전한 데이터가 왼쪽이고 uniform 분포를 따르는데 임의로 결측치를 발생시켜 전체 데이터의 평균으로 채운 모습이 오른쪽

 

분포가 원래 분포와 완전히 어긋나버림

 

 

결측치의 비율에 따라 결측치를 어떤 수로 채운다면 생길 수 있는 문제란

 

 

주황색은 결측치를 채우기 전 target과 feature와의 상관관계

 

파란색까지?는 결측치를 채우고 나서 계산한 target과 feature와의 상관관계

 

결측치 비율이 5%인 경우는 결측치를 평균이나 중위수로 채워도 상관관계가 여전히 비슷해서 큰 영향이 없는데

 

결측치 비율이 20%이면 평균이나 중위수로 채울 때 상관관계가 완전히 달라져서 조심해야함

 

 

3. multivariate

 

결측치를 채우기 위해 주변 변수를 통해 결측치 값을 예측하는 머신러닝 모델을 사용

 

회귀분석 모델로 x1을 x2,x3,...,xn으로 예측하거나 x2를 x1,x3,x4,...,xn으로 예측하거나…. xn을 x1,x2,...,xn-1로 예측

 

KNN 방법을 활용해서 결측치를 가진 sample과 가장 유사한 sample을 찾아 그 sample이 가진 값으로 채워넣을 수 있음

 

그러나 데이터 결측치가 너무 많으면 생각보다 쉽지는 않다

 

데이터 크기에 따라 시간이 많이 소요될 수 있어서 적절한 판단이 필요하다.

 

선형 모델과 KNN으로 결측치를 채우고 난 후 분포 비교

 

위 그림을 보면 단순히 평균이나 중위수로 결측치를 채우는 것보다 전체적인 분포를 어느정도 보존해준다는 사실을 확인

 

 

4. 변수의 의미를 파악하여 합리적으로 채우는 방법

 

어떤 경우는 통계적인 방법보다 각 변수가 가지는 의미로부터 합리적으로 추측하여 채워넣는 것이 효과적일 수 있음

 

결측치를 채워넣는 논리

 

강수량 같은 경우는 비가 안오는 날이 많이 관측되었다면 0으로 대체하는 것이 합리적이다

 

 

 

TAGS.

Comments