데이터과학 프로세스(3): 데이터 준비하기

대단한 성취의 이면에는 대부분 사소해 보이는 준비과정이 필요하다. — 로버트 슐러

데이터 수집이 끝나면 분석에 바로 사용할 수 있는 데이터를 얻게 된다고 생각하기 쉽다. 하지만 보통은, 특히 데이터를 외부에서 가져온 경우에는 수집된 원본 데이터를 분석에 사용할 수 있는 형태로 준비해야 한다. 여기에는 주어진 데이터를 정리하고, 오류를 검사하며, 원본 데이터에서 필요한 부분을 선택하는 등의 작업을 포함된다.

위 인용구에서처럼 데이터를 제대로 준비하는 것은 데이터 문제의 해결을 위한 필수적인 단계다. 데이터가 분석에 편리한 형태로 정리되어있지 않으면 분석에 훨씬 많은 노력이 든다. 또한 데이터 자체의 문제를 분석을 한참 진행한 단계에서 발견한 경우, 분석을 처음부터 다시 시작해야 한다. 따라서 데이터 준비에 기울이는 노력은 성공적인 분석을 위한 기초공사와도 같다.

또한 이런 데이터 처리는 데이터 분석을 직업으로 하는 사람들이 대부분의 시간을 보내는 작업이기도 하다. 최근 통계에 따르면 현업에 종사하는 데이터 과학자들은 50-80%의 시간을 이런 데이터 처리에 소비한다고 한다. 그만큼 효율적인 데이터 처리가 생산성에 결정적인 영향을 끼친다고 해석할 수 있겠다. 이제 데이터 처리의 과정의 구체적인 단계를 알아보자.

테이블 형태로 변환하기

데이터 준비의 첫번째로 원본 데이터를 분석 과정에서 필요로 하는 형식으로 변환하는 과정이 필요하다. 수집된 데이터의 형식은 제각각인 경우가 많기 때문이다. 따라서 이들 파일을 데이터 분석 소프트웨어가 읽을 수 있는 테이블 형식으로 변환하는 것이 첫번째 단계다. 엑셀에서는 다양한 형태의 텍스트 파일을 불어올 수 있는 기능을 제공한다. R과 같은 툴에서는 JSON, CSV, XML등 널리 사용되는 형식의 파일을 테이블 형태로 불러오는 라이브러리를 제공한다.

테이블 형태로 불러온 데이터는 원본 데이터의 형태 및 수집 과정에 따라 테이블 형태의 데이터가 제멋대로의 형태를 띄는 경우가 많다. 따라서 테이블 형태로 변환된 데이터는 표준 테이블의 형식을 준수하는지 검토하자. 표준 테이블은 다음 단계의 작업인 데이터 분석 및 시각화를 최대한 용이하게 하는 테이블의 규격을 가리킨다. 구체적으로 어떤 형식이 최선인지는 궁극적으로 주어진 문제와 데이터의 특성에 달린 문제지만, 일반적으로 통용되는 표준 테이블의 형태는 [@HW2014tidy] 다음과 같다.

  1. 각 행에는 개별 관찰 항목이 들어간다.
  2. 각 열에는 개별 속성이 들어간다.
  3. 각 테이블에는 단일 유형의 데이터가 들어간다.
  4. 여러 테이블이 존재하는 경우 개별 테이블을 연결할 수 있는 공통된 속성이 존재해야 한다.

테이블 형태의 데이터

이런 표준화가 필요한 이유는 이 형식의 테이블이 효율적인 분석 및 시각화 작업을 가능하게 하기 때문이다. 우선, 각 열이 개별 속성을 담고 있으므로, 개별 속성간의 연산을 통해서 속성을 추가하거나 삭제하는 것이 용이하다. 또한 각 행이 개별 관찰 항목을 담고 있으므로, 각 행의 데이터를 비교하거나 개별 항목을 그룹 단위로 모은 집계(aggregate) 테이블을 만들어 분석에 사용할 수 있다.

사례: 상관관계 분석을 위한 데이터 변환

