Author Archives: lifidea

데이터과학 프로세스(4): 탐험적 데이터 분석

진정한 발견은 새로운 장소를 찾는 것이 아니라, 새로운 관점을 갖는 것이다.
— 마르셀 프루스트

여러분의 컴퓨터에 이제 막 수집된 데이터가 도착했다. 방금 데이터에 대한 기본적인 점검도 마쳤다. 그럼 여러분은 당장 여러분이 좋아하는 분석 프로그램을 열고 자신이 문제정의 단계에서 세웠던 여러 가설에 대한 결론을 도출해보고 싶을 것이다. 뭔가 예측하는 것이 목적이었다면 당장 기계학습 알고리즘을 적용해보고 싶을 것이다.

하지만 경험많은 데이터 과학자라면 그렇게 하지 않을 것이다. 그들은 어떤 결론에 도달하기 전에 주어진 데이터의 모든 측면을 철저히 이해하려고 노력할 것이다. 데이터 수집 과정에서 세운 모든 가정이 맞는지, 혹시 기대하지 않았던 새로운 패턴이 발견되지 않는지, 통계적 추론 및 예측 모델을 만들때 고려 사항에는 어떤 것이 있을지 등등을 알고싶어 할 것이다.

이처럼 주어진 데이터를 다양한 각도에서 들어다보고 좀더 잘 이해하기 위해 노력하는 과정을 탐험적 데이터 분석(Exploratory Data Analysis 이하 EDA)라고 부른다. ‘탐험적’이라는 수식어는 문자 그대로 이를 통해 어떤 것을 발견하게 될지를 미리 예측할 수 없기 때문이다. 박스플롯(boxplot)을 비롯한 수많은 업적을 남긴 통계학의 대가인 존 터키(John Tukey)는 탐험적 데이터 분석이 탐정의 일과 비슷하다고도 말했다.

탐험적 데이터 분석이 필요한 이유는 몇가지가 있다. 우선 데이터의 분포 및 값을 검토함으로써 데이터가 표현하는 현상을 더 잘 이해하고, 데이터 준비 단계에서 놓쳤을수도 있는 잠재적인 문제를 발견할 수 있다. 또한, 데이터를 다양한 각도에서 살펴보는 과정을 통해 문제 정의 단계에서 미처 발생하지 못했을 다양한 패턴을 발견하고, 이를 바탕으로 기존의 가설을 수정하거나 새로운 가설을 추가할 수 있다. 데이터에 대한 이런 지식들은 이후에 통계적 추론이나 예측 모델을 만들때 그대로 사용된다.

어떤 특정한 결론을 결론을 도출하기 위해서가 아니라, 데이터에서 최대한 다양한 이야깃거리를 뽑아내려 한다는 측면에서 탐험적 데이터 분석은 지도없이 떠나는 여행이다1. 그리고 작업의 특성상 탐험적 데이터 분석의 과정은 명확한 성공 요건이나 절차를 정의하기가 힘들다. 하지만 탐험적 데이터 분석을 위해 거쳐야 할 최소한의 몇가지 단계가 있다. 여기서는 이 단계에 대해 알아보도록 하자.

탐험적 분석의 단계

이제 탐험적 분석의 과정을 단계별로 살펴보자. 탐험적 분석의 자연스러운 출발점은 주어진 데이터의 각 측면에 해당하는 개별 속성의 값을 관찰하는 것이다. 개별 속성에 대한 분석이 이루어진 후에는 속성간의 관계에 초점을 맞추어 개별 속성 관찰에서 찾아내지 못했던 패턴을 발견할 수도 있다. 그리고 이런 절차는 데이터에서 흥미있는 패턴이 발견될때까지 (혹은 더이상 찾는 것이 불가능하다고 판단될 때까지) 반복된다.

탐험적 데이터 분석의 주된 수단을 살펴보자. 우선 원본 데이터를 관찰하는 방법, 다양한 요약 통계값 (statistics)을 사용하는 방법, 마지막으로 적절한 시각화를 사용하는 방법이 있다. 원본 데이터 관찰은 데이터 각 항목과 속성값을 관찰하기 때문에 꼼꼼한 반면 큰 그림을 놓치기 쉽다. 반면에 요약 통계값이나 시각화를 사용하면 숲은 보지만 나무는 보지 못하는 우를 범할 수 있다. 2

따라서 중요한 것은 이 세가지 방법이 보완적으로, 그리고 순환적으로 사용되어야 한다는 것이다. 여기서 순환적이라는 말은 원본 데이터를 보다가 의심가는 부분이 있으면 적절한 시각화나 통계값을 통해 검증하고, 반대로 시각화나 통계값을 통해 발견한 패턴은 해당하는 원본 데이터 값을 찾아 추가적인 검증을 해야 한다는 뜻이다. 미지의 땅을 탐사할 때, 항공 정찰과 함께 실제로 그 땅에 들어가 탐사하는 과정이 모두 이루어져야 하는 것과 같은 원리다.

개별 속성 분석하기

우선 탐험적 데이터 분석의 첫번째 단계로 개별 속성을 살펴보자. 이를 통해 데이터를 구성하는 각 속성의 값이 우리가 예측한 범위와 분포를 갖는지, 만약 그렇지 않다면 왜 그런지를 알아볼 수 있을 것이다. 또한 데이터에는 다양한 이유로 정상 범주를 벗어난 값이 존재할 수 있는데, 이런 이상값(outlier)을 찾아내는 것도 탐험적 데이터 분석에서 이루어져야 한다.

개별 속성의 값을 살펴보는 방법에는 앞에서 밝힌대로 개별 데이터 관찰, 그리고 통계값 및 시각화를 활용하는 방법이 있다. 우선, 개별 데이터의 값을 눈으로 보면서 전체적인 추세와 어떤 특이사항이 있는지 관찰할 수 있다. 데이터가 작은 경우 전체를 다 살펴볼 수 있겠지만, 데이터의 양이 많은 경우 이는 시간이 많이 소요되는 일이다.

하지만 시간이 없다고 큰 데이터의 앞부분만 보는 것은 피해야 한다. 데이터 앞부분에서 나타나는 패턴과 뒷부분에서 나타나는 패턴이 상이할 수 있기 때문이다. 이런 경우 데이터에서 무작위로 표본을 추출한 후에 관찰하는 것이 올바른 방법이다. 무작위로 추출한 표본 안에는 데이터 전체가 고루 반영되어 있기 때문이다. 단, 이상값(outlier)은 작은 크기의 표본에 나타나지 않을수도 있다.

개별 속성의 값을 분석하는 또다른 방법은 적절한 요약 통계 지표를 (summary statistics) 사용하는 것이다. 분석의 목표에 따라 다양한 통계 지표가 존재하는데, 예컨데 데이터의 중심을 알기 위해서는 평균(mean) 및 중앙값(median), 최빈값(mode) 등을 3 사용할 수 있고, 데이터의 분산도를 알기 위해서는 범위(range), 분산(variance) 등을 사용할 수 있다. 또한, 데이터의 분포가 한쪽으로 기울었는지를 나타내는 통계 지표도 (skewness) 존재한다.

이런 통계 지표를 사용할 때에는 데이터의 특성에 주의해야 한다. 예컨데 평균에는 집합 내 모든 데이터의 값이 반영되기 때문에 이상값(outlier)이 존재하는 경우 값이 영향을 받지만, 중앙값에는 가운데 위치한 값 하나가 사용되기 때문에 이상값의 존재에도 대표성이 있는 결과를 얻을 수 있다. 예컨데, 회사에서 직원들의 평균 연봉을 구하면 중간값보다 훨씬 크게 나오는 경우가 많은데, 이는 몇몇 고액 연봉자들의 연봉이 전체 평균을 끌어올리기 때문이다.

개별 속성 분석에서 또한 중요한 부분은 시각화를 적절히 활용하는 것이다. 많은 수의 개별 데이터를 일일히 보는 것은 비효율적이고, 모든 데이터를 수치 하나로 요약하는 통계값에는 중요한 패턴이 감추어지는 경우가 많은데, 적절한 시각화를 통해 데이터에 나타나는 패턴을 한눈에 볼 수 있기 때문이다.

역시 데이터의 유형 및 분석의 초점에 따라 다양한 시각화 방법이 존재한다. 수치 및 카테고리 데이터의 경우 그 분포를 한눈에 볼 수 있는 히스토그램 등이 일반적이다. 또한 텍스트 데이터의 경우 단어의 밀도를 표현할 수 있는 워드 클라우드를, 시간 및 공간 데이터는 시계열차트 및 지도 등 해당 데이터를 가장 잘 표현할 수 있는 시각화 방식을 사용하면 된다. 아래 그림은 데이터 형태별로 적절한 시각화 방식을 보여준다.

이제 사례를 통해 개별 속성을 분석하는 요령을 알아보자. 여기서 사용할 데이터는 다양한 제조사 및 모델별로 1999년과 2008년형 자동차의 연비를 기록한 MPG라는 (MPG는 Mile Per Gallon의 약자로 미국에서 쓰는 자동차 연비의 단위다.)이름의 데이터셋이다. 이 데이터셋은 적당한 크기에 다양한 유형의 속성을 포함하고 있어서 탐험적 데이터 분석의 프로세스를 이해하기에 유용하다. MPG 데이터셋은 R에 기본적으로 포함되어 있으며, 이곳에 언급된 분석과 시각화를 수행하는 코드와 수행 결과를 참고하자.

본격적인 실습에 나서기 전에 분석의 목표를 생각해 보자. 우선 자동차의 연비를 다루는 데이터셋이니만큼 연비에 영향을 미치는 다양한 요인을 알아볼 수 있을 것이다. 또한 데이터에 연도와 제조사 및 자동차 모델 속성이 포함된 만큼 연도별로 연비가 어떻게 달라졌는지, 그리고 제조사와 모델별 연비는 어떤지 살펴볼 수 있을 것이다.

아래는 우리가 사용할 MPG 데이터의 다양한 속성값이다. 일단 눈으로 보면서 데이터에 익숙해지도록 하자. 데이터에 대한 설명을 보면 drv는 구동방식 (r: 후륜 / f: 후륜 / 4: 4륜), displ은 배기량, cyl은 실린더 개수를 나타내며, cty는 도시 주행시 연비를, hwy는 고속도로 주행시 연비를 나타낸다.

maker class model year displ cyl drv cty hwy
audi compact a4 1999 1.8 4 f 18 29
audi compact a4 quattro 1999 1.8 4 4 18 26
audi midsize a6 quattro 1999 2.8 6 4 15 24
chevrolet suv c1500 suburban 2wd 2008 5.3 8 r 14 20
chevrolet 2seater corvette 1999 5.7 8 r 16 26
chevrolet suv k1500 tahoe 4wd 2008 5.3 8 4 14 19

개별 데이터를 살펴본 후에는 데이터를 요약하는 다양한 통계값(statistics)을 계산하여 살펴볼 수 있다. 이런 통계값은 데이터의 유형에 따라 달라진다. 예컨대 연속된 수치에 대해서는 평균 및 중간값 등을, 그리고 범주 및 순서를 나타내는 속성에 대해서는 최빈값을 계산할 수 있을 것이다. 아래 표는 MPG 데이터의 다양한 속성들의 통계값이다.

데이터에 적절한 시각화를 적용하여 전체 값의 분포를 한눈에 볼 수 있다. 아래는 MPG 데이터셋의 고속도로 연비(hwy)를 확률 밀도 그래프, 히스토그램, 그리고 점플롯(dotplot)으로 표현한 것이다. 이 시각화 결과에 따르면 데이터에 크게 두가지 그룹의 차량이 (세단과 SUV) 있다는 사실이 드러난다. 이중 히스토그램과 점플롯에서는 개별 데이터의 분포를 좀더 뚜렷히 볼 수 있다.

속성간의 관계 분석하기

개별 속성의 분포를 확인한 후에는 속성간의 관계를 살펴보자. 이 과정의 목표는 서로 의미있는 상관관계를 갖는 속성의 조합을 찾아내는 것이다. 여기서부터 본격적으로 ‘탐험적’ 분석이 시작되는데, 속성이 많은 데이터의 경우 속성의 조합에 따라 다양한 분석을 수행할 수 있기 때문이다. 모든 속성간의 관계를 다 보기 힘들 경우에는 주어진 문제 해결과 관련이 깊은 부분부터 시작해야 할 것이다.

이제 속성간의 관계를 분석하는 과정를 MPG 데이터를 통해 알아보도록 하자. 우선 아래 표는 수치형 속성간의 상관계수를 나타낸 것이다. 연비(hwy/cty)와 실린더 수 (cyl) 및 배기량(disp)이 높은 상관관계를 가지는 것을 볼 수 있다.

