0. 강의 소개
지금까지 이전 스테이지에서 다양한 문제를 갖고 다양한 모델들을 통해서 해결을 하는 과정은 충분히 연습하셨을 것 같습니다. 하지만 실제로 회사에서 머신러닝을 프로젝트를 진행할때는 어떤 프로세스를 따르게 될까요?
이번 강의에서는 문제정의를 시작으로 조금 더 실무적인 관점에서 머신러닝 프로젝트의 전체 과정을 훑어보는 시간을 갖도록 하겠습니다.
1. 머린러닝 프로젝트 Flow
1.1 문제 정의의 중요성
- 앞으로 겪을 일은 대부분 문제로 정의 가능
- 문제를 잘 풀기 위해선 문제를 정의하는 것이 매우 중요함
- E.g 저는 사람들을 행복하게 만들고 싶어요
- 어떤 사람들을 대상으로?
- 행복의 정의는 뭔가?
- How보다 Why에 집중하자!
-
문제 정의란?
1. 본질을 파악하는 과정 2. 해결해야 하는 문제는 무엇이고 그 문제를 해결하면 무엇이 좋을까? 어떻게 해결하면 좋을까?
1.2 현상 파악
- 어떤 일이 발생하고 있는가?
- 해당 일에서 어려움은 무엇인가?
- 해당 일에서 해결하면 좋은 것은 무엇인가?
- 추가적으로 무엇을 해볼 수 있을까?
- 어떤 가설을 만들어 볼 수 있을까?
- 어떤 데이터가 있을까?
1.3 구체적인 문제 정의
- 무엇을 해결하고 싶은가?
- 무엇을 알고 싶은가?
- 앞선 현상을 더 구체적으로 명확한 용어로 정리
- 당장 진행할 수 있는 설명을 늘리는 방식 사용
- 설명을 늘리는 방식 = 룰 베이스 => 당장의 문제 해결
- 추천 = 알고리즘 개발 => 문제 해결의 또 다른 방법
- 현상을 계속 쪼개고, 그 문제를 기반으로 어떤 어려움을 겪고 있는지 파악
- 데이터로 할수 있는 일을 만들어서 진행,
- 알고리즘 접근이 최상은 아니라는 방법을 제시할수도 있어야함 -> 간단한거 부터!
1.4 프로젝트 설계
- 문제 정의 / 최적화할 Metric 선택 / 데이터 수집, 레이블 확인 / 모델 개발 / 모델 예측 결과를 토대로 Error Analysis. 잘못된 라벨이 왜 생기는지 확인
- 이후, 다시 모델 학습 / 더 많은 데이터 수집 / 다시 모델 학습
- 최근 다시 성능이 떨어진다…
- 모델을 다시 학습 / 모델 배포
- 최적화할 Metric을 수정
- 문제의 타당성 확인
- 필요한 데이터의 종류와 기존 모델이 있는가?
- 머신러닝이 최적의 솔루션이 아닐 수 있음
- 머신러닝이 사용면 좋은 경우
- 패턴: 학습할 수 있는 패턴인가?
- 패턴이 없다면 학습 불가능
- E.g 주가 예측에서, 가격이 완전 무작위 변동이라 믿으면 모델을 만드는 것이 불필요
- 목적함수: 학습을 위한 목적함수를 만들 수 있는가?
- 머신러닝 알고리즘은 유용한 패턴을 학습하거나 노이즈를 패턴으로 학습하는 경우도 존재
- 지도 학습은 정답 레이블과 예측 결과의 차이로 정의됨
- 목잡성: 패턴이 복잡해야함
- 주소 검색문제 -> 굳이 머신러닝을 사용할 필요가 없음
- 집값 예측 -> 다양한 변수와 요인이 존재 복잡함
- 데이터 존재 여부: 데이터가 존재하거나 수집할 수 있어야함
- 데이터가 없으면 모델을 만들 수 없음
- 반복: 사람이 반복적으로 실행하는 경우
- 작업의 반복 -> 패턴
- 패턴: 학습할 수 있는 패턴인가?
- 머신러닝이 사용되면 좋지 않은 경우
- 비윤리적 문제
- 간단한 문제
- 좋은 데이터가 없는 문제
- 한번의 오류가 치명적인 문제
- 시스템이 내리는 모든 결정이 설명 가능해야하는 경우
- 비용 효율적이지 않은 경우
1.5 목표 설정, 지표 결정
- 프로젝트의 목표
- Goal: 프로젝트의 일반적인 목적, 큰 목적
- Objectives: 목적을 달성하기 위한 세부 단계의 목표
- 목표 설정시 데이터까지 확인
- 데이터에 레이블이 없을 수 있음
- 정확히 찾으려는 데이터가 없는 경우, 여러가지 시나리오를 고려
- 라벨이 있는 데이터가 존재 -> 바로사용
- 유사 라벨이 있는 데이터 -> 유사 라벨 활용
- 라벨이 없는 데이터 -> 직접 레이블링 or 비지도 학습 방법 탐색
- 데이터가 아예 없는 경우 -> 수집 방법 부터 고민
- Multiple Objective Optimization
- 최적화 하고 싶은 것이 여러가지가 있는 경우
- 단일 모델로!
- 두 로스를 결합하고, 그 loss를 최소화하기 위한 모델을 학습
- 두 로스를 결합하기 위한 하이퍼파라미터 조절 필요
- 2개의 모델(각각의 loss 최소하)
- 모델을 재학습하지 않아도 두 모델의 영향도 변경 가능
- 단일 모델로!
- Objective가 여러개인 경우 분리하는 것이 좋음
- 학습하기 쉬워야함 -> 하나의 objective를 최적화하는 것이 더 쉬움
- 모델을 재학습 하지 않도록 모델을 분리
- 유지보수 일정이 서로 다를 수 있음
- 최적화 하고 싶은 것이 여러가지가 있는 경우
- 제약조건
- 일정, 예산, 사람, 기술적 제약, 윤리적 이슈
- 성능
- Baseline: 새로 만든 모델을 무엇과 비교할 것인가?
- Treshold: 확률값으로 class가 바뀌는 기준은?
- Perfomance trade-off: 속도는 빠른데 성능이 떨어짐 vs 성능은 높은데 속도가 느림
- Confidence Measurement: Falase Negative가 있어도 괜찮은가?
- 베이스라인, 프로토 타입
- 모델이 더 좋아졌다고 판단할 수 있는 Baseline이 필요
- 꼭 모델일 필요는 없음
- 자신이 모델이라 생각하고 어떻게 분류할지 Rule Base 규칙 설계
- 간단한 모델부터 시작하는 이유
- 어떻게든 모델의 위험을 낮추는 것이 목표가 되어야 함
- 가장 좋은 방법은 최악의 성능을 알기 위해 허수아비 모델로 시작하는 것
- 초기엔 단순하게 사용자가 이전에 선택한 행동을 제안할 수도 있고, 추천 시스템에선 제일 많이 구매한 것을 추천할 수도 있음
- 유사한 문제를 해결하고 있는 SOTA 논문 파악해보기 => 우리의 문제에선 어떤 시도를 해볼 수 있을까?
- 모델이 더 좋아졌다고 판단할 수 있는 Baseline이 필요
- Metric Evaluation
- 앞선 문제를 해결할 경우 어떤 지표가 좋아질까?를 고민해야 함
- 이 부분은 작게는 모델의 성능 지표(RMSE)일 수 있고, 크게는 비즈니스의 지표일 수 있음(고객의 재방문율, 매출 등)
1.6 Action(모델 개발 후 배포 & 모니터링)
- 앞서 정의한 지표가 어떻게 변하는지 파악하기
- 현재 만든 모델이 어떤 결과를 내고 있는가?
- 잘못 예측하고 있다면 어떤 부분이 문제일까?
- 어떤 부분을 기반으로 예측하고 있을까?
- Feature의 어떤 값을 사용할 때 특히 잘못 예측하고 있는가?
1.7 추가 원인 분석
- 새롭게 발견한 상황을 파악해 어떤 방식으로 문제를 해결할지 모색
- 그 과정에서 앞서 진행한 과정을 반복
2. 비즈니스 모델
2.1 비즈니스 모델 파악하기
- 회사에서 중요한 것 = 비즈니스
- 즉, 비즈니스에 대한 이해가 높으면 문제 정의를 더 잘 할 수 있다.
- 비즈니스 파악하기
- 1) 회사의 비즈니스 파악하기
- 2) 데이터를 활용할 수 있는 부분은 어디인가? (Input)
- 데이터가 존재한다면 어떤 데이터가 존재하는가?
- 데이터로 무엇을 할 수 있을까?
- 해당 데이터는 신뢰할만한가? 데이터 정합성은 맞는가? 레이블이 잘 되어있는가? 계속 받을 수 있는가?
- 다양한 팀에 있는 분들과 직접 인터뷰하는 것도 좋은 방법 무엇을 해볼 수 있을까?
- 왜 해야하는가?
- 3) 모델을 활용한다고 하면 예측의 결과가 어떻게 활용되는가? (Output)
- 고객에게 바로 노출(추천, 얼굴 필터 등) => 더 좋은 가치 제공 / 매출 증대
- 내부 인원이 수동으로 진행해야 하는 업무를 자동화할 수 있음
3. Special Mission
- 부스트캠프 AI Tech 혹은 개인 프로젝트를 앞선 방식으로 정리해보기
- 실제로 회사에서 한 일이 아니더라도, 특정 회사에서 활용했다고 가정하거나 아예 크게 문제 정의해서 구체화해보기
- 이 모델이 회사에서 활용되었다면 어떤 임팩트를 낼 수 있었을까? 고민해서 정리해보기!
- 직접 일상의 문제라도 하나씩 정의하기
Reference
- AI boot camp 2기 서빙 강의