이제 사례를 통해 데이터 변환의 필요성을 알아보자. 종교와 소득수준의 상관관계를 알아보고자 다음 그림과 같은 형태의 데이터를 수집했다고 하자. (출처: https://github.com/justmarkham/tidy-data) 아래 데이터를 살펴보면 각 속성이 개별 소득 구간에 속하는 사람들의 분포를 나타낸다.

원본 데이터

이런 테이블은 분포를 한눈에 보기는 편할지 몰라도, 데이터를 가지고 각종 연산이나 시각화를 하기에는 불편할 것이다. 별도의 속성으로 존재해야 할 소득 구간이 속성의 이름으로 들어가 있고, 또한 수치가 아니라 구간의 형태를 띄기 때문이다.

이를 위해서는 각 행에 관찰 항목이, 그리고 각 열에 개별 속성이 들어간 테이블이 좀더 효과적일 것이다. 그리고 구간 형태로 되어있는 소득을 구간별 평균과 값은 수치값으로 바꿔야 할 것이다. 아래 그림은 이런 정리작업을 완료한 테이블을 나타낸다.

분석에 적합한 형태로 변환된 데이터

그리고 아래 플롯은 정리된 테이블을 바탕으로 각 종교별 교인의 구간별 소득 분포를 시각적으로 보여준다. 위 테이블에 있는 데이터를 그대로 옮겨놓으면 아래와 같은 플롯이 완성된다.

데이터를 정리한 후에 플로팅한 모습

데이터 선택, 추가, 집계하기

지금까지 데이터를 표준 테이블 형태로 정리하는 과정을 살펴보았다. 하지만 분석의 목표에 따라 다양한 추가 처리 작업이 필요하다. 여기서는 이를 데이터 처리를 1) 필요한 부분 선택 2) 속성값 추가 3) 집계의 세가지 단계로 나누어 알아보자.

필요한 부분 선택 및 추출하기

앞선 글에서 작업 대상이 되는 데이터의 크기를 최대한 줄이는 것의 중요성을 언급했다. 데이터의 크기가 커질수록 처리 및 저장에 소요되는 비용 및 시간은 늘어나기 때문이다. 따라서 초기에는 가능한 최소한의 데이터를 가지고 작업하고, 나중에 필요에 따라 데이터의 크기를 늘려가는 접근 방법이 바람직하다. 주어진 데이터에서 필요한 데이터를 추출하는 방법에는 다음 몇가지가 있다.

항목 선택 우선 원본 데이터에서 분석 목표에 맞는 항목만 선택하는 방법으로 데이터의 크기를 줄일 수 있다. 예를들어 전세계 국가가 모두 포함된 데이터셋을 가지고 아시아 국가에 대한 분석을 한다면, 국가별 대륙을 기준으로 필요한 데이터를 골라낼 수 있을 것이다.

항목 추출 또한 분석의 목표에 따라 샘플 데이터만 가지고 작업을 하는것이 충분한 경우가 있다. 이럴 때는 즉시 결과를 얻을 수 있는 작은 양의 항목만 추출(sample)하여 작업에 임한다. 이때 항목의 추출은 무작위로 해야 데이터가 편향(bias)되는 것을 막을 수 있다.

속성 선택 필요한 항목의 선택 및 추출이 끝나면 주어진 데이터의 모든 속성이 분석에 필요한지 생각해볼 일이다. 외부에서 데이터를 얻은 경우 특히 주어진 분석 목표와 관계없는 속성이 포함되어 있을 수 있는데, 이런 속성은 과감히 제거한다.

속성값 변환 및 추가하기

위에서 필요한 부분을 가려냈다면, 빠진 부분을 채워넣는 작업도 필요하다. 앞에서 소득구간 데이터를 소득 값으로 변환하는 사례를 설명했는데, 이처럼 원본 데이터의 값은 그냥 사용하기에 부적합하거나 불충분한 경우가 많다. 이런 경우 속성값을 다음과 같이 분석에 적절한 형태로 변환하거나 추가해 준다.

