작성자: admin 작성일시: 2016-05-01 22:19:12 조회수: 1443 다운로드: 62
카테고리: 머신 러닝 태그목록:

데이터 분석의 소개

본절에서는 데이터 분석의 의미를 설명한다. 여기에서는 가장 널리 쓰이는 몇가지 경우를 집중적으로 설명한다. 하지만 사실 데이터 분석이라는 말은 상당히 넓은 의미를 가지므로 여기에서 설명한 내용이 데이터 분석의 전부는 아니라는 점을 명심해야 한다.

데이터 분석이란

데이터 분석이란 어떤 입력 데이터가 주어졌을 때

  • 입력 데이터 간의 관계를 파악하거나
  • 파악된 관계를 사용하여 원하는 출력 데이터를 만들어 내는 과정

으로 볼 수 있다.

데이터 분석의 유형

먼저 데이터 분석을 하는 목적에 따라 데이터 분석을 몇가지 유형으로 나눌 수 있다. 여기에서는 가장 널리 사용되는 "예측(prediction)", "클러스터링(clustering)", "모사(approximation)" 세가지 데이터 분석의 유형을 살펴보자.

  • 예측(prediction)
  • 클러스터링(clustering)
  • 모사(approximation)

예측

데이터 분석 작업 중 가장 많이 사용되는 유형은 예측(prediction)이다. 예측이란 숫자, 문서, 이미지, 음성, 영상 등의 여러가지 입력 데이터가 주어지면 데이터 분석의 결과로 다른 데이터를 출력하는 분석 방법이다. 예를 들어 다음과 같은 작업은 예측이라고 할 수 있다.

  • 부동산의 위치, 주거환경, 건축연도 등이 주어지면 해당 부동산의 가치를 추정한다.
  • 꽃잎의 길이와 너비 등 식물의 외형적 특징이 주어지면 해당하는 식물의 종을 알아낸다.
  • 얼굴 사진이 주어지면 해당하는 사람의 이름을 출력한다.
  • 현재 바둑돌의 위치들이 주어지면 다음 바둑돌의 위치를 지정한다.

데이터 분석에서 말하는 예측이라는 용어는 시간상으로 미래의 의미는 포함하지 않는다. 시계열 분석에서는 시간상으로 미래의 데이터를 예측하는 경우가 있는데 이 경우에는 미래예측(forecasting) 이라는 용어를 사용한다.

그림: 예측 모형

입력 데이터와 출력 데이터

예측 문제에서는 데이터의 유형을 입력 데이터와 출력 데이터라는 두 가지 유형의 데이터로 분류할 수 있어야 한다.

  • 입력 $X$
    • 분석의 기반이 되는 데이터
    • 독립변수(independent variable)
    • feature, covariates, regressor, explanatory, attributes, stimulus
  • 출력 $Y$
    • 추정하거나 예측하고자 하는 데이터
    • 종속변수(dependent variable)
    • label, class, target, tag, response, regressand, label

예측 작업에서 생성하고자 하는 데이터 유형을 출력(output) 데이터라고 하고 이 출력 데이터를 생성하기 위해 사용되는 기반 데이터를 입력(input) 데이터라고 한다. 전통적인 통계분석에서는 독립 변수(independent variable)와 종속 변수(dependent variable)라는 용어를 사용하였지만 최근에는 특징(feature)과 목표(target)라는 용어도 많이 사용한다.

규칙기반 방법과 학습기반 방법

예측을 하기 위한 방법론으로는 규칙기반(rule-based) 방법과 학습기반(traing-based) 또는 데이터기반(data-based) 방법이라는 두가지 방법이 사용된다.

규칙기반 방법은 어떤 입력이 들어오면 어떤 출력이 나오는지를 결정하는 규칙을 사람이 미리 만들어 놓는 방법이다. 전문가 시스템(expert system)이라고 불리운다.

학습기반 방법 또는 데이터기반 방법은 이러한 규칙을 사람이 만드는 것이 아니라 대량의 데이터를 컴퓨터에게 보여줌으로써 스스로 규칙을 만들게 하는 방법이다.

