머신러닝 프로젝트 Flow
- -
OO홈쇼핑: 요즘 가장 핫 한 패션을 기반으로 다음 시즌에 잘 팔릴 패션을 예측하고 싶어요.
AI Engineer: ???
→ 모델 입출력 정의:
- 입력: 현재 및 이전 두 시즌에서 핫 한 패션 데이터
- 출력: 다음 시즌 핫 한 패션 데이터
→ 모델 정의:
- 시간에 따른 입력 데이터의 경향성을 파악하여 미래를 예측
- Predictive Problems: Classify, Forecast, Anomaly, Cluster, Time Series
→ 데이터 구축:
- OO홈쇼핑 자체 데이터 구성 확인
- 불충분할 시, 추가 데이터 확보 필요 ↦ 데이터 크롤링 기반 문제 해결
(타 업체 명예훼손하지 않는 선에서 데이터 크롤링으로 해결 가능)
- 데이터 구성은 어떻게 할지
- 모델에 맞는 데이터 구성 필요
- 사용하는 모델에서 쓴 데이터의 구성에 맞게 가공
+ 데이터 구축 팁
- Feature를 잘 학습할 수 있도록 합리적인 학습 데이터 수량 필요
- Outlier가 존재하지 않게 수집
- 데이터의 출처가 다양할 경우, format 통일 필요
- Image / text 데이터의 경우, 꼼꼼한 preprocessing을 통해 model이 각 데이터의 핵심 데이터를 학습할 수 있도록 준비
문제 정의
머신러닝, AI, 데이터 사이언스, 개발 등 대부분 업무에서 항상 문제 정의가 선행되어야 함
How보다 Why에 집중
풀려고 하는 문제가 명확하지 않으면 그 이후 무엇을 해야 할지 결정하기 어려워짐
머신러닝 알고리즘, 개발 능력도 중요하지만, 근본적인 사고 능력도 중요 문제를 충분히 정의하고 고민하는 습관을 만드는 것이 중요함
- 해결해야 하는 문제는 무엇이고 그 문제를 해결하면 무엇이 좋을까? 어떻게 해결하면 좋을까?
앞으로의 겪을 일의 대부분 문제로 정의될 수 있음
- 문제 정의 : 특정 현상을 파악 → 그 현상에 있는 문제(Problem)을 정의
- 문제를 잘 풀기(Solve) 위해선 문제 정의(Problem Definition)이 매우 중요
현상 파악
- 어떤 일이 발생하고 있는가?
- 해당 일에서 어려움은 무엇인가?
- 해당 일에서 해결하면 좋은 것은 무엇인가?
- 추가적으로 무엇을 해볼 수 있을까?
- 어떤 가설을 만들어 볼 수 있을까?
- 어떤 데이터가 있을까?
구체적인 문제 정의
- 무엇을 해결하고 싶은가?
- 무엇을 알고 싶은가?
앞선 현상을 더 구체적으로 명확한 용어로 정리해보기
처음 방문하는 손님들의 어려움을 확인하기 위해 데이터를 확인하고, 처음 방문하는 분들에게 인터뷰를 통해 질문
그 결과, 가게의 메뉴가 너무 다양하고 설명이 부족해서 메뉴를 선정하기 어려워서 만족도가 낮음
문제 상황 : 메뉴가 너무 다양해서 선정하기 어렵다
원인
- 메뉴가 다양하다
- 설명이 부족하다
해결 방안
- 메뉴를 줄인다? 비즈니스 상황에 따라 일시적으로 줄일 수는 있지만 궁극적인 해결일지는 반신반의
- 설명을 늘린다? 당장 수정할 수 있는 요소. 어떤 상황에 이 음식을 먹으면 좋은지 가이드를 줄 수 있음
당장 진행할 수 있는 설명을 늘리는 방식을 사용하고, 병렬로 손님의 취향에 기반한 음식을 추천할 수 있지 않을까? 설명을 늘리는 방식
= 룰 베이스(만약 이런 음식을 좋아한다면 이런 부분을 추천드려요)
데이터로 할 수 있는 일을 만들어서 진행하되, 무조건 알고리즘 접근이 최상은 아니라는 방법을 제시할 수 있어야 함(간단한 방법부터 점진적인 접근)
: 시간의 제약을 받고 있기 때문
결론
- 문제를 쪼개서 파악해보자
- 문제의 해결 방식은 다양하다
- 해결 방식 중에서 데이터로 해결할 수 있는 방법을 고민
- 점진적으로 실행하기
프로젝트 설계
문제 정의 후, 프로젝트의 설계를 최대한 구체적으로 하는 것이 좋다
문제 정의에 기반해서 프로젝트 설계
- 해결하려고 하는 문제 구체화
- 머신러닝 문제 타당성 확인
- 목표 설정, 지표 결정
- 제약 조건(Constraint & Risk)
- 베이스라인, 프로토타입
- 평가(Evaluation) 방법 설계
[머신러닝 문제 타당성 확인]
- 머신러닝 문제를 고려할 때는 얼마나 흥미로운지가 아니라 제품, 회사의 비즈니스에서 어떤 가치를 줄 수 있는지 고려해야 함
- 머신러닝 문제 타당성 평가하기 : 복잡도를 평가하는 방법은 필요한 데이터의 종류와 기존 모델이 있는지 확인
- 머신러닝 문제는 결국 데이터로부터 어떤 함수를 학습하는 것
- 머신러닝은 모든 문제를 해결할 수 있는 마법의 도구가 아님
- 머신러닝으로 해결할 수 있는 문제지만 머신러닝 솔루션이 최적이 아닐 수도 있음
머신러닝이 사용되면 좋은 경우 : 학습 패턴, 목적 함수, 복잡한 패턴, 데이터 존재, 반복 실행 문제
머신러닝이 사용되면 좋지 않은 경우 : 비윤리적 문제, 간단히 해결 가능한 문제, 데이터 X, 예측 오류가 치명적 결과를 발생시킬 때, 모든 결정이 설명 가능해야 할 때, 비용이 효율적이지 않을 때
[목표 설정]
프로젝트의 목표
- Goal : 프로젝트의 일반적인 목적, 큰 목적
- Objectives : 목적을 달성하기 위한 세부 단계의 목표(구체적인 목적)
예시)
Goal: 랭킹 시스템에서 고객의 참여(Engage)를 최대화하고 싶음
Objectives :
- NSFW(Not Safe For Work) 컨텐츠 필터링을 통해 사용자에게 불쾌감을 줄임
- 참여에 따른 게시물 랭킹 선정 : 사용자가 클릭할 가능성이 있는 게시물 추천
최적화 시에 윤리적 문제가 발생할 수 있음
: 극단적으로 클릭을 유도하기 위해 자극적 컨텐츠를 노출할 수 있음
새로운 Goal : 극단적인 견해와 잘못된 정보의 확산을 최소화하며 사용자의 참여 극대화를 목표
새로운 Objectives
- NSFW 컨텐츠 필터링
- 잘못된 정보 필터링
- 품질에 따른 게시물 랭킹 선정 : 좋은 품질인 게시물
- 참여에 따른 게시물 랭킹 선정 : 사용자가 클릭할 가능성이 있는 게시물
[제약 조건]
- 일정 : 프로젝트에 사용할 수 있는 시간
- 예산 : 사용할 수 있는 최대 예산은?
- 관련된 사람 : 이 프로젝트로 인해 영향을 받는 사람은?
- Privacy : Storage, 외부 솔루션, 클라우드 서비스 등에 대한 개인 정보 보호 요구
- 기술적 제약
- 기존에 운영하고 있던 환경 : 레거시 환경(인프라)가 머신러닝 적용할 때 큰 제약일 수 있음
- 윤리적 이슈 : 윤리적으로 어긋난 결과
- 성능
- Baseline : 새로 만든 모델을 무엇과 비교할 것인가? 기존에 사람이 진행하던 성능 or 간단한 회귀
- Threshold : 확률값이 0.5 이상일 경우, 0.7 이상일 경우로 정할 것인지?
- 해석 가능 여부 : 결과가 왜 발생했는지 해석이 필요할까? 해석이 필요한 사람은?
- Confidence Measurement : False Negative가 있어도 괜찮은지?
[베이스라인, 프로토타입]
- 모델이 더 좋아졌다고 판단할 수 있는 Baseline이 필요
- 꼭 모델일 필요는 없음
- 자신이 모델이라 생각하고 어떻게 분류할지 Rule Base 규칙 설계
- 간단한 모델부터 시작하는 이유
- 어떻게든 모델의 위험을 낮추는 것이 목표가 되어야 함
- 가장 좋은 방법은 최악의 성능을 알기 위해 허수아비 모델로 시작하는 것
- 초기엔 단순하게 사용자가 이전에 선택한 행동을 제안할 수도 있고, 추천 시스템에선 제일 많이 구매한 것을 추천할 수도 있음
- 유사한 문제를 해결하고 있는 SOTA 논문 파악해보기 -> 우리의 문제에선 어떤 시도를 해볼 수 있을까?
- 베이스라인 이후에 간단한 모델을 만들면 피드백을 들어보면 좋음
- 회사의 동료들에게 모델을 활용할 수 있는 환경 준비
→ 프로토타입을 만들어서 제공
- Input을 입력하면 Output을 반환하는 웹페이지
- 이왕이면 좋은 디자인을 가지면 좋지만, 여기선 모델의 동작이 더 중요
- HTML에 집중하는 것보다, 모델에 집중하는 게 중요
- 이를 위해 Voila, Streamlit, Gradio 등을 활용
[Metric Evaluation]
앞선 문제를 해결할 경우 어떤 지표가 좋아질까?를 고민해야 함
이 부분은 작게는 모델의 성능 지표(RMSE) 일 수 있고
크게는 비즈니스의 지표일 수 있음(고객의 재방문율, 매출 등)
지표를 잘 정의해야 우리의 Action이 기존보다 더 성과를 냈는지 아닌지를 파악할 수 있음
머신러닝 프로젝트는 궁극적으로 수익을 높이는 것이 목표
직접적으로 광고나 추천 시스템이 보여줘서 구매로 이어지는 경우
간접적으로 기업의 이익 극대화에 영향을 미칠 수 있음
- 전환율 증대 -> 매출 증대
- 반복 업무 자동화 => 내부 직원의 리소스 효율로 인한 비용 절감
- 간접적으로 더 높은 고객 만족도 창출, 웹사이트에서 보내는 시간 늘리기 등
- 개인화된 솔루션을 제공해 서비스를 더 많이 사용하도록 만들어 매출을 증가시킬 수 있음
[Action(모델 개발 후 배포 & 모니터링)]
앞서 정의한 지표가 어떻게 변하는지 파악
- 현재 만든 모델이 어떤 결과를 내고 있는가?
- 잘못 예측하고 있다면 어떤 부분이 문제일까?
- 어떤 부분을 기반으로 예측하고 있을까?
- Feature의 어떤 값을 사용할 때 특히 잘못 예측하고 있는가?
[비즈니스 모델]
회사에서 업무할 때 중요한 것이 무엇인지 알아야 함
즉, 비즈니스에 대한 이해도가 높을수록 문제 정의를 잘 할 가능성이 높음
1) 회사의 비즈니스 파악하기
2) 데이터를 활용할 수 있는 부분은 어디인가? (Input)
3) 모델을 활용한다고 하면 예측의 결과가 어떻게 활용되는가? (Output)
누군가 산업에 대해 정리해둔 Paper가 있는지 찾아보기
예) awesome mobility machine learning github
해당 산업 군에서 사용하는 기술
-> 해당 비즈니스에 어떻게 적용할 수 있을까
-> 추가 가치 발견
-> 머신러닝, AI가 비즈니스에 영향을 주는 과정을 이해
[비즈니스 모델 파악하기 비즈니스 모델]
1) 회사의 비즈니스 파악하기 : 회사가 어떤 서비스, 가치를 제공하고 있는가?
2) 데이터를 활용할 수 있는 부분은 어디인가? (Input)
- 데이터가 존재한다면 어떤 데이터가 존재하는가?
- 데이터로 무엇을 할 수 있을까?
- 해당 데이터는 신뢰할만한가? 데이터 정합성은 맞는가? 레이블이 잘 되어있는가? 계속 받을 수 있는가?
- 다양한 팀에 있는 분들과 직접 인터뷰하는 것도 좋은 방법
3) 모델을 활용한다고 하면 예측의 결과가 어떻게 활용되는가? (Output)
- 고객에게 바로 노출(추천, 얼굴 필터 등) -> 더 좋은 가치 제공 / 매출 증대
- 내부 인원이 수동으로 진행해야 하는 업무를 자동화할 수 있음
'딥러닝' 카테고리의 다른 글
Autoencoder (0) | 2022.06.22 |
---|---|
Training / Inference Design & Model Training Procedure (0) | 2022.06.22 |
Tensorflow 모델 서비스하기 (0) | 2022.05.19 |
활성화 함수(Activation function) (0) | 2022.05.15 |
[Feature Engineering]- Text Representation_Ngram (0) | 2022.05.05 |