상관계수 displ year cyl cty hwy
displ 1.000 0.148 0.930 -0.799 -0.766
year 0.148 1.000 0.122 -0.037 0.002
cyl 0.930 0.122 1.000 -0.806 -0.762
cty -0.799 -0.037 -0.806 1.000 0.956
hwy -0.766 0.002 -0.762 0.956 1.000

아래 플롯은 위 상관도 테이블을 그대로 시각화한 것이다. 오른쪽 위를 향하는 파란색 타원은 양의 상관관계를, 오른쪽 아래를 향하는 빨간색 타원은 음의 상관관계를, 흰색 원은 상관관계가 없음을 나타낸다.

하지만 상관계수가 데이터에 존재하는 모든 트랜드를 요약하는 것은 아니다. 같은 데이터에 해당하는 아래 스케터플롯을 보면 각 속성 쌍의 관계가 다양한 양상의 띈다는 것을 알 수 있다.

이렇게 모든 속성간의 관계를 상관도와 스케터플롯을 통해 관찰한 후에는 관심이 가는 개별 속성간의 관계를 자세히 살펴보아야 할 것이다. 두 속성간의 관계를 알아보는 방법은 대상 속성의 유형의 조합에 따라 달라진다. 우선 두 카테고리형 속성간의 관계를 생각해보자. 두 속성이 모두 제한된 카테고리의 값을 갖기 때문에, 이를 분석하는 데에는 각 카테고리의 조합에 속하는 항목의 수를 나타내는 교차 테이블이나 모자이크 플롯이 적절하다.

다음 표와 모자이크 플롯은 MPG 데이터셋에서 실린더의 수와 구동방식의 관계를 나타낸다. 후륜 방식은 대부분 대형차에, 그리고 전륜 방식은 소/중형차에 사용되는 것을 알 수 있다. 같은 데이터를 모자이크 플롯으로 보면 대부분의 차가 사륜구동 혹은 전륜구동을 띄고 있다는 사실, 그리고 실린더 수의 분포가 구동방식에 따라 다르다는 사실을 한눈에 알 수 있다.

구동방식 사륜(4) 전륜(f) 후륜(r)
4 23 58 0
5 0 4 0
6 32 43 4
8 48 1 21

다음으로 카테고리형 속성과 수치형 속성간의 관계를 분석하는 경우에는 제한된 종류의 값을 갖는 카테고리형 속성의 특성을 고려하여 각 카테고리 별로 수치값의 분포를 볼 수 있다. 여기에는 박스플롯이 널리 사용되는데, 박스플롯은 주어진 데이터의 25% 및 75%에 해당하는 백분위 값을 박스로 표시하고, 여기에 50%에 해당하는 중앙값을 가운데 굵은 선으로 표시한 플롯이다.

데이터를 대표하는 통계값을 한눈에 보기위해 박스플롯을 사용한다면, 개별 데이터 값을 관찰하기 위해서는 스케터플롯을 사용할다. 단, 이 경우 같은 카테고리를 갖는 값들이 서로 겹치지 않도록 노이즈(jitter)를 더해준다.

아래 플롯은 연도와 고속도로 연비간의 관계를 박스플롯과 스케터플롯으로 보여준다. 아래 그림의 왼쪽의 박스플롯에는 1999년에 비해 2008년에 연비간의 관계가 뚜렷히 드러나지 않는다. 하지만 오른쪽의 스케터플롯을 보면 몇개의 이상값을 제외하고는 전반적인 연비가 더 높은 위치에 분포함을 알 수 있다.

마지막으로 두 수치형 속성간의 관계는 스케터플롯으로 확인하는 것이 가장 일반적이다. 아래 왼쪽의 스케터플롯에서는 배기량과 도시 연비의 상관관계를 보여준다. (상관계수:-0.799) 배기량과 도시 연비가 대체로 음의 상관관계를 갖지만, 어느정도 배기량이 높아지면 상관관계가 희박해진다. 이에 반해 도시 연비와 고속도로 연비에 관한 아래 오른쪽의 스케터플롯에서는 대부분의 값들이 좀더 추세선 근처에 모여있는 것을 알 수 있다. (상관계수:0.956)

탐험적 분석에서는 두개 이상의 속성간의 관계를 동시에 보고 싶은 경우도 생긴다. 이럴 때는 기존의 스케터플롯이 유용한데, X와 Y의 위치에 두가지 속성의 관계를 표시하는 스케터플롯의 각 점에 색상, 크기, 레이블 등의 다양한 속성을 추가할 수 있기 때문이다.

다시 MPG 데이터셋을 살펴보면 아래 차트에는 고속도로 및 도시 주행시 연비를 XY축으로 하고, 여기에 배기량을 점의 크기에, 그리고 실린더의 개수를 점의 색상에 적용했다. 아래 그래프를 보면 크고 밝은 점이 (실린더 수가 많고 배기량이 높은 차량) 그래프 좌측 하단에 몰려있는 것을 볼 수 있다. 이처럼 스케터플롯을 사용해 네가지 속성의 관계를 동시에 확인할 수 있다.

마지막으로 산포도 그래프에 텍스트 레이블을 적용한 사례를 살펴보자. 아래 그래프는 점 대신 각 차량 모델의 연비를 그래프에 나타낸다. 이때 레이블의 색상으로 제조사를 구분할 수 있도록 하였다. 아래 그래프를 보면 연비가 낮은 대부분의 차량은 4륜 구동의 SUV 및 트럭임을 알 수 있다. 또한 높은 연비를 자랑하는 차량은 대부분 한국/일본산이거나 그리고 독일의 폭스바겐에서 만들어진 것들이다. 또한 아우디에서 만든 차량은 고속도로 연비에 비해 도시 연비가 좋지 않다는 것도 알 수 있다.

적절한 시각화의 중요성

지금까지 탐험적 데이터 분석의 프로세스를 알아보았다. 위의 다양한 사례에서 드러났지만, 여기서 다시 한번 강조하고 싶은 것은 나무와 숲을 동시에 볼 수 있게 해주는 시각화의 중요성이다. 특히 이런 관점에서 전체 추세와 함께 개별 데이터의 분포를 그대로 보여주는 스케터플롯이 특히 유용하다.

여기서는 몇가지 사례를 통해 개별 데이터의 분포를 확인하는 작업의 중요성을 알아보자. 우선 아래 그림은 같은 평균과 분산을 갖는 (그림 A) 두 데이터 집단의 실제 분포가 (그림 B~E) 얼마나 다를 수 있는지를 보여준다. 막대그래프로는 분간하기 힘든 두 집단간의 차이가 스케터플롯으로 명쾌하게 드러나는 것을 알 수 있다. [@Weissgerber2015]

비슷한 사례로 이번에는 두가지 수치 형태의 속성간의 관계를 시각화하는 경우를 생각해보자. 아래 그림은 각기 다른 데이터셋 4개를 산포도 플롯으로 표시한 것이다. 얼핏 각 데이터셋은 파란 선에 걸쳐있다는 점을 제외하고는 전혀 다른 것처럼 보인다.

하지만 각 데이터를 가지고 다음 표의 각종 통계값을 계산해보면 위 플롯의 데이터셋 4개는 모두 같은 평균, 분산, 그리고 상관계수를 가진다. 시각화 없이 통계값에만 의존했다면 이런 차이를 전혀 알 수 없었을 것이다.

통계 유형
x의 평균  9
x의 분산  11
y의 평균  7.5
y의 분산  4.122 혹은 4.127
x와 y의 상관계수  0.816

