머신 러닝 프로젝트 시작하기-성능 측정

4 minute read

1. MSEMean Squared Error
2. RMSERoot Mean Squared Errorr
3. MAEMean Absoluted Error
4. r2 score

머신러닝 프로젝트 처음부터 끝까지 머신러닝 프로젝트의 시작과 그 과정은 어떨까? 머신러닝 프로젝트 과정에서 어떤 방법들이 사용되는지 정리가 되어야한다. 나중에 내가 다른 머신러닝 프로젝트를 진행한다고 할 때, 이 순서에 따라 시작을 해야한다. 그리고 각 과정에서 어떤 부분을 체크해야 하는지를 중점으로 정리하겠다.

머신러닝 프로젝트 시작과 끝

  1. 큰 그림을 봅니다.
  2. 데이터를 구합니다.
  3. 데이터로부터 통찰을 얻기 위해 탐색하고 시각화합니다.
  4. 머신러닝 알고리즘을 위해 데이터를 준비합니다.
  5. 모델을 선택하고 훈련시킵니다.
  6. 모델을 상세히 조정합니다.
  7. 솔루션을 제시합니다.
  8. 시스템을 론칭하고 모니터링하고 유지 보수합니다.

1. 문제를 정의하고 큰 그림을 그립니다

순서

  1. 목표를 비즈니스 용어로 정의합니다.
  2. 이 솔루션은 어떻게 사용될 것인가?
  3. 이미 솔루션이 있다면, 현재 솔루션이나 차선책은 무엇인가?
  4. 어떤 문제라고 정의할 수 있나 (지도/비지도, 온라인/오프라인 등)?
  5. 성능을 어떻게 측정해야 하나?
  6. 성능 지표가 비즈니스 목표에 연결되어 있나?
  7. 비즈니스 목표에 도달하기 위해 필요한 최소한의 성능은 얼마인가?
  8. 비슷한 문제가 있나? 이전의 방식이나 도구를 재사용할 수 있나?
  9. 해당 분야의 전문가가 있나?
  10. 수동으로 문제를 해결하는 방법은 무엇인가?
  11. 여러분이(또는 다른 사람이) 세운 가정을 나열합시다.
  12. 가능하면 가정을 검증합니다.

성능 측정

손실 함수

손실함수loss function: 머신러닝을 통해 생성한 모형이 실젯값과 얼마나 차이가 나는지를 나타내는 함수. 손실의 정도를 수치로 나타낸다.
비용함수cost function: 데이터셋 전체를 대상으로 하는 손실

  1. L1 손실함수
    L1 손실은 실젯값과 예측값의 차이에 기댓값을 취한 것
    $ L1 \; Loss = \sum_{}|y_{true}-y_{predict}| $
  2. L2 손실함수
    L2 손실은 실젯값과 예측값의 차이에 제곱을 취한 것 $ L2 \; Loss = \sum_{}\left(y_{true}-y_{predict}\right)^2 $

이상치에 민감한 정도
MSE > RMSE > MAE

아래 세 성능 평가는 회귀 모형의 성능 평가 방법이다.

1. MSE

$ MSE = \frac{1}{n}\sum_{i=1}^n\left(y_{i}-\hat{y}_{i}\right)^{2} $

오차제곱합이라고도 부른다. 사이킷런에서 mean_squared_error를 사용한다.

from sklearn.metrics import mean_squared_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print(mean_squared_error(y_true, y_pred))
2. RMSE

$ \tt RMSE(\bf X,\it h) = \sqrt{\frac{1}{m}\sum_{i=1}^m\left(\it h\left( \bf x^{\it (i)} \right)-\it y^{(i)} \right)^2} $

오차가 커질수록 이 값은 더욱 커지므로 예측에 얼마나 많은 오류가 있는지 가늠하게 해준다.

3. MAE

$ MAE = \frac{1}{n}\sum_{i=1}^n|y_{i}-\hat{y}_{i}| $

사이킷런에서 mean_absolute_error를 사용한다.

from sklearn.metrics import mean_absolute_error

print(mean_absolute_error(y_true, y_pred))
4. r2 score

$ R^2=1-\frac{\sum_1^n\left(y_i-\hat{y_i}\right)^2}{\sum_1^n\left(y_i-\overline{y_i}\right)^2} $

R 제곱값이라고 부른다. 전체 모델에서 설명 가능한 분산의 비율을 나타낸다. R 제곱값은 0에서 1 사잇값을 가지며 1에 가까울수록 높은 성능을 의미한다.

from sklearn.metrics import r2_score
print(r2_score(y_true, y_pred))

예시

