Product Serving - 머신러닝 프로젝트 라이프 사이클

박정재·2022년 5월 17일
0

머신러닝 프로젝트 Flow

문제 정의의 중요성

  • 문제 정의: 특정 현상을 파악하고, 그 현상에 있는 문제(Problem)를 정의하는 과정
  • 문제를 잘 풀기(Solve) 위해선 문제 정의(Problem Definition)이 매우 중요하다.
  • 예: 사람들을 행복하게 만들기
    • 어떤 사람들을 대상으로?
    • 행복의 정의는? 부? 감정?

머신러닝, AI, 데이터 사이언스, 개발 등 대부분 업무에서 항상 문제 정의가 선행되어야 한다. How보다 Why에 집중해야 한다.

문제 정의란?

  • 본질을 파악하는 과정
  • 해결해야 하는 문제는 무엇이고 그 문제를 해결하면 무엇이 좋을까? 어떻게 해결하면 좋을까?

문제를 해결하기 위한 Flow

  • 현상 파악
  • 목적, 문제 정의 -> 계속 생각하기, 쪼개서 생각하기
  • 프로젝트 설계
  • Action
  • 추가 원인 분석

현상 파악

어떤 현상이 발견되었는가? 현재 상황을 파악

  • 어떤 일이 발생하고 있는가?
  • 해당 일에서 어려움은 무엇인가?
  • 해당 일에서 해결하면 좋은 것은 무엇인가?
  • 추가적으로 무엇을 해볼 수 있을까?
  • 어떤 가설을 만들어 볼 수 있을까?
  • 어떤 데이터가 있을까?

예시

레스토랑 매출의 감소.
처음 방문 손님들이 심하게 줄고, 기존 손님들도 줄고 있다. 상대적으로 처음 방문 손님의 이탈이 심하다.

해결 방안

  • SNS 등에 홍보 -> 마케팅 조직에서 진행
  • 청므 방문하는 손님들이 어려움을 가지고 있을 수 있다. -> 어떤 어려움인지 더 구체적으로 확인하기

데이터가 있다면 확보. 또는 처음 방문하는 분들에게 인터뷰.

  • 메뉴가 너무 다양하여 선정하기 어렵다. 아무거나 선택하니 만족도가 낮았다.

원인

  • 메뉴가 다양하다
  • 설명이 부족하다

해결 방안

  • 메뉴를 줄인다? -> 일시적으로 줄일 수 있으나, 궁극적인 해결 방안일까? 없어진 메뉴를 즐기던 손님들은?
  • 설명을 늘린다? -> 당장 수정할 수 있는 요소. 어떤 상황에 이 음식을 먹으면 좋은지 가이드가 될 수 있다.

당장 진행할 수 있는 설명을 늘리는 방식을 사용하고, 병렬로 손님의 취향에 기반한 음식 추천하기?

설명을 늘리는 방식 = 룰 베이스(이런 음식을 좋아한다면 이런 부분을 추천) -> 당장의 문제 해결
추천 = 알고리즘 개발 -> 문제 해결의 또 다른 방법

구체적인 문제 정의

문제 정의는 현상을 계속 쪼개고, 그 문제를 기반으로 어떤 어려움을 겪고 있는지 파악

데이터로 할 수 있는 일을 만들어서 진행하고 있는 것이 중요하다.
무조건 알고리즘 접근이 최상은 아니다. 간단한 방법부터 점진적인 접근. 시간의 제약이 있기 때문이다.

  • 문제를 쪼개서 파악해보자
  • 문제의 해결 방식은 다양하다
  • 해결 방식 중에서 데이터로 해결할 수 있는 방법이 있는지 고민하기
  • 점진적으로 실행하기

프로젝트 설계

  • 문제 정의
  • 최적화할 Metric 선택
  • 데이터 수집, 레이블 확인
  • 모델 개발
  • 모델 예측 결과를 토대로 Error Analysis. 잘못된 라벨이 왜 생기는지 확인
  • ... 다시 모델 학습

"문제 정의 후, 프로젝트의 설계를 최대한 구체적으로 하는 것이 좋다!"
미리 많은 것을 대비하자.

