Category Archives: 데이터과학 프로세스

기계학습을 배우는 가장 쉬운 방법: AzureML로 집값 예측하기

최근 알파고와 인간의 대결이 화제가 되었지만, 기계학습 기법은 다양한 분야에서 널리 활용되고 있다. 여기서는 기계학습을 이용한 문제 해결의 과정을 사례로 배워보도록 하자. 기계학습의 다양한 기법 가운데 수치 형태의 속성을 예측하는 회귀 분석을 수행하고 그 결과를 평가하는 방법을 배워보도록 하자.

시중에는 다양한 기계학습 라이브러리 및 도구가 나와 있는데, 이번 실습에는 코드 없이 직관적인 인터페이스를 통해 기계학습을 수행할 수 있는 AzureML을 (‘애저엠엘’이라고 읽는다) 사용한다. AzureML은 클라우드 기반이라 설치할 필요도 없고, 만들어진 결과를 API 형태로 바로 활용할 수 있는 편리한 환경을 제공한다. (세부사항은 MS 공식 홈페이지 참조)

실습에 사용할 데이터셋은 보스턴의 지역별 집값에 영향을 끼치는 요인을 정리한 것으로, 다양한 변인을 조합하여 각 지역의 집값을 예측하는 것이 목표다. 본격적인 실습에 들어가기에 앞서 우선 데이터의 다양한 속성을 알아보자. 각 속성은 집값에 영향을 끼치는 다양한 요인을 나타내는 것을 알 수 있다.

속성

설명

CRIM

마을별 범죄율

ZN

주거지의 비율

INDUS

공업 지의 비율

CHAS

강변 위치 여부

NOX

대기 중 질소 산화물 농도

RM

가구당 방의 개수

AGE

1940년 전에 지어진 집의 비율

DIS

일터와의 평균 거리

RAD

고속도로 접근성

TAX

재산세율

PTRATIO

마을 별 학생-교사 비율

B

흑인 주거 비율

LSTAT

저소득층 주거 비율

MEDV

집값 중간값


AzureML 소개

AzureML(정식 명칭: Microsoft Azure ML)은 MS Azure (애저) 클라우드 컴퓨팅 플랫폼의 기계학습 부분을 일컫는다. 클라우드 컴퓨팅의 특성상 사용자는 자신의 컴퓨터에 프로그램을 설치하는 대신에 AzureML 서비스에 접속하여 원하는 기계학습 모델을 만들고, 이를 웹 서비스 형태로 배포할 수도 있다.

AzureML은 대용량 처리가 가능한 클라우드 환경에서 기본적인 선형 모델부터 최신의 앙상블 기법에 이르기까지 다양한 기계학습 방법을[1] 제공한다. 또한 사용자 경험(UX) 측면에서도 AzureML 스튜디오라는 (Microsoft Azure ML Studio) 기존 기계학습 환경보다 훨씬 편리한 환경을 제공한다. 프로그래밍이 아닌 마우스 조작으로 기계학습의 모든 단계를 수행할 수 있는 것이다.

AzureML 시작하기

AzureML은 기계학습 모델을 만들고 관리하고 배포하기 위한 모든 기능을 제공하는 AzureML 작업공간(workspace)을 제공한다. AzureML을 시작하기 위해서는 AzureML 작업공간에 무료 계정을 만들어 로긴해야 한다. 그 절차는 다음과 같다.

  1. 컴퓨터의 웹 브라우저를 실행한다.
  2. 주소창에 http://studio.azureml.net를 입력하여 AzureML 작업공간에 접속한다.
  3. 홈페이지의 위/오른쪽 코너의 Sign In 버튼을 클릭한다.
  4. 자신의 마이크로소프트 계정을 입력하고 (hotmail.com 가능) Sign In 버튼을 클릭한다.

    만약 마이크로소프트 계정이 없다면 아래 링크를 클릭하여 계정을 만들 수 있다.
  5. 만약 로긴 후에 Welcome 비디오가 보이면 이를 시청하거나 비디오 오른쪽 위의 X 버튼을 클릭하여 이를 닫는다.
  6. 마이크로소프트에서 제공하는 Microsoft Samples 화면이 나오면 역시 오른쪽 위의 X 버튼을 클릭하여 이를 닫는다.
  7. 이제 여러분은 마이크로소프트 계정을 사용하여 AzureML 작업공간에 로긴되었다.

AzureML에서 실험 만들기

AzureML 작업공간에서는 모델을 만들고 평가하고 분석하는 모든 작업이 실험(Experiment)이라는 단위로 이루어진다. 실험은 모델과 관련된 데이터, 알고리즘, 그리고 기타 작업을 모두 포함한다. 이제 첫번째 실험을 만들어 보자.

  1. 페이지 아래 왼쪽의 NEW 버튼을 클릭한다.
  2. NEW 대화 창에 EXPERIMENT 가 선택된 상태에서 Blank Experiment 버튼을 클릭한다.
  3. 이제 새로운 실험이 생성되었다. 실험의 각 부분은 다음과 같은 기능을 한다.
  1. 화면 중앙에 위치한 캔버스(Canvas)는 여러분이 실험을 구성하는 공간이다. 실험의 구성은 대개 적절한 모듈(module)을 끌어다 놓고 (drag and drop) 데이터의 흐름에 따라 서로 연결하는 과정이다.
  2. 사이트 왼쪽의 네비게이션 아이콘은 작업공간으로 돌아갈 수 있게 해준다.
  3. 캔버스 왼쪽에는 모듈 창이 있다. 모듈은 실험을 구성하는 재료가 된다.
  4. 캔버스 오른쪽에는 속성(Properties) 창이 있다. 여기서 각 모듈의 속성을 지정할 수 있다.
  5. 캔버스 위의 ‘Experiment created on…’,으로 시작하는 텍스트를 선택하여 지우고, 아래와 같이 Boston Housing Prices Regression을 입력한다.

