2. 데이터 가공
본 장에서는 데이터 자체에 대하여 살펴봅니다. 우선 통계학적으로 데이터를 정확하게 정의합니다. 그리고 피쳐 엔지니어링이라는 과정을 통해 데이터를 추가 가공하는 방법을 알아봅니다. 본 장의 후반부에서는 앞 장에서 간단히 언급했던 데이터 엔지니어의 업무. 즉 데이터 엔지니어링에 대해서 좀 더 상세히 알아봅니다. 데이터 엔지니어링이 영역은 매우 광범위해서 모든 내용에 대해서 설명하기는 어렵습니다. 이 장에서 언급되는 내용은 통계학자나 머신 러닝 엔지니어의 입장에서 데이터 엔지니어들과 의사소통을 위해 알아두면 좋은 수준까지만 정리한 것입니다.
2.1 통계 데이터의 정의
2.1.1 측정값과 변수
데이터 과학에서 말하는 데이터는 통계학에서 말하는 데이터와 본질적으로 같으며, 데이터를 논할 때는 측정값(observation)과 변수(variable)가 무엇인지 개념을 알아야 합니다. 추상적 정의는 생략하고, 사례를 통해 개념을 잡아 보겠습니다.
[표 1] 달리기 대회 참가자 기록
[표 1]은 달리기 대회 참가자 기록입니다. 이 데이터에서 측정은 각 참가자에 대해서 이루어졌으며, 각 참가자에 대한 정보가 각각의 측정값이라 할 수 있습니다. 이 데이터에 나타나는 참가자는 7명. 즉, 측정값이 총 7개가 있습니다. 한편 각각의 측정값은 나이, 성별 등 다양한 값으로 구성되는데, 이것들을 변수라고 합니다, 이 데이터의 변수는 나이, 기록, 성별, 이전 참가 회수 4개입니다.
이러한 방식의 측정값과 변수 구분은 여러가지 종류의 데이터에 적용할 수 있습니다.
[표 2] 주식 가격 변동 내역
[표 2]데이터는 주식 가격 변동 내역입니다. 이 데이터의 측정값은 날짜 별 주식 정보이고, 정보를 구성하는 변수는 종가와 거래량이라 할 수 있습니다.
도서관의 장서 전체가 데이터라면, 각각의 책이 측정값이 되고 책에 담긴 텍스트들이 변수가 될 수 있습니다. 이미지 데이터라면 각 이미지 하나 하나가 측정값이 되고 이미지 픽셀의 RGB(red, green, blue) 값이 변수가 될 수 있습니다.
통계학에서는 측정값이라는 용어와 함께 사건(event)라는 말도 사용합니다. 예를 들어 “이러한 측정값이 발생할 확률이 5%입니다.” 라는 말을 “사건이 발생할 확률이 5% 입니다.” 라고 할 수 있습니다.
2.1.2 수치형 변수와 범주형 변수
데이터 측정값을 구성하는 ‘변수’는 여러가지 유형으로 분류할 수 있습니다. 이 장에서는 먼저 변수의 내재적 특성, 즉 그 변수에 담긴 내용이 무엇이냐에 따라 분류해 보겠습니다.
[표 3] 변수의 유형
변수는 거기 담긴 값의 형태에 따라 [표 3]과 같이 분류할 수 있습니다. 우선 변수는 수치형과 범주형으로 나눌 수 있습니다. 변수가 그 자체로 수치적 의미를 가진다면 수치형, 그렇지 않다면 범주형입니다. 앞서 예로 들었던 [표 1]의 달리기 데이터에서는 나이, 기록, 이전 참가 횟수가 수치형 변수입니다. 수치형 변수는 다시 소수점 단위를 포함하느냐에 따라 연속형이냐 이산형이냐로 분류됩니다. 이산형의 경우는 변수가 정수로만 구성됩니다. 달리기 데이터에서는 나이, 이전 참가 횟수가 이산형, 기록이 연속형 수치 변수 입니다.
범주형 데이터는 수치화 되지 않는 특징을 나타냅니다. 다음과 같은 데이터가 범주형 데이터의 예 입니다.[1]
성별: 남자, 여자
혈액형: A, B, O, AB
주소: 서울, 부산, 대전, …
반: 1, 2, 3, …
유의할 점은 마지막의 예와 같이 숫자로 표현되어 있더라도 범주형 유형에 속하는 변수들이 있다는 것입니다. 예에서 ‘1 반’, ‘2 반’, ‘3 반’과 같은 데이터는 숫자로 표현된 값이지만 ‘1’이라는 글자를 이용한 것뿐 수치화된 의미는 없습니다. 즉, 2반이 1반보다 무엇인가가 양적으로 두 배인 것은 아닙니다. 이런 변수는 형태가 숫자이더라도 범주형 변수로 취급해 주어야 합니다.
설문조사 등에서 널리 측정되는 ‘별점’의 경우도 조심해서 다뤄야 합니다. 별점은 얼핏 별 개수가 수치적 의미를 가지는 것처럼 보이지만, 엄밀하게 따져보면 그렇지 않습니다. 별점 5개인 영화는 별점 1개인 영화보다 다섯 배 좋은 것일까요? 별점 1개인 영화 5개를 모으면 별점 5개인 영화와 동일한 가치로 볼 수 있을까요? 별점 또한 수치형 변수가 아닌 범주형 변수입니다.
다만, 별점 같은 변수는 그 값으로 연산을 할 수 있을 정도의 수치적 의미는 없지만, 그 값으로 데이터를 정렬하는 것은 가능합니다. 이렇게 순서의 의미를 가지고 있는 범주형 변수는 따로 구분하여 순서형 변수로 부릅니다. 순서적 의미를 가지지 않는 경우는 명목형 변수로 부릅니다.
2.1.3 범주형 데이터의 수치형 변환
데이터 분석을 위해서는 범주형 데이터를 수치형으로 변환해야 할 때가 있습니다. 여러가지 복잡한 방법들이 가능하나, 여기서는 한가지 사례 만 살펴 보겠습니다.
[표 4] 원본 데이터
[표 4]는 범주형 데이터 ‘혈액형’이 포함된 데이터의 원래 형태입니다.
[표 5] 수치형 변수로 변환
[표 5]는 범주형 데이터를 수치형으로 바꾼 것입니다. ‘혈액형A’ 변수는 혈액형이 A일 때는 1이고 아닐 때는 0입니다. ‘혈액형B’ 변수는 혈액형이 B일 때는 1, 아닐 때는 0입니다. 이런 식으로 도입되는 변수를 가변수(Dummy Variable)라고 부릅니다. 범주형 데이터를 수치형으로 변환하는 첫번째 방법은 이와 같이 범주형 변수 하나 대신 가변수 여러 개를 도입하는 것입니다.
한가지 유의할 점은 도입되는 가변수의 개수가 범주형 변수의 값 종류와 동일하지는 않다는 것입니다. 여기서 혈액형 변수는 A, B, O, AB 4가지 값을 가지는데, 가변수는 3개만 도입되고, ‘혈액형AB’라는 가변수는 도입되지 않았습니다. 이렇게 한 것은 이미 도입된 3개의 가변수로 정보가 충분하기 때문입니다. 혈액형이 A, B, O가 아니라면 자동으로 AB이기 때문에 따로 변수를 더 추가하지 않은 것입니다.
[그림 1] 수치형 변수로 변환
도입되는 가변수의 개수를 더 줄이기 위해 [그림 1]과 같이 이진 코드를 활용할 수도 있습니다. 그림에서 오른쪽 표는 혈액형 값을 이진 코드로 매핑한 것입니다. 혈액형 값이 4가지 있기 때문에 이진 코드 자리 수는 2로 충분하며, 각 자리 수가 범주형 변수 대신 수치형 변수로 추가됩니다. 이진 코드를 이용한 방법은 변수의 개수를 줄여주는 장점이 있지만, 분석 결과에 대한 해석이 다소 까다로워지는 단점이 있습니다.
2.1.4 정돈된 데이터 (Tidy Data)
통계 데이터 관련 개념으로 정돈된 데이터(Tidy Data)라는 것이 있습니다. 데이터가 정돈되어 있다는 것은, 데이터를 ‘표’ 형태로 보았을 때, 다음과 같은 특성을 가지고 있음을 의미합니다.
각 행이 한 개의 측정값이다.
각 열 제목이 한 개의 변수이다.
변수는 더 쪼개거나 묶기 어려운 하나의 의미를 가진다.
즉 표로 정리된 데이터에서 어떤 값이 있을 때, 맨 위로 올라가서 열 제목을 보면 어떤 변수의 값인지 알 수 있으며, 그 변수가 통계 변수로서 명확한 의미를 가지고 있다는 것입니다.
[표 6] 결핵 환자 발생 건수 (정돈 안된 데이터)
[표 6]은 결핵 환자 발생 건수에 관한 데이터 입니다.[2] 열 제목에는 나라(country), 연도(year), 그리고 다소 복잡한 문자/숫자 조합이 있는데, 그 의미는 성별/나이대로서 m1524는 남성 15세에서 25세까지를 의미합니다. 정돈된 데이터 관점에서 보면 이 데이터에는 다음과 같은 문제가 있습니다.
성별/나이대 열 제목은 변수가 아니라 관측치로 보아야 한다.
성별/나이대 열로 인해 하나의 행에 여러 개의 독립된 관측치가 들어간다.
이 데이터는 [표 7]과 같이 바꾸어야 정돈된 데이터가 됩니다.
[표 7] 결핵 환자 발생 건수 (정돈된 데이터)
이제 열 제목을 보면 변수명을 알 수 있고, 그 변수는 확실히 통계 변수처럼 보입니다.[3]
정돈된 데이터는 굉장히 단순한 개념이지만 현실 세계에서는 의외로 정돈되지 않은 데이터도 많습니다. 최소한 분석 목적으로 가공되는 데이터라면 정돈된 데이터의 특성을 준수해야 할 필요가 있습니다.
현 RStudio CTO인 해들리 위컴(Hadley Wickham)은 정돈된 데이터(Tidy Data) 개념을 초기 제안한 사람이기도 합니다. 위컴의 다음 트윗은 번역하자면, “행렬에는 행과 열이 있고, (정돈된 표) 데이터에는 측정값과 변수가 있다.”는 뜻입니다. 정돈된 데이터의 특징을 멋지게 요약해준다고 할 수 있습니다.
[그림 2] 정돈된 데이터(Tidy Data)를 설명하는 트윗