들어가며

드디어 마지막입니다! 문제를 정의하고 데이터를 탐색하고 훈련 세트와 테스트 세트로 나누고 데이터를 정제하고 이를 자동으로 진행하기 위해서 추정기, 변환기 그리고 파이프라인에 대해서 알아보았습니다.

그렇다면 이제 머신러닝을 위한 데이터를 준비했으니 실제로 모델을 학습시켜 보도록합시다.

 

선형 회귀(Linear Regression) 모델

지금까지 주택 가격을 예측하는 모델을 위해서 데이터를 준비했으므로 선형 회귀(LinearRegression) 모델을 학습시켜 예측을 진행해봅시다.

https://colab.research.google.com/drive/1wWaPMCEb3ewf3CNKIeu262vQaCG36apw#scrollTo=la3RvTsfXAFv&line=1&uniqifier=1

 

Google Colaboratory

 

colab.research.google.com

놀랍게도 훈련을 위해서는 위 두 줄의 코드면 충분합니다. 추정 기를 수행하는 fit 메서드를 통해서 예측을 위한 모델 파라미터가 전부 준비되었습니다.

모델 평가

이번에는 데이터셋에서 5개의 샘플을 추출하여 파이프라인을 통한 데이터 정제 후 테스트를 진행해보겠습니다.

추정 값과 레이블의 값을 비교해봅시다.

두 값을 비교해보니 차이가 있습니다. 오차가 얼마나 나는지 평가하기 위해서 RMSE를 사용해보겠습니다.

주택 가격이120000에서120000에서 265000 사이에 존재하는데 반해 RMSE의 값이 $68628로 매우 만족스럽지 못한 오차가 발생합니다. 이는 데이터의 과소 적합에 해당하며 이는 충분한 정보를 제공하지 못했거나 모델이 충분히 강력하지 못하다는 것을 의미합니다. 

과소적합 해결

과소 적합을 해결하기 위해서는 크게 3가지 방법이 있습니다.

  1. 더 강력한 모델 선택
  2. 훈련 알고리즘에 더 좋은 데이터 특성 삽입
  3. 모델의 규제 감소

우리는 모델을 규제하지 않았으니 3번은 해당하지 않습니다. 문제를 해결하기 위해 우선 1번 옵션을 선택해봅시다. LinearRegression대신 DecisionTreeRegressor을 사용해서 훈련시켜보겠습니다. 이 모델은 데이터에서 복잡한 비선형 관계를 찾을 수 있습니다.

LinearRegression처럼 똑같이 평가를 해봅시다

놀랍게도 오차가 0이 나왔습니다. 이는 일반화가 잘 되었기보다는 과대 적합이 되었을 가능성이 매우 큽니다. 이를 확실히 하기 위해서 다른 방식으로 평가를 진행해보아야 합니다.

 

마치며

LinearRegression 모델을 선택하고 학습을 시킨 후 RMSE를 사용해서 모델을 평가해보았습니다. RMSE는 과소 적합인 경우는 파악하기 쉽지만 모델이 일반화가 잘 이루어졌는지 과대 적합(overfiting) 되어있는지 판단하기 모호합니다. 다음 글에서는 이를 위해 교차검증을 수행해보도록 하겠습니다.

1. 비즈니스 목적 정의

첫 번째로 생각해야 할 것은 완성된 시스템의 비즈니스 목적이 무엇인지 알아야 합니다.

목적에 따라서 문제를 어떻게 구상할지, 어떤 알고리즘을 선택하고 어떤 성능지표를 사용할지 결정할 수 있기 때문입니다.

 

예를 들어 캘리포니아 구역의 데이터(인구수, 위치, 중간소득 등)를 받아서 해당 구역의 주택 가격을 예측하는 프로그램을 작성한다고 생각해봅시다. 

 

참조 https://tensorflow.blog/

 

파이프라인이란?
데이터 처리 컴포넌트(하나의 시스템)들이 연속되어 있는 것을 데이터 파이프라인이라고 합니다.
각각의 컴포넌트들을 결괏값을 도출하는데 소비되는 시간이 다릅니다. 따라서 각 컴포넌트는 비동기적으로 작동하게 되는데 이를 해결하기 위해서 파이프 라인을 사용합니다.
각 컴포넌트 사이에는 컴포넌트들의 결과값을 출력하여 DB에 저장하고 저장된 데이터는 다음, 하위 컴포넌트의 연산이 끝나기를 기다렸다가 이용되어 비동기적으로 작동하는 컴포넌트들을 연속적으로 이어 데이터를 처리할 수 있습니다.

2. 현재 설루션 파악

현재 설루션을 파악하는 것은 시스템의 해결방법은 물론 참고 성능으로도 확인할 수 있습니다.

예를 들어 현재 시스템은 주택 구역을 전문가들이 각각 데이터를 참고하여 수동으로 예측하고 있다고 합시다. 전문가들이 예측에 사용하는 방법은 시스템을 구상하는 토대가 될 수 있으며 추후 시스템을 설계하고 나온 결과물들과 기존 설루션의 결과물을 비교해서 성능을 참고할 수 있습니다.

3. 시스템 구성 결정

시스템에 사용될 학습 종류, 알고리즘 등을 결정할 시간입니다.

여기서 지도, 비지도, 배치, 온라인 등을 시스템을 구현하기 위한 세세한 구성을 작성할 시간입니다.

위 예시에서 주택 가격을 예측하는데 주어지는 데이터들은 샘플(위치, 인구수, 중간소득 등)과 레이블(주택가격)으로 이루어져있습니다. 따라서 이는 전형적인 지도 학습입니다. 또한 예측값으로 주택가격을 도출해야 하기 때문에 회귀(regression) 문제에 해당합니다. 마지막으로 샘플이 일차원이 아니라 다차원이기 때문에 다변량 회귀 (multivariate regression)에 해당합니다. 주택 가격은 시시각각 변하므로 갱신율이 높으므로 온라인 학습을 선택하도록 합니다.

4. 성능 측정 지표 선택

위에서 다변량 회귀를 선택하도록 했으므로 이번에는 성능 측정 지표를 정의해봅시다.

 

전형적인 성능 지표로는 RMSE( Root Mean Square Error )를 선택할 수 있습니다.

참조 https://tensorflow.blog/

아 RMSE는 매우 자주 사용되는 성능 지표이지만 데이터의 이상치에 따라서 다른 성능 지표를 사용할 수 있습니다.

MAE(평균 절대 오차)는 RMSE가 norm2를 사용하는데 반해 norm1을 사용하기 때문에 결괏값과 이상치 차이 값에 많이 구애받지 않기 때문에 RMSE보다 학습률은 느릴 수 있지만 이상치 데이터로 인한 정확도 감소를 회피할 수 있습니다.

5. 가정 검사

마지막으로 지금까지 만든 가정을 나열하고 검사하는 것이 좋습니다.

지금까지 정의했던 시스템 구상에서 심각한 문제가 발견될 수 있습니다. 예를 들어서 하위 컴포넌트에 넘겨줄 데이터가 사실은 주택 가격이 아니라 저가, 보통, 고가 3가지 중 하나로 결정하여 넘겨준다면 이는 분류(Clustering) 문제로서 만약 시스템 구축까지 마친 상태였다면 지금까지 다변량 회귀로 설계했던 시스템이 무용지물이 되는 꼴이 됩니다. 

 

위 내용은 Hands on Machine Learning with Sikit-learn & Tensor Flow를 바탕으로 작성되었습니다.

+ Recent posts