AzureML을 사용한 탐색적 분석

이제 생성된 실험에 데이터셋과 모듈을 추가하여 본격적인 분석을 수행해보자. AzureML은 데이터를 불러들이는 여러 방법을 제공하는데, 여기서는 이 책과 함께 제공되는 보스턴 집값  데이터셋 (ch4/Boston.txt)을 불러들여 볼 것이다.

  1. 앞서 실험을 만들 때와 마찬가지로 페이지 아래 왼쪽의 NEW 버튼을 클릭한다.
  2. NEW 대화 창에 DATASET이 선택된 상태에서 FROM LOCAL FILE 버튼을 클릭한다.
  3. 파일을 데이터셋을 업로드하는 대화상자에서 우선 Choose File을 선택하여 보스턴 집값  데이터셋 (ch4/Boston.txt)을 불러들이고, 다음과 같이 입력한다.
  4. Boston Housing Prices라는 이름의 데이터셋이 추가된 것을 확인할 수 있다.
  5. 위에서 추가한 보스턴 집값 데이터셋을 캔버스로 끌어다 놓고, [dataset/Visualize]를 선택한다.
  6. 이제 데이터셋을 한눈에 확인할 수 있다. 아래 화면은 데이터셋의 행과 열의 개수, 그리고 처음 100행과 100열을 각 열에 대한 히스토그램과 함께 제공한다.
  7. 이제 화면 가장 오른쪽의 집값(medv) 속성을 클릭해본다. 해당 속성에 대한 다양한 통계값과 시각화를 볼 수 있다.
  8. AzureML은 속성간 관계를 시각화하는 기능도 제공한다. 위 화면에서 compare to 옆의 선택상자를 클릭하면 집값과 다른 속성을 스케터플롯으로 비교할 수 있다. 아래는 집값을 범죄율(crim) 및 방의 개수(rm) 속성과 비교한 결과다. 범죄율이 높은 곳은 집값이 상대적으로 낮으며, 방의 개수는 집값과 거의 비례하는 것을 알 수 있다.
  9. 이런 식으로 다양한 속성 간의 관계를 살펴보도록 하자.

AzureML을 사용한 회귀 분석

데이터를 살펴보았으니, 이제 예측 모델을 만들어보자. 우선 주어진 데이터셋을 모델을 만들기 위한 학습 데이터와 만들어진 모델을 평가하기 위한 평가 데이터로 분리하도록 하자.

  1. 우선 작업공간에서 데이터 분리를 위한 모듈을 찾아보자. 작업공간 왼쪽 위의 검색 창에 ‘split’을 입력하고 엔터를 누르면, 검색어에 해당하는 모듈만 볼 수 있다.
  2. Split 모듈을 끌어서 캔버스에 끌어다 놓는다. Split 모듈은 입력 포트 하나와 출력 포트 2개가 있으며, 화면 오른쪽의 Properties 창에서 모듈의 다양한 속성을 지정할 수 있다.
  3. Boston 데이터셋 모듈의 출력 포트에 마우스를 클릭한 뒤 끌어서 Split 모듈의 입력 포트에 놓으면 아래와 같이 두 모듈이 연결된다.
  4. 화면 오른쪽의 Properties 창에서 Fraction of rows in the first output dataset 텍스트 상자를 찾아 0.75를 입력한다. 이는 75%의 입력 데이터를 왼쪽 출력 포트로, 그리고 나머지 25%의 입력 데이터를 오른쪽 출력 포트로 보내는 설정이다.
  5. 캔버스 아래쪽의 RUN을 클릭한다. 이 명령은 작업공간의 각 모듈을 연결된 순서대로 실행한다.
  6. 실행이 완료되면 다음과 같이 Split 모듈의 오른쪽에 녹색 체크 표시를 볼 수 있다.
  7. 이제 Split 모듈의 왼쪽 출력 포트를 클릭해서, 메뉴의 Visualize를 선택하자. 380개의 (75%) 항목을 (rows) 확인할 수 있다. 같은 방식으로 오른쪽 출력 포트를 확인해 보면 126개의 (25%) 항목이 확인된다.

이제 널리 사용되는 선형 회귀 알고리즘을 사용해 집값을 예측하는 모델을 만들어 보자.

  1. 위에서와 같은 방식으로 검색 창에 train을 입력하여 Train Model 모듈을 찾고, 이를 캔버스에 끌어다 놓는다. 그 후에 Split Data 모듈의 왼쪽 출력 포트와 Train Model 모듈의 오른쪽 입력 포트를 연결한 결과는 다음과 같다.
  2. Properties 창에서 Launch column selector 버튼을 클릭한다. 이 창에서 모델이 예측하고자 하는 속성을 선택할 수 있다. 입력 창에 medv를 입력한 결과는 다음과 같다.

    입력 창의 오른쪽 아래 체크 버튼을 () 클릭하여 선택을 완료한다.
  3. 이제 선형 회귀 알고리즘에 해당하는 모듈을 추가해보자. 다시 화면 왼쪽 위의 검색창에 linear regression을 입력하여 선형 회귀 알고리즘을 찾은 후, 이를 캔버스에 끌어 놓고 Train Model 모듈의 첫번째 입력 포트와 연결한 결과는 다음과 같다.
  4. 이제 화면 아래 RUN 버튼을 눌러 선형회귀 모델을 만들 수 있다. 실행이 완료된 후에 Train Model 모듈의 출력 포트에 마우스 오른쪽 클릭을 하여 Visualize 해보면 다음과 같은 결과를 볼 수 있다. 학습된 모델의 설정값과 속성의 가중치를 확인할 수 있다.

