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

완성된 실험 보러가기