이 글은 네이버 부스트캠프 ai tech의 변성윤 강사님 강의영상을 정리한 글입니다.
문제나, 잘못된 점이 있다면 말씀해주세요 ! :)
프로젝트 설계
머신러닝 프로젝트 과정 - 현실
"문제 정의후, 프로젝트의 설계를 최대한 구체적으로 하는것이 좋구나 !"
문제 정의에 기반해서 프로젝트 설계
해결하려고 하는 문제 구체화
머신러닝 문제 타당성 확인
목표설정, 지표 결정
제약조건(Constraint & Risk)
베이스라인, 프로토타입
평가(Evaluation)방법 설계
머신러닝 문제를 고려할 때는 얼마나 흥미로운지가 아니라 제품, 회사의 비즈니스에서 어떤 가치를 줄 수 있는지 고려해야함.
머신러닝 문제는 결국 데이터로부터 어떤 함수를 학습하는것.
머신러닝 문제 타당성 평가하기: 복잡도를 평가하는 방법은 필요한 데이터의 종류와 기존 모델이 있는지 살펴보기.
-- 머신러닝은 모든 문제를 해결할 수 있는 마법의 도구가 아님.
-- 머신러닝으로 해결할 수 있는 문제지만 머신러닝 솔루션이 최적이 아닐수도 있음.
머신러닝이 사용되면 좋은 경우
-패턴 : 학습할 수 있는 패턴이 있는가?
-- 복권은 가능한가? X
-- 생성되는 방식에 패턴이 없다면 학습할 수가 없음
-- 주식 가격에서 가격이 완전히 무작위라고 믿으면 모델을 만드는게 불필요함.
데이터를 탐색해서 패턴을 발견하면 진행
목적함수 : 학습을 위한 목적 함수를 만들 수 있어야 함
-- 머신러닝 알고리즘은 유용한 패턴을 학습하거나 노이즈를 패턴으로 학습하는 경우도 존재
-- 지도학습은 정답레이블과 예측 결과의 차이로 정의할 수 있음
복잡성: 패턴이 복잡해야 함
-- 주소 검색 문제 -> 우편번호에 기반해서 정렬되어 있으면 머신러닝이 필요하지 않음.
-- 집가격을 예측할 경우 복잡한 패턴이 필요할 수 있음 : 동네의 평균 가격, 공원 유무, 침실 수, 건축 연식, 학교 수, 자연 재해 등.
데이터 존재 여부 : 데이터가 존재하거나 수집할 수 있어야함.
-- 학습할 데이터가 없으면 프로젝트 진행 전에 데이터 수집부터 진행해야함.
-- 데이터가 없다면 룰베이스 알고리즘을 만든 후, 데이터 수집 계획부터 수립
반복: 사람이 반복적으로 실행하는 경우
-- 사람은 반복에 능숙함. 아이에게도 고양이 사진을 보여주고 고양이를 알아보게 할 수 있음
-- 업이 반복 => 패턴
-- 사람의 노동력을 줄일 수 있는 관점
머신러닝이 사용되면 좋지 않은 경우
프로젝트의 목표
예를 들어, 랭킹 시스템에서 고객의 참여를 최대화 하고 싶은 Goaldl dlTsms ruddn
Objectives
그러나 참여를 위해 최적화를 하면 윤리적인 의문이 존재할 수 있음
=> 극단적으로 클릭을 유도할 자극적인 컨텐츠를 노출할 수 있음(Netflix 소셜 딜레마)
더 건전한 뉴스피드를 만들고 싶음.
새로운 Goal: 극단적인 견해와 잘못된 정보의 확산을 최소화하며 사용자의 참여를 극대화하는 목표
새로운 Objectives
목표를 설정하며 데이터를 확인해야 함( 지표와 연결되는 내용이기 때문)
데이터셋이 레이블링이 되지 않은 경우도 존재
데이터 소스 찾아보기
-- 부정거래 탐지 : 부정거래자와 정상 거래자의 거래내역, 계정 정보 등을 알아야 함
-- 적발되지 않으면 모름. 적발된다면 이미?!.. 어렵다..
정확히 찾으려는 데이터가 없는 경우가 있어서 여러가지 시나리오를 고려하는 것이 좋음
-- Label을 가진 데이터가 있는 경우 => 바로 사용
-- 유사 Label을 가진 데이터가 있는 경우 => 음악 스트리밍 서비스에서 노래 재생, 건너뛰기 기록은 선호도를 예측하기 위한 유사 Label
-- Label이 없는 데이터 => 직접 레이블링 or 레이블링이 없는 상태에서 학습하는 방법 찾기
-- 데이터가 아예 없는 경우 => 데이터 수집 방법부터 고민
-- 데이터셋을 만드는 일은 반복적인 작업 => 이걸 위해 Self Supervised Learning 등을 사용해서 유사 레이블을 만드는 방법도 존재
Multiple Objective Optimization
최적화하고 싶은 목적 함수가 여러가지 있는 경우, 서로 충돌할 수 있음
품질에 따른 게시물 랭킹 선정 vs 참여에 따른 게시물 랭킹 선정
게시물이 매우 매력적이지만 품질이 의심스러우면?!
품질에 따른 게시물 랭킹 선정 : 게시물 품질 예측(게시물 예상 품질 - 실제 품질 : quality_loss)
참여에 따른 게시물 랭킹 선정 : 게시물 클릭 수 예측(게시물 예상 클릭 수 - 실제 클릭 수 : engagement_loss)
방법 1
방법 2
Objective가 여러개인 경우 분리하는 것이 좋음
일정 : 프로젝트에 사용할 수 있는 시간
예산 : 사용할 수 있는 최대 예산은?
관련된 사람 : 이 프로젝트로 인해 영향을 받는 사람은?
privacy : Stroage, 외부 솔루션, 클라우드 서비스 등에 대한 개인정보보호요구
기술적 제약
-- 기존에 운영하고 있던 환경: 레거시 환경(인프라)가 머신러닝 적용할 때 큰 제약일 수 있음
-- 레거시 환경 : 과거에 사용하던 개발 환경인데 갑자기 그걸 바꾸자? 현실적으로 그걸 서비스 장애없이 migration되어야 하기 때문에 진짜 왜 해야되는지 설명해야함. 레거시 환경 위에서 머신러닝을 적용해야 할 수도 있음.
윤리적 이슈 : 윤리적으로 어긋난 결과
성능
-- baseline: 새로 만든 모델을 무엇과 비교할 것인가? 기존에 사람이 진행하던 성능 or 간단한 회귀
-- Threshold : 확률값이 0.5 이상일 경우 강아지라고 할 것인지, 0.7이상일 경우 강아지라고 할 것인지
-- Performance Trade-off : 속도가 빠른데 Acc 0.93 vs 속도는 조금 더 느린데 Acc 0.95
-- 해석가능 여부 : 결과가 왜 발생했는지 해석이 필요할까? 해석이 필요한 사람은?
-- Confidence Measurment : False Negative가 있어도 괜찮은지? 오탐이 있으면 안되는지?
모델이 더 좋아졌다고 판단할 수 있는 Baseline이 필요
-- 꼭 모델일 필요는 없음
-- 자신이 모델이라 생각하고 어떻게 분류할지 Rule Base규칙 설계
간단한 모델부터 시작하는 이유
-- 어떻게든 모델의 위험을 낮추는 것이 목표가 되어야 함
-- 가장 좋은 방법은 최악의 성능을 알기 위해 허수아비 모델로 시작하는 것
-- 초기에 단순하게 사용자가 이전에 선택한 행동을 제안할 수도 있고, 추천 시스템에선 제일 많이 구매한 것을 추천할 수도 있음
-- 유사한 문제를 해결하고 있는 SOTA 논문 파악해보기 => 우리의 문제에선 어떤 시도를 해볼 수 있을까?
베이스라인 이후에 간단한 모델을 만들면 피드백을 들어보면 좋음
회사의 동료들에게 모델을 활용할 수 있는 환경 준비
프로토타입을 만들어서 제공
-- Input을 입력하면 Output을 반환하는 웹페이지
-- 이왕이면 좋은 디자인을 가지면 좋지만, 여기선 모델의 동작이 더 중요
-- HTML에 집중하는 것보다, 모델에 집중하는게 중요
-- 이를위해 Voila, Stramlit, Gradio 등을 활용
앞에서 Objectives를 구해서 모델의 성능 지표는 확인함
모델의 성능 지표와 별개로 비즈니스 목표에 영향을 파악하는 것도 중요
앞선 문제를 해결할 경우 어떤 지표가 좋아질까?를 고민해야함
이부분은 작게는 모델의 성능 지표(RMSE)일 수 있고,
크게는 비즈니스의 지표일 수 있음(고객의 재방문율, 매출 등)
지표를 잘 정의해야 => 우리의 Action이 기존보다 더 성과를 냈는지 아닌지를 파악할 수 있음
(이를 위해 AB Test를 진행하기도 함)
만든 모델이 비즈니스에 어떤 임팩트를 미쳤을지(매출증대에 기여, 내부 구성원들의 시간 효율화 증대 등) 고려하면서 만드는 사람.
대부분 기업 : 이익 극대화를 목표
머신러닝 프로젝트는 궁극적으로 수익을 높이는 것이 목표
간접적으로 기업의 이익 극대화에 영향을 미칠 수 있음
전환율 증대 => 매출 증대
반복 업무 자동화 => 내부직원의 리소스 효율로 인한 비용 절감
간접적으로 더 높은 고객 만족도 창출, 웹사이트에서 보내는 시간 늘리기 등
개인화된 솔루션을 제공해 서비스를 더 많이 사용하도록 만들어 매출을 증가시킬 수 있음.
개발 및 배포중에 시스템의 성능은 어떻게 판단할 수 있을까?
정답레이블이 필요한 경우 사용자 반응에서 어떻게 레이블을 추론할 수 있을까?
모델 성능을 비즈니스 Goal과 Objectives를 어떻게 연결할 수 있을까?
앞서 정의한 지표가 어떻게 변하는지 파악하기
새롭게 발견한 상황을 파악해 어떤 방식으로 문제를 해결할지 모색
그 과정에서 앞서 진행한 과정을 반복.
회사에서 업무할 때 중요한 것이 무엇인지 알아야 함
회사에서 중요한 것 = 비즈니스
즉, 비즈니스에 대한 이해도가 높을수록 문제 정의를 잘 할 가능성 존재
회사에서 프로젝트를 할때 앞에서 비즈니스 모델을 파악하고 그 안에서 문제정의,해결방안, 프로젝트 설계해 나아가는게 중요하다.
1) 회사의 비즈니스 파악하기
2) 데이터를 활용할 수 있는 부분은 어디인가?(Input)
3) 모델을 활용한다고 하면 예측의 결과가 어떻게 활용되는가? (Output)
회사가 어떤 서비스, 가치를 제공하고 있는가?
Uber: 차량 서비스, Uber Eats, 수익 올리기, 도시 발전 촉진, 비즈니스
사이트 들어가서 제공하는 기능들 파악해보기.
차량 서비스의 핵심 : 수요와 공급을 매칭시켜 손님과 드라이버가 만날 수 있는 플랫폼 역할
손님과 드라이버가 만날 수 있도록 도와줌
플라이 휠
많은 드라이버가 결국 비즈니스 플라이휠의 시작 => 어떻게 하면 더 많은 수익을 얻을 수 있을까? => 수요와 공급의 불균형이 심각해진 상황. 예) 비가 오는 상황, 드라이버 수가 적은 시간 => 더 많은 수익 !
많은 드라이버 => 손님 관점에서 대기 시간이 줄어듬 => 손님이 많아짐 => 시간당 많은 수입 => 많은 드라이버
대기시간 줄이기 (ETA, Estimated time of Arrival)
=> 드라이버의 시간당 수익 증가, 고객의 기다리는 시간 줄임
어떤 차량을 어떤 고객에게 배정해야 좋을까?
Uber Eats: 음식 추천 시스템 => 고객이 주문하려고 하는 주문 제안
(Graph Learning to Power Recommendations)
Uber 엔지니어링 블로그에서 간접적으로 파악할 수 있음
=> 국내에서도 기술 블로그가 많이 나오고 있음.
누군가 산업에 대해 정리해둔 Paper가 있는지 찾아보기
awesome+산업군
예) awesome mobility machine learning github
해당 산업군에서 사용하는 기술
=> 해당 비즈니스에 어떻게 적용할 수 있을까
=> 추가 가치 발견
=> 머신러닝, AI가 비즈니스에 영향을 주는 과정을 이해
회사가 어떤 서비스, 가치를 제공하고 있는가?
데이터를 활용할 수 있는 부분은 어디인가? (Input)
무엇을 해볼 수 있을까?
모델을 활용한다고 하면 예측의 결과가 어떻게 활용되는가? (Output)
실제로 회사에서 한 일이 아니더라도, 특정 회사에서 활용했다고 가정하거나 아예 크게 문제 정의해서 구체화해보기.
이 모델이 회사에서 활용되었다면 어떤 임팩트를 낼 수 있었을까? 고민해서 정리해보기.
직접 일상의 문제라도 하나씩 정의하기.