마지막으로 만들어진 모델을 평가해보자. 모델은 만드는 과정에는 학습 데이터셋이 사용되었지만 만든 모델을 평가하는 과정에는 평가 데이터셋을 사용한다.

  1. 모듈 검색 창에 score를 입력하여 Score Model을 찾아 캔버스에 끌어 놓은 후, 아래 그림과 같이 앞서 만든 모델 및 평가 데이터와 연결한다. Score Model 모듈은 우리가 앞서 만든 모델을 사용하여 평가 데이터셋의 집값(medv)을 예측하는 기능을 한다.
  2. 화면 아래 RUN 버튼을 사용하여 실험을 실행하고, 실행히 끝난 후에는 Score Model 모듈의 출력 포트를 Visualize한다. 화면에 나오는 속성 가운데 Scored Labels는 집값(medv) 속성을 예측한 결과다.
  3. 화면에 나오는 컬럼 가운데 집값(medv)을 선택하고, 화면 오른쪽의 Visualizations 창에서 compare to에 Scored Labels를 선택하면 다음과 같다. 이 스케터플롯의 각 점은 평가 데이터셋의 각 항목에 대해 예측된 집값과 실제 집값을 비교한 결과다.

위 시각화를 통하여 집값 예측이 비교적 정확하다는 사실을 확인할 수 있었다. 이번에는 각종 평가 지표를 통해 이 결과를 알아보고, 선형회귀 모델보다 좀 더 정확한 부스팅 모델을 추가해서 성능을 비교해보자.

  1. 모듈 검색 창에 evaluate를 입력하여 Evaluate Model을 찾아 캔버스에 끌어 놓은 후, 아래 그림과 같이 앞서 만든 Score Model과 연결한다. Evaluate Model 모듈은 예측 값과 실제 값을 바탕으로 다양한 평가 지표를 보여준다.
  2. 실험을 실행시킨 후 Evaluate Model 모듈의 결과 포트를 Visualize한 결과는 다음과 같다. 앞서 살펴본 RMSE를 비롯한 다양한 평가지표와 예측된 집값과 실제 집값 간의 차이를 시각화한 결과를 볼 수 있다.
  3. 마지막으로 앙상블에 기반한 의사결정트리 모델을 추가해서 성능을 비교해보자. 우선 다음 그림에서와 같이 Boosted Decision Tree Regression 모듈 및 해당하는 Train / Score Model 모듈을 추가하고, Score Model 모듈의 결과 포트를 Evaluate Model 모듈의 다른 쪽 입력 포트에 연결한다.
  4. 다음은 위 실험을 실행한 후에 Evaluate Model 모듈의 출력 포트를 시각화한 모습이다. 선형회귀 모델에 비해 앙상블 트리 모델의 RMSE가 훨씬 낮으며, 에러의 분포 역시 전반적으로 훨씬 낮은 값을 보인다.

지금까지 AzureML을 사용해 간단한 회귀모델을 만들고 평가하는 방법을 알아보았다. 주어진 데이터를 학습 및 평가 데이터로 나누어 모델을 만들고 평가하는 기계학습의 기본 개념만 이해하고 있으면 프로그래밍 지식 없이도 학습 모델을 만들고 평가할 수 있다. 완성된 실험은 아래 링크를 통해 확인할 수 있다.

완성된 실험 보러가기


데이터과학 프로세스(5): 통계적 추론

“통계로 거짓말을 하기는 쉽지만 진실을 말하기는 어렵다.” – 안드레아 덩켈스(Andrejs Dunkels)

지난 글에서 살펴본 탐험적 데이터 분석을 통해서 주어진 데이터의 다양한 측면을 관찰할 수 있다. 즉 개별 속성값이 어떤 분포를 가지며, 주어진 속성간에 어떤 상관관계가 존재하는지 등을 알 수 있다. 하지만 많은 경우 데이터 분석의 목표는 관찰된 데이터를 넘어서 그 근간에 있는 현상에 대한 더 나은 이해에 도달하는 것이다. 즉, 부분을 통해 전체에 대한 판단을 내리는 일종의 ‘추론’이 필요한 것이다.

통계학에서는 주어진 데이터를 표본(sample), 데이터가 대표하는 현상을 모집단(population)이라고 하며, 표본을 바탕으로 모집단의 특성에 대한 결론을 유도하는 것을 통계적 추론(statistical inference)이라고 부른다. 즉 통계적 추론은 통계 이론을 바탕으로 한 현상의 일반화하고 하겠다. 현상에 대한 관찰에서 일반화할 수 있는 지식을 이끌어내는 것은 과학의 본령이니, 통계적 추론은 데이터 ‘과학’의 본질과도 맞닿아 있다고 하겠다.

통계적 추론은 제한된 관찰(표본)을 바탕으로 모집단에 대한 일반적인 결론을 유도하려는 시도이기에 본질적으로 불확실성을 수반한다. 따라서 통계적 추론에 속하는 많은 기법들은 이런 불확실성을 계량화하려는 노력이다. 예컨대 탐험적 분석에서 표본 데이터의 평균을 구했다면, 통계적 추론에서는 표본이 추출된 대상이 되는 모집단의 평균값이 어떤 범위에 존재할 수 있는지를 계산할 수 있다. (신뢰 구간) 또한, 실험 데이터에서 두 집단 사이의 측정값에 차이가 관찰되었다면, 통계적 추론에서는 과연 이 차이가 우연에 의한 것인지 유의미한 것인지를 밝혀낼 수 있다. (가설 검정)

언뜻 마법처럼 들리는 통계적 추론을 가능하게 하는 것은 주어진 현상에 관한 통계적 모델이다. 주어진 현상이 어떤 모델에서 의해 발생했다고 가정하고, 그 모델에서 발생한 일정량의 결과물을 안다면 (표본), 그 모델에서 일반적으로 어떤 현상이 발생할지를 예측할 수 있는 것이다. 따라서 통계적 추론은 주어진 현상에 대한 가정과 데이터를 사용해 이런 통계적 모델을 만들고, 여기서 다양한 결론을 도출해내는 과정이다.

img/ch3_inf_sample_model.png

통계적 추론은 데이터를 통해 현상의 본질을 들어다보려는 노력