자료형 변환 대부분의 데이터 처리 프로그램은 각 속성별로 적절한 자료형을 부여한다. 그런데 텍스트 문서에서 읽어들인 원본 데이터는 모두 텍스트 형태의 자료형을 가지는 경우가 많다. 이런 경우 택스트 형태의 속성값에서 적절한 날짜나 수치값을 추출하는 작업이 필요하다. 엑셀에서는 메뉴의 형태로, R에서는 함수의 형태로 주어진 속성의 자료형을 변환하는 기능을 제공한다.

단위 변환 주어진 속성의 자료형이 적절하더라도 사용된 단위가 적절하지 않은 경우가 있다. 이런 경우 분석에 들어가기 이전에 단위를 수정해주어야 한다. 화씨온도를 섭씨온도로 바꾸어주거나, 파운드를 킬로그램으로 바꾸는 작업이 이에 해당한다. 이를 위해서는 원본 데이터가 어떤 단위를 사용했는지의 정보가 필요할 것이다.

속성값 추가 마지막으로 원본 데이터의 속성값에 간단한 연산을 통해 유용한 속성을 추가할 수 있다. 여기에는 개별 속성 몇개의 값를 더하거나, 두 속성간의 차이 혹은 비율을 구하는 작업이 포함된다. 예컨데 과목별 성적 데이터가 주어진 경우 과목별 성적을 더하여 전체 성적을 추가하거나, 한 과목의 성적과 다른 과목의 성적의 차이를 추가하는 것이 향후 분석에 유용하게 쓰일 수 있다.

적절한 단위로 집계하기

모든 데이터에는 데이터가 수집된 단위가 존재한다. 그런데 분석의 종류에 따라 원본 데이터의 수집 단위보다 더 큰 단위로 데이터를 보고싶을 수도 있다. 예컨데 매일 수집한 데이터를 주단위 혹은 월단위로 분석하는 작업이 이에 속한다. 이럴 때 필요한 작업이 데이터를 적절한 단위로 집계하는 것이다. 집계에는 다음 몇가지 고려사항이 필요하다.

  • 집계의 기준: 집계의 기준이 되는 속성은 무엇인가?
  • 집계의 대상: 어떤 속성의 값을 집계하고 싶은가?
  • 집계의 방식: 집계에 사용할 연산은 무엇인가?

예컨데 개별 매출 데이터가 담긴 테이블을 월단위로 집계하고 싶다면, 집계의 기준은 매출이 발생한 월, 그리고 집계의 대상은 매출액, 집계의 방식은 총합 (월별 총매출액) 혹은 평균을 (월별 항목당 매출액) 사용할 수 있을 것이다. 대부분의 데이터 처리 프로그램에서는 데이터 집계를 위한 다양한 기능을 제공한다.

데이터의 품질 점검하기

일단 준비된 데이터는 실제 분석에 들어가기 전에 다양한 점검 과정을 거쳐야 한다. 직접 수집했던 외부에서 가져왔던 원본 데이터에는 다양한 문제의 가능성이 존재하기 때문이다. 데이터가 수집된 환경, 표본의 선정, 측정 과정, 마지막으로 데이터의 기록 단계에 이르기까지 우리가 관심을 갖는 현상이 데이터화되기까지는 여러 단계를 거치게 되며, 이 어느 단계에서도 문제가 발생할 소지가 있다.

이때 유용한 것이 데이터의 품질을 평가하는 기준이다. 데이터의 품질이라면 조금 낯설게 여겨질 수도 있지만, 데이터의 세계에도 엄연히 좋은 데이터와 나쁜 데이터를 가르는 기준은 존재한다. 데이터의 품질을 판단하는 것은 궁극적으로는 주어진 문제의 특성과 목표에 따라 달린 문제지만, 일반적으로 다음 몇가지 기준을 생각해볼 수 있다.

완전성

