이전 포스팅에서 머신러닝 프로세스가 어떻게 구성돼있는지를 알 봤고 오늘은 각 프로세스를 세분화하여 알아보겠다.
1. 질문/문제 (Question) 공식화
2. 데이터 찾기 및 이해
3. 데이터 클리닝 및 기능 엔지니어링
4. 모델 선택
5. 조정 및 평가
6. 모델 사용 및 결과 제시
1. 질문/문제 (Question) 공식화 - Formulating a Question
우리가 알아내고자 하는 것은 무엇인가? 주어진 데이터를 어떻게 사용해야 할까?
간단한 예시로 테이블 순환이 높은 캐주얼 식당 체인에 대해 이야기해 보겠다. 우리의 목표는 고객 경험 극대화이며 어떠한 방법으로 목표 달성을 이룰 수 있을지 고민해야 하며 새로운 모델 생성 시 우리는 '방법'과 '측정법'을 세분화가 필요하다. 예를 들어 음식 서빙 대기시간을 예측한다고 했을 때 '2분 내 서빙'과 같은 구체적인 수치화가 필요하다
2. 데이터 찾기 및 이해 - Finding and Understanding the Data
머신러닝에서 가장 시간 소요가 큰 프로세스는 알맞은 자료를 선정하여 원하는 포맷으로 데이터를 담는 과정이다.
'Supervised learning'에서는 데이터에 라벨이 필요하다. 예컨대 위에서 언급된 예시 식당의 경우 대기시간은 과거 기록을 기준으로 라벨링 혹은 태그와 같은 방법으로 말이다. 아마도 해당 데이터는 이미 기록이 있을 것이지만 여기서 구체적인 시간대로 구분하는 추가 작업이 필요한 것이다.
또한 원하는 데이터 기록을 남기는 시스템 밑 충분한 데이터를 모아 우리가 생성할 머신러닝 모델을 train 하는 작업은 시간 소요가 큰 작업이며 해당 데이터 수집이 완료되면 어떤 결괏값을 도출할 수 있는지에 대한 예상 및 통계적 분석이 추가로 필요해진다.
- 평균값, 중간값 및 분포도
- 백분율 표
- 상관관계 찾기
box plot, histogram과 같은 시각화 도구를 사용하여 outlier를 식별하고, 데이터의 기본 구조를 나타내며 변수 간의 관계를 조사할 수도 있습니다.
상기 히스토그램에서 대략적으로 알 수 있듯이 두 가지 메인 그룹이 존재하며 그중 하나는 4분 때, 또 다른 그룹은 11분 때에 군집돼있음을 알 수 있다.
이러한 결괏값을 이용해 우리는 기존 모델링에 추가적인 질문을 던질 수 있다.
- 짧은 시간, 긴 시간과 같이 시간대를 양분화해야 하는가?
- 주문한 음식에 따라 결괏값에 영향을 주는가?
- 음식 주문 시간대가 결과에 영향을 주는가?
아마도 우리는 데이터의 양면성을 인식하고 만약 기존 모델이 약 6~7분의 대기 시간을 일관되게 예측한다면, 이러한 고민은 하지 않을 것이기 때문이다.
3. 데이터 클리닝 및 기능 엔지니어링 - Cleaning the Data and Feature Engineering
실제 데이터는 지저분하며 데이터에 오류가 있을 수 있으며 일부 열은 비어 있을 수 있다. 데이터 정리는 결측 값과 특이 치를 해결하는 프로세스이며, 그중에서도 통찰력에 영향을 미칠 수 있다. 어느 날 오후 주방에서 긴급 상황이 발생하여 20분 이상 딜레이가 발생한 주문 집단을 예로 볼 수 있다. 이러한 데이터 (outlier)는 평균 시간을 앞당기는 효과가 있고 이는 곧 예측의 오차를 초래한다. 만약 우리가 식당의 더 일반적인 기능을 모델링 하고 싶다면, 우리는 이 값들을 제거해야 한다.
Feature Engineering 은 우리가 살펴봐야 할 중요한 특징(또는 열)을 선택하고 적절한 변환을 통해 모델링을 위해 데이터를 준비하는 과정을 일컫는다. 이를 위해 우리는,
- 데이터 정상화(Normalizing) 또는 표준화 (Standardizing)
- 신규 칼럼을 추가하여 데이터 증대
- 결과에 불필요한 열 제거
를 실행할 수 있으며 현재 보유하고 있는 데이터에 대해 모델을 테스트한 후 Feature enginerring 하여 더 나은 결과를 얻을 수 있는지 확인 작업을 거친다.