이 글에서는 데이터 과학을 시작하는 여러분들이 알아야 할 통계적 추론의 원리와 실제를 자세히 다룬다. 우선 통계적 추론을 가능하게 하는 통계적 모델의 주요 유형을 모수적 방법과 비모수적 방법으로 나누어 알아보고, 널리 쓰이는 통계적 추론의 기법인 신뢰구간과 가설검정의 과정을 자세히 살펴본다. 이 글에서 사용된 데이터와 차트는 이곳에서 R코드와 함께 제공된다. 이 글을 읽은 여러분들이 주어진 데이터에서 다양한 종류의 결론을 도출하는 능력을 키울 수 있기를 희망한다.

(이 글은 데이터 과학의 프로세스 시리즈의 일부입니다.)

통계적 추론의 원리

앞서 통계적 추론은 표본을 바탕으로 모집단에 대한 결론을 유도하는 과정이라고 정의했다. 표본은 모집단에서 추출된 것이니, 충분히 많은 수의 표본이 있다면 모집단에 대해 정확히 이해할 수 있을 것이다. 하지만 우리에게 주어진 표본은 하나뿐이다. 그렇다면 어떻게 표본 하나에서 모집단에 관한 추론을 할 수 있을까?

이런 추론이 성립하기 위해서는 모집단의 특성 및 모집단에서 표본이 추출되는 과정에 대한 가정이 필요하다. 이를 안다면 반대로 표본에서 모집단의 특성을 유추해낼 수 있을 것이기 때문이다. 통계학에서는 이를 통칭하여 통계적 모델이라고 정의한다. 통계적 추론의 기법은 통계적 모델의 유형에 따라 크게 모수적 방법(parametric method)와 비모수적 방법(non-parametric method)로 나눌 수 있다. 아래 그림은 두 방법을 간단히 요약한다.

img/ch3_inf_methods.png

우선 모수적 방법은 표본이 생성된 과정에 대한 확률 분포를 알고 있거나 이를 추측할 수 있다고 가정한다. 확률 분포는 어떤 불확실한 사건의 가능한 결과와, 각 결과에 해당하는 확률의 분포다. 사건의 종류에 따라 정규 분포, 이항 분포 등 다양한 확률 분포가 존재한다. 여기서는 동전 던지기와 같이 두 가지 결과가 존재하는 사건으로 쉽게 설명되는 이항분포를 자세히 알아보자.

예컨대 주어진 표본이 p의 확률로 앞면이 나오는 동전을 n번 던져서 앞면이 나오는 횟수라고 하자. 그럼 우리가 모집단에 대해서 알아야 할 것은 동전을 던진 횟수 n과, 동전의 특성을 나타내는 p라는 값뿐이다. 일단 n과 p를 구할 수 있다면 여기서 얼마든지 추가적인 표본을 만들어낼 수 있기 때문이다. 여기서 확률 분포를 규정하는 값 n과 p를 모수(parameter)라고 한다.

하지만 우리가 관심을 갖는 현상이 동전이나 주사위 던지기의 결과가 아닌 이상 표본을 생성한 확률 분포를 정확히 알 수 있는 경우는 많지 않을 것이다. 다행히 우리가 관심을 갖는 통계값이 평균이고, 표본의 크기가 어느 정도 이상이라면 이 표본의 평균값은 정규분포를 (Normal Distribution) 따른다는 사실이 알려져 있다.

흔히 종모양에 비유하는 정규분포는 위 그림에서와 같이 평균값 주위로 대부분의 값이 모여있는 대칭형의 확률 분포다. 통계적 추론은 평균을 대상으로 하는 경우가 많기 때문에 모수적 방법은 쓸모가 많다. 주어진 표본의 평균과 표준편차만 구할 수 있으면 표본 평균이 이루는 분포를 구할 수 있기 때문이다.

하지만 우리가 관심을 갖는 통계값이 평균이 아니거나 (예: 중간값) 주어진 표본의 크기가 충분치 않은 경우 해당 통계값에 대해 정규분포를 가정할 수 없다. 이런 경우 비모수적 방법의 일종인 표본 재추출법(re-sampling)을 사용할 수 있다. 이는 요약하면 주어진 표본이 모집단이라고 가정하고, 모집단에서 (즉, 원래 우리에게 주어진 표본에서) 표본을 무작위로 반복 추출해서 해당 통계값의 분포를 만드는 기법이다. 즉 반복 추출을 통해 하나의 표본을 여러 표본의 집단으로 확장하는 것이다.

(주: 표본이 모집단이라는 가정이 합리적인 이유는 표본이 모집단에서 무작위로 추출된 결과이고, 따라서 모집단은 결국 크기가 아주 큰 표본에 불과하기 때문이다.)

이 두 방법은 서로 다른 가정에서 출발한다. 모수적 방법에서는 모집단이 특정한 분포를 가진다고 가정하지만, 표본 재추출법에서는 주어진 표본이 모집단이라고 가정하는 것이다. 모수적 방법의 가정의 성립하는 경우에는 간단한 연산으로 통계적 추론을 할 수 있으며, 그렇지 않은 경우에는 비모수적 방법을 사용하면 된다. 이제 모수적 방법과 비모수적 방법을 자세히 알아보자.

모수적 방법: 중심극한정리

앞서 설명한대로 모수적 방법에서 일반화의 문제를 풀기 위해 주로 사용하는 기법은 주어진 현상의 발생을 묘사하는 확률적인 모델을 만드는 것이다. 동전을 던졌을 때 앞면이 나올 개수를 설명하는 이항분포(binomial distribution), 우리가 흔히 알고 있는 정규분포(Normal Distribution) 등이 모두 여기서 속한다. 표본을 가지고 주어진 현상을 설명할 수 있는 통계적 모델을 만들 수 있다면, 이를 바탕으로 모집단에 대한 다양한 결론을 유도할 수 있을 것이라는 논리다.