마지막으로 아래 인포그래픽은 각기 다른 종류의 시각화 기법을 분석의 목표 및 데이터의 특성에 따라 어떻게 적용할 것인지를 요약해서 설명한다. 우선 분석의 목표를 수치 비교 / 분포 시각화 / 관계 시각화 / 구성 시각화 중 하나로 결정하고, 데이터의 분포도의 특성에 따라 세부적인 시각화 방법을 고를 수 있다. (출처: http://www.extremepresentation.com/) [@ExtremePresentation2011]


맺음말

지금까지 탐험적 데이터 분석의 절차를 개별 속성 분석과 속성간 관계 분석의 순서로 알아보았다. 또한 데이터 시각화의 중요성과 유의사항을 살펴보았다. 탐험적 분석을 성공적으로 마쳤다면 주어진 데이터를 속속들이 이해함과 동시에, 데이터에 대한 다양한 가설을 세울 수 있을 것이다. 이런 과정은 현상에 대한 더 나은 이해와 함께, 주어진 데이터를 가지고 다양한 예측 모델을 만들거나 (기계학습), 신뢰성있는 결론을 내리는데 (통계적 추론) 기반이 된다.

데이터 분석의 올바른 태도에 대해 생각해보는 것으로 이 장을 마무리할까 한다. 앞서 문제정의 단계에서 데이터를 모으기 전에 주어진 문제의 목표와 범위, 그리고 예상되는 결론(가설)을 최대한 고민해야 한다고 이야기했다. 하지만 데이터를 막상 받아든 분석가는 백지 상태에서 데이터를 보기 위해 노력해야 한다. 데이터를 지나친 편향된 시각에서 본다면 데이터를 있는 그대로 해석하기보다는 자신의 기대에 맞는 부분에만 집중하는 오류를 범할 수 있기 때문이다.

이렇게 문제 해결의 단계에 따라 관점을 계속 바꿀 수 있어야 한다는 점이 데이터 과학의 어려움이지만, 예술 및 과학을 포함한 모든 창조적인 작업은 자신의 창조물에 대한 열정을 가짐에 동시에 (예: 과학자의 가설) 이를 끊임없이 객관적이고 비판적인 시각에서 볼 수 있는 냉철함을 요구한다. 하지만 이런 노력 끝에 얻어지는 결과물을 주관적 만족감과 객관적인 가치를 동시에 충족시킬 수 있을테니 그만한 가치가 있다고나 할까?

(본 글의 초고에 피드백을 보내주신 권정민 / 이성훈 님을 비롯한 독자 분들께 감사의 말씀을 전합니다.)


  1. 나탈리 골드버그의 책 ‘뼈속까지 내려가서 써라’에는 글쓰기가 지도없이 떠나는 여행이라는 표현이 등장한다. 
  2. 나무와 숲을 동시에 볼 수 있게 해주는 스케터플롯은 이런 관점에서 유용한 도구다. 
  3. 이들 지표에 대한 자세한 설명은 위키피디아를 참조하도록 하자. 

데이터과학 프로세스(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. 다음 글에서는 데이터 공유를 위한 준비사항을 자세히 볼 수 있다.

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

데이터과학 프로세스(2): 데이터 수집하기

실험이 다 끝난 후에 통계학자를 부르는 것은, 의사에게 사체 부검을 부탁하는 것과 같다. 아마 통계학자는 왜 실험이 실패했는지를 알려줄 수 있을 테니까 — 로널드 피셔

문제 정의가 완료되었다면 이제 실제로 데이터를 수집해야 할 차례다. 현대 통계학의 초석을 쌓은 통계학자 로널드 피셔의 말처럼 데이터 수집은 실질적인 데이터 과학이 이루어지는 첫 단계로서, 분석 단계에서 사용될 재료를 얻는 중요한 단계다. 구슬이 서말이라도 꿰어야 보배라지만, 일단 제대로 된 구슬을 모으지 못하면 보배는 상상할 수도 없을 것이다.

문제 해결을 위한 데이터를 수집하는 방법에는 크게 기존의 데이터를 구해서 사용하는 것과, 직접 데이터를 수집하는 것을 생각해볼 수가 있다. 인터넷 보급 및 데이터의 중요성에 대한 인식의 확산으로 데이터를 구하는 과정이 많이 편해졌지만 여전히 문제 해결에 꼭 맞는 데이터를 찾는 것은 쉬운 일이 아니다. 어쨌든 직접 데이터를 수집하는 노력을 들이기 이전에, 존재하는 데이터셋을 찾아보는 과정은 꼭 필요하다.

만약 적절한 데이터를 구하지 못했다면 스스로 데이터를 수집해야 할 것이다. 데이터의 수집은 생각보다 고려해야 할 사항도 많고 문제의 특성과 수집의 방식에 따라 시간과 비용이 소요되는 일이지만, 데이터가 만들어지는 전 과정을 직접 통제할 수 있는 만큼 제대로 했을 때 가장 효과적인 방법이다. 또한 이미 누군가 분석에 사용했을 기존 데이터를 활용하는 것 보다는, 존재하지 않는 현상을 데이터화 했을때 잠재적으로 더 큰 가치를 얻을 수 있다.

기존의 데이터 과학 관련 책에서는 존재하는 데이터의 분석에 치중한 나머지 데이터 수집을 간과하는 경우가 많지만 본 글에서는 주어진 문제의 해결을 위한 데이터를 수집하는 방법을 자세히 다룬다. 이제 데이터 수집 과정에 필요한 도구를 선택하는 방법, 수집 과정에서 주의해야 할 점과, 데이터 수집의 종류 및 단계를 구체적으로 알아보자. 마지막으로 수집된 데이터의 품질을 평가하는 방법을 설명한다.

데이터 수집의 기본

데이터 수집은 우리가 관심을 갖는 현상을 데이터로 옮기는 과정이다. 데이터 문제의 대상이 되는 현상의 본질을 포착하기 위해서는 여러 측면을 고려해야 하며, 다양한 환경에서 관찰해야 하는 것이 보통이다. 앞서 언급한대로 대부분의 데이터는 여러 항목과 속성으로 구성된 테이블의 형태로 표현할 수 있다. 따라서 데이터 수집은 우리가 데이터화하고자 하는 현상의 여러 측면을 각각의 속성으로 표현하고, 현상에 대한 여러 관찰 결과를 개별 항목으로 표현하는 과정이다.

예를 들어 기업에서 직원들의 만족도를 설문을 통해 데이터화하는 경우를 생각해보자. 우선 직원의 만족도에 대한 설득력있는 결론을 도출하기 위해서는 사내 다양한 직군 및 부서를 대상으로 설문을 실시해야 할 것이다. 또한, 직원의 만족도에는 업무 환경, 기업 문화, 급여 및 처우 등 여러 측면이 있을 수 있다. 따라서 직원들의 만족도에 대한 데이터는 설문지에 참여한 다양한 사람들에 대한 정보와 실제 응답 내용이 포함된 테이블의 형태를 띈다.

테이블 형태의 데이터

위 테이블에 대해 구체적으로 살펴보자. 우선 테이블의 각 열은 개별 항목이 갖는 속성에 해당한다. 이 속성은 크게 데이터가 수집된 대상 및 상황의 속성을 가리키는 차원(dimension)과 데이터 수집을 통해 관찰된 결과인 측정값(measurement)으로 나눌 수 있다. 여기서 문제와 직접 관련되는 것은 측정값이지만, 차원은 측정값을 집계하거나 비교하는데 기준이 되기에 나중에 분석 단계에서 중요한 역할을 한다.

또한 각각의 속성은 숫자/시각/카테고리/텍스트 등등의 고유한 자료형과 단위를 가진다. 이처럼 데이터의 성격을 나타내는 데이터를 메타데이터라고 하는데, 이 정보가 잘못되었을 경우 분석 단계에서 큰 낭패를 볼 수 있다. 따라서 외부의 데이터를 가져올 때에는 자료형과 단위를 꼭 정확히 확인하고, 직접 데이터를 모을 때에는 이를 꼼꼼하게 기록해두어야 한다.

테이블의 각 행은 수집의 단위가 되는 개별 항목을 나타낸다. 설문지 사례를 다시 생각해보면 개별 참가자의 설문 결과가 한 항목을 구성할 것이다. 또한 위에서 설명한 차원을 바탕으로 개별 항목을 묶는 그룹을 정의할 수 있다. 설문 데이터에서는 부서 및 직급이 그룹으로 사용될 수 있을 것이다. 이러한 그룹은 나중에 여러 분석 작업의 주요 단위가 된다.

지금까지 데이터 수집의 기본에 대해 알아보았다. 이 글에서 말하는 데이터 수집은 결국 주어진 문제에서 다루고자 하는 현상을 테이블 형테의 데이터로 표현하는 과정이다. 여기서 테이블의 개별 속성은 우리가 관심을 갖는 현상의 서로 다른 측면을 측정한 결과물이며, 개별 항목은 현상에 대한 관찰의 내용이다. 이제 데이터의 속성과 항목을 결정하는 방법을 구체적으로 알아보자.

수집의 속성 결정하기

데이터 수집의 첫단계는 수집할 데이터의 속성을 결정하는 것이다. 효과적인 분석을 위해서는 문제의 초점이 되는 현상과 이와 관련된 현상의 단편이 모두 수집에 포함되어야 한다. 주어진 문제를 해결하기 위해 필요한 데이터의 속성을 정의했다면 실제로 이런 데이터의 값을 어떻게 얻을 수 있을지를 고민해야 한다. 즉 지금까지가 무엇(what)을 수집할 것인가를 결정하는 과정이었다면, 이제 어떤 방식(how)으로 수집할지를 결정해야 한다.

이처럼 주어진 대상을 수치 혹은 기타 형태로 데이터화하는 것은 측정의 문제다. 마치 맛있는 요리의 기본이 신선한 재료이듯, 제대로 된 측정 방법을 찾는 것은 데이터 기반의 문제 해결에 있어서 중요한 요소다. 쓰레기가 들어가면 쓰레기가 나온다(Garbage in, Garbage out)는 말에서처럼, 측정값이 부정확하고 오류가 있다면 어떤 분석도 제대로 된 결과를 낼 수 없을 것이기 때문이다.

데이터를 수집하는 방법의 종류를 사람의 개입 정도에 따라 크게 자동과 수동으로 나눌 수 있다. 자동 수집은 인간의 개입 없이 데이터 수집이 이루어지는 경우를 말한다. 자동 수집에는 대부분 기계적/전자적인 장치가 사용되며, 예컨데 핏빗(FitBit)과 같은 활동량 측정기 등이 여기에 해당한다. 자동 수집은 초기에 인프라를 구축하고 나면 데이터 수집에 드는 추가적인 비용이 크지 않은 특성이 있다.

수동 수집은 데이터 수집에 사람의 노력이 개입되어야 하는 경우다. 주어진 장치를 사람이 조작해서 데이터를 얻는 경우가 수동 수집에 해당한다. 또한 설문 등을 통해 주관적인 데이터를 수집하는 경우도 수동 수집이라고 하겠다. 수동 수집은 사람이 개입하는 특성상 데이터 수집에 필요한 노력이 데이터의 양에 비례할 것이다.

자동과 수동 수집의 장단점을 좀더 생각해보자. 자동 수집은 우선 편리하고, 누락이나 오류 없이 일관되게 데이터를 얻을 수 있다. 또한 자동 수집은 수집이라는 행위 자체가 데이터에 영향을 끼치는 관찰 효과(Observer Effect)에 의한 편향을 최소화하는 장점이 있다. 따라서 비용과 정확성 측면에서 가능한 한 데이터 수집을 자동화하는 것을 권할만하다.

온라인 서비스를 비롯한 기업 환경에서의 거래 데이터 수집은 자동으로 이루어지는 경우가 많다. 특히 웹사이트 사용자의 행동은 해당 사용자의 취항이나 만족도를 판단할 수 있는 단서가 되기에, 대부분의 온라인 서비스에서는 사용자의 모든 입력 및 방문 기록을 남김없이 저장하여 분석하고, 이를 바탕으로 다양한 지표를 만들어 서비스 개선에 사용한다.

물론 측정하고자 하는 대상에 따라 이런 자동화가 항상 가능한 것은 아니며, 자동화된 수집 결과가 놓치는 부분도 많다. 예를 들어 검색 엔진에서는 사용자가 검색 결과를 클릭했는지를 알 수 있다. 하지만 실제로 클릭한 결과가 사용자에게 도움이 되는지는 클릭 여부만으로 알 수는 없다. 한참을 읽었지만 도움이 되지 않는 문서나 웹사이트도 있을 수 있기 때문이다.

반면에 수동 수집은 사람의 판단에 의존하기 때문에 사람에게 물어서 알아낼 수 있는 모든 데이터를 수집할 수 있다. 여기에는 느낌이나 감정 상태, 주관적인 만족도 등이 포함된다. 예컨데 검색 결과를 평가하는데 있어서 만약 실제 사용자에게 해당 질의에 대한 검색 결과가 만족스러운지 물어볼 수 있다면 단지 클릭 여부에 의존하는 것보다 훨씬 정확한 결과를 얻을 수 있을 것이다. 따라서 검색 회사에서는 사용자 데이터를 분석하는데 그치지 않고, 대규모의 품질 평가단을 고용하여 검색 결과에 대한 평가 결과를 얻고 있다.

또한 수집 과정에 사람이 참여하는 것이 유용한 경우도 있다. 예컨데 스스로 수집 행위에 대한 자각(awareness)를 가져야 하는 경우에는 오히려 사람의 수동적인 개입이 그런 자각을 유지하는데 도움이 될 수도 있을 것이다. 친숙한 사례로 매일 아침에 체중계에 올라가는 행위 자체가 체중 관리에 대한 주의를 지속적으로 환기시킬 것이다. 또한 국민 투표와 같은 행사는 정치적 사안에 대한 민의를 모은다는 의의 이외에도 국가에 대한 주권의식을 고취시키는 의의도 있다. 이 모든 것이 데이터 수집에 인간이 참여함으로써 얻어지는 부수적인 효과라고 할수 있다.

좋은 측정 방법의 특성

위에서 측정값을 얻는 다양한 방식을 살펴보았다. 측정 수단은 궁극적으로 데이터 문제의 종류와 성격에 따라 결정되어야 하겠지만, 여기서는 좋은 측정 수단의 공통적인 조건을 몇가지 생각해보자. 그 첫번째 조건으로 결과 측정값의 품질을 들 수 있다. 이는 다시 말하면 측정값이 우리가 측정하려는 현상을 정확히 포착하며, 그 이외에 다른 요인의 영향을 받지 않는다는 것이다. 측정값의 품질을 평가하는 기준에는 크게 분산과 편향을 들 수 있는데, 이는 다음 장에서 좀더 다룬다.

좋은 측정방법의 두번째 조건은 수집의 비용이 낮아야 한다는 것이다. 흔히 생각할 수 있는 측정의 비용으로는 측정 기기를 구입하거나 데이터를 얻는 비용이 있다. 예컨데, 체중 관리를 위해 체중계를 구입하거나, 설문 참가자에게 지급하는 수고료 등이 여기에 포함된다. 자동 수집의 경우 개별 데이터를 얻는데는 거의 비용이 들어가지 않지만, 데이터를 수집할 수 있는 준비를 하는 비용이 발생한다. 또한 데이터를 얻는 것이 데이터 과학의 궁극적인 목표는 아니기 때문에, 측정의 비용에는 그 결과를 저장하고 분석에 맞는 형태로 변환하는 노력도 포함된다.

이를 좀더 생각해보면 위에서 언급한 측정의 품질과 비용은 다양한 교환관계를 (trade-off) 지닌다는 사실을 알 수 있다. 고품질의 측정 수단을 선택하면 같은 수준의 품질을 얻기 위해 필요한 데이터의 양이 줄어들기에, 지속적인 측정에 드는 비용을 줄일 수 있는 것이다. 또한 측정 데이터를 모으고 분석하는 기능까지 갖춘 측정 장비를 사용하면 데이터 분석에 드는 수고를 절약할 수 있다. 따라서 자신의 예산과 필요에 맞는 균형점을 찾는 것이 중요하다.

수집의 환경 결정하기

데이터는 결국 어떤 환경(조건)에서 어떤 현상을 관찰하여 기록한 결과물이다. 앞에서 개별 속성의 값을 얻는 방법에 초점을 맞추었다면, 이제는 수집의 환경에 대해 생각해보자. 여기서 데이터 수집의 환경은 주어진 문제의 범위에 따라 결정된다. 즉 자신이 관찰하려는 현상을 대표할만한 환경에서 데이터를 수집해야 하는 것이다. 만약 그런 환경이 현실에 존재하지 않는다면 인위적으로 만들어보는 것도 생각할 수 있는데, 이것이 자연 과학에서 말하는 실험의 본질이다.

이를 통계학에서는 표본의 대표성(representativeness)라고 부르는데, 이 조건이 만족되지 않으면 해당 데이터를 가지고 내리는 어떤 결론도 무의미한 것이 되므로 주의해야 한다. 이를 좀더 구체적으로 알아보자. 만약 특정 시간이나 지역에서 일어나는 현상을 관찰하기 위해서는 데이터 수집에 있어서 해당 조건을 고려해야 할 것이다. 사람에게서 데이터를 수집하는 경우 어떤 문제에서 요구하는 조건을 만족하는 개인이나 조직을 수집의 대상으로 해야 하며, 해당 집단 내에서도 대표성이 있는 표본을 추출하기 위해 노력해야 한다.

표본의 대표성이 훼손된 고전적인 사례로 1936년 The Literary Digest라는 잡지에서 실시한 미국 대선 결과에 대한 예측이 자주 인용된다. 이 설문에서는 무려 2백 40만명의 사람에게 응답을 얻었지만, 민주당의 루즈벨트 후보의 당선을 예측하는데 실패했다. 루즈벨트는 62%의 실제 득표를 얻어서 대선에 승리했는데, 이를 43%로 예측했으니 무려 19%의 오차를 보인 것이다. 가히 최대 규모의 여론조사에서 거둔 최악의 예측 결과였다.

왜 이런 오차가 발생했을까? 이 잡지에서는 우편을 통한 설문을 실시했는데, 우선 우편 발송자 명단을 구하기 위해 전화번호부와 잡지 구독자 명단을 사용했다. 그런데 1936년에 전화를 사용하며, 특정 잡지를 구독하는 사람들은 어느 정도 경제적 여유가 있는 계층일 것이다. 따라서 설문 조사의 대상에는 루즈벨트의 지지층인 중산층 이하의 계층이 실제보다 적게 포함되었을 것이라고 추측해볼 수 있다.

또한 이 설문에 대한 응답률은 24%에 불과했는데, 이때 설문에 응답한 사람들이 응답하지 않는 사람들과 정치적 성향에서 차이를 보일 가능성을 배제할 수 없다. 정치색이 뚜렷하지 않은 대부분의 유권자들은 이런 설문에 적극적이지 않을 것이기 때문이다. 결론적으로 위 사례는 표본의 대표성의 훼손되었을 때 어떤 결과를 가져올 수 있는지 잘 보여준다. 이제 데이터 수집 환경의 대표적인 유형에 대해 자세히 알아보자.

관찰형 연구와 통제형 실험

데이터 수집의 환경에 있어서 가장 기본적인 것은 자연 상태의 데이터를 그대로 수집하는 것이다. 이를 과학에서는 관찰형 연구(Observational Study)라고 하는데, 이는 문자 그대로 탐구 대상이 되는 현상에 어떤 인위적인 조작도 없이 데이터를 수집하는 것을 가리킨다. 이는 사회학과 같이 본질적으로 관찰 대상에 영향을 끼치기 어려운 학문에서 널리 쓰이는 방식이다.

예를들어 우열반 편성이 학업 성취도에 미치는 영향을 데이터 분석을 통해 연구하려는 경우를 생각해보자. 이상적으로는 각 학교에 무작위로 우열반 편성을 시행하여 여기에 속한 학교와 그렇지 않은 학교의 학업 성취도를 비교해볼 수 있다. 하지만 현실적으로 이런 정책은 해당 학교의 여건과 의사에 맞게 실시될 것이며, 예컨데 예산이 좀더 풍부한 학교의 참가율이 더 높을 것이다. 따라서 우열반의 효과를 분석하기 위해서는 우열반 편성에 참가한 학교들이 갖는 다른 특성도 고려해야 할 것이다. ^[이처럼 관찰형 연구의 데이터에서 나타나는 갖가지 편향을 제거하기 위한 다양한 통계적 기법이 존재한다.]

이처럼 자연 상태에서 얻어진 대부분의 데이터에는 여러가지 속성간의 관계가 뒤섞여있는 경우가 많은데, 이런 경우 데이터에서 명확한 결론을 유도하기가 어렵다. 따라서 자연과학에서는 인과간계를 밝히기 위한 통제형 실험(Controlled Experiments)을 수행한다. 통제형 실험에서는 어떤 특정한 조건을 인위적으로 변화시키며 그 변화가 우리가 관심을 갖는 지표에 미치는 영향을 관찰한다. 이때 다른 변인의 변화는 철저히 통제되기 때문에 우리가 변화시킨 요인이 갖는 영향만을 순수하게 분리해서 관찰할 수 있다.

이런 통제형 실험은 자연과학 뿐아니라 데이터에 기반에 각종 의사결정을 내려야 하는 실무에서도 널리 사용된다. 예를 들어 온라인 서비스의 품질 개선을 위해 많이 사용되는 A/B테스트의 경우, 무작위로 추출된 사용자 그룹을 두개 만든다. 그리고 그 중 하나에 현재의 서비스를, 그리고 다른 그룹에 신규 개발된 서비스를 제공하고 사용자의 행동이 두 그룹간에 어떤 차이를 보이는지를 관찰한다. 만약 새로 개발된 검색 알고리즘에 노출된 사용자들이 기존 알고리즘에 비해 좀더 원하는 결과를 빨리 찾았다면 새로운 알고리즘이 더 낫다는 결론을 내릴 수 있을 것이다.

수집할 데이터의 양 결정하기

어떤 조건에서 데이터를 수집해야 할지를 결정했다면, 각 조건에서 데이터를 얼마나 모을지를 결정해야 한다. 이는 통계학에서 표본량(sample size) 결정이라고 부른다. 표본량의 결정 역시 절대적인 기준이 존재하는 부분은 아니다. 문제 정의 단계에서 설정한 목표를 달성하기에 충분한 양이면 된다. 그렇다면 ‘충분함’을 어떻게 판단할 수 있을까? 이는 분석의 목표에 따라 달라지는 부분이다. 여기서는 앞서 설명한 몇가지 분석 목표에 대해 표본량을 결정하는 방법을 알아보자.

현상의 이해 분석의 목표가 현상의 이해라면 일반적으로 적절한 표본량에 대한 기준을 세우기도 쉽지 않고, 따라서 최소한의 데이터로 시작하는 것이 바람직하다. 여기서 한가지 고려사항은 분석 대상이 되는 현상을 가능한 모든 환경에서 관찰하였는지의 여부다. 예컨데 웹 사용자 데이터와 같이 시간성이 중요한 분석이라면 데이터 수집의 단위를 적어도 일주일 정도로 가져가는게 좋다. 주중과 주말에 사용자의 이용 패턴이 달라질 수 있기 때문이다. 또한 여러 부서로 이루어진 조직에서 설문을 실시하여 데이터를 수집하는 경우라면 각 부서에서 최소 인원수는 확보해야 할 것이다.

현상의 일반화 주어진 현상으로부터 일반적인 결론을 유도하려고 하는 경우, 필요한 데이터의 양을 비교적 정확히 계산할 수 있다. 예컨데 통계적 추론의 정확도를 나타내는 신뢰구간의 넓이는 표본량의 제곱근에 반비례하고, 추정하려는 지표의 표준편차에 비례한다. 통계적 추론을 위한 표본량 계산은 나중에 자세히 다룬다.

아래 차트는 정규분포를 따르는 모집단의 평균에 대한 신뢰구간이 표본의 크기에 따라 어떻게 좁아지는지 나타낸다. 그림에서 실선과 점선은 각각 표준편차가 각각 1과 2인 정규분포에 대한 결과다. 표본 크기가 커질수록, 그리고 모집단의 표준편차가 작아질수록 신뢰구간이 좁아지는 것을 알 수 있다.

표본수, 표준편차, 신뢰구간의 관계

위 차트에서 알 수 있는 또다른 점은 표본 크기 50까지는 신뢰구간이 현격히 좁아지지만, 그 이후부터는 표본 크기를 증가시켜도 그다지 신뢰구간에 변화가 없다는 사실이다. 이미 충분한 데이터가 있다면, 추가적인 데이터에서 얻어지는 가치는 그다지 크지 않다는 사실을 여기서도 알 수 있다.

현상의 예측 현상을 예측할 수 있는 모델을 만들기 위한 데이터의 양은 문제 및 모델의 특성에 따라 다르며, 실제 학습된 모델을 평가해보기 전에는 예측하기가 어렵다. 하지만 어느 정도까지는 데이터가 많을수록 학습 모델의 정확도가 개선되므로, 필요한 경우 추가적인 데이터 수집을 고려할 수 있다. 기계학습 모델이 얼마나 많은 데이터를 필요로 하는지는 나중에 자세히 다룬다.

데이터 수집시 기타 유의사항

데이터 수집 단계에서 가장 중요한 덕목은 일관성이다. 데이터를 모으는 과정에서 수집 방법이 바뀐다면 결과의 품질을 보장할 수 없기 때문이다. 따라서 중간에 더 좋은 수집 방법이 생각났다고 하더라도 처음에 결심한 기간 동안은 동일한 방법을 유지해야 한다. 개선된 수집 방법을 적용하는 것은 데이터 분석이 끝나고 다시 수집을 시작할 때 생각해볼 문제다. 이런 이유에서도 명확한 문제 정의를 갖는 것은 중요하다. 뚜렸한 지향점이 없으면 일관성을 유지하기 어렵기 때문이다.

하지만 이는 무조건 초기의 계획을 고수해야 한다는 말은 아니다. 계획한 기간이 끝나기 전이라도 수집 목표가 달성되었다면 그 시점에서 수집을 그만둘 수 있는 유연성도 필요하다. 이러한 수집의 조기 종료는 시간과 비용을 줄이는 효과적인 방법인데, 이런 종류의 의사결정을 내리는 방법에 대해서는 다음 장에서 자세히 설명한다. 물론 같은 원리로 수집 목표가 달성되지 못한 경우에는 예상 기간이나 비용을 초과해서라도 그 목표를 달성해야 할 수도 있다.

또한 많은 수집이 전체 현상에서 추출한 표본을 대상으로 이루어지는데, 분석 과정에서의 오류를 최소화하기 위해서는 표본 선정의 무작위성(randomness)이 보장되어야 한다. 이는 다시 말하면 수집이 이루어진 시간, 장소, 참가자 등의 선정에 수집 주체의 주관이 반영될 여지가 최소화되어야 한다는 뜻이다. 무작위성이 중요한 이유는 다음 장에서 소개할 대부분의 분석 방법이 무작위로 추출한 표본을 가정하기 때문이다.

무작위 추출의 사례로 ‘Flow’의 저자 미하이 칙센트미하이 교수가 개발한 경험 추출법을 (Experience Sampling) 들 수 있다. 이는 실험 참가자가 일상에서 느끼는 평균적인 감정 상태를 측정하기 위한 방법으로, 참가지는 미리 정해지지 않은 무작위의 시점에 울리는 알람을 신호로 자신의 감정을 기록하게 된다. 이 방법을 통하여 참가자는 자신의 기분이나 주변 상황에 영향이 측정된 감정에 주는 영향을 최소화할 수 있습니다.

이처럼 데이터 수집에는 생각보다 고려할 사항이 많다. 따라서 효과적인 데이터 수집을 위해서는 앞서 언급했듯이 수집된 데이터를 지속적으로 모니터링할 수 있는 시스템이 필요하다. 수집된 데이터를 보면서 문제점도 조기에 파악할 수 있고, 현재까지 수집된 데이터에 대한 실시간 분석을 통해 데이터 수집을 언제 중단할지에 대해서도 결정할 수 있기 때문이다. 이런 이유에서 많은 측정 장치 및 소프트웨어는 수집된 데이터를 모니터링할 수 있는 수단을 제공한다.

추신: 피드백을 주신 박지영, 최창순 님이외에 익명의 독자분들께 감사의 말씀을 전합니다. 이 글을 끝까지 읽으셨다면 다음 주소에서 피드백을 남겨주시기 바랍니다.

데이터과학 자료모음 (0531)

이번주의 자료모음입니다. 이번주에는 최근에 많은 관심을 모으고 있는 딥러님과 데이터 과학 커리어에 관한 자료가 주종입니다. 여기 올린 자료는 데이터과학 자료모음 페이지에 정리되어 보관됩니다.

Deep Learning

튜토리얼

국내자료

Data Science Career

구직 / 면접 관련

데이터 과학자 인터뷰 모음

데이터과학 프로세스(1): 데이터 문제 정의하기

데이터 과학의 개념에 이어 데이터 과학의 프로세스를 몇회에 나누어 소개할 생각이다. 이번 글에서는 우선 데이터 문제의 유형을 소개하고, 이어 데이터 문제를 정의하는 과정을 다룬다. 데이터 문제 정의의 구체적인 사례로 넷플릭스 프라이즈를 살펴본다.

데이터 문제의 유형

본격적으로 데이터 과학의 프로세스를 알아보기에 앞서 데이터 문제의 유형을 생각해보자. 데이터 문제의 구성요소는 크게 문제의 당사자가 되는 주체, 문제가 달성하고자 하는 목표, 문제에서 다루는 데이터의 세가지 부분으로 나누어 생각해볼 수 있다. 그리고 이 세가지의 구성요소에 따라 문제의 성격 및 해결을 위한 도구와 방법이 결정된다.ch3_data_problem_elements

데이터 문제의 ‘주체’

우선 데이터 문제의 주체는 문제 해결 과정에 직/간접적으로 참여하는 당사자를 가리킨다. 이에 따라 각 단계에서 누가 어떤 역할을 하고, 의사소통이 어떻게 이루어져야 하는지가 결정된다. 여기서는 주체의 유형을 크게 조직과 개인으로 나누어 생각해보자.

조직이 주체

우선 조직이 주체가 되는 경우는 조직이 당면한 다양한 문제를 데이터의 힘을 빌어 해결하는 경우다. 기업에서 일어나는 시장조사, 프로젝트 및 조직별 성과 평가 등 대부분의 데이터 분석 작업이 여기에 해당한다. 조직 구조 측면에서는 해당 업무를 담당하는 조직이 직접 데이터 분석을 하는 경우와, 데이터 관련 업무를 담당하는 조직이 사내 혹은 외부에 별도로 있는 경우를 생각해볼 수 있다.

조직 차원의 문제는 다양한 분야의 전문가간의 협업을 통해 해결하는 경우가 많고, 문제를 해결하는 주체와 그 결과에 영향을 받는 주체가 다를 수 있다. 따라서 조직의 문제를 해결하는 상황에서는 문제 정의부터 데이터 수집, 분석, 해결책 도출에 이르는 전 과정을 조직의 다른 구성원들과 효과적으로 소통하는 것이 중요한 과제다. 특히 의사결정권을 가진 개인이나 조직이 문제 해결을 담당하는 조직 밖에 있는 경우, 문제 정의 단계부터 의사결정권자(혹은 조직)와의 긴밀한 소통이 필수적이다.

개인이 주체

이와 반대로 개인이 주체가 되는 경우는 개인이 자신의 삶이나 비즈니스에서 발생하는 다양한 문제를 데이터로 해결하려는 경우다. 자신의 문제를 데이터화한다는 것이 아직 많은 독자들에게 친숙하지는 않을 수도 있지만, 여기에는 앞서 살펴본 것처럼 실로 다양한 가능성이 있다. 또한, 스마트폰과 웨어러블의 확산에 따라 그 영역은 앞으로 더욱 넒어질 것이다. 앞서 언급한 개인의 건강 및 업무 생산성 등을 데이터화하여 분석하는 문제가 여기에 해당한다.

개인의 데이터 문제는 상대적으로 데이터의 크기가 작으며, 문제를 정의하고 해결하며 그 결과를 구현하는 것까지 모두 개인의 몫이라는 특성이 있다. 따라서 조직 차원의 문제해결에서와 같은 소통의 문제는 발생하지 않는다. 하지만, 구성원간의 감시와 견제가 존재하는 조직에서의 문제해결과는 달리, 개인적인 문제 해결에서는 철저한 객관성을 유지하기 위해 별도의 노력을 기울여야 한다.

데이터 문제의 ‘데이터’

이번에는 데이터 문제의 ‘데이터’의 유형에 대해 좀더 자세히 알아보자. 이러한 데이터의 유형은 데이터의 다양한 측면에서 데이터 문제의 성격을 규정한다.

데이터의 존재 유무

우선 데이터의 존재유무가 문제해결 과정에 많은 차이를 만든다. 우선 정해진 데이터를 가지고 문제 해결에 착수하는 경우를 생각해보자. 이 경우 수집의 부담은 덜 수 있지만, 주어진 데이터가 문제해결에 불충분한 경우 어려움에 봉착할 것이다. 따라서 많은 경우 추가적인 데이터를 수집할 수 있는 방법을 고민해야 한다. 이어지는 글에서는 문제 해결을 위해 얼마만큼의 데이터를 수집해야 하는지를 추산하는 방법을 다룬다.

반면에 데이터가 아예 존재하지 않는 경우에는 수집 방법부터 고민해야 한다. 또한 보통 수집 과정에서 시간과 비용이 들어가기 때문에 문제 해결에 따르는 비용이 데이터가 주어진 경우보다 더 큰 경우가 많다. 하지만 데이터가 존재하지 않는다는 것은 많은 경우 아직 아무도 해당 문제를 데이터화하려는 시도를 하지 않았다는 뜻이다. 따라서, 그만큼 어려움이 따를 수 있으나 해결에 성공하는 경우 더 큰 보상을 기대할 수도 있다.

데이터의 크기나 형태

또한 데이터의 크기나 형태에 따라 어떤 종류의 기술을 사용해야할지가 상당 부분 결정된다. 예컨데 데이터가 개인용 PC에 들어가지 않는 경우는 소위 빅데이터 솔루션을 사용해야 할 것이다. 또한 텍스트 및 멀티미디어 등의 무정형 데이터를 제대로 저장 및 분석하기 위해서는 각 데이터 유형에 맞는 기술을 사용해야 할 것이다.

시중에는 데이터의 크기(빅데이터 vs 스몰데이터), 데이터의 형태(관계형, 텍스트, 멀티미디어) 등에 따라 다양한 솔루션이 나와있다. 또한 R 및 파이썬과 같은 범용 데이터 분석 플랫폼은 대부분의 데이터 유형을 처리할 수 있다. 데이터 및 문제의 특성에 따라 도구를 선택하는 자세한 과정은 앞의 글을 참조하도록 하자.

데이터 분석의 목표

마지막으로 데이터 분석을 통해 달성하고자 하는 주요한 목표를 현상의 이해, 현상의 일반화, 그리고 현상의 예측으로 나누어 생각해볼 수 있다. 현상의 이해는 현상의 일반화를 위한 기초가 되고, 현상의 예측은 현상의 이해와 일반화에 기반한다. 따라서 이들 목표는 서로 독립적인 것이 아니라 데이터 분석의 각 단계로 이해해도 되겠다.

아래 그림은 데이터 분석의 세가지 유형을 구분하여 설명한다. 우선 탐험적 분석은 주어진 데이터를 이해하는 것을 목표로 한다. 통계적 추론은 주어진 데이터를 표본으로 이해하고, 여기서 한걸음 나아가 모집단에 대한 여러가지 결론을 유도하려고 한다. 마지막으로 기계학습은 현상을 설명하는 모델을 만들고 이를 통해 새로운 현상을 예측하려고 한다.

ch3_data_analysis_types

현상의 이해: 탐험적 데이터 분석

데이터 과학의 가장 기본적인 목표는 데이터를 활용하여 주어진 현상을 좀더 잘 이해하는 것이다.이는 통계학에서 ‘탐험적 데이터 분석(Exploratory Data Analysis)’이라고 부르는 단계로, 데이터를 통해 이루고자 하는 목표에 관계없이 기본적으로 꼭 거쳐야 하는 단계다. 이는 데이터에 포함된 각 속성의 분포, 속성 및 항목간의 관계 등을 밝히고, 이를 통해 현상에 대한 더 명확한 이해에 도달하는 것이다.

위에서 소개한 테이블 관점에서 설명하면 이는 주어진 현상의 각 속성(혹은 테이블의 열)간의 관계를 밝히려는 노력이다. 그리고 이를 위해서는 각종 통계값(statistics)의 계산, 데이터 시각화, 상관도(correlation) 분석 등의 기법이 사용된다. 따라서 이 단계의 목적은 데이터를 잘 이해하고, 현상에서 좀더 탐구해볼만한 가치가 있는 패턴을 추출해내는 것이다.

현상의 이해가 분석의 궁극적인 목적인 경우는 많지 않기에, 현상의 일반화나 예측이 목적인 경우 탐험적 데이터 분석을 생략하려는 유혹을 받기가 쉽다. 하지만, 데이터에 혹시나 있을 수 있는 오류를 찾아내기 위해, 혹은 통계적 추론 및 예측에 사용할 수 있는 속성을 결정하기 위해 탐험적 분석은 필수적으로 거쳐야할 단계다.

현상의 일반화: 통계적 추론

위 단계에서 주어진 현상을 이해하는데 초점을 맞추었다면, 현상의 일반화 단계에서는 이를 바탕으로 주어진 현상을 넘어선 일반적인 원리나 지식을 이끌어내려고 한다. 과학적 연구 방법론의 관점에서 이는 앞서 만들어낸 가설을 검증하는 단계로 생각할 수 있다. 즉 주어진 현상뿐 아니라 앞으로 일어날 수 있는 현상까지 설명할 수 있는 결론을 이끌어내려는 것이다.

데이터의 특성에 따라 이는 주어진 데이터에 적절한 통계적 추론 기법을 적용하는 선에서 끝나는 일이기도 하다. 하지만, 많은 경우 자연 상태에서 수집된 데이터에는 다양한 편향(bias)이나 노이즈가 존재한다. 따라서 자연과학에서는 현상에 대한 명쾌한 결론을 유도하기 위해 통제된 실험을 수행한다. 예를 들어 모든 속성 중 하나의 값을 바꿔가면서 데이터를 수집하고, 이 속성의 변화가 우리가 관심을 갖는 다른 속성에 어떤 영향을 끼치는지를 관찰하는 것이다.

이런 기법은 데이터에 기반에 각종 의사결정을 내려야 하는 비즈니스 실무에서도 널리 사용된다.예를 들어 온라인 서비스의 품질 개선을 위해 많이 사용되는 A/B테스트의 경우, 무작위로 지정된 두 사용자 그룹중 하나에 현재의 서비스를, 그리고 다른 그룹에 신규 개발된 서비스를 제공하고 사용자의 행동이 두 그룹간에 어떤 차이를 보이는지를 관찰하는 것이다.

현상의 예측: 기계 학습

마지막으로, 데이터를 통해 아직 관찰되지 않았지만 유용한 속성의 값을 예측하는 모델을 만드는 경우를 생각해볼 수 있다. 현상의 일반화를 목적으로 하는 통계적 추론에서는 주어진 현상 전체 및 특정 집단에 대한 예측을 내리는 반면에 기계학습 기법에서는 개별 항목의 속성값을 예측의 대상으로 삼는다.

이처럼 주어진 현상을 예측할 수 있는 모델은 많은 경우 직접 제품화되는 경우가 많은데, 예측 모델을 통해 고객의 선호도 및 비즈니스적인 의사결정을 최적화할 수 있기 때문이다. 웹 검색엔진에서 문서를 랭킹하는 모델, 혹은 전자상거래 사이트에서 고객에게 물건을 추천하는 모델 등이 여기에 속한다.

현상을 정확히 예측할 수 있다는 것은 현상에 대한 궁극적인 이해에 도달했다는 증거로 이해할수도 있을 것이다. 따라서 효과적인 예측을 통해서는 앞에서의 분석 및 추론 단계가 중요하며, 반면에 예측 모델을 만들어 현상을 이해하는데 활용하기도 한다.

데이터 문제 정의하기

만약 나에게 문제 해결을 위해 한시간이 주어진다면, 나는 55분동안 문제에 대해 생각하고 5분동안 해결책에 대해 생각하겠다. – 알버트 아인슈타인

학문적 업적 만큼이나 수많은 명언을 남긴 아인슈타인이 문제 해결에 대해 강조한 것은 문제를 해결하기에 앞서 명확히 정의하는 과정의 중요성이었다. 데이터를 통해 문제를 해결하려 하는 경우에도 이는 똑같이 적용된다. 문제 해결에 데이터가 필요하다는 것은 문제가 되는 상황에 대한 이해가 완전하지 않다는 의미이기 때문에, 해결에 앞서 주어진 문제를 철저히 이해하려는 노력이 더욱 중요하다.

문제 정의의 고려사항

위에서 데이터 문제를 구성하는 세가지 요소를 알아보았다. 주어진 문제에 대해 이들 요소들을 생각해본다면 문제의 기본적인 특성을 이해할 수 있을 것이다. 하지만 본격적인 문제 해결에 앞서 문제를 좀더 구체적으로 정의하는 과정이 필요하다. 마치 프로그램 작성에 앞서 스펙(specification) 문서를 작성하듯이 본격적인 프로젝트 착수에 앞서 문제 해결에 대한 계획을 문서화하는 것이다.

왜 이런 과정이 필요할까? 앞으로 설명하겠지만 데이터 과학의 각 프로세스마다 수많은 의사결정을 내리게 된다. 주어진 문제의 목표, 범위와 제약조건을 정확히 이해하고 있으면 이런 결정을 내릴 때 귀중한 길잡이가 된다. 특히, 팀단위로 일하며 여러 이해당사자가 관련된 경우 문제와 관련된 오해의 소지를 최소화하기 위해 이보다 더 좋은 방법은 없다. 대부분의 프로젝트에서 효과적인 의사소통은 문제해결의 성패를 좌우한다는 것을 상기하자.

효과적인 문제 정의는 적어도 다음 사항을 포함하고 있어야 한다.

  • 문제의 목표는 무엇인가?
  • 문제의 범위는 정확히 어디까지인가?
  • 문제 해결의 성공 / 실패 기준은 무엇인가?
  • 문제 해결에 있어서의 제약조건은 무었인가? (시간과 비용 등)

이에 더하여 데이터 기반의 문제해결의 위해서는 다음 사항을 추가적으로 고려해야 한다.

  • 문제와 관련된 데이터에 포함되어야 하는 요인은 무엇인가?
  • 문제 해결에 필요한 데이터를 어떻게 수집할 수 있는가?
  • 데이터 처리 및 분석을 위한 최적의 방법과 도구는 무엇인가?
  • 최종 결과물은 어떤 형태로 누구에게 전달되어야 하는가?

여기서 문제 정의는 한번 작성하고 끝나는 것이 아니라 해결 과정에서 끊임없이 재검토해야 한다는 점을 강조하고 싶다. 데이터 과학은 현상에 대한 불완전한 이해를 데이터를 통해 보완하려는 노력이다. 따라서 이 과정에서 초기에 고려하지 못했던 변수가 등장하는 일이 빈번히 발생하는데, 이에 유연하게 대응하는 것이 효과적인 문제 해결에 필수적이다.

문제 정의 검토 및 소통하기

위에서 설명한 문제 정의 단계를 거쳐 문제에 대한 좀더 구체적인 이해에 도달하게 될 것이다. 우선 문제의 목표 및 범위, 그리고 기본적인 해결방안 및 기대 효과를 도출할 수 있다. 그리고 데이터 수집 및 분석, 그리고 해결책의 구현에 소요되는 비용도 산정할 수 있을 것이다. 데이터 수집에 소요되는 비용은 수집의 방법 및 양에 의해, 그리고 데이터 분석 및 해결책의 구현에 소요되는 비용은 주로 데이터의 질과 분석의 복잡도에 따라 결정된다.

앞서 밝혔듯이 필자는 모든 문제를 데이터를 사용해 해결해야 된다고 생각하지는 않는다. 만약 문제 해결의 기대효과가 예상비용을 초과한다면 이는 데이터 기반의 해결책을 적용하기에 적절한 문제가 아닐 것이며, 이런 판단이 섰을 경우 더 이상의 낭비를 막기 위해 프로젝트를 중단해야 할 것이다. 이처럼 명확한 문제 정의는 문제 해결에 들어가는 노력의 타당성을 검토하는 것을 가능하게 한다. 제대로 된 데이터 과학자라면 언제 데이터를 문제해결에 사용할지도 판단할 수 있어야 할 것이다.

또한 조직의 문제를 해결하는 상황이라면 문제 정의에 대한 조직 구성원들의 피드백 및 공감대를 얻을 수 있어야 할 것이다. 이를 통해 문제의 필요성에 대한 인식을 나누고, 해결 방안에 대한 조언을 구할 수 있을 것이다. 또한 이 과정에 의사결정권자를 포함시킴으로써 프로젝트의 성공을 결정하는 조건을 정확하게 알 수 있을 것이다. 이 모든 과정은 도출된 해결책이 실제로 조직에 받아들여지기 위한 밑바탕이 된다.

문제 정의의 사례: 넷플릭스 프라이즈 (The Netflix Prize)

2006년 미국 최대의 비디오 대여 업체인 넷플릭스에서 넷플릭스 프라이즈(Netflix Prize)를 발표했을 때 관련 업계와 학계는 발칵 뒤집혔다. 넷플릭스 사용자들에 의한 백만개 이상의 영화 평가 데이터를 공개하면서 자사의 추천 알고리즘을 10%이상 개선하는 프로젝트에 백만달러의 상금을 내건 것이다. 온라인 기업의 핵심 역량중 하나인 예측 모델을 개발하는 프로젝트가 관련 데이터와 함께 외부로 공개된 적도 없었고, 상금 액수 역시 상상을 초월하는 것이었다.

데이터 과학의 문제를 정의를 설명하는데 넷플릭스 프라이즈를 이야기하는 이유는 이 경연을 위한 문제기 데이터 과학 문제 정의의 모범답안이라고 할만큼 잘 정의되어 있기 때문이다. 사실 기업 내부의 데이터와 프로젝트를 일반 대중에게 공개하려고 한다면 최대한 구체적이면서 명확한 정의가 필수적일 것이다. 여기서는 데이터 문제의 정의라는 측면에서 넷플릭스 프라이즈의 룰을 살펴보자.

목표 넷플릭스 프라이즈의 목표는 넷플릭스 사용자들의 영화 선호도 데이터를 (별점:1~5) 바탕으로 각 사용자가 미래에 볼 영화의 선호도를 예측하는 것이다.

범위 참가자들은 넷플릭스에서 제공한 데이터를 가지고 예측 모델을 개발하며, 평가 역시 넷플릭스에서 미리 정해진 데이터셋을 기반으로 실시한다.

성공기준 참가자들의 예측 모델은 넷플릭스의 자체 모델보다 10%이상 예측 성능을 향상시켜야 하며, 평가를 위해서는 RMSE(Root Mean Squared Error)를 사용한다.

데이터 참가자들에게는 약 50만명 가량의 사용자가 17000여개의 영화를 평가한 백만개 이상의 평가 데이터가 제공된다. 사용자들의 프라이버시를 보호하기 위해 모든 데이터는 익명으로 제공된다.

제약조건 참가자들은 하루에 최대 하나의 예측 결과를 업로드할 수 있다. 넷플릭스는 예측 결과의 평가하여 그 일부의 결과를 공개하고, 나머지는 최종 결과의 심사를 위해 사용한다.

위에서 살펴본대로 넷플릭스 프라이즈의 주체측에서는 추천 알고리즘의 개발이라는 데이터 문제의 모든 측면을 최대한 상세하게 정의하였다. 이런 노력은 2000명이 약 14,000개의 예측 모델을 개발한 대규모의 경연을 성공적으로 끝내는 것을 가능하게 했다. 넷플릭스 프라이즈의 웹사이트에서 실제 넷플릭스 프라이즈의 룰을 살펴볼 수 있다.

넷플릭스 프라이즈는 결국 누구에게 돌아갔을까? 2006년부터 3년간 약 2000팀이 참가한 끝에 1위의 영예와 상금은 AT&T의 ‘벨코아(BellKor)’팀에게 돌아갔다. 1위 팀이 구현한 알고리즘이 너무나 복잡해서 결국 실제 서비스에 적용되지는 못했다는 후문도 있었지만, 이 이벤트는 숱한 화제를 뿌리며 관련 분야의 발전에 크게 기여하였다. 그리고 통계적 예측 모델의 성능을 놓고 경쟁을 한다는 아이디어는 캐글(Kaggle)과 같은 회사에 의해 계승되고 있다.

추신: 본 글에 대한 피드백을 남겨주신 김치용, 박희창, 이권일 님을 비롯한 여덟 분께 감사드립니다.

데이터과학 자료모음 (0517)

이번주의 자료모음입니다. 여기 올린 자료는 데이터과학 자료모음 페이지에 정리되어 보관됩니다.

기계학습

데이터과학 관련

데이터 과학 자료모음 (0510)

이번주의 자료모음입니다. 여기 올린 자료는 데이터과학 자료모음 페이지에 정리되어 보관됩니다.

Competitive Data Science

데이터과학을 공부하는 방법으로 컴피티션에 참가하는 것은 권할만한 방법입니다. 특히 잡서치를 하시는 분들께 이만큼 좋은 준비는 없지 않나 합니다. 이를 시작하기 위한 자료를 소개합니다.

Basics

Learning from top performers

Advice on Data Science Career

데이터 과학을 시작하시는 분들을 위한 좋은 글을 많이 보실 수 있습니다.

Data Visualization

정보시각화의 역사에 길이 남을만한 잘(못)된 시각화를 모은 페이지입니다.

데이터과학 자료모음 (0426)

통계적 추론 개념잡기

최근에 통계적 추론에 관한 글을 쓰면서 발견한 자료들입니다.

기계학습 알고리즘 결정트리

지난번에 이어 기계학습 / 통계 관련 Cheatsheet입니다.

기계학습 튜토리얼

데이터과학 자료모음 (0419)

이번주의 자료모음입니다. 여기 올린 자료는 데이터과학 자료모음 페이지에 정리되어 보관됩니다.

데이터셋

데이터과학 학습에 도움이 될만한 데이터셋입니다.

  • FiveThirtyEight의 데이터 통계학자/데이터과학자인 Nate Silver의 분석 데이터 및 스크립트가 공개
  • https://tuvalabs.com/datasets/ 교육용 데이터 확산을 이념으로 하는 스타트업에서 공개한 데이터셋. 각 데이터마다 적절한 시각화도

기계학습

기계학습 적용에 관한 조언들입니다

시각화

다양한 시각화 옵션을 빠르게 결정하게 도와주는 Cheatsheet 들입니다

  • Slide Chooser Cheatsheet – The Extreme Presentation(tm) http://buff.ly/1D4M87q 프리젠테이션 슬라이드의 내용에 맞게 레이아웃을 고를 수 있는 가이드
  • How to Choose the Right Chart http://buff.ly/1yJyyLr 데이터 유형 및 분석 목표에 따라 시각화를 고르는 방법을 설명

데이터 과학을 위한 도구의 선택

보조장치 없는 인간의 지적 능력은 미약하기 짝이 없다. 종이와 펜, 컴퓨터와 같은 인지 보조장치의 사용으로 인간의 기억과 사고력은 극적으로 향상된다. – 도널드 노먼

사용성(Usability)이라는 개념의 주창자로 유명한 도널드 노먼(Donald A. Norman)은 <생각있는 디자인>[@Norman1993]이라는 책에서 인간의 미약한 기억과 판단력을 보완해주는 인지 보조장치의 중요성에 대해 언급하고 있다. 이처럼 도구는 단순히 잘 정의된 일을 수행하는 수단에 지나지 않고 일을 수행하는 우리의 사고 프로세스를 제한하고 규정함으로써 결과물에 지대한 영향을 끼친다.

데이터 문제 해결을 위한 도구의 선택은 앞서 언급한 데이터 문제의 요소에 의해서도 결정된다. 문제 해결의 주체인 개인이나 조직이 어떤 도구에 익숙하거나 혹은 배울 수 있는지, 문제 해결의 초점이 어떤 데이터 처리 및 분석, 그리고 시각화 기법을 요구하는지, 마지막으로 데이터의 크기 및 특성이 어떤지가 모두 어떤 도구를 선택하고 조합해야 하는지에 대한 기준이 된다.

이 글에서는 우선 널리 사용되는 데이터 과학을 위한 도구의 특성을 알아보고, 프로젝트의 특성에 따라 도구를 조합하는 방법을 제시한다. 그리고 이중 데이터 과학을 시작하는 사람들이 꼭 알아야 할 도구인 엑셀과 R에 대해 자세히 설명한다.

데이터 과학을 위한 도구들

지금부터 데이터 과학을 위해 주로 사용되는 도구의 특성에 대해 알아보자. 우선 아래 표에서 널리 사용되는 도구들을 데이터 및 과업의 여러 가지 특성에 따라 비교해 보았다. 이를 각 특성별로 간단히 살펴보자.

데이터 과학을 위한 도구들

처리용량/속도 우선 한 번에 처리 가능한 데이터의 크기(Volume / Throughput) 관점에서는 빅데이터 솔루션의 대표 주자로 각광받는 하둡이 거의 무한대의 용량을 처리할 수 있으며, 인덱스 및 클러스터 구축 여부에 따라 RDBMS역시 테라바이트급의 데이터를 저장 및 처리할 수 있다. 반면 나머지 도구들은 메모리 한도 내에서 작업이 가능하다. 커스텀 코드의 한계는 물론 작성하기 나름이다.

하지만 1장서 언급했듯이 이런 처리 용량의 차이는 처리 속도(Response Time)와 트레이드오프를 관계에 있다. 메모리 기반의 프로그램들이 대부분 실시간에 가까운 응답 속도를 보장하는 반면, 실시간 처리에 최적화되지 않은 대부분의 빅데이터 솔루션들은 요청을 보낸 후 상당 시간을 기다려야 하기 때문이다. 특히 하둡의 경우 조직 전체에서 공유 인프라로 활용되는 경우가 많아 대기 시간이 더 길어지게 마련이다.

데이터포멧 대부분의 솔루션이 테이블 데이터를 처리할 수 있으며, 이들 테이블에는 보통 숫자, 문자열, 시간 등 다양한 데이터 형이 포함될 수 있다. 또한 대부분 테이블 형태의 데이터 처리에 필요한 필터링(filtering), 정렬(sorting), 조인(joining), 합계(aggregation) 등의 연산을 제공한다. 따라서 이런 기본 연산의 조합으로 해결가능한 데이터 처리 작업의 경우에는 기존의 솔루션을 최대한 활용하는것이 바람직하다.

맞춤/확장성 마지막으로 이들 환경에서는 필요한 경우 새로운 함수를 구현해 사용할 수 있는 다양한 프로그래밍 환경을 제공한다. 최근에는 NumPy/SciPy/Pandas/iPython을 포함하는 파이썬(Python) 기반의 솔루션이 많이 사용되고 있다. 범용 프로그래밍 언어인 파이썬의 특성상 분석에 사용한 코드를 웹서비스등 다른 시스템과 통합하기 쉬운 장점이 있다.

예측/시각화 이외에 부가적인 기능이라 할 수 있는 기계 학습 및 시각화 기능의 경우 R이나 파이썬이 가장 강력한 기능을 제공하지만, 기본적인 기능은 엑셀에서도 제공한다. 하둡이나 데이터베이스를 사용하는 경우에도 별도의 패키지를 통해 이런 기능을 제공받을 수 있다. 또한 이들 플렛폼과 별도로, 시각화 및 통계 모델링에는 많은 패키지나 라이브러리가 나와있으므로 용도에 따라 찾아 사용하도록 하자. 일반 사용자를 위한 패키지중에서는 타블로우(Tableau), 프로그래머를 위한 라이브러리 중에는 D3.js가 널리 사용되고 있다.

그렇다면 현업 실무자들은 어떤 도구를 사용하고 있을까? 오라일리 사에서 2014년에 데이터 과학에 종사하는 800여명의 현업 실무자를 대상으로 실시한 여론조사에 따르면 [@harris13] 가장 널리 사용되는 데이터 과학의 도구는 데이터베이스, 엑셀, R과 파이썬 순으로 나타났다. 본 블로그의 독자그룹을 대상으로 한 설문조사에서도 가장 많이 사용되는 도구는 엑셀 및 데이터베이스가 가장 많이 사용되는 도구로 나타났다. (본 설문은 아직 진행중이며, 설문에 참여하면 자세한 결과를 볼 수 있다.)

문제에 맞는 도구 선택하기

그렇다면 이렇게 다양한 도구중 무엇을 사용해야 할까? 우선 데이터의 크기 및 분석의 성격, 그리고 사용가능한 도구가 무엇인지가 출발점이 될 것이다. 아래 그림은 앞서 설명한 도구들을 데이터의 크기 및 사용자 인터페이스의 성격에 따라 나누어 보여준다. 그림의 오른쪽으로 갈수록 큰 데이터를 다룰 수 있고, 아래로 갈수록 프로그래밍을 많이 필요로 하는 도구들이다. 예컨대 데이터 크기가 작으며 일회성 분석 작업이 대부분이라면 엑셀을 써도 무방할 것이다.

ch2_tools_ds_choice

데이터 과학을 위한 도구를 선택하는 기준.

하지만 문제해결 과정에서 한가지 도구만 사용하라는 법은 없다. 사실 대부분의 데이터 문제는 문제해결 단계에 따라 적절한 도구를 조합해서 사용하는 능력을 요구한다. 어떤 단계에서 무슨 도구를 사용하느냐는 문제의 특성에 따라 결정되는 부분이지만 몇가지 가이드라인을 제시하면 다음과 같다.

간단한 도구로 시작하여 복잡한 도구로 옮겨간다. 위에서 살펴본 것처럼 같은 작업을 하는 데에도 메뉴 조작으로 끝나는 환경과 프로그래밍을 해야 하는 환경이 있다. 또한 프로그래밍 환경간에도 R과 같은 간단한 것과 C++와 같이 상대적으로 복잡한 것이 존재한다. 이런 선택은 개인의 경험과 선호도에 따라 결정할 부분이다. 하지만 많은 경우, 일회성 작업은 최대한 단순한 도구로 하는 것이 효율을 높이는 방법이다. 분석 작업에는 다양한 아이디어를 최대한 신속하게 실험해볼 수 있어야 하지만, 일단 검증된 분석 시나리오를 나중에 제품 수준의 코드로 구현하는 것은 어렵지 않기 때문이다.

분석 초반에 최대한 데이터 크기를 줄인다. 앞서 설명했듯이 빅데이터를 다루는 도구들은 처리용량을 키우기 위해 응답속도를 희생하는 경우가 많다. 비슷한 작업을 수정을 거쳐 계속 반복하게 되는 데이터 문제의 특성상 느린 응답속도는 작업 효율의 하락과 직결된다. 따라서, 문제해결 초기에 작업 대상이 되는 데이터의 크기를 최대한 줄이는 것이 분석에 드는 시간을 최대한 아끼는 길이다. 또한 데이터 크기가 줄어들수록 좀더 다양한 범위의 도구를 분석에 사용할 수 있다는 장점도 있다.

이해를 돕기 위해 필자가 작업 단계별로 주로 사용하는 도구를 소개하면 아래와 같다. 우선 데이터 준비 단계에서는 하둡이나 데이터베이스에 존재하는 원본 데이터에서 필요한 부분을 선택하거나 집계(aggregation), 표본추출(sampling) 등을 적용하여 최소한으로 줄인다. 그러면 보통 PC 메모리에 들어가는 정도의 크기가 되는데, 이 데이터를 엑셀이나 R에서 불러 데이터의 값이나 분포에 이상이 없는지 확인한다.

문제해결 단계별로 적절한 도구들

문제해결 단계별로 적절한 도구들

또한 데이터를 사용해 어떤 일반화된 결론을 내리거나 예측을 해야할 경우에는 다시 R이나 파이썬을 사용한다. 이때 데이터 크기가 큰 경우 하둡 등의 클러스터에서 돌아가는 예측 기법을 사용할 때도 있다. 또한 모델을 제품에 적용해야 할 경우에는 C++/C#등의 언어로 다시 구현하는 경우도 있다. 마지막으로 결과를 발표하거나 문서화할 때에는 다시 엑셀을 사용한다.

엑셀로 시작하는 데이터 과학

위에서 데이터 과학을 위한 다양한 도구를 알아보았다. 그렇다면 데이터 과학을 시작하는 여러분에게 하나의 도구를 추천한다면 무엇일까? 필자는 주저없이 엑셀을 추천할 것이다. 엑셀? 엑셀로 뭘 할 수 있냐고 여러분은 생각할지도 모른다. 하지만 데이터 과학을 처음 공부하는 입장에서 엑셀만한 툴은 없다. 또한 앞서 소개한 설문에 따르면 [@harris13] 엑셀은 SQL및 R과 함께 현업에서 여전히 가장 많이 쓰이는 도구다.

이해를 돕기 위해 카메라에 비유해보자. 필자는 엑셀을 똑딱이 디카에, R을 수동조작이 가능한 DSLR에 비유하고 싶다. 전문가의 손에 들어간 DSLR이 더 좋은 결과물을 만들어낼 수 있다는 것은 자명하다. 하지만 세상에는 아이폰 카메라만 가지고도 기가막힌 결과물을 만들어내는 작가들이 있고, 많은 사진 초보들이 DSLR 및 렌즈을 사서 익히는데 엄청난 시간과 노력을 들이지만 결과물은 신통치 않은 것도 사실이다. 즉, 도구 자체에 집착하기보다는 주어진 도구를 최대한 활용하는 것이 중요하다는 이야기다.

다시 데이터 과학으로 돌아와서 이야기하면, 엑셀은 분명 처리용량이나 고급 분석기능, 그리고 자동화 측면에서 한계가 있는 도구다. 하지만 데이터 과학을 처음 접하는 사람들이 빠른 시간에 개념을 익히고 뭔가 시작하기에 엑셀만한 도구도 없다는 것이 필자의 생각이다. 또한, 위 통계자료가 보여주듯 필자를 포함한 현업 종사자들도 엑셀을 꾸준히 사용하고 있다. 그렇다면 왜 데이터 과학을 위한 도구로 엑셀이 가진 장점은 무엇일까?

코드가 아닌 데이터가 중심이다

최근에 나온 대부분의 데이터 과학 관련 수업이나 책에서는 R이나 파이썬과 같은 프로그래밍 언어에, 빅데이터를 다루기 위한 하둡을 다룬다. 물론 이들은 엑셀보다 더 큰 데이터를 다룰 수 있고, 더 강력한 기능을 제공한다. 그리고 코드를 이용한 데이터 처리는 재사용성면에서 강점이 있다. 대부분의 전문가들이 이런 도구를 사용하는 데에는 분명 이유가 있다.

하지만, 이들은 모두 프로그래밍에 대한 지식을 전제로 한다는 공통점이 있다. 프로그래밍에 익숙치 않은 많은 사람들에게 새로운 언어를 공부한다는 것은 분명 큰 부담이다. 데이터 과학에 관심이 있는 모든 사람들이 R이나 파이썬 문법부터 익혀야 한다면 몇명이나 성공할 수 있을까. 이전 글에서 밝혔듯이 효과적인 데이터 과학은 문제 정의에서 출발해야 한다. 그리고 문제 및 데이터의 종류에 따라 엑셀로도 충분한 경우가 있을 것이다. 마치 분석 작업의 효율을 위해서는 스몰데이터로 시작해야 하듯이, 엑셀로 시작하고 필요에 따라 더 강력한 도구를 배워 사용하면 어떨까?

또한 이런 프로그래밍 기반의 도구를 사용해 데이터를 처리하다보면 자칫 원본 데이터의 다양한 특성과 잠재적인 문제점을 간과할 수 있다. 대부분의 시간을 코드를 작성하고 실행하는데 보내다 보면, 원본 데이터 대신 이미 각종 집계 및 분석 기법이 적용된 결과에만 초점을 맞추기 쉽기 때문이다. 이렇게 분석을 한참 진행한 후에 원본 데이터의 문제점을 발견하는 경우도 허다하다.

반면 엑셀 등 스프레드시트애서는 워크시트에 로딩된 원본 데이터를 꼼꼼히 살피면서 작업할 수 있다. 즉, 코드가 아니라 데이터가 중심이 되는 것이다. 그래서 현업에서 R 및 파이썬과 같은 도구를 일상적으로 사용하는 필자도 코딩을 하기 전에 샘플 데이터를 엑셀로 불러 검증하는 습관이 있다. 즉, 프로그래밍을 아는 사람들에게도 엑셀은 쓸모가 있는 도구다.

올인원(all-in-one) 솔루션이다

엑셀은 기능면에서 데이터 과학의 스위스 아미 나이프와 같다. 스위스 아미 나이프 하나에 온갖 툴이 다 들어있듯이, 데이터 과학의 전과정을 엑셀로 해볼 수 있기 때문이다. ^[하지만 스위스 아미 나이프에 있는 툴들이 본격적인 작업을 위해서는 부족하듯이, 엑셀의 기능도 고급 사용자에게는 부족한 점이 많다.]

우선 엑셀을 통해 데이터를 직접 입력하거나 온라인 폼(form)을 통해 데이터를 모을 수 있다. 이 과정에서 데이터의 중복이나 오류를 검증할 수 있다. 또한, 데이터에 필요한 컬럼을 손쉽게 추가할 수 있고, 이를 필터링하거나 피벗테이블을 통해 집계하는 것도 가능하다.

또한 엑셀은 아쉬우나마 기본적인 데이터 분석 기능을 제공한다. 엑셀에 기본으로 제공되는 분석 도구모음(Analysis Toolpak)을 사용하면 히스토그램(histogram), 가설 검증(hypothesis testing), 연관성 및 회귀 분석(correlation and regression), 시계열 예측 (forecasting) 등 다양한 분석 기법을 사용할 수 있다.

엑셀에서 제공하는 다양한 분석 기능

엑셀에서 제공하는 다양한 분석 기능

또한 엑셀은 다양한 시각화 기능을 제공한다. 셀 단위의 시각화 (조건부 포메팅 / 스파크차트)는 다른 분석도구에서는 찾아보기 힘든 기능으로 데이터를 직접 보면서 패턴을 찾기에 유용하다. 또한 몇가지 제약에도 불구하고 엑셀의 기본적인 플로팅 기능은 쓸만한 수준이다. 최근 버전의 엑셀에서는 파워피봇(PowerPivot) 등을 통해 좀더 강력한 시각화 기법을 사용할 수 있다. 파워피봇을 사용하면 시간이나 지도상의 데이터까지 손쉽게 플로팅할 수 있다.

엑셀에서 제공하는 다양한 시각화 기능

엑셀에서 제공하는 다양한 시각화 기능

반면에 R과 같은 대부분의 범용 도구들은 이미 수집이 완료된 데이터를 다룬다. 또한 데이터 저장, 분석, 시각화 등 특정한 분야에 집중하는 도구도 많다. 이 경우 단계별로 도구를 바꿔야 하고, 이를 위해 데이터를 변환하는 수고가 들어간다. 이에 반해 부족하나마 하나의 도구로 데이터 과학의 전 과정을 수행할 수 있다는 것은 분명 장점이다.

결과물을 쉽게 공유할 수 있다

지난번 글에서 강조했듯이, 데이터 과학의 전 과정에서 이해당사자 및 다른 분야의 전문가와 끊임없이 소통하는 것은 필수적이다. 이런 관점에서 전통적인 프로그래밍 기반의 도구들의 문제점은 분석의 최종 결과를 제외한 중간 과정과 결과물을 다른 사람과 공유하기가 쉽지 않다는 점이다. 보통 분석용 코드는 일회용으로 생각하기 때문에 주의하지 않으면 작성자 이외에는 알아보기 힘든 경우가 많고, 주석을 꼼꼼히 달아도 프로그래머가 아니면 이해하기 어렵기 때문이다.

최근에는 KnitriPython Notebook과 같은 도구가 등장하여 이런 문제를 부분적으로 해결해준다. 이런 도구를 사용하면 분석용 코드와 관련 문서를 동시에 생성할 수 있기 때문에, 분석용으로 R과 파이썬을 주로 사용한다면 꼭 알아야할 도구들이다. 하지만 이를 위해서는 추가적인 노력이 필요하고 비전문가에게는 여전히 쉬운 솔루션이 아니다.

반면에 엑셀은 결과물이 (당연히) 문서이기 때문에 조금만 주의하면 쉽게 공유할만한 결과물을 만들 수 있다. 또한 의사결정권자를 포함한 대부분의 사람들이 엑셀을 사용할 것이다. 따라서 엑셀로 데이터를 공유하면 누구나 그 중간과정을 검토하고 문제점을 발견하거나 개선하는데 참여할 수 있다. 또한 데이터를 다루는 많은 도구들이 엑셀 포멧을 기본적으로 지원한다. 즉, 데이터 처리 및 분석 과정의 투명성을 극대화할 수 있는 것이다. 데이터 분석을 한참 진행하다가 앞단계의 오류로 지금까지의 노력이 물거품이 되어본 사람이라면 이런 투명성의 중요함을 이해할 것이다.

엑셀에서 R로 넘어가기

위에서 알아본 것처럼 엑셀은 데이터 과학을 시작하기 위한 도구로서 적합하며, 현업 전문가들도 엑셀을 지속적으로 활용하는 이유가 있다. 하지만 아이가 자라면서 원래 입던 옷이 몸에 맞지 않게 되듯이, 데이터를 문제해결에 본격적으로 활용하다보면 엑셀만으로는 부족함을 느끼게 된다. 혹은 앞서 사용했던 디카의 비유를 적용하면 똑딱이 디카를 쓰던 사용자가 품질과 기능의 한계를 느끼는 상황이라고 할 수 있겠다.

이럴 때 프로그래밍 기반의 데이터 처리 도구를 찾게 되는데, 엑셀만 사용하던 사용자에게는 굉장히 낯선 경험일 것이다. 여기서는 이중 가장 널리 사용되는 R을 중심으로 이런 도구들이 엑셀과 어떻게 다르고 어떤 가능성을 추가적으로 제공하는지 알아보도록 하자. 이를 통해 현재 엑셀을 주로 사용하는 사용자들이 R이 과연 자신에게 필요한지를 고민해볼 수 있기를 바란다.

워크시트에서 변수로

우선 엑셀을 쓰다가 R을 시작한 사용자가 크게 느끼는 변화 중 첫번째는 워크시트 대신에 입력창만이 존재한다는 것이다. 엑셀에서는 데이터를 입력하거나 불러오고, 계산의 중간 과정 및 최종 결과를 저장하는데 모두 거대한 테이블 형태의 워크시트를 사용하지만, R에서는 워크시트를 제공하지 않기 때문이다. 반면에 R을 포함한 모든 프로그래밍 언어에서는 변수라는 개념을 사용한다. 이런 변수는 작업공간에 존재하지만 고정된 위치를 갖지는 않으며, 벡터, 행렬, 테이블 등 고유의 자료형을 갖는다.

그렇다면 변수를 어떻게 만들고 사용할 수 있을까? R에서는 모든 변수를 만들때 고유의 이름을 붙이도록 한다. 따라서 나중에 변수의 내용을 참조할 때에는 그 이름을 사용하면 된다. 사실 엑셀에도 셀 혹은 테이블에 이름을 붙여서 참조할 수 있는 기능이 있으니, R에서는 모든 데이터를 위치가 아닌 이름으로 참조한다고 기억하면 된다. 아래 그림은 같은 데이터를 엑셀과 R에서 어떻게 저장하는지를 보여준다.

ch2_excel_vs_r_vars

엑셀의 워크시트와 R의 변수: 워크시트는 위치를 기준으로 참조하지만, 변수는 이름을 기준으로 참조한다.

그렇다면 이렇게 워크시트 대신 변수를 쓰는 방식의 장점은 무엇일까? 데이터의 크기와 종류가 얼마 되지 않을때는 모든것을 한눈에 보면서 작업할 수 있는 워크시트가 더 편리할 것이다. 하지만, 크고 복잡한 데이터를 다루는 프로젝트의 데이터를 워크시트에 관리하다보면 잦은 스크롤과 버벅임 등으로 오히려 불편함을 느끼게 된다. 또한 변수를 셀의 위치로 참조하는 방식도 복잡한 워크시트에서는 오류의 가능성을 높인다.

따라서 엑셀의 전문가들은 모든 셀과 테이블에 이름을 붙여 관리하는 것을 추천한다. 이렇게 하면 굳이 크고 복잡한 워크시트 사이를 오갈 필요가 없기 때문이다. 그리고 R과 같은 프로그래밍 환경에서는 아예 워크시트 대신에 모든 것을 고유의 이름과 자료형을 가진 변수로 대신하는 것이다.

요약: 워크시트의 모든 데이터에 이름을 붙이지 않으면 기억할 수 없는 수준이라면 R을 고려해보자.

메뉴에서 함수로

엑셀에 비해 R의 또다른 차이는 리본과 메뉴의 부재다. 엑셀에서 메뉴를 선택해서 수행할 대부분의 작업이 R에서는 함수 호출을 통해 이루어지기 때문이다. 이런 함수에는 데이터를 불러오거나 저장하고, 특정한 연산이나 분석 기능을 수행하고, 또한 주어진 데이터를 시각화하는 기능이 모두 포함된다. 즉, 엑셀에서는 데이터 처리와 관련된 기능중 일부를 함수형태로 제공하는데 비해 R은 모든 기능이 함수를 통해 구현되는 것이다.

ch2_excel_vs_r_funs

엑셀과 R비교: 메뉴와 함수

언뜻 메뉴를 선택하는 대신에 함수를 기억해서 입력하는 방식은 불편하게 들린다. 하지만 R에 익숙해진 사용자들은 입을 모아 함수가 더 편리한 방식이라고 이야기한다. 왜 그릴까?

작업의 효율성 엑셀과 같이 수행할 기능을 메뉴에서 선택하는 방식은 처음에는 손쉽게 기능을 배울 수 있다는 장점이 있다. 하지만, 복잡한 작업을 메뉴와 워크시트를 오가며 수행하다 보면 금방 지치게 되고, 또 같은 작업을 계속 반복한다고 그만큼 효율이 올라가지는 않는다. 즉 메뉴 기반의 프로그램은 반복되는 작업에는 한계를 드러내는 것이다. 엑셀에서는 이런 반복되는 작업을 위해 매크로 기능을 제공한다. 하지만 매크로는 데이터의 형태나 기능이 조금만 달라져도 금방 한계를 드러낸다.

반면에 데이터 처리 코드를 통해 작업을 수행하는 방식은, 일단 작성된 코드를 손쉽게 반복 호출할 수 있다는 장점이 있다. 예컨데 원본 데이터에 10단계의 처리를 해야 데이터 가공이 완료된다고 하자. 메뉴로 작업하는 경우 데이터가 갱신될때마다 상당 부분의 작업을 다시해야 하지만, 코드로 작업하는 경우 이미 작성된 코드에 입력 데이터만 바꾸어 다시 실행하면 되는 것이다.

기능의 확장성 데이터 처리를 하다보면 기본적으로 지원되는 기능이외에 추가적인 작업을 해야하는 경우가 종종 생긴다. 예컨데 엑셀은 주어진 텍스트 문서를 단어 단위로 쪼개 단어별 개수를 세는 기능을 제공하지 않는다. 이처럼 엑셀과 같은 메뉴 기반으로 프로그램은 주어진 기능으로 해결되지 않는 작업에 있어서 한계를 드러낸다. 엑셀에서는 VBA라는 프로그래밍 환경을 제공한다. 하지만, 이를 위해서는 VBA라는 또다른 프로그래밍 환경과 언어에 익숙해져야 한다.

반면에 R에서는 기존에 존재하는 함수를 조합하여 얼마든지 새로운 함수를 만들 수 있다. 그리고, R에서는 전세계의 R 사용자들이 이미 만들어놓은 다양한 기능을 CRAN이라는 곳에서 찾아 사용할 수 있다. 대부분의 통계 및 데이터 전문가들이 R을 사용하기 때문에, CRAN에는 데이터에 관련해 상상가능한 거의 모든 기능이 제공된다.

요약: 매크로나 VBA를 항상 써야하는 수준이라면 R을 고려해보자.

분석에서 예측으로

마지막으로 엑셀과 R의 기능적인 차이를 알아보자. 앞서 설명한대로 엑셀은 기본적인 데이터 분석 및 시각화 기능을 제공한다. 하지만 엑셀에서 제공하는 기능은 전문적인 데이터 관련 작업을 하기에는 부족한 점이 있다. 시중에는 이를 보완해주는 애드온(add-on) 패키지가 몇가지 나와 있지만, 대부분 유료인데다 그 종류가 아주 다양하지도 않다.

이를 좀더 구체적으로 알아보면, 엑셀은 T-test나 선형회귀분석(Linear Regression)같은 기본적인 통계 기능은 제공하지만, 분류 및 군집화와 같은 기계학습 관련 기능은 제공하지 않는다. 또한, 데이터 시각화 기능에 있어서도 엑셀은 이용가능한 시각화의 종류나 자유도 면에서 제약이 있다.

요약: 고급 통계나 기계학습 등의 기능을 써야하는 수준이라면 R을 고려해보자.

맺음말

이번 글에서는 널리 쓰이는 데이터 처리 및 분석도구의 장단점을 알아보고, 이를 적절히 조합하여 업무에 활용하는 방법을 사례로 알아보았다. 데이터를 다루는 수많은 툴이 존재하며 이들 각각이 다른 특성과 한계를 지니는 만큼, 용도에 적합한 도구를 선택하는 일은 중요하다. 또한, 데이터를 다루는 일이 대부분 여러 단계를 거치게 되므로, 각 단계에 맞는 도구를 선택하여 조합하는 능력도 필요하다.

이번 글에서는 또한 널리 사용되는 데이터 관련 도구 중 엑셀과 R을 간단히 소개했다. 이미 많은 독자들이 친숙하게 여길 엑셀의 데이터 과학을 위한 도구라는 관점에서 다시 살펴보았고, 엑셀에서 좀더 전문가용 솔루션인 R로 넘어가려고 할때 고려해야 할 사항을 알아보았다. 그리고 R과 엑셀이 인터페이스 측면에서는 상이하지만, 개념적으로는 비슷하다는 점을 설명했다. 다음 글에서는 좀더 구체적인 사례를 가지고 엑셀과 R을 비교해볼까 한다.

이전 글에서 스몰데이터의 가치를 강조했듯이 필자의 견해는 데이터과학을 배우려는 모든 사람들이 모두 프로그래밍을 해야할 필요는 없다는 것이다. 하지만 마치 DSLR 카메라가 일반인을 겨냥하여 좀더 쉬운 사용법에 강력한 기능을 제공하듯이, R과 같은 도구들은 좀더 강력하고 편리한 형태로 진화를 거듭하고 있다. 따라서 데이터 과학자로서의 진로를 생각하는 사람들은 필히 이런 도구에 관심을 가져야 할 것이다.

추신: 이 글은 권정민 / 최현우님의 피드백을 거쳐 작성되었습니다. 제 글의 초고는 독자그룹 여러분들께 먼저 보내드립니다.

참고문헌

Harlan Harris, Marck Vaisman, Sean Murphy. 2013. “Analyzing the Analyzers: An Introspective Survey of Data Scientists and Their Work.” O’Reilly Free Report.
Norman, Donald A. 1993. Things That Make Us Smart: Defending Human Attributes in the Age of the Machine. Basic Books.