정형데이터에서 결측치를 처리하는 방법
boston data에서 임의로 15~25% 결측치를 생성했음
1. pattern을 통한 결측치 처리
결측치의 pattern을 대략적으로 파악하면 어떤 식으로 처리할지 감이 올 수 있음
x축을 개별 변수, y축을 변수의 value로 하고 heatmap을 그림
전체 dataset의 x축을 feature, y축을 feature의 value라고 하여 pattern을 그려보면
왼쪽과 같이 random하게 결측치가 있을 수 있고
오른쪽 처럼 어떤 규칙을 보일수도 있음
위와 같이 boston dataset의 pattern을 그려보니 결측치가 random하게 분포하는 것 같음
random하게 15~25% 결측치를 만들었으니까
가상으로 만든 dataset의 pattern이 위와 같다면 결측치가 어떤 규칙을 가지고 분포하는 것 같다는 생각이 듦
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이 가진 값으로 채워넣을 수 있음
그러나 데이터 결측치가 너무 많으면 생각보다 쉽지는 않다
데이터 크기에 따라 시간이 많이 소요될 수 있어서 적절한 판단이 필요하다.
위 그림을 보면 단순히 평균이나 중위수로 결측치를 채우는 것보다 전체적인 분포를 어느정도 보존해준다는 사실을 확인
4. 변수의 의미를 파악하여 합리적으로 채우는 방법
어떤 경우는 통계적인 방법보다 각 변수가 가지는 의미로부터 합리적으로 추측하여 채워넣는 것이 효과적일 수 있음
강수량 같은 경우는 비가 안오는 날이 많이 관측되었다면 0으로 대체하는 것이 합리적이다
'정형데이터' 카테고리의 다른 글
time series data의 cross validation에 대한 여러가지 고찰 (0) | 2022.06.28 |
---|---|
데이터 전처리 - 이상치를 처리하는 방법의 기초 (0) | 2022.06.26 |
연속형 변수를 전처리하는 방법은 무엇이 있고 왜 전처리를 해야하는가? (0) | 2022.06.19 |
범주형 변수를 전처리하는 방법의 모든 것 (0) | 2022.05.26 |
회귀문제에서 사용하는 decision tree (0) | 2021.12.15 |