문제는 우리가 다루고자 하는 문제와 데이터의 유형이 너무나 다양하며, 잘 알려진 현상이 아닌 이상 꼭 들어맞는 확률 모델을 찾기가 쉽지 않다는 점이다. 그렇다면 통계 이론이 쓸모가 없을까? 다행히도 통계학에서는 우리가 추론을 하고자 하는 대상 지표가 평균인 경우에는 원래 값의 분포에 관계없이 해당 표본의 평균값은 정규분포를 따른다는 결과가 알려져 있다. 통계학에서는 이를 중심극한정리(Central Limit Theorem)라고 한다.

좀더 구체적으로, 이는 우리가 구하고자 하는 통계값이 충분한 수의 표본으로부터 (보통 30을 기준으로 한다) 계산된 평균값인 경우, 원래 개별 측정 값의 분포와 관계없이 이 평균값의 분포는 정규분포를 따른다는 것을 의미한다. 이런 표본 평균의 분포를 표본 분포라고 (sampling distribution) 하는데, 표본 분포의 평균은 우리가 가진 표본의 평균값을, 그리고 표본 분포의 분산은 우리가 가진 표본의 분산을 표본의 수로 나는 것과 같다.

이를 그림을 통해 알아보자. 모집단 $P$에서 $n$개의 원소를 추출해서 만든 표본의 평균이 $E_k$이고 표준편차가 $\sqrt{V_k}$라고 가정하자. 그러면 중심극한정리로부터 이렇게 $n$개의 표본으로 이루어진 표본집합의 평균은 정규분포를 가지며, 이 정규분표의 평균이 $E_k$이고 표준편차가 $\sqrt{V_k/n}$이라는 사실을 알 수 있다. 이처럼 표본 하나의 평균과 분산으로부터 $n$의 크기를 갖는 표본 집합의 평균이 갖는 분포를 구하는 것이 통계적 추론의 핵심이다.

통계적 추론의 많은 기법은 대부분 표본 평균의 불확실성을 바탕으로 하기 때문에, 표본평균의 분포를 구하는 것은 나중에 다룰 신뢰구간이나 가설 검정의 기반이 된다. 표본 분포의 표준편차가 표본의 표준편차에 비례한다는 사실은 표본 자체의 측정값이 정확해야 표본 평균의 측정값이 정확해야 한다는 점을 보여준다.  또한, 이 분포의 분산이 표본의 수에 반비례한다는 사실로부터 왜 더 많은 표본을 모으는 것이 측정의 정확도를 높이는데 기여하는지를 알 수 있다.

요약하면 표본의 평균이 이루는 분포를 모집단의 분포와 구분하여 표본 분포라고 부르며, 중심극한정리를 사용하면 표본 분포가 정규분포를 따른다는 사실과, 그 분포의 평균과 표준편차를 구할 수 있다. 이때 표본 분포의 표준편차를 표본의 표준편차와 구분하여 표준에러(Standard Error)라고 부른다. 표본의 표준편차는 주어진 표본의 산포도를 요약하기 위한 지표이지만, 표준에러는 표본 추출에 의한 추정치와 모집단의 평균간의 거리를 나타내는 지표로 측정의 정확도를 나타낸다. 표본의 크기와 관계가 없는 표준편차와 달리 표준에러는 표본의 크기가 커질수록 작아진다는 점을 명심하자.

비모수적 방법: 표본 재추출법

지금까지 소개한 모수적 방법은 이미 알려진 분포를 갖는 표본에 대한 추론에 적합하다. 그리고 적당한 크기의 표본에서 평균값에 대한 추론을 할 경우에는 원래 모집단의 분포에 관계없이 표본 평균이 정규분포를 따른다는 사실도 소개했다. 하지만 모집단의 분포를 모르거나, 표본 평균이 아닌 다른 통계값을 사용하고 싶다면 어떻게 해야 할까?

이런 상황에서 통계적 추론을 위해 사용할 수 있는 기법이 비모수적 기법이다. 사실 비모수적 기법에는 여러 종류가 있는데 통계적 추론을 위한 비모수적 기법을 표본 재추출법(resampling method) 혹은 부트스트래핑(bootstrapping) 기법이라고 부른다. 표본 재추출법이라는 이름은 주어진 표본을 모집단으로 가정하고, 여기서 표본을 여러 번 추출하여 표본 분포를 직접 만든다는 의미에서 유래된 것이다.

표본 하나에서 이와 비슷한 특성을 갖는 여력개의 표본을 만들어내는 것이 목적이므로, 이때 사용되는 추출법은 복원추출이다. 복원 추출은 표본 추출시 매번 주어진 표본 전체를 대상으로 추출하는 것을 가리킨다. 말하자면 공이 든 주머니에서 공을 여러 개 꺼낼 때, 매번 꺼냈던 공을 도로 넣고 꺼내는 것에 비유할 수 있다. 표본 재추출법의 절차를 좀더 자세히 살펴보자.

  1. 우리에게 주어진 크기 $n$의 표본이 하나 있다.
  2. 표본에서 복원추출을 통해 크기 $n$인 표본 $k$개를 만든다.
  3. 각 표본에서 추론 대상인 통계값 $S$를 계산한다.
  4. 위에서 구한 $k$개의 통계값 $S$를 바탕으로 표본 분표를 만든다.

img/ch3_inf_bootstrap.png

위에서 살펴본 것처럼 재추출법은 모집단에 대한 어떤 가정도 필요로 하지 않는다. 또한 주어진 표본을 바탕으로 여러 개의 표본을 만들어내기 때문에, 이를 바탕으로 어떤 종류의 통계값도 계산해낼 수 있다. 따라서 재추출법에서는 평균 이외에 다른 지표의 표본 분포도 만들어낼 수 있다. 재추출법은 계산량이 많다는 단점이 있지만, 컴퓨터 성능의 비약적인 향상에 따라 현재는 다양한 분야에서 널리 사용된다.

