최근에 일주일이 넘는 시간을 투자했던 프로젝트를 아예 처음부터 다시 시작해야 했던 일이 있었다. 프로젝트의 기획 방향이 달라졌다거나 데이터가 잘못되었던 문제는 아니었다. 데이터를 분석할 때 가장 먼저 해야하는 “데이터 정제”에서 내가 꼼꼼하게 살펴보지 못한 탓이었다.
프로젝트 중간진행을 팀 리더한테 공유하는 과정에서 특정 논지의 결과가 이상하다는 피드백을 받았고, (결과가 이상하다는 논거는 리더의 직관에 의한 피드백이었는데ㅡ 문제를 해결하고나서 보니 리더의 직관이 맞았다. 역시 한 도메인에서 쌓은 연차는 무시 못한다…) 피드백받은 내용을 다시 정리해보던 중 나의 분석 첫 단추인 ‘데이터 정제’ 단계에서부터 꼬였다는 걸 알게 된 것이다.
*다행히도 프로젝트는 예상 기한보다 시간 소요가 많아지긴 했지만 무사히 끝마쳤다.
그래서 이번 글은 초심을 다잡는 마음으로, 기본적이지만 필수적이고, 무엇보다 꼼꼼히 작업해야 하는 “데이터 정제”에 대한 글을 써보고자 한다.
데이터 정제란?
“데이터 정제”는 데이터 분석의 첫 단계로, 수집된 데이터에서 불필요한 정보를 제거하고 유용한 정보를 추출하는 작업이다. 데이터 정제는 데이터 분석의 정확성과 효율성에 큰 영향을 미치기 때문에 굉장히 중요하다. 데이터 정제를 하지 않으면 분석 결과가 왜곡될 수 있고, 분석에 필요한 데이터가 부족하거나 불완전한 경우도 발생할 수 있다.
데이터 정제는 다음과 같은 과정으로 이루어진다.
- 데이터 수집: 분석할 데이터 수집
- 데이터 평가: 수집한 데이터를 평가하여 이상 데이터 식별
- 데이터 정제: 이상 데이터 제거 및 보충
- 데이터 변환: 분석에 필요한 형식으로 데이터 변환
이 중 “데이터 평가” 과정은 데이터 정제의 중요한 과정 중 하나로, 분석가는 주어진 데이터셋을 철저히 검토하고, 데이터의 일관성과 신뢰성을 평가해야 하는데 이 과정을 “데이터를 평가한다”고 한다. 데이터 평가는 다음과 같은 단계로 수행될 수 있다.
- 데이터의 일관성 검토: 데이터가 모두 동일한 형식과 구조로 되어 있는지 확인한다. 예를 들어, 모든 열(column)이 동일한 길이를 가지는지, 변수명이 일관된 형식을 가지는지, 데이터 타입이 일관된지 등을 검토한다.
- 결측치 및 이상치 검토: 결측치와 이상치가 있는지 확인한다. 결측치는 누락된 데이터이며, 이상치는 다른 데이터와 벗어난 값으로 일반적으로 분석에 방해가 될 수 있다.
- 중복 데이터 검토: 중복 데이터가 있는지 확인한다. 중복 데이터는 분석에서 부적절한 결과를 유발할 수 있으므로, 중복된 데이터는 적절한 방법으로 제거/수정해야 한다.
- 변수(열)의 의미와 유효성 검토: 변수(열)가 분석에 적절한 의미를 가지는지, 그리고 변수 값이 유효한 범위 내에 있는지 확인한다.
- 데이터 분포 검토: 변수들의 분포를 확인하여, 변수 간의 상관관계나 불균형한 데이터 분포 등을 파악한다.
- 데이터 시각화: 데이터를 시각적으로 표현하여 데이터의 패턴과 특징을 파악한다. 시각화를 통해 이상치나 패턴 등을 쉽게 파악할 수 있다.
이러한 데이터 평가 과정은 데이터 정제의 기본이며, 분석 전에 데이터를 충분히 검토하여 문제점을 파악하고, 품질을 향상시키는 것이 중요하다.
데이터를 평가하여 이상 데이터를 식별했다면, 이젠 이 이상 데이터를 어떻게 처리해야할지 고민해야 한다. 우리가 보통 ‘이상 데이터’라고 말하는 데이터는 3가지 분류로 나뉜다.
- 중복 데이터
- 결측 데이터
- 이상치
중복 데이터는 어떻게 처리해야 할까?
중복 데이터는 데이터 정제 과정에서 가장 흔하게 나타나는 문제 중 하나이다. 중복 데이터 처리 방법은 다양하지만, 대표적인 방법은 다음과 같다.
- 중복 데이터 제거: 중복 데이터 중 하나를 제거한다. 데이터의 고유 식별자(unique identifier)를 사용하여 중복 데이터를 식별하고, 중복 데이터 중 하나를 제거하는 게 일반적이다.
- 중복 데이터 합치기: 중복 데이터를 합쳐서 하나의 데이터로 만든다. 중복 데이터를 합치는 방법에는 여러 방법이 있지만, 대표적으로는 중복 데이터의 값들을 평균, 합, 최댓값, 최솟값 등으로 계산하여 하나의 데이터로 합치게 된다. 이 중 어떤 통계값을 활용할지는 데이터의 특징에 따라 다르다.
- 중복 데이터 분할: 중복 데이터를 분할하여 두 개 이상의 데이터로 만든다. a와 b가 중복 데이터일 때, a와 b를 개별적인 데이터로 분할하는 식이다. 이 또한 어떤 기준에 따라 분할할건지를 데이터의 특징에 따라 결정해야 한다.
결측 데이터는 어떻게 처리해야 할까?
결측치는 데이터에서 값이 누락되어 있는 경우를 말한다. 일반적으로 결측치를 처리하는 방법에는 다음과 같은 방법들이 있다.
- 결측치 삭제: 결측치가 있는 행이나 열을 삭제하는 방법. 이 방법은 결측치가 전체 데이터의 일부일 때 사용할 수 있다. 하지만 결측치가 소수가 아닌 많은 경우 데이터의 손실이 커질 수 있어 재고해봐야한다.
- 결측치 대체: 결측치를 다른 값으로 대체하는 방법. 대체값으로 평균값, 중앙값, 최빈값 등을 사용할 수 있다. 이 방법은 데이터의 손실을 최소화할 수 있지만, 대체값이 실제 값과 차이가 크거나, 대체값을 선택하는 기준에 따라서는 결과에 왜곡이 생길 수 있기 때문에 어떤 통계값을 활용해야할지 결정하는 게 무엇보다 중요하다.
- 예측 모델 사용: 결측치를 예측하는 모델을 사용하여 결측치를 대체하는 방법. 이 방법은 데이터의 손실을 최소화할 수 있고, 대체값의 정확도도 높일 수 있다. 하지만 예측 모델을 만드는 데에 시간과 비용이 많이 소요될 수 있고, 이럴 경우 오히려 배보다 배꼽이 큰 경우가 발생할 수 있다.
이상치는 어떻게 처리해야 할까?
이상치는 데이터의 분포에서 일반적인 범위를 벗어나는 값이나 패턴을 의미한다. 이상치를 처리하는 방법에는 아래와 같은 방법들이 존재하는데, 보면 알다시피 결측치를 처리하는 법과 별반 다르지 않다.
- 이상치 삭제: 이상치를 가지고 있는 행이나 열을 삭제하는 방법. 결측치를 처리할 때와 마찬가지로 이 방법은 이상치가 전체 데이터의 일부일 때만 사용할 수 있고, 이상치의 수가 많은 경우엔 오히려 데이터의 손실이 크게 발생할 수 있어 추천하지 않는다.
- 이상치 대체: 이상치를 다른 값으로 대체하는 방법. 평균값, 중앙값, 최빈값 등 여러 통계값이 대체값 후보가 된다. 이 방법을 이용할 경우 이상치를 삭제하는 것보다 데이터의 손실을 줄일 수 있지만, 이상치가 대체값과 차이가 큰 경우에는 대체값으로 인한 왜곡이 발생할 수 있다.
- 이상치 보정: 이상치를 다른 값으로 대체하는 것이 아니라, 보정하는 방법. 이 방법으로는 이상치를 포함한 데이터를 사용하여 모델을 만들고, 모델로부터 예측된 값을 사용하는 방법이 있다. 데이터의 손실을 최소화하면서도 이상치를 보정할 수 있다. 하지만 모델링 과정에서 발생할 수 있는 오차나 모델의 제약 조건에 따라서는 예측 값이 실제 값과 차이가 크게 발생할 수 있다.
중복 데이터, 결측 데이터, 이상치를 어떻게 처리하는지에 따라 분석 결과가 달라질 수 있다. 따라서 분석가는 데이터 분석 목적과 데이터 특성에 맞는 이상 데이터 처리 방법을 선택하는 것이 중요하다.
데이터 변환
데이터 정제 과정에서 데이터 변환은 데이터의 형식이나 구조를 변경하는 것을 뜻한다. 분석 목적에 따라 데이터를 다루기 쉽도록 변환하는 작업이나, 데이터를 효과적으로 분석하기 위해 필요한 처리를 수행하는 작업 등이 있다.
데이터 변환은 다양한 방법으로 수행될 수 있다. 예를 들어, 범주형 데이터를 수치형 데이터로 변환하거나, 문자열 데이터를 날짜 데이터로 변환하는 등의 방법이 있다. 또한, 데이터의 스케일을 조정하거나, 정규화하는 등의 방법도 데이터 변환에 해당한다.
*데이터 분석 모델링에서 일부 알고리즘은 일부 요소에 민감할 수 있으므로, 데이터의 변환은 결과적으로 분석 성능을 향상시키는 데 도움이 될 수 있다. 따라서 데이터 변환 과정은 데이터 분석의 전체 과정에서 중요한 부분이다.
데이터 스케일링
데이터 스케일링은 데이터 분석에서 사용되는 변수들 간의 스케일 차이를 조정하는 과정이다. 변수 간의 스케일 차이는 분석 결과에 영향을 미칠 수 있으며, 이를 조정함으로써 분석 결과의 신뢰도를 향상시킬 수 있다.
예를 들어, 한 변수가 1부터 10까지의 범위를 가지고 다른 변수가 100부터 1000까지의 범위를 가진다면, 후자의 변수가 분석 결과에 큰 영향을 미칠 가능성이 높다. 이러한 상황에서 스케일링을 통해 두 변수의 스케일을 동일하게 맞춰주면, 두 변수의 영향력을 공정하게 비교할 수 있게 된다.
주요한 데이터 스케일링 방법은 다음과 같다.
- 표준화(Standardization): 평균이 0, 표준편차가 1이 되도록 스케일링하는 방법. 이 방법은 대부분의 경우에 사용할 수 있으며, 이상치(outlier)에 덜 민감한 결과를 얻을 수 있다.
- 정규화(Normalization): 변수의 값 범위를 [0, 1] 또는 [-1, 1]로 변환하는 방법. 이 방법은 변수의 값이 0에 가까운 것이 중요한 경우에 유용하다.
- 최대-최소 스케일링(Min-Max Scaling): 변수의 값 범위를 [0, 1] 또는 [-1, 1]로 변환하는 방법으로, 특정 상한선과 하한선이 있는 경우에 사용된다.
- 로그 변환(Log Transformation): 변수의 값이 대부분 양수인 경우에 사용되며, 로그 함수를 적용하여 스케일링. 이 방법은 변수의 분포가 극단적으로 치우친 경우에 유용하다.
위의 방법 중 주로 사용하는 방법은 표준화와 정규화인데, 이 두 방법이 항상 나는 헷갈렸었다. (나만 그런 걸수도 있다…ㅎㅎ;;) 그래서 나와 같은 사람들을 위해서 두 방법의 차이를 좀 더 적어보고자 한다.
표준화는 변수의 평균을 0, 표준편차를 1로 만들어 변수 간의 스케일 차이를 제거하는 방법이다. 이 방법은 가장 일반적으로 사용되며, 각 변수의 값이 정규분포를 따른다는 가정을 전제로 한다. 표준화는 아래와 같은 수식으로 나타낼 수 있다.
(각 변수의 값 - 각 변수의 평균) / 각 변수의 표준편차
반면에, 정규화는 변수의 값 범위를 [0, 1] 또는 [-1, 1]로 조정하는 방법이다. 이 방법은 데이터의 분포가 정규분포가 아닐 때 사용할 수 있으며, 이상치가 많은 데이터에서도 잘 작동한다. 정규화는 수식으로 나타내면 아래와 같다.
(각 변수의 값 - 각 변수의 최솟값) / (각 변수의 최댓값 - 각 변수의 최솟값)
따라서 만약 데이터가 정규분포를 따르고 변수 간의 스케일 차이가 크게 나타난다면 표준화를 선택하는 것이 좋고, 데이터의 분포가 정규분포를 따르지 않고 변수 간의 스케일 차이가 크지 않은 경우에는 정규화를 선택하는 것이 좋다.
데이터 분석 과정 중 “데이터 정제”에 대하여 다뤄보았다. 사실 데이터 정제 방법을 모르는 사람은 없을 것이다. 하지만 분석가로 여러 레포트를 써내려가다보면, 특히 업무가 많이 몰려서 최대한 빨리 이슈를 마무리해야 하는 상황이 오면 이 데이터 정제 과정을 무의식적으로 등한시하게 되는 상황이 오는 것 같다. 나 또한 그랬다. (이 글의 탄생 배경 또한 데이터 정제과정을 꼼꼼히 살피지 않았다가 큰코 다친 경험에 있다…) 열 번 고치는 것보다 한 번 꼼꼼히 하는 게 시간 측면이나 에너지 측면에서 훨씬 낫기 때문에 물론 꼼꼼히 봐도 나중에 고쳐야 하는 게 나올 수도 있다 바쁘더라도 데이터 정제 과정을 등한시하지 말자고 외치며 글을 마친다.
'데이터' 카테고리의 다른 글
GPT와 BERT, 두 모델의 공통점과 차이점에 대하여... (0) | 2023.05.19 |
---|---|
GPT, 그게 도대체 뭔데? (0) | 2023.05.04 |
'이탈 위험도' 들어본 적 있나요? (0) | 2023.04.21 |
우리 회사는 '검색' 기능을 제대로 활용하고 있을까? (0) | 2023.03.10 |
코호트 분석(Cohort Analysis)을 해야하는 이유 (0) | 2023.02.25 |