문제 정의에 기반해서 프로젝트 설계

  • 해결하려고 하는 문제 구체화
  • 머신러닝 문제 타당성 확인
  • 목표 설정, 지표 설정
  • 제약 조건(Constraint & Risk)
  • 베이스라인, 프로토타입
  • 평가(Evaluation) 방법 설계

머신러닝 문제 타당성 확인

  • 머신러닝 문제를 고려할 때는 얼마나 흥미로운지가 아니라 제품, 회사의 비지니스에서 어떤 가치를 줄 수 있는지 고려해야 한다.

  • 머신러닝 문제는 결국 데이터로부터 어떤 함수를 학습하는 것

  • 머신러닝 문제 타당성 평가하기: 복잡도를 평가하는 방법은 필요한 데이터의 종류와 기존 모델이 있는지 살펴보기

  • 머신러닝은 모든 문제를 해결할 수 있지는 않다.

  • 머신러닝으로 해결할 수 있는 문제지만, 머신러닝 솔루션이 최적이 아닐 수도 있다.

머신러닝이 사용되면 좋은 경우

  • 학습할 수 있는 패턴이 있는가?
    • 생성되는 방식에 패턴이 없다면(복권) 학습할 수가 없다.
  • 학습을 위한 목적 함수를 만들 수 있어야 한다.
    • 머신러닝 알고리즘은 유용한 패턴을 학습하거나 노이즈를 패턴으로 학습하는 경우도 존재한다.
    • 지도 학습은 정답 레이블과 예측 결과의 차이로 정의할 수 있다.
  • 패턴이 복잡해야 한다.
    • 주소 검색 문제는 우편 번호에 기반해서 정렬되어 있으면 머신러닝이 필요하지 않다.
    • 집 가격 예측할 경우에는 동네의 평균 가격, 공원 유무, 침실 수, 건축 연식, 학교 수, 자연 재해 등으로 복잡한 패턴이 필요하다고 볼 수 있다.
  • 데이터 존재하거나 수집할 수 있어야 한다.
    • 학습 데이터가 없으면 프로젝트 진행 전에 데이터 수집부터 진행
    • 데이터가 없다면 룰베이스 알고리즘을 만든 후, 데이터 수집 계획부터 수립
  • 사람이 반복적으로 실행하는 경우
    • 작업이 반복되면, 패턴이 있다고 볼 수 있다.
    • 사람의 노동력을 줄일 수 있다.

머신러닝이 사용되면 좋지 않은 경우

  • 비윤리적 문제
  • 간단히 해결할 수 있는 문제
  • 좋은 데이터를 얻기 어려울 경우
  • 한 번의 예측 오류가 치명적인 결과를 발생할 경우
  • 시스템이 내리는 모든 결정이 설명 가능해야 할 경우
  • 비용 효율적이지 않은 경우

목표 설정, 지표 결정

프로젝트의 목표

  • Goal: 프로젝트의 일반적인 목적, 큰 목적
  • Objectives: 목적을 달성하기 위한 세부 단계의 목표(구체적인 목적)

예를 들어, 랭킹 시스템에서 고객의 참여(Engage)를 최대화하고 싶은 Goal이 있는 경우

Objectives

  • NSFW(Not Safe for Work) 콘텐츠 필터링을 통해 사용자아게 불쾌감을 줄인다
  • 참여에 따른 게시물 랭킹 선정: 사용자가 클릭할 가능성이 있는 게시물 추천

참여를 위한 최적화를 하면 윤리적 의문이 존재할 수 있다. (극단적으로 클릭을 유도할 자극적인 콘텐츠가 노출할 수 있다.)

새로운 Goal: 극단적 견해와 잘못된 정보의 확산을 최소화하며 사용자의 참여를 극대화하는 목표

새로운 Objectives

  • NSFW 컨텐츠 필터링
  • 잘못된 정보 필터링
  • 품질에 따른 게시물 랭킹 선정: 좋은 품질의 게시물
  • 참여에 따른 게시물 랭킹 선정: 사용자가 클릭할 가능성이 있는 게시물