모수적 방법과 비모수적 방법의 비교

표본 분포를 만드는 두가지 방법으로 중심극한정리에 근거한 모수적 방법과 표본 재추출법을 사용하는 비모수적 방법을 소개했다. 이제 지금까지 설명한 이론을 사례를 통해 구체적으로 알아보자. 이 사례에서는 평균에 대한 표본 분포를 만드는데 있어서 두가지 방법이 같은 결과를 보인다는 점을 설명한다.

우선 다음과 같은 세가지 분포에서 100000개의 원소를 추출하여 만든 모집단을 가정한다.

  • p1: 이항분포 (앞면이 나올 확률이 20%인 동전을 4번 던졌을 때 나오는 앞면의 개수)
  • p2: 정규분포 (평균 2, 표준편차 1)
  • p3: 균등분포 (0부터 3까지 범위에서 균등한 확률)

각 모집단의 히스토그램을 그린 결과는 다음과 같다.

이제 각 모집단을 바탕으로 표본 분포(표본 평균의 분포)를 구해보자. 각 모집단에 대해 36개의 항목으로 구성된 표본 10,000개의 평균의 분포를 구한 결과는 다음과 같다. 모집단의 모양에 관계없이 모두 종모양의 정규분포 형태를 띠는 것을 알 수 있다. 이 결과는 앞서 중심극한정리에서 설명한 내용을 실한다.

이제 모수적 방법과 비모수적 방법으로 만들어진 표본 분포를 비교해보자. 아래는 중심극한정리를 기반하여 구한 정규분포와 표본 재추출법으로 만들어진 표본 분포의 확률 분포를 비교한 것이다. (실선: 비모수적 방법 / 점선: 모수적 방법) 표본 분포가 거의 같은 모양을 띠는 것으로부터, 평균에 대한 추론을 하는데 있어서는 어떤 방법을 사용해도 같은 결과를 얻을 수 있다.

통계적 추론의 유형

지금까지 주어진 표본을 바탕으로 표본 분포를 구하는 방법을 알아보았다. 이처럼 측정 대상 지표에 대하여 표본 분포를 구하고 나면 이를 바탕으로 추정치의 신뢰 구간을 구하거나 데이터에 대한 가설을 검증하는 등의 다양한 통계적 추론을 할 수 있다. 위에서 구한 표본 분포를 바탕으로 여기서는 다양한 분석을 수행하는 방법을 알아보자.

신뢰구간 (Confidence Interval) 구하기

통계적 추론의 가장 기본적인 작업은 모집단의 통계값을 추정하는 것이다. 이처럼 제한된 표본에 근거한 추정은 필연적으로 오류의 가능성을 수반하는데, 이런 오류의 정도를 수치화하는 것이 신뢰구간의 역할이다. 말하자면 신뢰구간은 모집단의 평균값을 어떤 특정한 신뢰도 (예: 95%) 이상의 확률로 포함할 것으로 추정되는 구간이다. 따라서 신뢰구간의 범위가 좁을수록 더 정확한 측정값으로 간주할 수 있다.

여기서 의문을 갖는 독자들이 있을 것이다. 모집단의 평균과 표본이 (즉 신뢰구간의 값이) 이미 정해진 상황에서 신뢰구간이 어떻게 모집단의 평균을 포함할 확률을 정의할 수 있을까? 엄밀히 말하면 개별 표본에서 만들어진 신뢰구간은 모집단의 평균을 포함하거나 포함하지 않는다. 위에서 95%는 충분한 수의 표본을 바탕으로 신뢰 구간을 계산했을 때 그중 95%의 신뢰구간에 모집단의 평균이 포함된다는 뜻이다.

이를 사례를 통해 알아보자. 아래 그림은 앞선 예제에서 사용한 모집단 p1에서 추출한 크기 36인 표본 100개를 바탕으로 95% 신뢰구간을 구한 결과다. 그림의 수평선은 모집단의 평균을 (약 0.8), 꺽쇠가 달린 수직선은 각 표본의 신뢰구간을 나타낸다. 아래 그림을 살펴보면 대부분의 신뢰구간이 0.4~1.2사이에 위치하며, 약 5개 정도의 신뢰구간이 모집단의 평균을 포함하지 않는다는 사실을 알 수 있다.

좀 더 큰 표본을 사용하면 어떻게 될까? 아래 플롯은 크기 144인 표본 100개를 바탕으로 구한 신뢰구간을 보여준다. 대부분의 값이 0.6~1.0사이에 위치하며, 여전히 약 5개 정도의 표본이 모집단의 평균을 포함하지 않는다는 것을 알 수 있다. 이로부터 신뢰구간의 신뢰도는 개별 신뢰구간에 대해 정의되는 것이 아니라 모집단의 평균을 포함하는 신뢰구간의 비율을 가리키며, 표본의 크기가 커짐에 따라 신뢰구간이 좁아진다는 점을 알 수 있다.

지금까지 신뢰구간의 개념을 알아보았다. 이제 주어진 지표의 신뢰구간을 구하는 방법을 구체적으로 알아보자. 우선 모수적 방법을 통하여 평균의 신뢰구간을 구하는 공식은 다음과 같다.

$신뢰구간=표본평균\pm{신뢰도상수\times{표준에러}}$

즉, 신뢰구간의 크기는 신뢰도상수 및 표준에러의 크기에 비례한다. 이때 신뢰도 상수는 우리가 목표로 하는 신뢰도가 높아질수록 커지는데, 일반적으로 사용하는 95%의 신뢰도에서는 1.96을, 99%의 신뢰도에서는 2.58을 사용한다. 좀더 신뢰도를 높게 잡을수록 추정치의 정확도(precision)는 떨어지지만, 모집단의 지표값이 신뢰구간에 포함되지 않는 오류를 범할 확률은 낮아지는 것이다.

$표준에러=\frac{표본의 표준편차}{\sqrt{표본크기}}$

