결측치에 대한 고찰

yulsikogi·2024년 2월 20일
post-thumbnail

데이터 분석을 해보면서 결측치에 대한 생각을 끄적여보려 한다. 우선 기존에 생각했던 결측치에 대한 솔직한 생각을 적으면, '삭제하면 된다', '비슷한 값을 채워 넣으면 된다.' 라는 무책임하고 터무니 없는 생각을 했었다. 그러나 이번에 단 하루동안 실제 분석을 해보면서 큰 변환점이 찾아왔다.

1. 데이터가 많지 않다. => 결과가 쉽게 바뀔 수 있다.

생각보다 데이터가 많지 않은 것이 중요했다. 데이터가 많지 않기 때문에, 단순하게 결측값이 있는 데이터라는 이유로 지우면 변화가 크다. 최근에 본 유튜브의 내용 중에 이런 내용이 있었다.

과거, 날씨를 예측하기 위해서는 소수점 6자리까지 값을 입력해야 했는데, 3자리만 입력하니까 날씨가 바뀌었다.
ex) 0.342123 => 0.342

데이터 분석도 비슷하다고 생각한다. 결측치를 어떻게 처리하느냐에 따라 분석에 큰 영향을 준다. 그래서 결측치가 있다고 데이터를 지우거나 하는 것은 무식한 생각이었다. 그래서 이를 최대한 비슷하게, 어울릴 것 같은 데이터로 채워야한다. 효율적인 데이터 셋을 갖추기 위해서는 그래야 할 것 같다.
(물론, 아직은 데이터 분석의 걸음마를 내딛은 단계기 때문에 틀릴 수 있다.)

2. 대체는 어떻게?

결측치가 있는 데이터를 삭제하는 것은 무식한 것이라는 생각이 들었으니 이제는 결측치를 어떻게 처리하는지, 대체하는지가 굉장히 중요했다. 나에게는 총 2가지 칼럼에서 문제였고, 각각의 해결방식이 달랐다.

Age 처리하기

예를 들어, 약 900개의 데이터가 존재하고, 그 중 Age 칼럼에 대한 결측치가 200개라고 해보자. 그리고 아주 단순하게 나이대 별로 인원을 나눠서

- 20대 미만: 100명
- 20대~40대: 300명
- 40대~50대: 200명
- 50대 이상: 100명
- 결측치: 200명

이라고 했을 때, 이 200명을 중앙값이나 평균값으로만 처리 할 수가 없다. 그 이유는 첫 번째 굉장히 많은 양이다. 두 번째 언급한대로 처리하면, 30대에 해당하는 인구만 폭발적으로 증가한다. 즉, 이를 막대그래프로 시각화를 해서 연령별 인구를 보면, 30대만 삐죽 튀어나올 것이다. 그러니 단순히 나이만 가지고 결측치를 고려해야 할 것이 아니라 다양한 칼럼들과 비교를 하면서 결측치를 수정해야 했다.

그래서 나는 Pclass(1~3등석)와 gender(성별)를 기준으로 연령의 중앙값으로 처리를 했다. 예를 들어, 2등석의 남성의 연령 중앙값이 35살일 경우, 연령을 모르는 남성이 2등석일 경우, 35살로 측정을 했다. 이렇게 함으로써 그래도 쏠리지 않고 적정한 수준으로 결측치를 나눌 수 있었다.

Cabin 처리하기

Cabin은 객실번호다. A01, T85, D33 이런 식으로 값이 들어있다. 이 Cabin에서 결측치를 처리하는 것이 어려웠다. 우선은 약 900개의 데이터 중에 약 700개가 결측치였다. 즉, 이것으로 데이터를 분석하기에는 좋지 않은 데이터였다.

하지만 객실의 위치에 따라 생존가능 여부가 크게 갈리기 때문에, 어거지여도 이 결측치를 해결하기 위해 고민을 가졌다. 첫 번째로 가진 생각은 Pclass(등석)별로 나누면 좋을 것이라 생각했다. 그래서 등석별로 객실번호를 확인해봤는데, 유의미한 결과를 가질 수 없었다. 두 번째로 Cabin(객실)별로 Fare(요금)이 다를 것이라 판단해서 객실별 요금을 확인해보니, 객실별로 요금 차이가 크게 나타났다는 걸 알 수 있었다. 그래서 보다 정교하게 알기 위해 등석별로 나눈 다음, 객실별로 나눠보니 확실하게 유의미한 결과를 도출할 수 있었다.

총 A~T까지 객실이 존재하는데,
1등석은 총 A, B, C, D, E, T 6개 객실이 있고, B와 C가 가장 비싸고 A와 T가 가장 저렴했다.
2등석은 총 D, E, F 3개의 객실이고 크게 차이가 없었다.
3등석은 총 E, F, G 3개의 객실이 있고 2등석과 마찬가지였다.

그래서 결측치를 가진 데이터는 다음과 같이 데이터를 처리했다.

1. 데이터의 등석을 확인

2. 지출한 요금과 가장 가까운 객실을 배정.

결측치에 좌절하지 않기

이번 데이터를 분석하면서 생각이 정립이 되었다. 데이터를 분석하는 과정이 단순하게 뚝딱뚝딱 처리하는 것이 아니다. 데이터간의 관계를 정립하고 관계를 통해 도출한 데이터를 다시 활용하여 하나의 web처럼 뻗어나갈 수 있어야 한다.

결측치에 대해 생각을 하면서 크게 드는 생각은 '초점을 잘 맞춰야된다.'는 생각이 들었다. 앞서 Cabin의 결측치를 해결하는 과정에서도 한 번에 해결한 것이 아니라 여러 번 테스트를 해 본 다음에 유용한 정보를 도출한 것처럼 초점을 잘 맞추는 것이 중요한 것같다.

물론, 초점을 잘 맞췄다고 해서 '유용한 정보다.'. '인사이트를 얻었다.'라고 단정지을 수는 없지만, 이런 과정이 데이터 분석에서 중요한 과정이고 핵심이지 않을까 생각한다.

profile
Let's enjoy it. For me

0개의 댓글