캘리포니아 인구조사 데이터를 사용해 캘리포니아의 주택 가격 모델을 만드는 것이다. 이 데이터로 모델을 학습시켜서 다른 측정 데이터(인구, 중간 소득, 위치 등)가 주어졌을 때 중간 주택 가격을 예측해야 한다.

  1. 이 솔루션은 어떻게 사용될 것인가?
    비즈니스의 목적이 무엇인지에 생각해본다. 이 모델을 만들어서 어떻게 사용해 이익을 얻을까. 를 생각한다. 주택 가격을 예측하여 뭘 할건데? 를 생각해보고 개인적인 결론을 내려본다. 미래에 그 지역의 가격이 얼마가 될지 예측하는거니까 예전에비해 오른 지역이 있다면 그곳에 투자를 하면 이익이 실현되지 않을까! 그리고 상사에 이 예측으로 무엇을 하는 것인지 물어본다.

    위 그림과 같이 시스템이 구성되어 있다고하자. 내가 만든 모델의 출력(구역의 중간 주택 가격에 대한 예측)이 여러 가지 다른 신호와 함께 다른 머신러닝 시스템에 입력으로 사용된다고 한다. 그리고 해당 지역에 투자할 가치가 있는지 결정하는 흐름이다. 이 결정이 수익에 직결되므로 올바르게 예측하는 것, 즉 내가 하는 일이 중요한 것이다! 파이프라인은 추후에 데이터를 정제하고, 훈련하고, 하이퍼파라미터를 조정하는 과정을 하나로 진행하도록 해준다. 여기서는 다음과 같이 정의한다.
    데이터 파이프라인 : 데이터 처리 컴포넌트들이 연속되어 있는 것.

    • 동작 과정 : 컴포넌트들은 비동기적으로 동작한다. 동시에 동작하지 않는다는 뜻이다. 각 컴포넌트는 많은 데이터를 추출해 처리하고 그 결과를 다른 데이터 저장소로 보낸다. 그러면 일정 시간 후 파이프라인의 다음 컴포넌트가 그 데이터를 추출해 자신의 출력 결과를 만든다. 컴포넌트 사이의 인터페이스는 데이터 저장소 뿐이다.
    • 특징 :
      • 서로 독립적이다.
      • 각 팀은 각자의 컴포넌트에 집중할 수 있다.
      • 한 컴포넌트가 다운되더라도 하위 컴포넌트는 문제가 생긴 컴포넌트 마지막 출력을 사용해 평상시와 같이 계속 동작이 가능하다.
      • 모니터링이 필수적이다. 이를 수행하지 않으면 고장 난 컴포넌트를 모를 수도 있다.
  2. 이미 솔루션이 있다면, 현재 솔루션이나 차선책은 무엇인가?
    현재 상황은 전문가가 수동으로 추정한다고 한다. 한 팀이 구역에 관한 최신 정보를 모으고 있는데 중간 주택 가격을 얻을 수 없을 때는 복잡한 규칙을 사용하여 추정한다고 한다. 회사는 이 방식이 효율적이지않다고 판단했다. 그래서 구역의 데이터를 기반으로 중간 주택 가격을 예측하는 모델을 훈련시키는 쪽이 유용하다.

  3. 어떤 문제라고 정의할 수 있나 (지도/비지도, 온라인/오프라인, 분류/회귀 등)?
    나는 데이터셋을 가지고 있다. 이는 새롭게 실시간으로 입력되는 데이터가 아니기 때문에 배치학습이 될 것이다. 그리고 레이블이 있는(중간 주택 가격) 데이터이기 때문에 지도 학습이 된다. 그 중에서도 가격을 예측하는 모델이기 때문에 회귀다. 책에 나오는 용어로 정리하자면, 레이블된 훈련 샘플이 있으니 지도학습이 되고, 값을 예측해야 하므로 회귀 문제이다. 예측에 사용할 특성이 여러 개이기 때문에 다중 회귀문제이다. 각 구역마다 하나의 값을 예측하기 때문에 단변량 회귀이기도 하다. 이 시스템으로 들어오는 데이터에 연속적인 흐름이 없으므로 빠르게 변하는 데이터에 적응하지 않아도 되고, 데이터가 메모리에 들어갈 만큼 충분히 작기때문에 배치 학습이 적절하다.

    데이터가 매우 크면 map reduce 기술을 사용하여 배치 학습을 여러 서버로 분할하거나, 온라인 학습 기법을 사용할 수도 있다. 아파치 하둡를 참고하자. 스파크를 사용하는것이 편리하고 성능도 뛰어나다. 대학교 4학년 중국 교환학생 시기에 전공 수업으로 데이터 마이닝 강의를 들었는데 그때 내가 발표했던 프레임워큭가 Spark였다. 그때는 빅데이터라는 단어만 들어서 정확히 뭔지도 모르고 발표를 준비했다. 영어로 발표하는것이라 더욱 엉망으로 준비했던 기억이 난다. 꼭 한번 정리하고 넘어가고싶다..
    <하둡, 스파크 관련 도서>

5~7. 성능과 관련된 개념은 위에서 정리했다. 예시로 살펴본다면
$ \tt RMSE(\bf X,\it h) = \sqrt{\frac{1}{m}\sum_{i=1}^m\left(\it h\left( \bf x^{\it (i)} \right)-\it y^{(i)} \right)^2} $

평균 제곱근 오차는 회귀 문제에서 전형적인 성능 지표이다. 부동산 가격 예측을 예시로 든다면 데이터셋에 있는 i 번째 샘플의 전체 특성값의 벡터를 시스템 입력으로 하여 얻은 예측값 - 해당 레이블 출력값을 제곱하여 평균낸 값이다.