여기서 표준에러는 앞서 살펴본 대로 주어진 표본의 표준편차를 표본 크기의 제곱근으로 나눈 값이다. 따라서 주어진 표본을 바탕으로 계산한 통계값의 표준편차가 작을수록, 그리고 더 큰 표본을 사용할수록 신뢰구간을 좁힐 수 있다는 (즉, 더 정확한 추정이 가능하다는) 해석이 가능하다. 즉, 더 정확한 측정치와 더 많은 데이터는 높은 신뢰도로 연결되는 것이다.

비모수적 방법을 통한 신뢰구간의 계산은 좀더 단순하다. 우선 주어진 표본에서 반복 재추출을 통해 주어진 표본과 같은 크기를 갖는 $k$개의 표본을 만들었다면, 각 표본에서 우리가 원하는 지표값 $S$를 계산해낼 수 있다. 이렇게 $k$개의 원소로 구성된 지표 $S$의 표본분포를 얻었다면, 주어진 지표 $S$의 95% 신뢰구간은 표본분포에서 하위 2.5%의 값과 상위 2.5%의 값이 갖는 구간이다. 평균에 대한 신뢰구간만 구할 수 있는 모수적 방법과는 달리 여기서 지표 $S$는 평균이거나 다른 임의의 지표가 될 수 있기에, 비모수적 방법을 이용하면 임의의 지표에 대한 신뢰구간을 구할 수 있다.

가설 검정하기 (Hypothesis Testing)

많은 경우 분석의 목적은 어떤 명제에 대한 참/거짓 여부를 가리는 것이다. 이런 명제는 주어진 데이터를 통해서 검증되기 전까지는 가설(hypothesis)이라고 할 수 있다. 가설 검증(hypothesis testing)은 이처럼 데이터를 통해 주어진 명제의 진위를 밝히는 일이다. 앞서 설명한 신뢰구간 계산이 추정된 값의 정확도를 밝히는 작업이라면, 가설 검정은 주어진 데이터가 가설을 얼마나 뒷받침하는지를 계량화하는 단계다.

가설 검증에 사용되는 명제는 우리가 관심을 갖는 검정 통계값(test statistic)에 대한 조건으로 정의될 수 있다. 예컨데 어떤 집단에 속하는 학생들의 성적이 특정 기준치에 대해서 높거나 낮다고 말하는 것이 가설의 예다. 이때 통계값은 해당 집단의 학생 성적의 평균이다. 아니면 두 집단의 학생의 성적을 비교하는 것도 가능하다. 이때는 두 학생 집단의 성적 차이가 통계값이 된다.

가설 검증에서는 위에서 정의한 통계값에 대한 다양한 가설이 주어진 데이터에 의해서 얼마나 지지되는지를 평가한다. 이때 우리가 증명하고자 하는 명제를 대립가설이라고 하고, 우리가 부정하려는 명제를 귀무가설이라고 한다. 예컨대 두 집단의 평균에 유의미한 차이가 있다는 명제를 (대립가설) 증명하고자 한다면 , 두 집단의 평균에 유의미한 차이가 없다는 명제가 귀무가설이 된다.

신뢰구간 계산과 가설 검정은 밀접하게 연관되어 있다. 가설 검정의 결과는 우리가 관심을 갖는 통계값이 속하는 범위에 따라 결정되기 때문이다. 즉, 어떤 통계값에 대한 신뢰구간을 구할 수 있다면, 해당 통계값을 어떤 정해진 값과 (예: 0) 비교하는 가설도 검정될 수 있다. 이런 의미에서 신뢰구간과 가설검정은 동전의 양면과 같다.

이를 좀더 구체적으로 알아보자. 우리가 관심을 갖는 통계량이 두 집단의 평균의 차이라고 가정하자. 예컨대 한 학생 집단과 다른 학생 집단의 학업 성취도를 비교하는 문제가 이에 해당한다. 사실 대조군과 통제군을 갖는 대부분의 실험이 이와 같은 평균의 차이를 알아내는 것을 목표로 한다.

우선 신뢰구간을 통해 두 집단 사이에 유의미한 차이가 있는지를 알아보자. 유의미한 차이가 있는지의 여부는 결국 신뢰구간이 0을 포함하는 지의 문제라고 할 수 있다. 따라서 우선 평균의 차이에 대한 신뢰구간을 구하고, 이 신뢰구간에 0이 포함되는지를 확인하면 될 것이다. 만약 95% 신뢰구간에 0이 포함되지 않는다면 두 집단 사이에 유의미한 차이가 있을 확률은 5%미만으로 볼 수 있다.

이번에는 같은 문제를 가설 검정을 통해 해결하는 절차를 알아보자. 문자 그대로 가설 검정은 주어진 문제에 대한 가설에서 출발한다. 여기서는 두 집단의 평균의 차이가 없다는 것이 가설이다. 일단 가설을 세우면 주어진 가설하에서 우리가 관심을 갖는 통계량이 (여기서는 두 집단의 평균의 차이) 어떤 분포를 갖는지를 생각해볼 수 있다. 이는 앞에서 구한 표본분포과 같은 모양을 지니지만 평균만 0을 갖는 분포가 된다. (두 집단에 평균의 차이가 없다고 가정했으므로)

마지막으로 이 가설이 우리가 가진 데이터에 의해 얼마나 잘 설명되는지를 알기 위해서는 데이터에서 계산된 표본평균이 이 분포에서 어디에 위치하는지를 확인한다. 만약 표본평균이 해당 분포의 양쪽 극단에 위치한다면 주어진 가설은 데이터를 설명하기에는 그다지 적절하지 않다는 결론을 낼 수 있다. 그리고 우리가 관찰한 표본평균 및 이보다 더 극단적인 값이 주어진 가설 하에서 관찰될 확률을 유의성(significance)으로 정의한다.

