2.2 큰 그림 보기

2. 머신러닝 프로젝트 처음부터 끝까지 | 목차 | 2.3 데이터 가져오기

 

머신러닝 주택 회사에 오신 것을 환영합니다! 해야 할 일은 캘리포니아 인구조사 데이터를 사용해 캘리포니아의 주택 가격 모델을 만드는 것입니다. 이 데이터는 캘리포니아의 블록 그룹block group마다 인구population, 중간 소득median income, 중간 주택 가격median housing price 등을 담고 있습니다. 블록 그룹은 미국 인구조사국에서 샘플 데이터를 발표하는 데 사용하는 최소한의 지리적 단위입니다(하나의 블록 그룹은 보통 600~3,000명의 인구를 나타냅니다). 여기서는 간단하게 구역이라고 부르겠습니다.

이 데이터로 모델을 학습시켜서 다른 측정 데이터가 주어졌을 때 구역의 중간 주택 가격을 예측해야 합니다.

TIP 여러분은 잘 훈련된 데이터 과학자이므로 첫 번째로 할 일은 머신러닝 프로젝트 체크리스트를 준비하는 것입니다. 부록 B에 준비한 것을 사용해도 됩니다. 대부분의 머신러닝 프로젝트에 잘 들어맞지만 필요에 따라 수정하는 것이 좋습니다. 이 장에서는 체크리스트에 있는 많은 항목을 다루겠지만 스스로 충분히 이해할 수 있는 항목이나 다음 장에서 논의할 항목은 건너뛰겠습니다.

 

2.2.1 문제 정의

상사에게 첫 번째로 할 질문은 ‘비즈니스의 목적이 정확히 무엇인가요?’입니다. 아마도 모델 만들기가 최종 목적은 아닐 것입니다. 회사에서는 이 모델을 어떻게 사용해 이익을 얻으려고 할까요? 이는 문제를 어떻게 구성할지, 어떤 알고리즘을 선택할지, 모델 평가에 어떤 성능 지표를 사용할지, 모델 튜닝을 위해 얼마나 노력을 투여할지 결정하기 때문에 아주 중요한 질문입니다.

상사가 이 모델의 출력(구역의 중간 주택 가격에 대한 예측)이 여러 가지 다른 신호signal 3와 함께 다른 머신러닝 시스템(그림 2-2)에 입력으로 사용된다고 이야기합니다. 뒤따르는 시스템이 해당 지역에 투자할 가치가 있는지 결정합니다. 이 결정이 수익에 직결되기 때문에 올바르게 예측하는 것은 매우 중요합니다.

파이프라인

데이터 처리 컴포넌트component들이 연속되어 있는 것을 데이터 파이프라인pipeline이라고 합니다. 머신러닝 시스템은 데이터를 조작하고 변환할 일이 많아 파이프라인을 사용하는 일이 매우 흔합니다.

보통 컴포넌트들은 비동기적으로 동작합니다. 각 컴포넌트는 많은 데이터를 추출해 처리하고 그 결과를 다른 데이터 저장소로 보냅니다. 그러면 일정 시간 후 파이프라인의 다음 컴포넌트가 그 데이터를 추출해 자신의 출력 결과를 만드는 식입니다. 각 컴포넌트는 완전히 독립적입니다. 즉, 컴포넌트 사이의 인터페이스는 데이터 저장소뿐입니다. 이는 (데이터 흐름도 덕분에) 시스템을 이해하기 쉽게 만들고, 각 팀은 각자의 컴포넌트에 집중할 수 있습니다. 한 컴포넌트가 다운되더라도 하위 컴포넌트는 문제가 생긴 컴포넌트의 마지막 출력을 사용해 (적어도 한동안은) 평상시와 같이 계속 동작할 수 있습니다. 그래서 시스템이 매우 견고해집니다.

한편 모니터링이 적절히 되지 않으면 고장 난 컴포넌트를 한동안 모를 수 있습니다. 데이터가 만들어진지 오래 되면 전체 시스템의 성능이 떨어집니다.

