모델러니 엔지니어니 툴을 다룰 줄 안다고 해서 능사는 아니다. 숫가락을 사용할 줄 압니다와 숫가락을 사용하여 밥을 한 숟갈 뜬 후 입에 넣을 수 있습니다는 다른 얘기란 뜻이다. 사람이면 도구를 사용할 줄 알아야하는데, 여기서 도구를 사용한다는 말이 사실은 도구를 사용하는 것은 기본이요, 문제를 해결해야한다는 뜻을 내포하고 있는 경우가 대부분이다. 그러면, 이런 문제를 어떻게 발견하고, 어떻게 해결해나가야 할까. 이번 강의에서는 문제 해결의 과정과 수익을 창출하는(유투브가 아니다.) 부분에 대해 살펴봤다.
우리는 끊임없이 문제를 맞닥뜨리고 문제를 풀고싶어한다. 여기서 문제란, 개인이 가진 문제일수도 있고 회사에서 풀려고 하는 문제일 수도 있고 사회가 풀어야하는 문제일 수도 있다. 수학문제일 수도 있고, 범죄심리학에서 풀려고 하는 문제일 수도 있고, 직장상사의 기분을 풀어야하는(?) 문제일 수도 있다. 그렇다면 이런 문제들을 어떻게 풀어야할까? 그런데 주목해야하는 것은 단순히 문제만 있다고 해결되진 않는다.
A, B, C라는 사람들이 길에서 주인없는 사과바구니를 주웠다. 이들은 주인이 없는 것을 확인한 뒤 나눠먹기로 했다.
해결하고자 하는 문제는 주인 없는 사과바구니에 든 사과를 나눠먹는 것이다. 우리는 여기서 문제를 정의했다.
그렇다면, 문제를 정의하는 것만이 전부일까?
정의된 문제에 구체적인 정보가 없을 수록 질문은 늘어난다. 지피지기면 백전백승이랬으니, 우리는 문제를 잘 알 필요가 있다.
A, B, C라는 사람들이 길에서 주인 없는 사과바구니를 주웠다. 도덕적인 기준에서는 경찰에 알리는 게 좋지만, 이들은 9개 들어있는 사과를 서열(?) 순으로 하나씩 더 많이 나눠먹기로 했다. 서열은 A, B, C 순으로 높다고 한다.
사회적으로는 옳은 판단은 아니겠지만, 이런 맥락에서 나름 최선의 방향은 A가 4개, B가 3개, C가 2개의 사과를 가져가는 것이다.
Einstein Quote
아인슈타인도 문제 해결에 55분을 쓴다는데 내가 뭐라고 문제에 덤벼들겠는가..
그래서 문제 정의하는 게 이렇게나 중요하다. 뭘 해결하고싶고, 어떻게 해결해야 하고, 어떤 도구를 쓸지 등 많은 질문들이 여기서 쏟아져나올지도 모른다. (본질적인 문제를 해결하기 위해선 어떻게 보다 왜에 어 집중해야 한다고.)
그래서 문제를 해결할 땐 아래 나올 흐름대로 진행되니, 문제 해결에 적용해보면 좋을 것 같다.
현상을 먼저 파악한 뒤 문제를 정의하고 어떻게 해결할 수 있을지 세부적인 단계로 쪼개서 생각합니다. 이 문제를 어떻게 해결할지에 대한 행동을 취하고 난 이후에는 잘 되는지 확인하는 단계가 필요합니다.
문제는 관찰에서부터 비롯된다. 관심이 없으면 문젯거리도 보이지 않을테니까. 상황을 파악하는데에는 여러 가지 질문이 올 수 있다. 처음부터 구체적인 질문이 나오지 않아도 된다. 대신 상황을 파악하기 위해, 그리고 나중에 행동을 취할 때 도움을 받기 위해 질문을 많이 해두는 것이 시간으로나 효율성으로나 이득이다. 마치 대기업 회장님을 인터뷰하는 기자처럼 최대한 정보를 많이 수집한다.
만약, 내가 도서관장이고 도서관 이용자 수가 줄어서 내년에 예산이 줄어들 것으로 예상된다면?
현상 파악이 잘 되었다면 구체적으로 어떤 문제를 해결하고싶은지 구체적이고 명확한 용어로 정리한다.
도서관장인 (미래의 예산 확보를 위해) 1차적으로 목표를 설정했다. 동일 기간을 기준, 도서관 이용객을 작년수준으로 끌어올리기로 했습니다. 그래서 왜 이용객이 줄어들었는지 알고싶어요. 도서관장은 이용객들이 왜 안오게 되었는지를 알아야 했다. 도서관 홈페이지와 문자를 통해 설문조사를 실시했다. (설문조사지는 명확한 기준 아래 항목들을 완성해서 배포했다고 가정했다.)
왜 안나오나요? 하는 질문에 다양한 응답이 돌아왔다.
주차공간이 부족하고, 편의시설이 부족하다는 응답을 해결하기 위해서는 주차공간을 확보하고 편의시설 입찰에 돌입해야겠지만, 예산도 부족하고 행정처리 절차를 생각하면 머리가 지끈지끈하다. 그래서 당장 해결할 수 있는 방역과 가이드라인에 신경쓰기로 결정했다.
방역이 철저하지 않다고 인식되는 부분에서는 주기적으로 소독하고 있다는 안내문을 도서관 건물 엘리베이터와 정문, 계단 입구 옆에 붙였다. 그리고 타 도서관으로 가는 이용객들을 잃지 않기 위해 이용객별 도서대출 이력을 기반으로 도서를 추천해주면 좋을 것 같아 새로운 서비스를 제공할 힌트를 얻었다.
이렇게 문제를 해결하기 위한 조치를 나열하고, 나름의 기준을 가지고 해결책을 제시하다보면 새롭게 문제를 해결할 수있는 방법들을 볼 수 있다.
구체적인 문제 정의를 위해서는 지금까지 관찰한 현상을 잘게 쪼개보고, 이를 통해 어떤 어려움을 겪고 있는지 파헤쳐봐야 한다. 그러면 어떤 방식으로 문제를 해결해나가야 할까?
어쨌건 문제를 해결할 수 있는 가장 쉽고 단순한 방법부터 접근하면 된다. 마트에서 장 보는데 걸린 시간을 굳이 적분함수를 쓸 필요가 없듯이, 문제를 해결할 수 있는 간단한 방법을 찾고 데이터가 주어져있는지를 확인하면 된다.
우리는 시간도, 노력도 다 아낄 필요가 있으니까 효율성을 따져야 한다. (시간과 노력은 공부하는데 집중해야한다.)
그 다음으로 오는 프로젝트 설계는 강의를 들으면서 알게된 마스터님의 경험담을 기반으로 작성되었다.
아주아주 이상적인 머신러닝 프로젝트 과정은 다음과 같다고 한다.
문제를 정의한다. 데이터를 깔끔하게 수집하고, 모델을 개발한 후 배포하면 수익이 창출된다! 와 신나!
그런데 현실이 어떻게 늘 깔끔하겠는가. 경험에 비추어 본 프로젝트 설계는 다음과 같다.
문제를 정의한다. 우리가 관심있는 기준을 선택한다. (최적화할 metric을 선택한다고도 표현한다.) 데이터를 수집하고 label을 확인한다. 모델을 개발했는데 예측결과에 이상한 값이 섞여나온다. 😢 안타깝지만 왜 잘못된 label이 출력되는지 확인해야 한다. 원인을 찾아낸 후 다시 모델을 학습시킨다. 또 데이터를 수집해야 한다. 다시 모델 학습을 시킨다. 분명 저번에는 테스트 데이터 성능이 좋았는데 개선된 모델에서 성능이 꽝이다. 모델 다시 학습하고 배포.. 로 끝나는 줄 알았더니 최적화 할 metric이 잘 동작하지 않아서 수정하고...
이렇게 반복적으로 발생하는 부분을 완화시키고자 MLOps가 등장했다고.
프로젝트 설계 부분부터는 새로운 포스트로 정리하고자 한다.
본 포스트는 부스트캠프 AI tech 3기 강의내용을 요약, 정리한 내용을 담고 있습니다.