아래 그림은 실제 평균이 두 집단간의 평균의 차이에 대한 95% 신뢰구간이 0을 포함하고 있으며, 이와 동시에 두 집단간의 평균의 차이가 0이 아니라는 가설을 기각할 수 없는 상황을 그림으로 보여준다. 이처럼 가설 검정과 신뢰구간은 밀접하게 관련되어 있으며, 두 집단의 평균에 차이가 없다는 가설이 주어진 데이터에 의해 얼만큼 지지되는지를 판단하기 위해 사용될 수 있다.

img/ch3_inf_conf_hypo.png

신뢰구간과 가설 검정간의 관계를 사례를 통해 알아보자. 아래 그림은 앞선 예제에서 사용한 모집단 p1에서 추출한 크기 36인 표본 100개를 바탕으로 95% 신뢰구간을 구한 결과다. 이제 그림의 각 표본에 대해 평균이 0.5가 넘는다는 가설을 검정한다고 생각해보자. 이를 위해서는 각 표본에 대해 신뢰구간이 0.5를 지나는지 확인하면 된다. 아래 표본에 대해 이를 확인해보면 약 59%에 대해 이 사실이 성립한다. 그리고 정확히 같은 수의 표본에 대해서 우리는  평균이 0.5와  같다는 귀무가설을 기각할 수 있다.

크기 144인 표본에 대해 같은 분석을 수행해보자. 아래 그림에서 보듯이 신뢰구간이 0.5를 지나는 표본은 단 하나에 불과하다. 같은 원리로 99개의 표본에 대하여 모집단의 평균이 0.5와 같다는 귀무가설을 기각할 수 있다. 앞에서와 마찬가지로 큰 표본은 정확한 추정치와 함께 통계적으로 유의미한 결론을 얻을 확률을 높인다는 사실을 알 수 있다.

마치며: 통계적 추론의 가능성과 한계를 인식해야

저명한 통계학자 조지 박스(George Box)는 “모든 모델을 잘못되었다. 하지만 그 중 몇몇은 유용하다.”는 말을 남겼다. 이 말에서처럼 현실을 단순화하는 모델은 본질적으로 오류의 가능성을 피할 수 없다. 하지만 이런 단순화를 통해 현상의 정수를 포착한 모델은 우리가 제한된 데이터로부터 유용한 결론을 내릴 수 있도록 도와준다.

이 장에서는 제한된 표본을 바탕으로 모집단에 대한 다양한 결론을 내릴 수 있도록 도와주는 통계적 추론 기법에 대해 알아보았다. 여기서는 수치형 지표의 신뢰구간과 가설검정에 대해 알아보았지만, 실제로는 자료형 및 데이터의 특성에 따라 다양한 통계적 추론 기법이 존재한다. 하지만 모수적 방법과 비모수적 방법의 기본적인 개념을 이해한다면 다른 기법을 공부하는데 큰 어려움이 없을 것이라고 믿는다.

마지막으로 현실 세계의 문제를 해결하는데 있어서 주어진 문제에 맞는 통계적 기법을 적절히 적용하기 위해서는 고려해야 할 것이 많다는 사실을 강조하고 싶다. 최근 데이터 저널리즘 사이트인 FiveThirtyEight에서는 ‘축구 심판들이 어두운 피부톤을 가진 선수들에게 (주로 흑인들) 퇴장을 더 많이 주는가?’라는 질문에 대해 같은 데이터를 바탕으로 서른개가 넘는 연구팀에서 연구한 결과를 소개했다. 아래 왼쪽의 표는 각 연구팀이 사용한 분석 기법, 오른쪽의 차트는 각 팀이 도출한 결과값 (흑인의 퇴장 확률 / 백인의 퇴장 확률)의 평균 및 신뢰구간을 보여준다.

2015-10-06 11_09_13-Science Isn’t Broken _ FiveThirtyEight

위 결과에 따르면 다수의 연구팀이 흑인 선수들이 퇴장당할 확률이 백인에 비해 1.5배 높다는 결론을 내기는 했지만, 차트를 자세히 보면 각 연구팀이 도출한 결과는 상당한 차이를 보인다. 퇴장 비율의 평균에 있어서도 1배에서 3배까지 다양한 분포를 보이며, 퇴장 비율의 신뢰구간이 0을 포함하는 결과도 다수 발견된다. 만약 이들 중 어떤 팀에게 연구 용역을 주었다면, 어떤 팀을 선정했느냐에 따라 다른 결과를 얻었을 것이다.

이처럼 풍부한 연구 경험을 지닌 팀들도 서로 완전히 일치하는 결과를 얻기 힘들다는 사실은 데이터에서 어떤 결론을 유도할 때 항상 주의해야 한다는 점을 일깨워준다. 데이터 자체의 오류는 없는지, 우리가 선택한 분석 기법이 데이터의 다양한 특성에 부합하는지, 분석 기법을 적용하고 해석하는데 있어서 오류는 없는지 자세히 살펴야 할 것이다. 그리고 이런 고려가 끝난 후에도 표본에서 내리는 결론의 한계를 항상 유의해야 할 것이다.

p.s. 이 글의 초고를 검토해주신 이성훈, 김성철님 외 익명의 독자분들께 감사의 뜻을 전합니다. 본 글에서 사용된 데이터 및 소스는 여기서 받아 실습해보실 수 있습니다. 질문/의견은 이곳으로 주시면 됩니다.

데이터과학 프로세스(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) 들 수 있다. 이는 실험 참가자가 일상에서 느끼는 평균적인 감정 상태를 측정하기 위한 방법으로, 참가지는 미리 정해지지 않은 무작위의 시점에 울리는 알람을 신호로 자신의 감정을 기록하게 된다. 이 방법을 통하여 참가자는 자신의 기분이나 주변 상황에 영향이 측정된 감정에 주는 영향을 최소화할 수 있습니다.

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

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

데이터과학 프로세스(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)과 같은 회사에 의해 계승되고 있다.

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