다음으로 던질 질문은 ‘현재 솔루션은 어떻게 구성되어 있나요?’입니다(만약 있다면). 이는 문제 해결 방법에 대한 정보는 물론이고 참고 성능으로도 사용할 수 있습니다. 상사가 현재는 구역 주택 가격을 전문가가 수동으로 추정한다고 알려주었습니다. 한 팀이 구역에 관한 최신 정보를 모으고 있는데 중간 주택 가격을 얻을 수 없을 때는 복잡한 규칙을 사용하여 추정을 합니다. 이는 비용과 시간이 많이 들고 추정 결과도 썩 좋지 않습니다. 실제 중간 주택 가격을 구해보면 팀에서 추정한 것이 10% 이상 벗어났음을 알게 될 때가 많습니다. 이런 이유로 회사는 구역의 데이터를 기반으로 중간 주택 가격을 예측하는 모델을 훈련시키는 쪽이 유용하다고 생각합니다. 인구 조사 데이터에는 다른 데이터는 물론 수천 개 구역의 중간 주택 가격을 포함하므로 이 작업에 매우 적합한 데이터셋으로 보입니다.

좋습니다. 이제 이런 정보들을 가지고 시스템을 설계할 준비가 되었습니다. 먼저 문제를 정의해야 합니다. 이는 지도 학습, 비지도 학습, 강화 학습 중 무엇일까요? 분류나 회귀인가요 아니면 다른 어떤 작업인가요? 배치 학습과 온라인 학습 중 어느 것을 사용해야 하나요? 이 책을 계속 읽어 나가기 전에 잠시 멈추고 이 질문들의 답을 찾아보세요.

답을 찾았나요? 같이 한번 보겠습니다. 레이블된 훈련 샘플이 있으니(각 샘플이 기대 출력값, 즉 구역의 중간 주택 가격을 가지고 있습니다) 이는 전형적인 지도 학습 작업입니다. 또한 값을 예측해야 하므로 전형적인 회귀 문제입니다. 좀 더 구체적으로는 예측에 사용할 특성이 여러 개(구역의 인구, 중간 소득 등)이므로 다변량 회귀multivariate regression 문제입니다. 1장에서는 1인당 GDP 하나의 특성을 기반으로 삶의 만족도를 예측했으므로 단변량 회귀univariate regression 문제였습니다. 마지막으로 이 시스템으로 들어오는 데이터에 연속적인 흐름이 없으므로 빠르게 변하는 데이터에 적응하지 않아도 되고, 데이터가 메모리에 들어갈 만큼 충분히 작으므로 일반적인 배치 학습이 적절합니다.

TIP 데이터가 매우 크면 (맵리듀스MapReduce 4 기술을 사용하여) 배치 학습을 여러 서버로 분할하거나, 대신 온라인 학습 기법을 사용할 수 있습니다.

 

2.2.2 성능 측정 지표 선택

다음 단계는 성능 측정 지표를 선택하는 것입니다. 회귀 문제의 전형적인 성능 지표는 평균 제곱근 오차Root Mean Square Error (RMSE)입니다. 오차가 커질수록 이 값은 더욱 커지므로 예측에 얼마나 많은 오류가 있는지 가늠하게 해줍니다. [식 2-1]이 RMSE를 계산하는 식입니다.

식 2-1 평균 제곱근 오차

\text{RMSE}(\boldsymbol{X},h) = \sqrt{\frac{1}{m} \sum_{i=1}^m (h(\boldsymbol{x^{(i)}}) - y^{(i)})^2}

표기법