주어진 데이터가 문제 해결에 필요한 모든 대상과 속성을 포함하는가? 핵심이 빠진 데이터를 가지고 제대로 된 분석을 하는 것은 불가능하다. 예컨데 아시아 국가들의 경제 성장에 대한 분석을 하면서 중국에 관련된 통계를 누락시킨다면 제대로된 결과를 얻을 수 없을 것이다. 마찬가지로 경제 성장에 대한 분석에 핵심 지표인 GDP가 포함되지 않는다면 그 가치는 반감될 것이다.

또한 데이터에 필요한 대상과 속성이 포함된 경우에도 값이 부분적으로 누락될 수 있다. 많은 설문조사 데이터에는 응답자가 답변하지 않은 항목이 다수 포함된다. 분석의 목표에 따라 이런 불완전한 데이터를 가지고도 유효한 결론을 낼 수 있는지가 결정된다.

정확성

주어진 데이터는 문제의 대상이 되는 현상을 정확히 반영하는가? 여기서 정확성은 편향(Bias)과 분산(Variance)의 관점에서 설명할 수 있다. 편향이 큰 경우는 측정값이 지속적으로 다른 요인의 영향을 받는 것이고, 분산이 큰 경우는 측정값에 랜덤한 노이즈가 영향을 주는 경우다. 편향의 경우 체중계의 영점을 맞추듯이 측정 장치를 보정(calibration)하는 방법이 있고, 분산의 경우는 충분한 표본을 수집하면 해결되는 문제다.

데이터의 정확성을 판단하는 기준

여기서 분산의 정도는 데이터만 가지고도 측정이 가능하지만 편향의 정도를 측정하기 위해서는 기준값(ground truth)을 알아야 하는데, 현실적으로 이는 쉬운 일이 아니다. 만약 절대적인 기준값이 항상 존재한다면 편향이 있는 데이터를 애초에 모을 필요도 없었을 것이기 때문이다. 따라서 편향의 양상과 정도를 파악하기 위해서 보통은 분석 대상이 되는 현상을 여러가지 방법으로 측정하고, 이들 사이의 관계를 조사하는 방법을 사용한다.

일관성

주어진 데이터의 각 속성은 서로 모순되지 않는가? 많은 경우 데이터의 각 속성은 서로 연관되기에, 속성 상호간의 관계를 통해 데이터의 품질을 유추할 수 있다. 예컨데 재무 데이터에서 각 부문별 매출액을 합친 값이 총매출과 일치하지 않는다면 무언가 잘못된 것이라고 추론할 수 있다. 또한 데이터 유형과 값 사이에 불일치가 있는 경우도 일관성의 문제다. 예컨데 수량 데이터와 같이 양의 값을 가져야 하는 데이터에 음수가 들어가 있거나, 문자열이 들어가 있다면 뭔가 잘못된 것이다.

위에서 언급한 일관성의 문제는 그 진위를 명확하게 알 수 있는 경우지만, 탐험적 데이터 분석을 통해서만 드러나는 문제도 있다. 예컨데 인구통계 데이터에서 소득수준과 자동차 보유 여부와 같이 서로 강한 상관관계를 가질 것으로 추측할 수 있는 변수 사이에 상관관계가 발견되지 않는다면 이는 1) 데이터 자체의 문제이거나 2) 실제로 기대하지 못했던 현상이 발생한 것이다. 이처럼 데이터 분석 과정에서도 얼마든치 추가적인 문제를 발견할 수 있다.

기타 고려사항

이외에도 분석의 종류에 따라 데이터의 품질을 결정하는 다양한 척도를 생각해볼 수 있다. 우선 시간성이 중요한 분석의 경우에는 데이터가 모아진 시점이 그 유효성을 가늠하는 잣대가 될 수 있다. 예컨데 패션과 같이 트렌드에 민감한 제품에 대한 수요예측을 오래된 데이터로 한다면 결과의 정확성을 보장할 수 없을 것이다.

