하용호 카카오 Machine Intelligence 파트장
누가 뭐라고 해도 역시 지금의 슈퍼스타는 머신러닝(machine learning)이다. 마법같은 결과를 담은 논문이 나날이 쏟아져나오고, 또 며칠만 있으면 코드로 구현되어 깃허브(github)를 통해 모두에게 공유된다. 거기다 세상에는 친절한 사람들도 어찌나 많은지, 쉽게 쓰여진 좋은 튜토리얼과 블로그 글들이 가득하다.공부를 하기에 이보다 더 좋을 수 없다. 새로 산 GPU가 달린 머신위에 ‘주피터 노트북(jupyter notebook)[1]’ 을 띄워놓고, 정확도를 1%씩 올리는 과정이 ‘꿀잼’이다. 그런데 이런 즐거움이 현실을 만나서 조금 고생을 해야할 때가 있다. 공부로 끝나는게 아니라 실제 서비스에 머신러닝을 적용해야 할 때가 바로 그 순간이다. 오늘은 논문들이 가르쳐주지 않는 현실의 고민들을 함께 알아보자.
[카카오 AI 리포트] Vol. 6 (2017년 8월호) 는 다음 내용으로 구성되어 있습니다.
[1] Industry - 데이터와 음성인식
01. 하용호 : 머신러닝 적용의 실제, 논문이 가르쳐주지 않는것들 (이번글)
[2] Trends - 생생한 AI 현장의 이야기
04. 하영식 : AI 접목된 의료영상의 주요 플레이어들
[3] Learning - AI 연구 동향과 강화학습 개념
06. 엄태웅 : 딥러닝 연구의 현재와 미래 part 2
07. 최성준, 이경재 : 알파고를 탄생시킨 강화학습의 비밀 part 2
[4] Information
[카카오 AI 리포트] Vol. 6 전체글 다운받기
내용 중간의 [ ]는 뒷부분에 설명 및 관련 문헌의 소개 내용이 있음을 알리는 부호입니다. 예를 들어, [1]에 대한 설명은 '설명 및 참고문헌'의 첫 번째에 해당합니다.
애초에 고민할 일이 왜 일어나는가?
높은 정확도를 가진모델을 잘 만드는 것으로 부족한가? 애초에 왜 고민을해야할까? 원인은 연구와 사업의 입장차이 때문이다. 두 관점에서 보는 ‘잘하고 있다'의 기준이 다르다. 실제 서비스에 적용될 때는 연구자의 시선보다 사장님의 시선으로 고민을 해야한다.
사장님의 시선이란 뭘까? 정확도가 좋은 것도 좋지만, 결과적으로 효용을 발생시키고, 지속시키는 것을 중요하게 여긴다. 좀 더 쉬운 말로 풀자면 '사용자가 행복해 하는가?(사용자 만족)', '그래서 돈이 되는가?(수익성)', '계속 돈이 되는가?(지속성)'이다. 이렇게 바뀐 기준을 만족시키려다 보니, 노트북에서 퍼센트를 찍어낼 때와는 사뭇 다른 관점에서 고민해야 한다. 어떤 것들이 있고 왜 고민해야 하는지 탐색해보자.
모든 것은 변한다, 고로 계속 지켜봐야 한다.
머신러닝을 적용하는 과정을 상상해보면 다음과 같을 것 같다.
[ 머신러닝을 현실에 적용하는 과정 ]
1. 대용량의 데이터 스냅샷(snapshot)[2]을 받는다.
2. 열심히 모델을 만든다
3. 오~ 나름 맞추는 것 같다.
4. 적절히 API를 붙이고 서비스에 적용한다.
5. 성공!, 그리고 다른 일을 하러간다.
하지만 이것으로 끝일까? 아니다. 세상 모든 것이 변하듯 서비스도 그렇다. 서비스가 변하면 모델링도 바뀌어야 한다. 이러한 변화는서비스 내적인 요인과 외적인 요인으로 나눌 수 있다.
서비스 내적인 변화의 대표적인 예는 ‘사용자의 노후화'이다.예를 들어서 오픈한지 갓 한달된 서비스를 상상해보자. 서비스 오픈시에 자연 유입되는 사용자들은 일반과 대비해 얼리어답터(earlyadopter)[3] 성격이 강하여, 상대적으로 더 탐색적이고, 더 호응이 좋다. 이 때 모델을 만든다면, 모델에는 사용자의 적극적성향이 크게 반영될 것이다. 그런데 만약 오픈한지 5년쯤 지난서비스라면 어떨까? 신규 유입은 줄고, 대부분의 사용자는 잔존사용자(revisiting user) 일 것이다. 이들은 서비스에 대해 이미알만큼 알고, 조금은 지루해 한다. 이 때 학습시킨 모델은 초기모델과는 분명 다른 특성을 보일 것이다. 이처럼 시간이 지나면사용자 구성도, 서비스 사용 패턴도 변화하는데, 의외로 많은 모델이 한번 구워지고, 꽤 오래 방치된다. 정지된 모델은 낡아질 뿐이다.
서비스 외적인 변화는 주로 외부의 이벤트들로 부터 야기된다.늘 일어나는 외부 이벤트로 대표적인 것이 주기성(seasonality)이다.예를 들어 우리가 쇼핑몰을 운영한다 치면 여름에 학습시켰던 모델은 얇고 가벼운 옷을 상대적으로 더 추천할 것이다. 겨울에 학습시켰던 모델은 두꺼운 점퍼에 치우침(bias)을 가지고 있을 것이다. 여름에 만들었던 모델로 겨울까지 쓰고 있다 생각하면 아찔하다. 그 외에도 어떤 가수의 패션이 대유행을 한다던가 하는 다양한 외부사건들이사용자의 행동을 바꾼다. 이런 부분까지 반영되려면 모델은 계속 업데이트 되어야 한다.
다들 서비스에 적용할 때, 시스템 오류 모니터링까지는 잘하곤 한다. 하지만 방치된 모델은 오류 만큼이나 해롭다. 머신러닝을서비스화 시킬 때는 성능(performance) 모니터링과 그에 따른 재모델링 자동화(model rebuild automation)까지 연동시키는 것이 작업의 완성이다.
많은 데이터보다 신선한 데이터가 낫다.
우리의 데이터에 대한 사랑은 조금 맹목적이어서, 데이터가 많으면 많을수록 무조건 좋다고 믿는다. 대체로 맞지만, 때로 틀리다.데이터에도 유효기간이 있기 때문이다. 일반적으로 모델의 학습과정에서 전체 데이터를 트레이닝 셋(training set)과, 테스트 셋(testset)으로 분리한다. 트레이닝 셋 데이터를 통해 모델은 현실의 케이스를 학습 한 후, 테스트 셋 데이터를사용하여처음보는데이터도 잘 추론 하는지를 확인한다. 일반적으로 모델은 트레이닝과정에서 과적합(overfitting)[4] 또는 과소적합(underfitting)[5]하기 쉽기 때문에, 모델의 정확도는 반드시 테스트 셋(test set)을 통해서 평가되야 한다. 여기까지는 모두가 잘 아는 사실이다.
그런데 이런 데이터 셋들을 만드는 전략이 문제이다. 보통의 경우는 모을 수 있는 과거의 데이터를 모두 다 끌어모아서 크게 만든 후, 이를 무작위(random)로 분리하여 트레이닝과 테스트를 만든다. 하지만 예를 들어 3년전의 데이터로 학습한 모델이, 지금 가입하는 사용자를 평가하기에 적절할까? 반대로 이번달 가입한 사용자로 학습된 모델이 3년 전 데이터가 포함된 테스트 셋으로 평가되는게 합당할까?
시간에 불변한 서비스를 하는 기업이라면 상관없겠지만, 그런 회사는 별로 없다. 우리 모델이 실제 적용됐을 때, 테스트셋만큼의 성능이 안나오는 것은 애초에 테스트 셋이 '지금의 사용자'를 제대로 반영하지 않은 데 따른 결과일 수 있다. 데이터도 시간이 지나면 상하기 때문에, 데이터셋 운영 전략이 함께하여야 좋은 성능을 유지할 수 있다. 먼저 무조건 큰 데이터보다는 데이터양이 학습에 충분하다면 과거는 제한하여 신선한 데이터를 유지하는 것이 필요하다. 또 테스트셋은 상대적으로 최근 데이터에 가중치를 두고 뽑아 '지금 시기에 잘 작동(working)하는가'에 중점을 두도록 변경되어야 한다.
열심히 일한 탓에 데이터가 편향되어 버린다.
미국 드라마 ‘닥터 하우스’의 괴짜 의사 하우스는 환자 병의 원인을 알기 위해, 현재 받고 있는 모든 치료를 일부러 끊어버린다. 해열제도 진통제도 맞지 못하는 환자는 괴로워하지만, 오히려 이런 상황이 되고나서야 아픈 곳이 명확히 드러나고, 원인이 발견되어 치료가 가능해진다. 그동안 환자가 먹고 있던 약이 오히려 증상을 가리는 역할을 하고 있었던 것이다.
데이터에 기반한 액션을 오래 하다보면 비슷한 아이러니(irony)가 생겨난다. 실무에 적용하기 이전에는 사용자 집단 전체에 대해서 모든 사례의 데이터를 고르게 가지고 있지만, 실무에 적용하고 나서부터는 모델의 유도를 당한 사용자의 데이터만 가지게 된다. 즉 우리의 적극적 액션이 데이터의 편향(bias)을 만들어내고 편중(variance)을 만들어낸다. 다양성(diversity)이 훼손되는 것이다. 이러한 일반성 훼손은 변화를 눈치채지 못하게 한다.
예를 들어 '가나다' 라는 컨텐츠가 있었다고 해보자. 최적화 전에는 이 컨텐츠가 모두에게 노출이 되어 중립적 데이터를 만들어 내고 있었다. 그리고 이 데이터를 기반으로 모델이 A,B,C 사용자 집단 중에 A가 가장 반응을 잘한다는 사실을 찾아주었다. 그 이후 모델은 적극 사용되고 이 콘텐츠는 A 위주로만 노출된다. 문제는 시간이 지나보니 예전엔 아니었던 C가 더 반응을 잘하게 되었다던가, 우리가 몰랐던 좋은 D가 신규로 유입되었다던가 하는 일이 물밑에서 일어나도 우리가 눈치를 챌 수가 없다는 것이다. 동작하고 있는 모델 때문에 C나 D에게 컨텐츠가 노출되지 않기 때문이다. 이러한 일을 방지하기 위해, 우리는 모델이 적용되지 않아, 행동의 다양성을 보유한 무작위(random) 데이터를 일정량 이상 확보할 필요가 있다. 사실 이것은 데이터 기반 최적화의 전통적인 딜레마인 탐색과 획득(explore vs exploit) 트레이드 오프(trade off) 문제이다. 빼먹는데(exploit)에 집중하면, 변화를 위한 새로운 먹거리 발견(explore)이 미흡해진다.
물론 이 트레이드 오프 사이의 균형을 자동으로 찾아주는 멀티암드밴딧(multi armed bandit, MAB)[6] 같은 알고리즘이 있기는 하다. 하지만 MAB의 목적은 ‘여러 모델간의 경쟁 우위’를 최적화 하기 위한 것이지, 무작위 데이터 확보를 위해서 쓰이는 것은 아니다. MAB 알고리즘에서 무작위 데이터를 얻기위해서 ‘아무것도 하지 않는 모델'을 추가시킬 경우, 이 모델은 성능 자체는 매우 낮은 값을 가질 것이며 MAB의 알고리즘 특성상 이런 모델은 아주적은 노출 기회를 가지게 된다. 이 정도 적은양으로는 위에서 기술한 변화를 감지하기 어렵다. 따라서 일시적으로 전체 트래픽을 처음부터 분리해 일정부분은 모델없이 노출시키고, 나머지는 MAB로 보내도록 하는 데이터 분리가 필요할 수도 있다. 물론 이 작업은 늘 이루어질 필요는 없고 분기나, 해마다 한번도 충분하다. 데이터는 자연적으로 중립성있게 생산되는 것이 아니라, 우리가 유도하는 방향으로 굴곡져 생성된다는 사실을 늘 기억하자. 의도적으로 얻어낸 다양성이 보존된 데이터는 우리가 놓친 기회는 없는지를 확인하는데 큰 도움이 된다.
비용에 따라 모델의 정확도보다 커버리지가 우선되기도 한다.
우리 제품을 구매할 것 같은 사용자를 찾는 타겟팅(targeting) 문제를 머신러닝으로 풀고 있다고 가정해보자. 모델을 고도화 시키고 정교화 시킬수록, 정확도(accuracy)는 올라가겠지만, 동시에 이 모델에 통과되기 위한 기준값(threshold)이 올라가면서 부작용으로 모델이 맞출 수 있는 대상의 수(coverage)가 작아질 수 있다. 이는 역으로 생각해보면, 너무 엄격한 기준을 적용한 나머지, 어쩌면 우리 서비스를 위해 지갑을 열었을지도 모르는 사용자를 놓치는 형상이 될 수 있다.
이럴 때 비즈니스 관점에서 보면, 정확도를 낮추더라도 더 많은 소비자가 포함될 수 있게 타겟의 범위를 넓히는 것이 합리적인 경우가 있다. 간단한 예를 들어 보자. 사용자의 구매 전환율은 10%이며 1만명의 메일 대상자를 선정해주는 모델A와 구매전환률이 5%이지만 10만명을 추출해주는 모델B가 있다고 해보자. 모델 A는 10% x 1만명으로 1000명의 구매를 만들겠지만, 모델 B는 5% x 10만명으로 5000명의 구매를 만들어낸다.
의료와 같이 잘못된 판단이 치명적인 분야라면 정확도를 기준으로 모델을 골라야 한다. 하지만 마케팅이나 푸시등 오판에 대한 비용이 적은 분야는 커버리지가 우선시 될수 있다. 기술은 성능(performance)을 추구하지만, 비즈니스는 이익(profit)을 추구하기 때문이다.
서비스를 위해 정확도보다 속도를 더 우선하기도 한다.
모델 서비스 시에, 미리 다 계산해두는 배치(batch) 형식이 아니라 아니라, 사용자 요청 때마다 계산되는 온라인(online) 형태로 진행되야 할 때가 있다. 사용자가 어떤 입력값을 넣을지 그 자유도가 너무 높아서 적절한 예상 답안을 미리 구워두기 힘든 경우가 그렇다.
배치는 대량의 데이터를 미리 계산해두고 서비스 특성에 맞는 적당한 자료 서버에서(hbase, redis, mysql등) 불러오기만 하면되지만,온라인은 훨씬 더. 많은 고민이 필요하다. 그 고민 중 하나가 응답 시간(response time)이다. 사용자가 어떤 입력을 넣을지 예측이 어려워서 채택된 온라인이므로, 태생적으로 두껍고 긴 롱테일(long tail)을 가지게 된다. 두터운 롱테일은 이전의 계산 결과를 재활용하기가 어렵다는 뜻이므로 캐시(cache)도 소용없어서, 바로바로 계산해야 하는 양이 많다. 트레이닝(training)에 비하면 결과값 얻기(predict)는 몇천배 빠르겠지만, 복잡한 모델을 빌드 했을 경우에는 이 계산 속도도 문제가 된다.
문제가 되는 대표적인 예가 RNN계열(LSTM, GRU 등등)인데 애초에 재귀적(recursive)으로 계산되기 때문에 병렬화가 느린 RNN은 이미 구워진 모델이라 할지라도 건당 계산(predict)이 느리다. 머신러닝의 결과물이 최종결과가 아니라, 상위 큰 시스템의 구성 요소로 쓰이는 경우가 대부분이기 때문에 서비스에 따라 20ms 이하의 아주 극단적으로 빠른 처리 속도를 요구받곤 한다. 느린 RNN계열은 이 요구 조건을 못 맞추는 일이 발생할 수있다. 이럴 때는 정확도가 조금 낮더라도 같은 일을 하는 CNN 구조가 있다면 그 편이 더 좋다. 병렬화가 쉬운 구조적 특성 때문에 CNN계열은 RNN계열보다 빠르다. 정확도는 1% 낮지만 0.1초 더 빨리 서빙해서 사용자에게 빠릿빠릿한 감각을 맛보여 준다면, 사용자에게 주는 총체적 효용은 후자가 더 클 수 있다.‘번역’과 같이 사용자가 충분히 기다리는게 전제가 된 서비스라면, 조금 느린 속도도 문제 없겠지만, 화면의 컨텐츠 요소로 사용되는 추천이라든가, 사용자 행동에 반응해서 팝업을 띄워준다든가 하는 즉각적인 서비스 용도라면 단연 속도가 모델 선택의 기준이 된다.
속도는 온라인 서비스에서만 중요한 것이 아니다. 배치 서비스라 할지라도 서비스로서의 머신러닝은 사용자의 반응에 즉각 대응하는 실시간성을 갖추어야 한다. 실제의 사용자들은 배치의 학습주기보다 빠르게 움직이고, 또 쉽게 싫증을 내는 존재이기 때문이다. 사용자가 모델의 최선의 결과물을 보았음에도 반응하지 않았다면, 그에 불만족한 것이므로 빠르게 컨텐츠를 전환하여야 한다. 모델의 배치 계산 주기(cycle)가 길다고 해서, 서비스가 컨텐츠를 바꾸지 않으면 사용자는 지루해 할 것이다. 또 이미 반응한 컨텐츠도 마찬가지다. 이미 본 기사나, 산 물건을 추천해 주는 것도 사용자에게 의미 없어 보인다. 때문에 사용자 경험(user experience)을 만족 시키기 위해서는 사용자 반응을 빠르게 수집하고, 새로운 컨텐츠로 즉각 대체하는 보조적 실시간 시스템이 항상 같이 구비되어야 한다.
타겟팅과 브랜딩. 부정확한 것도 때론 괜찮다.
머신러닝에서 우리가 기준점를 어떻게 설정하는가에 따라 아깝게 대상에서 벗어나는 집단이 있다. 일반적으로 이런 집단은 버려져서 사용되지 않겠지만, 실무의 세계에서는 좋은 사용처가 존재한다. 브랜딩이다.
브랜딩은 뭘까? 반복적인 시청으로 효용을 ‘학습’시키고 최종적으로는 효용을 ‘유도’하는 작업이라 생각한다. 태어날 때부터 '맞다 게보린'이라던가 '초코파이는 정(情)'을 알았던 것이 아니다. 지금 당장 아프거나, 배가 고프지 않더라도 반복적인 시청은 언젠가 필요할 때를 만났을 때, 해당 제품을 고르도록 학습시킨다. 또 브랜딩 메시지가 누적되면 없던 욕구를 유도시키기도 한다. 전혀 배가 고프지 않았는데 치킨광고를 보고 그날 저녁에 주문 전화를 한 적은 다들 있을 것이다. 타겟팅과 브랜딩은 세상을 바라보는 뷰가 약간 다르다. 타겟팅은 세상을 ‘정해진 것’으로 보고, 그 안에서 최적의 해를 찾는다. 브랜딩은 그에 비해 세상을 ‘변화시킬 수 있는 것'으로 보고 세상에 영향을 주기 위해 집행된다.
타겟팅을 아깝게 벗어난 경계 근처의 사용자 군집은 브랜딩의 대상으로 적합하다. 기준을 넘지는 못했지만 그래도 최소한의 관심이 있기 때문에 전혀 상관 없는 군집에 비해 유혹하기가 쉽다. 머신러닝은 문제에서 해답을 찾는 것이 기본 방향이지만, 나와 있는 해답 또는 오답에서 적절한 문제를 찾는 것도 일에 도움이 될 때가 많다.
딥러닝 시대에도 고전적인 머신러닝을 써봐야 한다.
충분히 많은 데이터가 있다면 딥러닝은 거의 언제나 승리한다. 영상, 음성, 텍스트와 관련된 문제도 딥러닝이 월등하다. 다만 비즈니스 필드에서 자주 만나는 문제는 영상도 음성도 텍스트도 아닌 ‘테이블로 정리된 자료(tabular data)’인 경우가 많다. 심지어 양(volume)도 딥러닝을 돌리기엔 모자랄 때가 많다. 그럴 때는 feature 엔지니어링[7]을 충분히 거친 후, SVM(support vector machine), RandomForest, GBT(gradient boosted trees)등의 전통적인 머신러닝 방법을 써보면 기대보다 꽤 좋은 성능을 낸다.
비딥러닝 계열의 대표주자는 gradient boosted trees 알고리즘 구현체인 xgboost다. 캐글[8]에서도 테이블화된 데이터를 다루는 문제라면, 딥러닝이 아니라 xgboost를 쓴 모델이 승자가 된 경우가 많다. 개인적 경험으로도 xgboost의 속도와 성능은 정말 ‘깡패’에 가까워서 GPU를 써서 오랜시간 돌린 딥러닝과 CPU로 몇 초만에 끝난 xgboost가 1~2%의 근소한 차이인 경우가 많았다. 사실 1~2%라면 수학적으로는 의미가 있지만, 비즈니스적인 의미 차이는 거의 없다.
클래식한 모델은 기존 시스템 인프라 활용면에서도 큰 이점을 가지고 있다. 회사의 분산처리 시스템에 태워 이래저래 편히 사용하기에는 귀한 GPU가 있어야 잘 운영되는 딥러닝 모델보다는, 정확도는 1~2% 뒤질지언정 아무 장비에서도 몇 초만에 돌아가고, 라이브러리 하나만 같이 태워서 배포해도 잘 돌아가는 고전 방법들이 아무래도 만만하다. (여러분이 머신 한대에 GPU드라이버부터 텐서플로우까지 설치하던 노고를 기억해보라. 그걸 N대에 적용해야 한다고 생각해보라. 번거로운 건 번거로운 것이다.) 그리고 실무자들과의 협업에서도 큰 도움이 되는데, 딥러닝의 경우 블랙박스 요소가 많아, 그 동작 과정을 사람이 이해하거나 재조사(inspection) 하기는 어렵다. 이에 비해 고전 방법들은 알고리즘이 명확하고, 학습된 후에 모델을 조사하여 지식을 끌어내기가 상대적으로 쉽다. 예를 들어 수없이 많은 속성중에서 추정 결과에 결정적 영향을 줬던 속성이 무엇인지(feature importance)를 찾는 일 등도 쉽게 가능하다. 이러한 발견들은 현업을 담당하는 실무자들의 지식과 결합되어 새로운 가설을 떠올리거나, 또는 마케팅등의 비즈니스 활동에 아이디어를 주는 경우가 많다. 머신만으로 모든 일이 완결 되는 것이 아닌 이상 이러한 영감(insight)들은 실제로 큰 도움이 된다.
사람의 일은 여전히 중요하다.
머신러닝을 비즈니스에 적용한다는 것은 두가지 종류의 불확실성과 싸워나가는 일이다. 하나는 데이터 부족으로 인한 불확실성이고, 다른 하나는 세상 그 자체가 가진 불확실성이다.
첫 번째부터 살펴보자. 머신러닝을 처음 공부하고 나면, 세상 모든 것을 다 예측해 낼 수 있을 것 같은 기대를 품는다. 하지만 현실 세상의 로그(log)를 보고 나면 절망에 빠지게 된다. 현실의 로그는 ‘없거나' 또는 ‘쓸 수 없거나' 둘 중 하나의 상태이기 때문이다. 사실 현업에서 로그는 오류를 잡기 위한 디버그(debug)용도나, 불만족 고객 응대(customer service)를 위한 내용이 주로 남겨진다. 아무래도 머신러닝을 위한 용도는 뒷전이다. 때문에 머신러닝에 쓸만한 데이터는 항상 부족하다. 동전 던져 앞면이 나올 확률을 계산한다고 해보자. 동전을 던진 횟수가 3번밖에 없다면 횟수가 너무 작아 확률을 정확히 추정하기 어렵다. 추정값을 뽑아도 믿기 어려울 것이다. 이렇게 데이터가 부족하여 발생하는 불확실성(epistemic uncertainty)이 우리가 처음 만나게 되는 불확실성이다. 그래도 이 쪽은 낫다. 우리의 노력과 끈기로 시간이 지날수록 극복이 가능하다. 열심히 로그를 남기고, 좋은 모델을 쌓아올려가며 제거해 갈 수 있다.
첫 번째 불확실성을 어느정도 제거하고 나면 문제가 되는 것은 두 번째 불확실성이다. 그것은 현실 세상이 근원적으로 가지고 있는 불확실성이다(aleatoric uncertainty). 동전을 백만번 던져서 데이터가 충분히 쌓였다고 해보자. 동전의 앞면이 나올 확률을 50%로 맞출 수 있다. 여기서 추가로 동전을 100만 번 더 던진다고 동전의 앞면이 나올 확률이 증가할까? 그렇지 않다. 아무리 데이터를 많이 모았어도 앞면이 나올 확률은 항상 50%의 불확실성을 가진다. 이것이 세상 그 자체가 가지고 있는 불확실성이다.
두 번째 불확실성은 얼핏 생각하기에 조금 절망적이다. 아무리 데이터를 많이 모아도, 아무리 좋은 모델을 만들어도 극복할 수 없어보이기 때문이다. 이 때 필요한 것은 인식의 변화이다. 우리는 컴퓨터 앞에서만 일할 필요가 없다. 우리는 현실에 영향을 줄 수 있는 실제의 사람이다. 동전의 앞면이 필요하다면, 앞쪽이 잘나오도록 추를 달아도 된다. 양쪽이 앞면인 동전을 만들어도 된다.
두 번째 불확실성을 비즈니스 관점에서 생각해보자. 모든 데이터와 모델을 동원해 특정 사람이 좋아할 만한 최고의 상품을 추천할 수 있다 하더라도, 해당 소비자가 구매할 확률은 10%일 수 있다. 이때 구매율을 더 끌어올릴수 있는 방법은 더 좋은 수학적 추정이 아니라, 가격 할인, 묶음 상품, 할인율의 일괄 적용, VIP만을 위한 할인율 차등 적용 등 현실 세상의 행동이다. 우리의 직접적인 행동이 극복할 수 없어 보였던 두번째 불확실성을 변하게 만든다. 머신의 시대지만, 사람의 일은 여전히 중요하다. 그 점을 잊지말자.
맺음말
머신러닝은 이 시대의 꽃이다. 가장 화려하고 모두가 가지고 싶어한다. 하지만 이 꽃을 땅에 심어 자라나게 만드는 데에는 손에 흙을 묻히는 일이 필요하다. 우리가 어떤 흙들을 만져야 하는지, 때로는 어떻게 심어야 하는지에 대해 이야기했다. 모두가 아름다운 꽃을 피우기를 바란다.
글 | 하용호 henry.ha@kakaocorp.com
데이터 사이언티스트로 일해왔습니다. 다사다난한 과정을 거쳐왔습니다. 현실과 기술, 그 두개의 끈을 맞닿아 매듭짓는 일을 해 나가고 싶습니다.
참고문헌
[1] 참고 | 웹상에서 실행되며 코드와 계산 결과, 각종 차트와 그래프 등을 한 눈에 볼 수 있게 만들어진 작업 환 경. 전체 과정을 한 화면에서 순서대로 볼 수 있기 때문에 작업하기에도, 타인에게 공유하기에도 편하다. 데이터 분석가들이나, 머신러닝 연구자들이 즐겨 사용한다. 쥬피터 환경에서 다른 언어도 사용가능하지만, 주로 파이썬 (python) 언어가 사용된다.
[2] 참고 | 마치 사진을 찍듯이, 특정 시기 기준의 모든 데이터를 일컫는다.
[3] 참고 | 남들보다 신제품등을 빨리 구입해서 사용해야 직성이 풀리는 적극적인 소비자군
[4] 참고 | 모델이 데이터가 만 들어진 원리를 배우기보다는 데이터 자체를 기억해버리는 경우이다. 학습시킨 데이터에 대해서는 잘 풀지만, 새 롭게 보는 데이터에 대해서는 성능이 오히려 떨어진다.
[5] 참고 | 모델이 너무 단순하거나 또는 데이터가 부족 하여,실제 현실을 제대로 배우지 못하는 경우를 말한다.역시나 성능이 떨어진다.
[6] 참고 | 보통 모델의 우위를 판단하기 위해 사용되는 A/B테스트는 여러개의 모델을 동시에 비교하게 될 경우, 어느것이 최적인지 알아내는 데 시간이 오래걸리고, 또 그 시간까지 최적이 아닌 손해보는 모델에도 사용자가 상당히 많이 노출되게 된다는 단점이 있다. 각 모델에게 동일한 사용자수를 배분하는 일반적인 A/B테스트 로직과 달리 MAB는 성능이 좋은 모 델에게는 더 많은 사용자를, 성능이 낮은 모델에게는 성능을 평가할 수 있는 소량의 적절한 사용자를 노출시켜, 충분히 탐색을 하면서도 이익을 최대화 하는데 초점을 맞춘다.
[7] 참고 | 많은 속성(feature)들 중에서 도움이 되는 것만을 골라내거나, 여러 속성의 조합으로 새로운 속성을 만들어내는 작업을 말한다.
[8] 참고 | 데이터 분 석, 머신러닝 전문가들이 공개된 문제에 대해 각자 더 정확도 높은 모델을 만들어내어 경쟁하는 웹사이트 http:// kaggle.com