[식 2-1]에서 이 책 전체에 걸쳐 사용할 대표적인 머신러닝 분야의 표기법 몇 가지를 볼 수 있습니다.

  • m 은 RMSE를 측정할 데이터셋에 있는 샘플 수입니다. 예를 들어 2,000개 구역의 검증 세트에 대해 RMSE를 평가한다면 m = 2,000 입니다.
  • \boldsymbol{x}^{(i)} 는 데이터셋에 있는 i번째 샘플(레이블은 제외한)의 전체 특성값의 벡터이고, y^{(i)} 는 해당 레이블(해당 샘플의 기대 출력값)입니다.
    예를 들어 데이터셋에 있는 첫 번째 구역이 경도 -118.29°, 위도 33.91°에 위치하고, 중간 소득이 $38,372이며, 주민이 1,416명, 중간 주택 가격이 $156,400라면 \boldsymbol{x}^{(1)}y^{(1)} 은 다음과 같습니다(여기서 다른 특성은 고려하지 않았습니다).
    \boldsymbol{x}^{(1)} = \begin{pmatrix} -118.29 \\ 33.91 \\ 1,416 \\ 38,372 \end{pmatrix}
    y^{(1)} = 156,400
  • \boldsymbol{X} 는 데이터셋에 있는 모든 샘플의 모든 특성값(레이블은 제외)을 포함하는 행렬입니다. 샘플 하나가 하나의 행이어서 i번째 행은 \boldsymbol{x}^{(i)} 의 전치5와 같고 (\boldsymbol{x}^{(i)})^T 으로 표기합니다.
    예를 들어 첫 번째 구역이 앞의 예와 같다면 행렬 \boldsymbol{X} 는 다음과 같습니다.
    \boldsymbol{X} = \begin{pmatrix} (\boldsymbol{x}^{(1)})^T \\ (\boldsymbol{x}^{(2)})^T \\ \vdots \\ (\boldsymbol{x}^{(1999)})^T \\ (\boldsymbol{x}^{(2000)})^T \end{pmatrix} = \begin{pmatrix} -118.29 & 33.91 & 1,416 & 38,372 \\ \vdots & \vdots & \vdots & \vdots \end{pmatrix}
  • h 는 시스템의 예측 함수며 가설hypothesis이라고도 합니다. 시스템이 하나의 샘플 특성 벡터 \boldsymbol{x}^{(i)} 를 받으면 그 샘플에 대한 예측값 \hat{y}^{(i)} = h(\boldsymbol{x}^{(i)}) 를 출력합니다(\hat{y} 은 ‘y -햇’이라고 읽습니다).
    예를 들어 시스템이 첫 번째 구역의 중간 주택 가격을 $158,400이라고 예측한다면 \hat{y}^{(i)} = h(\boldsymbol{x}^{(i)}) = 158,400 입니다. 이 구역에 대한 예측 오차는 \hat{y}^{(1)} - y^{(1)} = 2,000 입니다.
  • \text{RMSE}(X, h) 는 가설 h 를 사용하여 일련의 샘플을 평가하는 비용 함수입니다.

스칼라 값이나 함수를 나타낼 때는 m 이나 y^{(i)} 또는 h 와 같이 이탤릭체 소문자, 벡터를 나타낼 때는 \boldsymbol{x}^{(i)} 와 같이 굵은 소문자, 행렬을 나타낼 때는 \boldsymbol{X} 와 같이 굵은 대문자를 사용하겠습니다.

RMSE가 일반적으로 회귀 문제에 선호되는 성능 측정 방법이지만 경우에 따라 다른 함수를 사용할 수도 있습니다. 예를 들어 이상치로 보이는 구역이 많다고 가정합시다. 이런 경우에는 평균 절대 오차Mean Absolute Error(평균 절대 편차Mean Absolute Deviation라고도 합니다)를 고려해볼 수 있습니다. [식 2-2]를 참조하세요.

식 2-2 평균 절대 오차

\text{MAE}(\boldsymbol{X},h) = \frac{1}{m} \sum_{i=1}^m |h(\boldsymbol{x^{(i)}}) - y^{(i)}|

RMSE와 MAE 모두 예측값의 벡터와 타깃값의 벡터 사이의 거리를 재는 방법입니다. 거리 측정에는 여러 가지 방법(또는 노름norm)이 가능합니다.

  • 제곱항을 합한 것의 제곱근(RMSE) 계산은 유클리디안 노름Euclidian norm에 해당합니다. 우리와 친숙한 거리 개념입니다. 또는 \ell_2 노름이라고도 부르며 ||\cdot||_2 (또는 그냥 ||\cdot||_2 )로 표시합니다.
  • 절댓값의 합을 계산하는 것은 \ell_2 노름에 해당하며 ||\cdot||_1 로 표기합니다. 이는 도시의 구획이 직각으로 나뉘어 있을 때 이 도시의 두 지점 사이의 거리를 측정하는 것과 같아 맨해튼 노름Manhattan norm이라고도 합니다.
  • 일반적으로 원소가 n 개인 벡터 \boldsymbol{V}l_k 노름은 ||\boldsymbol{V}||_k = (|v_0|^k + |v_1|^k + \cdots + |v_n|^k)^{\frac{1}{k}} 으로 정의합니다. \ell_0 은 단순히 벡터에 있는 0이 아닌 원소의 수이고, \ell_\infty 는 벡터에서 가장 큰 절댓값이 됩니다.
  • 노름의 지수가 클수록 큰 값의 원소에 치우치며 작은 값은 무시됩니다. 그래서 RMSE가 MAE보다 조금 더 이상치에 민감합니다. 하지만 (종 모양 분포의 양 끝단처럼) 이상치가 매우 드물면 RMSE가 잘 맞아 일반적으로 널리 사용됩니다.

 