목표를 설정하며 데이터를 확인해야 한다. 지표와 연결되는 내용이기 때문에

  • 데이터셋이 레이블링 되지 않은 경우 존재
  • 데이터 소스 찾아보기
  • 정확히 찾으려는 데이터가 없는 경우
    • Label을 가진 데이터가 있다면 바로 사용
    • 유사 Label을 가진 데이터가 있는 경우, 음악 스트리밍 서비스에 노래 재생, 건너뛰기 기록은 선호도를 예측하기 위한 유사 Label
    • Label이 없는 데이터: 직접 레이블링/레이블링이 없는 상태에서 학습하는 방법 찾기
    • 데이터가 아예 없는 경우: 데이터 수집 방법부터 고민
    • 데이터셋을 만드는 일은 반복적인 작업 -> 이걸 위해 Self-Supervised Learning 등을 사용해서 유사 레이블을 만드는 방법도 존재한다.

Multiple Objective Optimization

  • 최적화하고 싶은 목적 함수가 여러가지 있는 경우, 서로 충돌할 수 있다.
  • 품질에 따른 게시물 랭킹 선정 vs 참여에 따른 게시물 랭킹 선정

게시물이 매우 매력적이지만, 품질이 의심스러울 경우?

품질에 따른 게시물 랭킹 선졍: 게시물 품질 예측(게시물 예상 품질 - 실제 품질: quality_loss)
참여에 따른 게시물 랭킹 선정: 게시물 클릭 수 예측(게시물 예상 클릭 수 - 실제 클릭 수: engagement_loss)

방법1

  • 단일 모델
  • 두 loss를 하나의 loss로 결합하고, 해당 loss를 최소화 하기 위해 모델을 학습하는 방법

loss = alpha * quality_loss + beta * engagement_loss
알파와 베타를 필요에 따라 조정.

방법2

  • 2개의 모델(각각의 loss를 최소화)
  • quality_loss를 최소화하고 예상 품질을 반환하는 quality_model
  • engagement_loss를 최소화하고 게시물의예상 클릭 수를 반환하는 engage_model

Rank: alpha * quality_model(post) + beta * engagement_model(post)
모델을 재학습하지 않아도 조정할 수 있다.
2가지 모델의 학습 시간 차이를 생각해보아야 한다.

Objective가 여러 개인 경우 분리하는 것이 좋다.

  • 학습하기 쉬워야 한다.
  • 하나의 objective를 최적화하는 것이 여러 objectives를 최적화하는 것보다 쉽다.
  • 모델을 재학습하지 않도록 모델을 분리한다.
  • Objectives는 수정해야 하는 유지보수 일정이 모두 다를 수 있다.

제약 조건(Constraint & Risk)

  • 일정: 프로젝트에 사용할 수 있는 시간

  • 예산: 사용할 수 있는 최대 예산

  • 관련된 사람: 이 프로젝트로 인해 영향을 받는 사람?

  • Privacy: Storage, 외부 솔루션, 클라우드 서비스 등에 대한 개인정보 보호 요구

  • 기술적 제약

    • 기존에 운영하고 있던 환경/레거시 환경(인프라)이 머신러닝 적용할 때 큰 제약일 수 있다.
  • 윤리적 이슈

성능

  • Baseline: 새로 만든 모델을 무엇과 비교할 것인가? 기존에 사람이 진행하던 성능 or 간단한 회귀
  • Threshold: 확률값이 0.5 이상일 경우 강아지라고 할 것인지, 0.7 이상일 경우 강아지라고 할 것인지?
  • Performance Trade-off: 속도와 Accuracy
  • 해석 가능 여부: 결과가 왜 발생했는지 해석이 필요할까? 해석이 필요한 사람은?
  • Confidence Measurement: False Negatve가 있어도 괜찮은지? 오탐이 있으면 안되는지?

베이스라인, 프로토타입

모델이 더 좋아졌다고 판단할 수 있는 Baseline이 필요하다. 꼭 모델일 필요는 없다. 자신이 모델이라 생각하고 어떻게 분류할지 Rule Base 규칙 설계.

