🔑 Chapter 2. 머신러닝 프로젝트 처음부터 끝까지
2장에서는 머신러닝을 처음부터 끝까지 어덯게 진행해야 하는지 예제를 통해 알아보고 체크리스트를 숙지하자.
부록 B .
💡 머신러닝 프로젝트 체크 리스트(8 단계)
- 문제를 정의하고 큰 그림을 본다.
- 데이터를 수집한다.
- 통찰을 얻기 위해 데이터를 탐색한다.
- 데이터에 내재된 패턴이 머신러닝 알고리즘에 잘 드러나도록 데이터를 준비한다.
- 여러 다른 모델을 시험해보고 가장 좋은 몇 개를 고른다.
- 모델을 세밀하게 튜닝하고 이들을 연결해 최선의 솔루션을 만든다.
- 솔루션을 출시한다.
- 시스템을 론칭하고 모니터링, 유지 보수한다.
🕹 문제를 정의하고 큰 그림을 그린다.
- 목표를 비즈니스 용어로 정의한다.
- 이 솔루션은 어떻게 사용될 것인가?
- (만약 있다면) 현재 솔루션이나 차선책은 무엇인가?
- 어떤 문제라고 정의할 수 있나(지도/비지도, 온라인/오프라인 등)?
- 성능을 어떻게 측정해야 하나?
- 성능 지표가 비즈니스 목표에 연결되어 있나?
- 비즈니스 목표에 도달하기 위해 필요한 최소한의 성능은 얼마인가?
- 비슷한 문제가 있나? 이전의 방식이나 도구를 재사용할 수 있나?
- 해당 분야의 전문가가 있나?
- 수동으로 문제를 해결하는 방법은 무엇인가?
- 여러분이(또는 다른 사람이) 세운 가정을 나열합니다.
- 가능하면 가정을 검증합니다.
🕹 데이터를 수집합니다.
NOTE
- 새로운 데이터를 쉽게 얻을 수 있도록 최대한 자동화 해라
- 필요한 데이터와 양을 나열합니다.
- 데이터를 얻을 수 있는 곳을 찾아 기록합니다.
- 얼마나 많은 공간이 필요한지 확인합니다.
- 법률상의 의무가 있는지 확인하고 필요하다면 인가를 받습니다.
- 접근 권한을 획득합니다.
- 작업 한경을 만듭니다(충분한 저장공간으로).
- 데이터를 수집합니다.
- 데이터를 조작하기 편리한 형태로 변환합니다(데이터 자체는 바꾸지 않는다).
- 민감한 정보가 삭제되었거나 보호되었는지 검증합니다(예를 들면 개인정보 비식별화).
- 데이터의 크기와 타입(시계열, 표본, 지리정보 등)을 학인합니다.
- 테스트 세트를 샘플링하여 따로 떼어놓고 절대 들여다보지 않습니다(!!!일반화오류방지).
🕹 데이터를 탐색합니다.
NOTE
- 해당 분야의 전문가에게 조언을 구하라.
- 데이터 탐색을 위해 복사본을 생성합니다(필요하면 샘플링하여 적절한 크기로 줄입니다),
- 데이터 탐색 결과를 저장하기 위해 주피터 노트북을 만듭니다.
- 각 특성의 특징을 조사합니다.
- 이름
- 타입(범주형, 정수/부동소수, 최댓값/최솟값 유무, 텍스트, 구조적인 문자열 등)
- 누락된 값의 비율(%)
- 잡음 정도와 잡음의 종류(확률적, 이상치, 반올림 에러 등)
- 이 작업에 유용한 정도
- 분포 형태(가우시안, 균등, 로그 등)
- 지도 학습 작업이라면 타깃 속성을 구분합니다.
- 데이터를 시각화합니다.
- 특성 간의 상관관계를 조사합니다.
- 수동으로 문제를 해결할 수 있는 방법을 찾아봅니다.
- 적용이 가능한 변환을 찾습니다.
- 추가로 유용한 데이터를 찾습니다(있다면 ‘데이터를 수집합니다’로 돌아갑니다).
- 조사한 것을 기록합니다.
🕹 데이터를 준비합니다.
NOTE
- 데이터의 복사본으로 작업합니다(원본 데이터셋은 그대로 보관합니다).
- 적용한 모든 데이터 변환은 함수로 만듭니다. 여기에서 다섯 가지 이유가 있습니다.
- 다음에 새로운 데이터를 얻을 때 데이터 준비를 쉽게 할 수 있기 때문입니다.
- 다음 프로젝트에 이 변환을 쉽게 적용할 수 있기 때문입니다.
- 테스트 세트를 정제하고 변환하기 위해서입니다.
- 솔루션이 서비스에 투입된 후 새로운 데이터 샘플을 정제하고 변환하기 위해서입니다.
- 하이퍼파라미터로 준비 단계를 쉽게 선택하기 위해서입니다.
- 데이터 정제
- 이상치를 수정하거나 삭제합니다(선택사항).
- 누락된 값을 채우거나(예를 들면 0이나 평균, 중간값 등으로), 그 행(또는 열)을 제거합니다.
- 특성 선택(선택사항).
- 작업에 유용하지 않은 정보를 가진 특성을 제거합니다.
- 적절한 특성 공학
- 연속 특성 이산화하기
- 특성 분해하기(예를 들면 범주형, 날짜/시간 등)
- 가능한 특성 변환 추가하기(예를 들면 \(log(x), sqrt(x), x^2\)등)
- 특성을 조합해 가능성 있는 새로운 특성 만들기
- 특성 스케일 조정
- 표준화 또는 정규화
🕹 가능성 있는 몇 개의 모델을 고릅니다.
NOTE
- 데이터가 매우 크면 여러가지 모델을 일정 시간 안에 훈련시킬 수 있도록 데이터를 샘플링하여 작은 훈련 세트를 만드는 것이 좋습니다 (이렇게 하면 규모가 큰 신경망이나 랜덤 포레스트 같은 복잡한 모델은 만들기 어렵습니다).
- 여기에서도 가능한 한 최대로 이 단계들을 자동화합니다.
- 여러 종류의 모델을 기본 매개변수를 사용해 신속하게 많이 훈련시켜 봅니다 (예를 들면 선형 모델, 나이브 베이지, SVM, 랜덤 포레스트, 신경망 등).
- 성능을 측정하고 비교합니다.
- 각 모델에서 N-겹 교차 검증을 사용해 N개 폴드의 성능에 대한 평균과 표준 편차를 계산합니다.
- 각 알고리즘에서 가장 두드러진 변수를 분석합니다.
- 모델이 만드는 에러의 종류를 분석합니다.
- 이 에러를 피하기 위해 사람이 사용하는 데이터는 무엇인가요?
- 간단한 특성 선택과 특성 공학 단계를 수행합니다.
- 이전 다섯 단계를 한 번이나 두 번 빠르게 반복합니다.
- 다른 종류의 에러를 만드는 모델을 중심으로 가장 가능성이 높은 모델을 세 개에서 다섯개 정도 추립니다.
🕹 세스템을 세밀하게 튜닝합니다.
NOTE
- 이 단계에서는 가능한 한 많은 데이터를 사용하는 것이 좋습니다. 특히 세부 튜닝의 마지막 단계로 갈수록 그렇습니다.
- 언제나 그렇듯이 할 수 있다면 자동화 합니다.
- 교차 검증을 사용해 하이퍼파라미터를 정밀 튜닝합니다.
- 하이퍼파라미터를 사용해 데이터 변환을 선택하세요. 특히 확신이 없는 경우 이렇게 해야합니다 (예를 들어 누락된 값을 0으로 채울 것인가 아니면 중간값으로 채울 것인가? 아니면 그 행을 버릴 것인가?).
- 탐색할 하이퍼파라미터의 값이 매우 적지 않다면 그리드 서치보다 랜덤 서치를 사용하세요. 훈련 시간이 오래 걸린다면 베이지안 최적화 방법을 사용하는 것이 좋습니다. (예를 들면 가우시안 프로세스 사전확률을 사용합니다).
- 앙상블 방법을 시도해보세요. 최고의 모델들을 연결하면 종종 개별 모델을 실행하는 것보다 더 성능이 높습니다.
- 최종 모델에서 확신이 선 후 일반화 오차를 추정하기 위해 테스트 세트에서 성능을 측정합니다.
CAUTION_ 일반화 오차를 측정한 후에는 모델을 변경하지 마세요. 만약 그렇게함하면 테스트 세트에 과대적합 될것이다.
🕹 솔루션을 출시합니다.
- 지금까지의 작업을 문서화합니다.
- 멋진 발표 자료를 만듭니다.
- 먼저 큰 그림을 부각시킵니다.
- 이 솔루션이 어떻게 비즈니스 목표를 달성하는지 설명하세요.
- 작업 과정에서 알게 된 흥미로운 점들을 잊지 말고 설명하세요.
- 성공한 것과 그렇지 못한 것을 설명합니다.
- 우리가 세운 가정과 시스템의 제약을 나열합니다.
- 멋진 그래프나 기억하기 쉬운 문장으로 핵심 내용을 전달하세요 (예를 들면 ‘중간 소득이 주택가격에 대한 가장 중요한 예측 변수입니다.’).
🕹 시스템을 론칭합니다!
- 서비스에 투입하기 위해 솔루션을 준비합니다(실제 입력 데이터 연결, 단위 테스트 작성 등).
- 시스템의 서비스 성능을 일정한 간격으로 확인하고 성능이 감소됐을 때 알림을 받기 위해 모니터링 코드를 작성합니다.
- 아주 느리게 감소되는 현상을 주의하세요. 데이터가 변화함에 따라 모델이 점차 구식이 되는 경향이 있습니다.
- 성능 측정에 사람의 개입이 필요할지 모릅니다(예를 들면 크라우드소싱 서비스를 통해서).
- 입력 데이터의 품질도 모니터링합니다(예를 들어 오동작 센서가 무작위한 값을 보내거나, 다른 티의 출력 품질이 나쁜 경우). 온라인 학습 시스템의 경우 특히 중요합니다.
- 정기적으로 새로운 데이터에서 모델을 다시 훈련시킵니다(가능한 한 자동화합니다).
Comments