2.2.3 가정 검사

마지막으로 (여러분과 동료들이) 지금까지 만든 가정을 나열하고 검사해보는 것이 좋습니다. 이 과정에서 심각한 문제를 일찍 발견할 수도 있습니다. 예를 들어 시스템이 출력한 구역의 가격이 다음 머신러닝 시스템의 입력으로 들어가게 되는데 이 값이 있는 그대로 사용될 거라 가정했습니다. 하지만 하위 시스템에서 이 값을 (‘저렴’, ‘보통’, ‘고가’ 같은) 카테고리로 바꾸고 가격대신 카테고리를 사용하면 어떻게 될까요? 이럴 때는 정확한 가격을 구하는 것이 전혀 중요하지 않습니다. 올바른 카테고리를 구하는 시스템이 필요합니다. 그렇다면 이제 이 문제는 회귀가 아니라 분류 작업이 됩니다. 몇 달 동안 회귀 시스템을 구축하고 나서야 이런 사실을 깨닫게 되는 것을 아무도 원치 않을 것입니다

다행히도 하위 시스템을 담당하는 팀과 대화 후 그들이 카테고리가 아니라 실제 가격을 사용한다는 것을 확인했습니다. 훌륭합니다! 모든 것이 준비되었고 출발선에 섰습니다. 이제 코딩을 시작할 수 있습니다!

 


 

3 머신러닝 시스템에 주입하는 정보를 클로드 섀넌(Claude Shannon)의 정보 이론을 따라 종종 신호라고 부릅니다. 신호/잡음 비율이 높은 것이 좋습니다. 옮긴이_ 섀넌은 미국의 수학자이자 전기공학자로 디지털 회로 이론을 창시하였고 정보 이론의 아버지로 불립니다.
4 옮긴이_ 맵리듀스가 구현된 대표적인 프레임워크는 아파치 하둡(Hadoop) 프로젝트입니다(http://hadoop.apache.org/). 맵리듀스를 사용하여 직접 회귀 분석을 구현할 수 있지만 일반적으로 하둡에서는 스파크(Spark)의 MLlib(https://spark.apache.org/mllib/)을 사용하는 것이 편리하고 성능도 뛰어납니다.
5 전치는 열 벡터를 행 벡터로(그리고 반대로도) 바꿉니다.

 

2. 머신러닝 프로젝트 처음부터 끝까지 | 목차 | 2.3 데이터 가져오기

 

이 글은 한빛미디어에서 출간한  “핸즈온 머신러닝“의 1장과 2장입니다. 이 책의 저작권은 한빛미디어(주)에 있으므로 무단 복제 및 무단 전제를 금합니다.

2.2 큰 그림 보기”에 대한 2개의 생각

  1. 박효성

    안녕하세요.
    github chapter 2의 예제를 실행하는데 오류가 발생하여 이렇게 메일을 드립니다.

    첫번째로 나눔바른고딕 폰트를 설치했는데 폰트를 못 찾겠다는 메세지가 나오며
    두 번째로 save_fig() 함수 실행 시, FileNotFoundError 에러가 발생합니다.
    어떻게 해결할 수 있을까요?

    좋아요

    응답
    1. 박해선 글의 글쓴이

      안녕하세요. 폰트 설치나 savefig 함수의 에러는 사용하시는 운영체제와 연관된 문제로 보입니다. 제가 원인을 알기 어렵습니다. 이해 부탁드립니다. 감사합니다.

      좋아요

      응답

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.