빅데이터분석기사 필기: 2과목 빅데이터 탐색 강좌의 맛보기 강의입니다.
그러면 데이터 결측값 처리에 대해서 학습해 보도록 하겠습니다. 앞서 데이터의 정제 과정에서 이 결측값이라는 것을 처리하는 게 굉장히 중요한 과정이라는 것을 설명드렸습니다. 결측값을 다시 한번 정의 내려보면 결측값은 missing value라고 얘기를 하는데요. 데이터를 수집하고 저장하는 과정에서 저장할 값을 얻지 못하는 경우에 발생되는 것이 바로 결측값이 되겠습니다. 어떤 설문조사나 통계조사를 할 때 응답자가 문항에 응답을 하지 않은 경우가 바로 결측값으로 기록이 되는데요. 데이터셋에 이런 결측값이 섞여 있게 되면 데이터 분석 시에 여러 가지 문제가 발생이 됩니다. 왜곡된 결과가 나올 수도 있고 어떤 경우에는 아예 오류가 발생할 수도 있다는 것이죠. 그래서 결측값에 대한 처리를 반드시 전처리 과정에서 하고 넘어가야 되는데요. 가능하면 결측값을 제외하면 가장 편리하게 분석을 할 수가 있겠죠. 그런데 어떤 경우에는 결측값 자체가 의미를 가지고 있는 경우들도 있을 수가 있구요. 또 어떤 경우에는 결측값이 너무나 많아서 결측값이 있는 레코드를 삭제하게 되면 데이터가 너무 손실이 되는 경우가 있다는 것입니다. 자 그래서 이 결측값에 대한 올바른 처리가 필요한데요. 이 결측값은 어떻게 알아볼 수 있냐면 R이나 파이썬에서 결측값을 확인할 수 있습니다. 이건 결측값은 무엇을 쓰느냐에 따라서 표현되는 방식이 굉장히 많이 다른데요. 우선 NaN으로 표시되는 경우가 있는데 이게 파이썬에서 NaN으로 표시됩니다. 이거는 Not a Number, 숫자가 아니다 라는 의미로 Not a Number로 표시가 될 수 있구요. 그 다음 R에서는 NA로 표시가 되는데 NA라는 것은 Not Available, 유용하지 않다 라는 의미로 표현이 됩니다. 이것 이외에도 NA, NULL, 공백 같은 것으로 표시가 될 수가 있습니다. 아래쪽에 보시면 R에서 Air Quality라는 데이터셋을 summary한 결과입니다. R에서 어떤 데이터셋에 대한 정보를 얻고자 할 때, 요약된 정보를 얻고자 할 때 summary라는 함수를 사용하게 되는데요. 여기에는 지금 Ozone, Solar.R, Wind라는 세 개의 변수를 먼저 볼 수가 있습니다. 여기에 지금 나타난 값들 뒤에서 또 설명할 기회가 있겠지만 여기에서 각 변수에 대한 다양한 정보들을 볼 수 있는데요. 최솟값, 1사분위수, 중앙값, 평균, 3사분위수, 최댓값 그리고 여기에 나와 있는 게 NA의 개수가 되겠습니다. 그래서 오존이라는 변수에는 지금 37개의 결측값이 있고 Solar.R은 7개의 결측값이 있다라는 것을 살펴볼 수가 있습니다. 그래서 먼저 이런 summary 같은 요약할 수 있는 함수를 통해서 결측값이 존재하는지를 먼저 파악을 해보는 게 좋은 방법이 될 것 같습니다. 그러면 결측값이라고 해서 다 모두 동일한 특성을 갖고 있지는 않은데요. 특성에 따라서 결측값의 유형을 세 가지로 분류를 해봤습니다. 완전 무작위 결측과 무작위 결측, 비무작위 결측 이렇게 나누어지게 됩니다. 위에 두 가지는 무작위 결측이 되겠고 세 번째 있는 것은 비무작위 결측이 되겠는데요. 우선 완전 무작위 결측 약어로는 MCAR이라고 얘기를 하는데요. 결측이 다른 속성과 아무런 관련이 없이 완전히 무작위적으로 발생하는 경우를 의미하게 됩니다. 이런 것은 앞서 말씀드렸던 것처럼 설문조사에서 응답자들이 질문자의 질문을 그냥 무심코 넘겨 버린 것이죠. 이럴 때는 완전 무작위 결측이라고 얘기를 합니다. 다른 어떤 속성과는 관계가 없는 것이죠. 그런데 두 번째 있는 무작위 결측 MAR이라는 것은 결측이 다른 속성과 관련이 있기는 하지만 결측의 발생은 무작위로 이루어진다 라고 설명이 되었는데요. 예를 들면 어떤 건강에 대한 설문조사가 있습니다. 건강 설문조사가 있는데 여기에는 운동 빈도에 대한 질문이 있다고 한번 예를 들어 보겠습니다. 그런데 나이가 많은 사람들은 운동을 잘 하지 않으니까 운동 빈도에 대한 답을 제대로 하지 않는다는 것이죠. 그러면 이 운동 빈도에 대한 결측이라는 것은 나이라는 속성과 관계가 있다고 볼 수 있습니다. 다른 속성과 관련이 있죠. 이것을 무작위 결측 MAR이라고 얘기합니다. 3. 비무작위 결측 MNAR이라는 것은 결측이 다른 속성과 관련이 있으며 결측의 발생이 무작위가 아니다 라고 되어져 있는데요. 예를 들면 소득에 대한 설문이 있을 때 높은 소득을 받는 사람은 자신의 소득을 밝히기를 좀 꺼릴 수가 있습니다. 그러면 이 소득에 대한 결측값은 실제 소득 수준과 관련이 있는 거죠. 자기 자신의 그 변수 자체와 관련이 있는 것을 의미합니다. 그러면 이런 경우에는 결측치의 처리가 쉽지 않겠죠. 왜냐하면 소득 수준과 직접적으로 관련이 있는데 이것을 결측 처리를 하기가 쉽지 않다는 것입니다. 그래서 결측값의 유형에는 완전 무작위 결측, 무작위 결측, 그리고 비무작위 결측이 있다라는 것을 알아두시면 되겠습니다. 그럼 다음은 결측값을 처리하는 방법이 되겠는데요. 앞서 설명드린 것처럼 가장 손쉬운 방법은 결측치를 모두 없애버리는 것입니다. 그런데 결측치를 없앴을 때 어떤 유용한 결측치가 사라지는 경우도 있을 수가 있구요. 또 너무 많은 자료가 손실이 될 수 있다고 설명을 드렸습니다. 첫 번째 완전 분석법이 바로 결측값이 존재하는 레코드를 아예 삭제하는 방법입니다. 결측값이 많은 레코드에 존재하는 경우 너무 많은 자료가 삭제되어서 통계적인 추론에 타당성 문제가 발생할 수 있다는 것입니다. 그래서 전체 중에서 결측치가 차지하는 비율이 작을 경우에는 이런 방법을 써도 되지만 결측값이 너무 많을 경우에는 좋지 않은 방법이 된다는 것을 알 수 있습니다. 두 번째는 평균 대치법이 되겠는데요. mean imputation이라고 합니다. imputation이라는 게 어떤 다른 값으로 대치하는 그런 방법이 되겠는데요. 여러분들 한번 생각해 보시면 나이라는 속성이 있을 때 나이들을 응답을 하는데 몇 명은 응답을 하지 않은 것입니다. 그럴 때 여기 나이에는 어떤 정보를 넣는 것이 가장 손쉬운 방법일까요? 이것을 삭제하지 않고 뭔가로 채워야 된다면 아마 이 값들을 대표할 수 있는 평균을 가장 많이 사용할 것 같습니다. 평균을 이용해서 대치하는 방법이 평균 대치법이 되겠고요. 관측 또는 실험을 통해서 얻어진 데이터의 평균으로 대치하는 방식입니다. 여기에는 비조건부 평균 대치법이 있고 조건부 평균 대치법이 있는데요. 비조건부 평균 대치법은 그냥 조건 없이 무조건 관측 데이터의 평균으로 대치를 한다는 의미가 되겠구요. 조건부는 각각 다른 값을 쓴다는 것이죠. 회귀분석을 통해서 계산한 값을 넣어주는 그런 방식이 조건부 평균 대치법이 되겠습니다. 그런데 이렇게 평균값으로 결측치를 대체하게 되면 이 대체된 값들은 모두 같아지게 되겠죠. 실제로는 이 나이들이 모두 다른 것이지만 이것의 평균 나이로 모두 25로 대체를 하게 되면 해당 변수에 대한 어떤 변동폭, 분산이 감소하게 되는 것입니다. 모두 동일한 데이터가 들어가는 거니까요. 그러면 실제에 대한 변동성을 평균 대치법의 단점이 되겠죠. 그래서 이때는 단순 확률 대치법이라는 것을 사용할 수가 있는데요. 앞서 설명드린 문제가 평균 대치법에서 일어날 수 있는 표준오차의 과소추정 문제인데요. 표준오차라는 게 분산과 관련이 있는데요. 앞서 같은 평균값을 넣음으로써 어떤 분산값이 줄어든다고 설명을 드렸습니다. 이게 표준오차의 과소추정 문제인데요. 이것을 보완하기 위해서 만든 방법이 단순 확률 대치법이 되겠습니다. 이것은 결측값이 있는 변수의 어떤 분포를 고려해서 랜덤하게 값을 추출해서 결측값을 대체하는 방식이 되겠는데요. 대표적으로 핫덱 방법이 있고 nearest neighbor 방법이 있습니다. 핫덱 방법은 결측값을 가진 데이터와 유사한 특성을 가진 다른 데이터 값을 복사해서 결측값을 넣는 것입니다. 예를 들어서 특정 응답자가 질문 10번을 비워 놨다고 했을 때 다른 응답자의 값을 복사해 갖고 와서 넣는 그런 방식이 되겠구요. 니어리스트 네이버 방법은 결측값을 가진 데이터와 가장 가까이에 있는 데이터, 이게 최근접 이웃이 되겠습니다. 예를 들면 어떤 환자에 대한 데이터 데이터가 결측치가 발생했다면 아주 유사한 다른 환자의 응답으로 대체하는 방식이 니어리스트 네이버 방법이 되겠습니다. 핫덱은 유사한 특성을 제외하고 보시는 게 조금 더 정확할 것 같습니다. 그냥 다른 데이터 값을 복사한다고 생각하시면 되겠고요. 니어리스트 네이버가 아주 가까운 데이터, 즉 유사한 특성을 가진 값을 대체한다 이렇게 생각을 해 주시면 좋을 것 같습니다. 네 번째는 다중대치법이 있습니다. Multiple Imputation 방식이 있는데요. 이거는 앞서의 단순 대치법을 한 번 하는 것이 아니라 여러 번 대치를 하는 것이죠. M번의 대치를 통해서 M개의 가상적인 완전 자료를 만드는 방법이다. 아무래도 한 번 대치를 하는 것보다는 좀 여러 과정을 통해서 완벽한 데이터를 만든다라고 볼 수 있고요. 대치, 분석, 결합의 단계를 거치게 됩니다. 결측 데이터를 처리하는 과정에서 발생할 수 있는 편향을 최소화하고 분석의 정확도를 좀 더 높이는 방법이라고 볼 수가 있는데요. 대신 이렇게 여러 번 대치를 하는 과정을 거치기 때문에 계산 복잡성이 증가하는 경향이 있다고 볼 수가 있습니다. 그럼 여기까지 데이터 결측값 처리에 대한 학습을 마치도록 하겠습니다.