전통적인 통계 분석 방법이나 최근의 머신 러닝 방법론은 모두 학습기반 방법을 따르고 있으므로 여기에서는 규칙기반 방법은 다루지 않는다.

지도학습

학습기반 예측 방법론을 사용하려면 학습용 데이터 집합(training data set)을 사람이 만들어 주어야 한다.

학습용 데이터 집합은 입력값과 목표값(정답)을 쌍으로 가지는 샘플 데이터의 집합이다. 이는 학습시키고자 하는 예측 시스템이 최종적으로 동작하기를 바라는 모습을 표현한 데이터 집합이라고 볼 수 있다.

예를 들어 강아지를 찍은 사진을 입력하면 "강아지"라고 출력하고 고양이를 찍은 사진을 입력하면 "고양이"라고 출력하는 예측 시스템을 만들고 싶다면 강아지를 찍은 사진과 고양이를 찍은 사진 10장을 준비해서 다음과 같이 학습용 데이터 집합을 만들어야 한다.

  • 학습용 데이터 1: (입력데이터=강아지를 찍은 사진1),(출력데이터="강아지")
  • 학습용 데이터 2: (입력데이터=강아지를 찍은 사진2),(출력데이터="강아지")
  • 학습용 데이터 3: (입력데이터=강아지를 찍은 사진3),(출력데이터="강아지")
  • 학습용 데이터 4: (입력데이터=고양이를 찍은 사진1),(출력데이터="고양이")
  • 학습용 데이터 5: (입력데이터=강아지를 찍은 사진4),(출력데이터="강아지")
  • 학습용 데이터 6: (입력데이터=고양이를 찍은 사진2),(출력데이터="고양이")
  • 학습용 데이터 7: (입력데이터=고양이를 찍은 사진3),(출력데이터="고양이")
  • 학습용 데이터 8: (입력데이터=강아지를 찍은 사진5),(출력데이터="강아지")
  • 학습용 데이터 9: (입력데이터=강아지를 찍은 사진6),(출력데이터="강아지")
  • 학습용 데이터 10: (입력데이터=고양이를 찍은 사진4),(출력데이터="고양이")

각각의 사진에 "강아지" 혹은 "고양이"라는 출력데이터(목표)값을 붙이는 작업은 당연히 사람이 수동으로 해야 한다. 그래서 이러한 방법을 지도학습(supervised learning) 방법이라고 한다.

비유를 들자면 학습용 데이터 집합이란 정답이 표시되어 있는 수백개의 문제를 모아놓은 문제집과 같고 지도 학습이란 이 문제집을 컴퓨터에게 주고 학습을 시키는 것과 같다. 컴퓨터는 이 수백개의 문제를 나름의 풀이방법으로 스스로 풀어본 다음 정답을 이용하여 얼마나 맞았는지를 채점을 한다. 그런다음 풀이방법을 스스로 조금씩 바꾸어 보면서 풀이와 채점을 반복한다. 이 과정을 반복하는 것이 지도학습이다.

그림: 지도학습의 원리

예측 문제의 수학적 표현

예측 모형은 입력 데이터 $X$를 받아서 출력 데이터 $Y$를 만든다는 점에서 수학의 함수(function)와 유사하다.

따라서 함수의 개념을 사용하여 예측 작업을 수학적으로 설명하면 다음과 같다.

$X$와 $Y$의 관계 함수 $f$를 구하는 것이 최종 목표이다.

$$Y = f(X)$$

하지만 현실적으로는 정확한 $f$를 구할 수 없으므로 $f$와 가장 유사한, 재현 가능한 함수 $\hat{f}$을 구한다.

$$Y \approx \hat{f}(X)$$

이러한 함수 $\hat{f}$를 가지고 있다면 새로운 입력 $X$가 주어졌을 때 $Y$의 예측값 $\hat{Y} = \hat{f}(X)$를 구할 수 있다.

수학적으로 $\hat{f}$를 구하는 방법 중 하나는 다음 식과 같이 $P(Y | X)$는 $X$에 대한 $Y$의 조건부 확률(conditional probability)을 구하는 것이다. 이러한 방법을 확률론적 예측 방법이라고 한다.