또한, 객관성이 중요한 분석의 경우, 누가 어떤 목적으로 데이터를 모았는지가 고려되어야 할 것이다. 예컨데 공무원 연금 개혁과 같은 정치적으로 민감한 사안에 대한 여론조사는 신뢰성을 보장하기 위해서는 중립적인 기관에서 시행되어야 할 것이다. 이처럼 문제의 영역 및 분석의 목표에 따라 데이터의 품질을 판단하는 다양한 기준이 존재한다.

메타데이터의 중요성

위에서 언급한 품질의 문제는 데이터 자체만으로 판단이 가능한 경우도 있지만, 데이터 자체에 대한 추가적인 정보를 필요로 하는 경우가 많다. 여기에는 데이터가 누구에 의해, 어떤 목적과 방법을 가지고, 언제 어디에서 수집되었는지가 포함되면, 이를 메타데이터(metadata), 즉 데이터에 대한 데이터라고 부른다.

이런 메타데이터는 테이블 형태의 데이터 뿐만 아니라, 텍스트나 이미지와 같은 비정형 데이터의 경우에도 존재한다. 예컨대 이메일의 수신자/송신자/날짜, 이미지의 포맷 및 촬영정보가 메타데이터에 해당한다. 좀더 넓은 의미의 데이터는 데이터가 수집 및 가공된 전 과정에 대한 설명을 포함한다.

외부에서 데이터를 얻었을 때에는 항상 메타데이터를 확인하면서 작업하는 습관을 길러야 한다. 이런 습관은 분석을 한참 진행한 후에 데이터 자체의 문제에 의해 그 결과가 무효화되는 사태를 방지해준다. 앞서 말한대로 데이터 과학자에게 데이터는 원재료와 같다.데이터가 원재료라면 메타데이터는 데이터에 대한 품질보증서와 같다. 품질보증서가 없는 제품을 어떻게 믿고 쓸 수 있겠는가?

반대로 스스로 데이터를 수집하고 가공할 경우에도 데이터가 수집 및 가공된 과정을 꼼꼼히 기록할 필요가 있다. 이렇게 양질의 메타데이터를 갖춘 데이터는 당면한 문제뿐아니라, 추후에 다른 문제를 풀 때에도 유용하게 쓰일 수 있을 것이다. 또한 데이터 분석을 아웃소싱하거나 여러 사람이 공동으로 작업하는 경우는 이런 기록의 중요성을 말할 것도 없다.

데이터 준비에서 분석으로

지금까지 분석을 위해 데이터를 준비하는 과정을 단계별로 살펴보았다. 데이터를 표준화된 테이블 형태로 준비하고, 필요한 부분을 선택 및 추출하고, 품질에 대한 검증까지 마쳤다면 분석을 위한 기본적인 준비는 마친 셈이다. 여기에 데이터를 준비한 과정을 꼼꼼하게 문서화 하여 어떤 사람이라도 원본 데이터를 가지고 가공된 데이터를 만들 수 있도록 해야 할 것이다.

또한 데이터 준비는 일회성 작업이 아니다. 분석 과정에서 데이터의 새로운 문제가 발견된 경우 처음부터 다시 데이터를 준비해야 한다. 이런 이유에서 데이터 준비는 반복 작업이 가능하도록 매크로나 스크립트 등으로 자동화시키는 것이 바람직하다. 이런 자동화 작업의 결과물은 향후 원본 데이터를 가지고 작업하는 사람에게도 유용할 것이다.

직관에 의한 문제해결에 비해 데이터에 기반한 문제해결이 갖는 장점 중 하나는 누가 해도 같은 결과를 얻을 수 있다는 점, 그리고 여기에서 얻어지는 일반성과 신뢰성일 것이다. 하지만 이런 장점은 데이터 수집 및 준비 과정이 투명하게 공개 및 문서화된 경우에만 유효할 것이다. 이런 장점을 극대화하기 위해 데이터 준비 과정에 공을 들이는 습관을 들이자!

p.s. 다음 글에서는 데이터 공유를 위한 준비사항을 자세히 볼 수 있다.

(본 글의 초고에 피드백을 보내주신 진승민 / 김연태 / 김성철 님을 비롯한 열두분께 감사의 말씀을 전합니다.)