출처 : 변성윤님 블로그.
출처 : 부스트캠프 AI Tech.
1. 머신러닝 프로젝트 Flow
1.1 문제 정의의 중요성
- 문제 정의 : 특정 현상을 파악하고 => 그 현상에 있는 문제(Problem)을 정의하는 과정
- 문제를 잘 풀기(Solve) 위해선 문제 정의(Problem Definition)이 매우 중요함
- 풀려고 하는 문제가 명확하지 않으면 그 이후 무엇을 해야할지 결정하기 어려워짐
예 : 저는 사람들을 행복하게 만들고 싶어요
=> 어떤 사람들을 대상으로? 모든 사람들을 대상으로? => 행복의 정의는 무엇인가? 금전적 부? 감정적인 상황?
=> 행복의 정의에 따라 무엇을 할 수 있을지가 다름 - 본질을 파악하는 과정
- 해결해야 하는 문제는 무엇이고 그 문제를 해결하면 무엇이 좋을까? 어떻게 해결하면 좋을까?
1.2 현상 파악
- 어떤 현상이 발견되었는가? 현재 상황을 파악함
- 어떤 일이 발생하고 있는가?
- 해당 일에서 어려움은 무엇인가?
- 해당 일에서 해결하면 좋은 것은 무엇인가? - 추가적으로 무엇을 해볼 수 있을까?
- 어떤 가설을 만들어 볼 수 있을까?
- 어떤 데이터가 있을까?
예) 레스토랑의 매출이 감소하고 있다. 3달 연속으로 감소되고 있으며. 전체적인 손님 수가 줄어들고 있다.
1.3 구체적인 문제 정의
- 무엇을 해결하고 싶은가?
- 무엇을 알고 싶은가?
- 앞선 현상을 더 구체적으로 명확한 용어로 정리해보기
처음 방문하는 손님들이 심하게 줄어들고 기존 손님들도 줄고 있다. 상대적으로 처음 방문하는 손님들이 더 줄어들고 있다
여러가지로 문제를 해결할 수 있음
가게를 SNS 등에 홍보 => 마케팅 조직에서 진행
처음 방문하는 손님들이 어려움을 가지고 있을 수 있음 => 어떤 어려움인지 더 구체적으로 확인해보기
처음 방문하는 손님들의 어려움을 확인하기 위해 데이터를 확인해보고,
처음 방문하는 분들에게 인터뷰를 통해 질문
그 결과, 가게의 메뉴가 너무 다양하고 설명이 부족해서 메뉴를 선정하기 어려워서 아무렇게나 선택하고 만족도가 낮았다고 함
문제 상황 : “메뉴가 너무 다양해서 선정하기 어렵다”
문제 상황 : “메뉴가 너무 다양하고 설명이 부족해 선정하기 어렵다”
원인
- 메뉴가 다양하다
- 설명이 부족하다
해결 방안
- 메뉴를 줄인다? => 비즈니스 상황에 따라 일시적으로 줄일 수는 있지만 궁극적인 해결일지는 반신반의
- 설명을 늘린다? => 당장 수정할 수 있는 요소. 어떤 상황에 이 음식을 먹으면 좋은지 가이드를 줄 수 있음
당장 진행할 수 있는 설명을 늘리는 방식을 사용하고, 병렬로 손님의 취향에 기반한 음식을 추천할 수 있지 않을까?
설명을 늘리는 방식 = 룰 베이스(만약 이런 음식을 좋아한다면 이런 부분을 추천드려요) => 당장의 문제 해결 추천 = 알고리즘 개발 => 문제 해결의 또 다른 방법
- 문제 정의는 결국 현상을 계속 쪼개고, 그 문제를 기반으로 어떤 어려움을 겪고 있는지를 파악함
- 데이터로 할 수 있는 일을 만들어서 진행하되, 무조건 알고리즘 접근이 최상은 아니라는 방법을 제시할 수도 있어야 함(간단한 방법부터 점진적인 접근) 우리는 시간의 제약을 받고 있기 때문!
- 원인을 계속 파고들면, 해결 방법이 구체적으로 나올 수 있음
- 여기서 인지하면 좋은 내용
- 문제를 쪼개서 파악해보자
- 문제의 해결 방식은 다양하다
- 해결 방식 중에서 데이터로 해결할 수 있는 방법을 고민해보기
- 점진적으로 실행하기
1.4 프로젝트 설계
- 문제 정의에 기반해서 프로젝트 설계
- 해결하려고 하는 문제 구체화
1.4.1 머신러닝 문제 타당성 확인
- 머신러닝 문제를 고려할 때는 얼마나 흥미로운지가 아니라 제품, 회사의 비즈니스에서 어떤 가치를 줄 수 있는지 고려해야 함
- 머신러닝 문제는 결국 데이터로부터 어떤 함수를 학습하는 것
- 머신러닝 문제 타당성 평가하기 : 복잡도를 평가하는 방법은 필요한 데이터의 종류와 기존 모델이 있는지 살펴보기
- 머신러닝은 모든 문제를 해결할 수 있는 마법의 도구가 아님
- 머신러닝으로 해결할 수 있는 문제지만 머신러닝 솔루션이 최적이 아닐 수도 있음
- 머신러닝이 사용되면 좋은 경우
- 패턴 : 학습할 수 있는 패턴이 있는가?
- 복권의 다음 결과 예측할 때 머신러닝 시스템을 구축하는 것이 좋을까?
- 생성되는 방식에 패턴이 없다면 학습할 수가 없음
- 주식 가격에서 가격이 완전히 무작위라고 믿으면 모델을 만드는게 불필요함.
- 데이터를 탐색해서 패턴을 발견하면 진행
- 목적 함수 : 학습을 위한 목적 함수를 만들 수 있어야 함
- 머신러닝 알고리즘은 유용한 패턴을 학습하거나 노이즈를 패턴으로 학습하는 경우도 존재
- 지도 학습은 정답 레이블과 예측 결과의 차이로 정의할 수 있음
- 복잡성 : 패턴이 복잡해야 함
- 주소 검색 문제 → 우편 번호에 기반해서 정렬되어 있으면 머신러닝이 필요하지 않음
- 집 가격을 예측할 경우 복잡한 패턴이 필요할 수 있음 : 동네의 평균 가격, 공원 유무, 침실 수, 건축 연식, 학교 수, 자연 재해 등
- 데이터 존재 여부 : 데이터가 존재하거나 수집할 수 있어야 함
- 학습할 데이터가 없으면 프로젝트 진행 전에 데이터 수집부터 진행해야 함
- 데이터가 없다면 룰베이스 알고리즘을 만든 후, 데이터 수집 계획부터 수립
- 반복 : 사람이 반복적으로 실행하는 경우
- 사람은 반복에 능숙함. 아이에게 고양이 사진을 보여주고 고양이를 알아보게 할 수 있음
- 작업이 반복 => 패턴
- 사람의 노동력을 줄일 수 있는 관점
- 패턴 : 학습할 수 있는 패턴이 있는가?
- 머신러닝이 사용되면 좋지 않은 경우
- 비윤리적인 문제
- 간단히 해결할 수 있는 경우
- 좋은 데이터를 얻기 어려울 경우
- 한번의 예측 오류가 치명적인 결과를 발생할 경우
- 시스템이 내리는 모든 결정이 설명 가능해야 할 경우
- 비용 효율적이지 않은 경우
1.4.2 목표 설정, 지표 결정
- 프로젝트의 목표
- Goal : 프로젝트의 일반적인 목적, 큰 목적
- Objectives : 목적을 달성하기 위한 세부 단계의 목표(구체적인 목적)
예를 들어, 랭킹 시스템에서 고객의 참여(Engage)를 최대화하고 싶은 Goal이 있는 경우 * Objectives * NSFW(Not Safe For Work) 컨텐츠 필터링을 통해 사용자에게 불쾌감을 줄임 * 참여에 따른 게시물 랭킹 선정 : 사용자가 클릭할 가능성이 있는 게시물 추천
- 그러나 참여를 위해 최적화를 하면 윤리적인 의문이 존재할 수 있음 => 극단적으로 클릭을 유도할 자극적인 컨텐츠를 노출할 수 있음(Netflix 소셜 딜레마)
- 더 건전한 뉴스피드를 만들고 싶음
- 새로운 Goal : 극단적인 견해와 잘못된 정보의 확산을 최소화하며 사용자의 참여를 극대화하는 목표
- 새로운 Objectives
- NSFW 컨텐츠 필터링
- 잘못된 정보 필터링
- 품질에 따른 게시물 랭킹 선정 : 좋은 품질인 게시물
- 참여에 따른 게시물 랭킹 선정 : 사용자가 클릭할 가능성이 있는 게시물
- 목표를 설정하며 데이터를 확인해야 함(지표와 연결되는 내용이기 때문에)
- 데이터셋이 레이블링이 되지 않은 경우도 존재
- 데이터 소스 찾아보기
- 부정 거래 탐지 : 부정 거래자와 정상 거래자의 거래 내역, 계정 정보 등
- 정확히 찾으려는 데이터가 없는 경우가 있어서 여러가지 시나리오를 고려하는 것이 좋음
- Label을 가진 데이터가 있는 경우 ⇒ 바로 사용
- 유사 Label을 가진 데이터가 있는 경우 ⇒ 음악 스트리밍 서비스에서 노래 재생, 건너뛰기 기록은 선호도를 예측하기 위한 유사 Label
- Label이 없는 데이터 ⇒ 직접 레이블링 or 레이블링이 없는 상태에서 학습하는 방법 찾기
- 데이터가 아예 없는 경우 ⇒ 데이터 수집 방법부터 고민
- 데이터셋을 만드는 일은 반복적인 작업 ⇒ 이걸 위해 Self Supervised Learning 등을 사용해서 유사 레이블을 만드는 방법도 존재
- Multiple Objective Optimization
- 최적화하고 싶은 목적 함수가 여러가지 있는 경우, 서로 충돌할 수 있음
- 품질에 따른 게시물 랭킹 선정 vs 참여에 따른 게시물 랭킹 선정
- 게시물이 매우 매력적이지만 품질이 의심스러울 경우엔?
- 품질에 따른 게시물 랭킹 선정 : 게시물 품질 예측(게시물 예상 품질 - 실제 품질 : quality_loss)
- 참여에 따른 게시물 랭킹 선정 : 게시물 클릭 수 예측(게시물 예상 클릭 수 - 실제 클릭 수 : engagement_loss)
- 방법 1
- 단일 모델
- 두 loss를 하나의 loss을 결합하고, 해당 loss를 최소화하기 위해 모델을 학습하는 방법
- loss = 𝛼 quality_loss + 𝛽 engagement_loss 알파와 베타를 필요에 따라 조정해야 함
- 방법 2
- 2개의 모델(각각의 Loss를 최소화)
- quality_loss를 최소화하고 예상 품질을 반환하는 quality_model
- engagement_loss를 최소화하고 게시물의 예상 클릭 수를 반환하는 engage_model
- Rank : 𝛼 quality_model(post) + 𝛽 engagement_model(post) 이제 모델을 재학습하지 않아도 조정할 수 있음
- Objective가 여러개인 경우 분리하는 것이 좋음
- 학습하기 쉬워야 함
- 하나의 objective를 최적화하는 것이 여러 objectives를 최적화하는 것보다 쉬움
- 모델을 재학습하지 않도록 모델을 분리
- Objectives는 수정해야 하는 유지보수 일정이 모두 다를 수 있음
- 예) 스팸 필터링은 품질 순위 시스템보다 더 빠르게 업데이트해야 함
1.4.3 제약 조건(Constraint & Risk)
- 일정 : 프로젝트에 사용할 수 있는 시간
- 예산 : 사용할 수 있는 최대 예산은?
- 관련된 사람 : 이 프로젝트로 인해 영향을 받는 사람은?
- Privacy : Storage, 외부 솔루션, 클라우드 서비스 등에 대한 개인정보 보호 요구
- 기술적 제약
- 기존에 운영하고 있던 환경 : 레거시 환경(인프라)가 머신러닝 적용할 때 큰 제약일 수 있음
- 윤리적 이슈 : 윤리적으로 어긋난 결과
- 성능
- Baseline : 새로 만든 모델을 무엇과 비교할 것인가? 기존에 사람이 진행하던 성능 or 간단한 회귀
- Threshold : 확률값이 0.5 이상일 경우 강아지라고 할 것인지, 0.7 이상일 경우 강아지라고 할 것인지?
- Performance Trade-off : 속도가 빠른데 Acc 0.95 vs 속도는 조금 더 느린데 Acc 0.93
- 해석 가능 여부 : 결과가 왜 발생했는지 해석이 필요할까? 해석이 필요한 사람은?
- Confidence Measurement : False Negative가 있어도 괜찮은지? 오탐이 있으면 안되는지?
1.4.4 베이스라인, 프로토타입
- 모델이 더 좋아졌다고 판단할 수 있는 Baseline이 필요
- 꼭 모델일 필요는 없음
- 자신이 모델이라 생각하고 어떻게 분류할지 Rule Base 규칙 설계
- 간단한 모델부터 시작하는 이유
- 어떻게든 모델의 위험을 낮추는 것이 목표가 되어야 함
- 가장 좋은 방법은 최악의 성능을 알기 위해 허수아비 모델로 시작하는 것
- 초기엔 단순하게 사용자가 이전에 선택한 행동을 제안할 수도 있고, 추천 시스템에선 제일 많이 구매한 것을 추천할 수도 있음
- 유사한 문제를 해결하고 있는 SOTA 논문 파악해보기 => 우리의 문제에선 어떤 시도를 해볼 수 있을까?
- 베이스라인 이후에 간단한 모델을 만들면 피드백을 들어보면 좋음
- 회사의 동료들에게 모델을 활용할 수 있는 환경 준비
- 프로토타입을 만들어서 제공
- Input을 입력하면 Output을 반환하는 웹페이지
- 이왕이면 좋은 디자인을 가지면 좋지만, 여기선 모델의 동작이 더 중요 - HTML에 집중하는 것보다, 모델에 집중하는게 중요
- 이를 위해 Voila, Streamlit, Gradio 등을 활용
1.4.5 Metric Evaluation
- 앞에서 Objectives를 구해서 모델의 성능 지표는 확인함
- 모델의 성능 지표와 별개로 비즈니스 목표에 영향을 파악하는 것도 중요
- 앞선 문제를 해결할 경우 어떤 지표가 좋아질까?를 고민해야 함 이 부분은 작게는 모델의 성능 지표(RMSE)일 수 있고, 크게는 비즈니스의 지표일 수 있음(고객의 재방문율, 매출 등)
- 지표를 잘 정의해야 => 우리의 Action이 기존보다 더 성과를 냈는지 아닌지를 파악할 수 있음 (이를 위해 AB Test를 진행하기도 함)
- 만든 모델이 비즈니스에 어떤 임팩트를 미쳤을지(매출 증대에 기여, 내부 구성원들의 시간 효율화 증대 등) 고려하면서 만드는 사람
- 대부분 기업 : 이익 극대화를 목표 : 머신러닝 프로젝트는 궁극적으로 수익을 높이는 것이 목표
- 간접적으로 기업의 이익 극대화에 영향을 미칠 수 있음
- 전환율 증대 => 매출 증대
- 반복 업무 자동화 => 내부 직원의 리소스 효율로 인한 비용 절감
- 간접적으로 더 높은 고객 만족도 창출, 웹사이트에서 보내는 시간 늘리기 등
- 개인화된 솔루션을 제공해 서비스를 더 많이 사용하도록 만들어 매출을 증가시킬 수 있음
- 개발 및 배포 중에 시스템의 성능은 어떻게 판단할 수 있을까?
- 정답 레이블이 필요한 경우 사용자 반응에서 어떻게 레이블을 추론할 수 있을까?
- 모델 성능을 비즈니스 Goal과 Objectives를 어떻게 연결할 수 있을까?
1.5 Action(모델 개발 후 배포 & 모니터링)
- 앞서 정의한 지표가 어떻게 변하는지 파악하기
- 현재 만든 모델이 어떤 결과를 내고 있는가?
- 잘못 예측하고 있다면 어떤 부분이 문제일까?
- 어떤 부분을 기반으로 예측하고 있을까?
- Feature의 어떤 값을 사용할 때 특히 잘못 예측하고 있는가?
1.6 추가 원인 분석
- 새롭게 발견한 상황을 파악해 어떤 방식으로 문제를 해결할지 모색 그 과정에서 앞서 진행한 과정을 반복
2. 비즈니스 모델
- 회사에서 업무할 때 중요한 것이 무엇인지 알아야 함
- 회사에서 중요한 것 = 비즈니스
- 즉, 비즈니스에 대한 이해도가 높을수록 문제 정의를 잘 할 가능성 존재
2.1 비즈니스 모델 파악하기
- 회사는 비즈니스 모델을 만들고, 비즈니스 모델을 통해 매출이 발생함
- 해당 비즈니스 모델에서 어떤 데이터가 존재하고 그 데이터를 기반으로 어떤 것을 만들 수 있을지 생각
- 1) 회사의 비즈니스 파악하기
- 2) 데이터를 활용할 수 있는 부분은 어디인가? (Input)
- 3) 모델을 활용한다고 하면 예측의 결과가 어떻게 활용되는가? (Output)
2.2 Uber Case Study
- 회사가 어떤 서비스, 가치를 제공하고 있는가?
- 우리가 대표적으로 알고 있는 Uber : Taxi와 유사한 이동 서비스
- 보통 기업의 홈페이지에 보면 제품(Product) 라인업이 있음
- Uber : 차량 서비스, Uber Eats, 수익 올리기, 도시 발전 촉진, 비즈니스
1) 회사의 비즈니스 파악하기 : 회사가 어떤 서비스, 가치를 제공하고 있는가?
2) 데이터를 활용할 수 있는 부분은 어디인가? (Input)
- 데이터가 존재한다면 어떤 데이터가 존재하는가?
- 데이터로 무엇을 할 수 있을까?
- 해당 데이터는 신뢰할만한가? 데이터 정합성은 맞는가? 레이블이 잘 되어있는가? 계속 받을 수 있는가?
- 다양한 팀에 있는 분들과 직접 인터뷰하는 것도 좋은 방법
- 무엇을 해볼 수 있을까? - 왜 해야하는가?
3) 모델을 활용한다고 하면 예측의 결과가 어떻게 활용되는가? (Output)
- 고객에게 바로 노출(추천, 얼굴 필터 등) => 더 좋은 가치 제공 / 매출 증대
- 내부 인원이 수동으로 진행해야 하는 업무를 자동화할 수 있음
'MLOps' 카테고리의 다른 글
MLOps - 6. Streamlit (0) | 2022.05.22 |
---|---|
MLOps - 5. Voila, ipywidget (0) | 2022.05.21 |
MLOps - 4. Voila, ipywidget (0) | 2022.05.20 |
MLOps - 2. Model Serving (0) | 2022.05.18 |
MLOps - 1. MLOps 개론 (0) | 2022.05.17 |
댓글