개발/머신러닝

[요약] 핸즈온 머신러닝 - 02. 머신러닝 프로젝트 처음부터 끝까지

소년택이 2022. 4. 21. 02:16

예제 시나리오를 통해 머신러닝의 일반적인 프로젝트 진행 순서를 훑어본다.

1. 큰 그림을 본다.
2. 데이터를 구한다.
3. 데이터를 탐색하고 시각화 하여 특성을 파악한다.
4. 데이터를 정제한다.
5. 모델을 선택하고 훈련한다.
6. 모델을 튜닝한다.
7. 솔루션을 제시한다.
8. 운영, 유지 그리고 보수.

 

큰 그림을 본다

문제 정의

  • 목적을 정확히 파악한다.
  • 현재 시스템이 어떻게 구성되어있는지를 파악한다.
  • 문제 유형을 파악한다 : 지도여부는? 알고리즘 유형은? 학습형태는? 

성능 측정 지표 선택

  • RMSE
  • MAE
  • 아니면 다른것?

 

가정 검사

"내가 내린 가정"이 머신러닝 파이프라인에 어떤 영향을 주고 받을지를 미리 검토해본다. 입력 데이터가 예상과 다르게 들어올 수 도 있고, 출력 데이터를 사용하는 시스템에서 원하는 출력값이 다른 형태일 수도 있다. 따라서 가정이 옳은지 이해당사자들과 미리 검토해봐야 한다.

 

데이터를 구한다

원본 데이터를 입수한 다음 데이터의 구조나 스케일링을 확인한다. 

  • 거리가 값인가, 범주인가.
  • 단위가 다르거나, 스케일링하고 있는가.
  • 최솟값, 최댓값 컷오프가 존재하는가.

이를 감안한뒤, 계층적 샘플링 등의 기법을 이용하여 편향을 최소화 한 테스트 세트를 생성한다.

 

데이터 특성 파악

  • 지리적 데이터 시각화.
  • 특성 간 상관관계 (correlation) 파악.
  • 특성 조합으로 새로운 특성 도출.

특성끼리 직교 (orthogonal) 하다면 한 특성의 노이즈가 다른 특성에 전혀 영향을 주지 않으므로 노이즈가 있더라도 파악하기가 쉽지 않다. 하지만 상관관계가 있는 특성이라면 시각화를 통해 "포편적인 상관관계"와 다른 행태의 특성 군집을 찾을 수 있다. 만약 이러한 행태가 노이즈라 판단된다면 미리 제거할 수 있다. 또 특성끼리 조합하여 더 의미있는, 새로운 특성을 만들어낼 수 있다.

 

데이터 정제

누락된 특성값

  • 세트에서 제외.
  • 특성을 제외.
  • 특정 값으로 대체 : 0, 평균, 중간 값 등.

특성값이 누락된 데이터를 버리지 않고 활용한다면 어떠한 형태로든 값을 넣어줘야한다. 0을 넣거나, 평균 또는 중간값 등의 추정치를 대입할 수 있다. 만약 데이터를 "추정" 한다면 이를 추정하기 위한 별도의 "모델"을 구성해야 하는데, 이때 반드시 훈련세트를 이용해야한다. 문제 해결을 위해 구성하고자 하는 모델은 훈련세트를 이용해 학습할 것이므로, 추정하고자 하는 값을 구성하기 위한 모델 또한 훈련세트에 기반해야한다. 테스트하거나, 실제 운영시에도 이 값을 사용한다.

특성 변조

(일반적으로) 데이터가 정규 분포를 따를때, 그리고 특성간 값의 범위가 유사할때 결과가 좋다. 이를 위해 (필요한 경우) 특성을 정규화 하여 분포를 고르게 하고 뒤틀림을 제거한다. 최댓값-최솟값을 고려하여 스케일링을 할 지, 노이즈로 처리할지도 정의한다.

텍스트 처리

학습을 위해서는 텍스트를 어떻게든 수치화 하여야 한다.

  • 숫자로 라벨링.
  • 해당 특성을 포기하고 실수 데이터 확보.
  • 배열화 등.

위의 작업은 모든 데이터에 공통적 그리고 순차적으로 적용해야한다. 이 과정을 파이프라인으로 구성하면 학습 과정을 간단하게 만들 수 있다.

 

모델 선택과  훈련

  1. 훈련 세트로 훈련한다.
  2. 훈련 세트에 과대적합 하였는지 확인한다.
  3. 또는 교차 검증을 통해 하나의 알고리즘에 대해 여러개의 모델을 만들고 평가하고 선택.

 

모델 튜닝

손, 랜덤, 앙상블 등의 방법으로 최적의 하이퍼파라미터를 찾는다.

 

운영, 유지, 보수

머신러닝 서비스는 런칭 했다고 끝나지 않는다. 머신러닝 외 시스템의 장애를 제외하고도 머신러닝 시스템 자체에도 장애가 발생할 수 있다.

  • (온라인 학습 모델이라면) 노이즈를 학습하여 성능이 떨어졌다.
  • (아니면) 모델이 열화되어 최신 트랜드에 부적합하다.
  • (또는) 파이프라인을 구성하는 타 콤포넌트에 장애가 발생하였거나, 학습에 영향을 미쳤다.
  • (그래서) 백업은 하였는가? 복구는 가능한가?