간단한 모델부터 시작하는 이유

  • 어떻게든 모델의 위험을 낮추는 것이 목표가 되어야 한다.
  • 가장 좋은 방법은 최악의 성능을 알기 위해 허수아비 모델로 시작하는 것 (랜덤으로 찍는 등)
  • 초기엔 단순하게 사용자가 이전에 선택한 행동을 제안할 수도 있고, 추천 시스템에서는 제일 많이 구매한 것을 추천할 수도 있다. 점진적으로 개선
  • 유사한 문제를 해결하고 있는 SOTA 논문 파악 -> 우리의 문제에선 어떤 시도 해볼 수 있을까?

베이스라인 이후에 간단한 모델을 만들면 피드백을 들어보면 좋다.
회사의 동료들에게 모델을 활용할 수 잇는 환경 준비
프로토타입 제공

  • Input을 입력하면 Output을 반환하는 웹페이지
  • 이왕이면 좋은 디자인을 가지면 좋지만, 여기선 모델의 동작이 더 중요
  • HTML에 집중하는 것보다, 모델에 집중
  • Voila, Streamlit, Gradio 등 활용 가능

Metric Evaluation

모델의 성능 지표와 별개로 비즈니스 목표에 영향을 파악하는 것도 중요하다.
작게는 모델의 성능 지표(RMSE 등0)일 수 있고, 크게는 비즈니스의 지표(고객의 재방문율, 매출 등)일 수도 있다.

지표를 잘 정의해야, Action이 기존보다 더 성과를 냈는지 파악할 수 있다. (AB Test를 진행하기도 한다.)

만든 모델이 비즈니스에 어떤 임팩트를 줬을지(매출 증대 기여, 내부 구성원들의 시간 효율화 증대 등) 고려하면서 만들기

대부분의 기업은 이익 극대화를 목표한다.
머신러닝 프로젝트는 궁극적으로 수익을 높이는 것이 목표일 수 있다.

간접적으로 기업의 이익 극대화에 영향을 미칠 수 있다.

  • 전환율 증대 -> 매출 증대
  • 반복 업무 자동화 -> 내부 직원의 리소스 효율로 인한 비용 절감
  • 간접적으로 더 높은 고객 만족도 창출, 웹사이트에서 보내는 시간 늘리기 등
  • 개인화된 솔루션을 제공해 서비스를 더 많이 사용하도록 만들어 매출을 증가시킬 수 있다.

개발 및 배포 중에 시스템의 성능은 어떻게 판단할 수 있을까?
정답 레이블이 필요한 경우 사용자 반응에서 어떻게 레이블을 추론할 수 있을까?
모델 성능을 비즈니스 Goal과 Objectives를 어떻게 연결할 수 있을까?

Action(모델 개발 후 배포 & 모니터링)

앞서 정의한 지표가 어떻게 변하는지 파악하기

  • 현재 만든 모델이 어떤 결과를 내고 있는가?
  • 잘못 예측하고 있다면 어떤 부분이 문제일까?
  • 어떤 부분을 기반으로 예측하고 있는지?
  • Feature의 어떤 값을 사용할 때 특히 잘못 예측하고 있는지?

추가 원인 분석

새롭게 발견한 상황을 파악해 어떤 방식으로 문제를 해결할지 모색. 그 과정에서 앞서 진행한 과정을 반복

비즈니스 모델

회사 업무에서 중요한 것이 무엇인지 알아야 한다. 회사에서 중요한 것은 비즈니스. 비즈니스에 대한 이해도가 높을수록 문제 정리를 잘 할 가능성이 높다.

회사는 비즈니스 모델을 만들고, 비즈니스 모델을 통해 매출이 발생한다. 해당 비즈니스 모델에서 어떤 데이터가 존재하고 그 데이터를 기반으로 어떤 것을 만들 수 있을지 고려하기.

  1. 회사의 비즈니스 파악
  2. 데이터를 활용할 수 있는 부분은 어디인가?(Input)
  3. 모델을 활용한다고 하면 예측의 결과가 어떻게 활용되는가?(Output)

비즈니스 모델 파악하기

Uber Case Study

차량 서비스, Uber Eats, 수익 올리기, 도시 발전 촉진, 비즈니스

https://www.uber.com/kr/ko/about/uber-offerings/

profile
Keep on dreaming and dreaming

0개의 댓글