$$ \hat{f}(X) = \arg\max_{Y} P(Y | X) $$

여기에서 당장 위의 수식이 이해되지 않아도 괜찮다. 7장까지의 수학적 이론을 이해하고 나면 위 수식의 의미를 알 수 있다. 다만 이러한 수식의 의미를 이해하지 못한다면 머신 러닝이나 데이터 분석을 위한 소프트웨어나 라이브러리를 사용하는 것도 불가능하므로 반드시 위 수식을 이해할 수 있는 수준까지는 공부해야 한다.

전처리와 인코딩

위에서 숫자, 문서, 이미지, 음성, 영상 등의 여러가지 데이터를 처리하는 것을 예시로 들었지만 사실 안타깝게도 현재 기술상 컴퓨터가 직접 처리할 수 있는 데이터는 숫자(number) 밖에 없다.

그렇다면 문서나 이미지와 같은 데이터는 어떻게 처리하는 것일까? 데이터 분석에서는 전처리(preprocessing) 또는 인코딩(encoding)이라는 과정을 통해 문서나 이미지와 같은 현실의 데이터를 컴퓨터가 처리할 수 있는 숫자 데이터로 바꾸어야 한다.

따라서 실제 예측 모형은 사실 다음과 같은 형태가 된다.

그림: 전처리/인코딩이 포함된 예측 모형

인코딩의 예: 이미지 데이터

실제로 이미지 데이터는 어떻게 숫자로 바뀌는지를 살펴보자. 다음 데이터는 MNIST handwritten digit 데이터라는 샘플 데이터 중 하나이다. 이 데이터는 손글씨를 영상으로 나타낸 것으로 다음 그림은 숫자 0을 손으로 쓴 후 카메라로 찍어 8x8의 저해상도 이미지로 저장한 것이다.

(여기에 나오는 모든 코드는 https://hub.docker.com/r/datascienceschool/rpython/ 에서 제공하는 도커 컨테이너 상에서 실행할 수 있다.)

리스트: MNIST handwritten digit 데이터중 첫번째 이미지 출력
In:
from sklearn.datasets import load_digits

digits = load_digits()
plt.imshow(digits.images[0], interpolation='nearest');
plt.grid(False)

이 영상은 실제로는 다음과 같은 8x8 행렬에 이미지의 명도를 나타내는 숫자로 저장된다. 0은 백색이고 15가 가장 진한 색을 뜻한다.

In:
digits.images[0]
Out:
array([[  0.,   0.,   5.,  13.,   9.,   1.,   0.,   0.],
       [  0.,   0.,  13.,  15.,  10.,  15.,   5.,   0.],
       [  0.,   3.,  15.,   2.,   0.,  11.,   8.,   0.],
       [  0.,   4.,  12.,   0.,   0.,   8.,   8.,   0.],
       [  0.,   5.,   8.,   0.,   0.,   9.,   8.,   0.],
       [  0.,   4.,  11.,   0.,   1.,  12.,   7.,   0.],
       [  0.,   2.,  14.,   5.,  10.,  12.,   0.,   0.],
       [  0.,   0.,   6.,  13.,  10.,   0.,   0.,   0.]])

그리고 이 데이터는 실제로는 다음과 같은 64-길이의 숫자 벡터로 바뀌어 예측 모형에 입력된다.

In:
digits.images[0].flatten()
Out:
array([  0.,   0.,   5.,  13.,   9.,   1.,   0.,   0.,   0.,   0.,  13.,
        15.,  10.,  15.,   5.,   0.,   0.,   3.,  15.,   2.,   0.,  11.,
         8.,   0.,   0.,   4.,  12.,   0.,   0.,   8.,   8.,   0.,   0.,
         5.,   8.,   0.,   0.,   9.,   8.,   0.,   0.,   4.,  11.,   0.,
         1.,  12.,   7.,   0.,   0.,   2.,  14.,   5.,  10.,  12.,   0.,
         0.,   0.,   0.,   6.,  13.,  10.,   0.,   0.,   0.])
그림: 8x8 이미지의 예측 모형