머신러닝으로 콘서트 티켓 판매량 예측하기(3) 첫 번째 모델, Paul의 탄생 — 마이뮤직테이스트

김명수 Mike Kim
14 min readDec 29, 2019

--

이 글은 MyMusicTaste(mymusictaste.com, 이하 ‘마이뮤직테이스트’)의 Growth Team(이하 ‘그로스팀’)이 지난 1년간 아티스트의 콘서트 티켓 판매량 예측 모델을 만드는 과정을 다룹니다. 마이뮤직테이스트 그로스팀은 ‘회사의 성장 견인’을 목표로 2018년 10월 신설된 팀인 동시에 마이뮤직테이스트의 데이터와 연관된 모든 업무를 수행하는 조직입니다.
글 속에 내용은 그로스팀의 팀원이 모두 함께 수행한 것을 팀장이 정리하여 쓴 것으로, 실질적인 업무는 팀원들과 모두 함께 수행했음을 미리 밝힙니다.

1편부터 보기

약 두 달 간 사내에 흩어져있던 데이터를 한땀한땀 모으는 작업을 마치고(2편 참고), 때맞춰 데이터 분석가 두 분이 팀에 조인하면서 본격적으로 머신러닝을 이용한 티켓 판매량 예측 모델링이 시작되었습니다. 이런저런 가설을 세우고 모델링을 하면서, 새로 만들 모델이 이전에 사용하던 휴리스틱 알고리즘에 비해 훨씬 나은 성능을 보여줄 것이라는 막연한 기대에 부풀어 있었습니다. 그리고… 첫 모델이 나왔습니다.

그걸 왜 나한테 묻습니까, 휴먼?

결론부터 밝히자면, 알아서 척척 판매량 예측을 해줄 것이라고 기대하고 있던 그로스팀의 첫 번째 모델은 오히려 많은 고민과 문제를 가져왔습니다. 이번 글에서는 머신러닝을 이용해 예측 모델을 만들었던 초기 단계에서 맞닥뜨렸던 여러 고민에 대해 이야기 해보겠습니다.

Model Generation 1 — Paul

첫 번째 모델에겐 나름 이름도 있었는데, 이름은 파울이었습니다. 2010년 남아공 월드컵 주요 경기 승자를 맞춘, 독일 박물관에 살던 잉글랜드 출신의 불세출의 문어, Paul the Octopus의 이름에서 가져왔습니다.

Paul the Octopus, 티켓 판매량을 말해줘

*이 글에서 ‘모델’이라고 할 때에는 대부분 특정 시기에 그 당시 실험 했던 여러 요소 중 그 당시 가장 나은 예측력을 보여주는 머신러닝 모델, 모델에 들어가는 피쳐와 훈련 데이터 세트를 말합니다. 만약 Linear Regression, SVR 등의 특정 머신러닝 모델을 지칭했을 때에는 맥락적으로 구분이 가능하게 적었습니다.

시작과 동시에 맞닥뜨렸던 문제와 고민

첫 번째 모델에서 결과값을 뽑아보기 전까지는 막연하게 예측 모델이 지금까지 사용하던 알고리즘 보다는 훨씬 나을 것이라는 생각을 했고 부족한건 빠르게 개선하면 된다고 생각했습니다. 그래서 이전에 사용하던 휴리스틱 알고리즘을 폐기했고 바로 새로운 모델을 사용하기 시작했습니다. 하지만 막상 모델을 사용하니 아래와 같은 문제가 보이기 시작했습니다.

  • 기대했던 것보다 모델의 성능이 좋지 않았다.
  • 그렇다면 모델 개선을 위한 작업을 진행해야 하는데 개선 작업이 더디다.
  • 모델이 아직 고려하지 못하는 요소를 보완하기 위해 Ad-hoc 리서치와 분석을 해야하는데 이걸 하다보면 모델 개선이 더 더뎌진다.
  • 그럼에도 불구하고 공연 비즈니스는 진행되고 있으니 예측값을 내야 한다.

모델의 성능이 기대보다 좋지 않다

처음 만든 모델의 성능이 뛰어나지 않을 것이라는 것은 지금 생각해보면 당연할 수 있지만, 모델을 만들던 당시에는 ‘아무렴 머신러닝 모델인데 사람이 판단하는 모델보다야 낫겠지’라는 막연한 생각을 하고 있었습니다. 그리고 결론적으로, 이전 모델과 성능 측면에서 큰 차이가 없었습니다. 먼저 ‘성능이 좋지 않았다’는걸 알기 위해 사용한 평가 방법부터 이야기 해보겠습니다.

모델 성능 평가

공연업 특성 상 판매량을 예측해도 실제로 이 예측치가 맞는지 확인할 수 있을 때까지는 최소 한 두 달 이상의 시간이 걸립니다(1편 참고). 즉, 모델의 성능을 실전에서 확인하는건 시간이 걸립니다. 게다가 공연 하나에 들어가는 비용을 생각한다면 실제 비즈니스에 적용하기 전 반드시 성능을 평가해야 합니다. 이 때 모델의 성능을 평가하기 위한 방법으로 LOOCV, RMSE, Prediction Scatter Plot을 사용했습니다.

LOOCV — Leave One Out Cross Validation은 Cross Validation 방법 중 하나로 Test-Train 데이터를 1:(나머지) 로 나눠 전체 데이터 세트를 반복검증 하는 방법입니다.

Leave One Out Cross Validation

판매량을 예측하기 위한 학습 데이터 수가 충분하지 않은 상황에서는 일반적으로 사용하는 전체 데이터를 Test-Train set 으로 나눠 검증하는 방법을 사용할 경우 Test set 에 어떤 데이터가 들어가는가에 따라 평가 지표가 크게 달라지기 쉽습니다. 따라서 보다 정확한 검증을 위해 K-fold와 같은 Cross Validation 방법을 사용하는데, 티켓 판매량 예측의 경우 모든 데이터 세트에 대해 이터레이션을 돌리는 LOOCV를 한다해도 연산이 오래 걸리지 않았고, 결과 산출의 즉시성이 분초를 다투지는 않았습니다. 이런 이유로 LOOCV를 사용했습니다.

RMSE — Root Mean Square Error. LOOCV를 통해 구한 각 데이터셋에 대한 예측값을 이용해 RMSE를 구한 뒤 개선 지표로 삼았습니다. 개선을 위한 가설-검증 실험을 하면서 실험 후 RMSE가 개선되면(내려가면) 가설을 채택하고 RMSE가 그대로이거나 악화되면(올라가면) 가설을 기각하는 방식입니다.

RMSE의 한계. 콘서트는 각각의 규모가 백 단위부터 만 단위까지 다양하기 때문에 RMSE로는 ‘모델이 이전보다 개선되었다/아니다’는 판단할 수 있지만 ‘예측이 얼마나 정확할 것이다’를 직관적으로 판단하기는 어려웠습니다. 모델의 RMSE가 500이라고 했을 때 이 오차가 10,000석 공연을 예측했을 때의 오차인 경우와 1,000석 공연을 예측했을 때의 오차인 경우는 확연히 다르기 때문입니다.
* 지금은 MAPE 값을 평가지표로 삼아 이 문제를 해결하고 있습니다. 이 내용은 4편에서 다루겠습니다.

Prediction Scatter Plot. RMSE에서 부족한 정보를 해결하기 위해 Prediction Scatter Plot을 도입했습니다. 아래 그림과 같이 이 Plot은 가로/세로축을 실제값과 예측값으로 하는 Scatter plot입니다.

prediction scatter plot
x, y축에 실제값과 예측값을 넣은 Prediction Scatter Plot

데이터가 x=y축에 가깝게 몰릴 수록 실제값과 예측값이 동일한 정확한 모델이라고 볼 수 있습니다. LOOCV를 통해 나온 각각의 예측값과 이에 대한 실제값으로 Plot을 만들어 좀 더 직관적으로 모델의 성능을 확인했습니다.

이런 과정을 통해 모델의 성능을 평가해보니 모델의 성능은 기대보다 좋지 않았습니다. 다양한 이유가 있겠지만 크게는 1)학습 데이터 세트의 양이 충분하지 않다 2)아직 충분한 개선 실험을 하지 않았다 는 결론을 냈습니다.

학습 데이터가 충분하지 않다. 티켓 판매량 예측 모델을 학습시키기 위해 필수적인 Label 데이터인 공연 티켓 판매량 데이터는 업계에서 대외비로 취급되는 정보입니다. 직접 공연을 기획하고 실행하지 않는 이상 티켓 판매량 데이터를 구하기는 쉽지 않습니다. 그나마 마이뮤직테이스트가 수행하는 공연이 점점 늘어났기 때문에 모델을 학습시킬 수 있는 백여개의 훈련 데이터를 확보할 수 있었지만, 훈련 데이터의 절대적인 숫자가 적은 상황에서는 데이터의 대표성이 떨어져 오버피팅이 발생하기 쉽고, 모델의 예측력 자체가 낮아질 수 있습니다.

단기간에 조금이라도 이런 문제를 개선하고자 모델에 사용하는 머신러닝 모델을 상대적으로 단순한 모델 위주로 골라 사용했습니다. 데이터가 적은 상황에서 모델의 복잡도가 높으면 쉽게 오버피팅이 발생할 수 있습니다. 따라서 Ridge Regression, Elastic Net과 같이 자체적으로 피쳐를 줄이면서 가설이 상대적으로 단순한 모델을 사용했습니다(위키피디아 — 모델의 복잡도와 오버피팅의 관계).

충분한 개선 작업을 하지 않았다. 모델의 용도에 따라 다르지만 티켓 판매량 예측 모델은 성능을 개선할 수록 사업에 큰 영향을 미칠 수 있습니다. 따라서 모델링 과정이 시작과 끝이 명확하기 보다는 지속적으로 개선을 위한 가설을 세우고 이를 검증해나가는 반복 프로세스에 가깝습니다. 이 때는 모델을 만든 초기이다보니 개선 여지가 있으나 아직 테스트해보지 않은 머신러닝 모델이나 하이퍼 파라미터, 피쳐 등이 많았습니다.

개선 작업이 더디다

모델 성능 개선이 급했지만 작업은 욕심만큼 빠르게 진행되지 않았습니다. 그동안 전사적으로 데이터를 수집하기는 했지만 심도있는 분석에 사용한 적은 드물었고, 따라서 수집하고 있는 모든 데이터의 레거시 관리나 무결성 파악이 거의 되어있지 않았습니다. 이는 모델 개선 작업에서 수집 단계에 영향을 주었는데, 가설을 정하고 데이터를 수집하려고 보니 수집하려는 데이터가 시기별로 동일한 기준으로 수집되지 않았다던지, 프로덕트 이슈로 한동안 데이터가 모이지 않았다는 사실을 그동안 모르다가 발견했다던지, 데이터가 일부분 중복으로 쌓여있었다던지 하는 식입니다. 그러다보니 자연스럽게 가설-검증 사이클이 느려졌고, 모델 개선이 더딜 수밖에 없었습니다.

이 과정을 겪으면서 얻은 나름의 교훈은 아래와 같습니다.

  1. 사업이나 서비스 초기부터 데이터 수집을 잘 해두면 가장 좋다. 수집 기준에 변화가 있으면 로그를 남기고 정기적으로 무결성을 확인하며 미래에 데이터를 사용할 것을 예상해 데이터를 모은다. 형식, 기록 주기 등은 당연히 신경쓴다.
  2. 1 은 거의 불가능하다. 특히 PMF부터 찾아나가는 초기 스타트업, 그리고 PMF를 찾은 이후 빠르게 성장하는 조직이라면 지금 당장 사업에 큰 영향을 주지 않는 일 — 데이터 수집/관리에 시간을 많이 투자하기 어렵다.
  3. 모델링이나 분석 작업을 처음 시작한다면, ‘우리 데이터는 얽히고 설켜있어 예상보다 작업 시간이 늘어질 것이다’라고 생각하며 리소스를 분배해야 한다.
Korean K-pop band The Rose
MyMusicTaste가 주최한 The Rose 2018 Europe Tour

모델 개선과 Ad-hoc 분석의 트레이드오프

때때로 티켓 판매량에 큰 영향을 줄 것으로 예상되는 요소가 있어도 모델에 반영하기 어려울 때가 있습니다. 예들 들어, K-POP 그룹 A가 최근 지상파 음악프로그램에 나와 국내에서 꽤나 큰 반향을 일으켰다고 하겠습니다. 이는 곧 있을 A의 월드투어 해외 티켓 판매량을 영향을 줄 것이라고 추측할 수 있습니다. 따라서, 판매량 예측에 이 영향을 반영하고 싶습니다. 그렇다면 우리가 가진 훈련 데이터 세트에 있는 지난 공연에 대해서도 비슷한 데이터를 만들어야 할텐데 이 과정부터 고민이 많아집니다.

  • 지상파에 출연한 것만 카운트 할지, 공중파도 카운트 해야할지
  • 음악프로그램만 넣을지 예능도 넣어야 할지
  • 공연으로부터 얼마나 이전까지 나왔던 것을 넣을지
  • 한 번 이상 나오면 다 동일하게 True라고 할지 아니면 나온 만큼 카운트를 할지
  • 나왔다는 여부나 횟수로 할게 아니라 실질적으로 각 국가 팬들에게 미쳤던 영향을 어떻게든 지표로 찾아서 넣어야 하는게 아닌지

이렇게 나열한 것들 하나하나가 막상 찾으려고 하면 찾기 쉽지 않은 내용이며 기록이 남아있지 않아 찾는게 불가능한 경우도 있습니다. 즉, 모델에 넣을 피쳐로 만들어 테스트를 하기까지 시간이 많이 필요하거나, 아예 불가능할 수 있다는 말입니다.

그렇기 때문에 모델에서 반영하고 있지는 않지만 분명 영향을 미칠 것으로 예상되는 사건에 대해서는 추가적인 리서치와 분석을 통한 반영이 필요합니다. 통계적으로는 부정확할 수 있지만 그럼에도 불구하고 ‘안 하는 것보다는 분명 나을 것이다’라는 확신이 드는 것들에 대해서는 이렇게 추가 분석을 합니다.

문제는, 모델링이 초기 단계일 수록 모델이 많은 요소를 고려하지 못할 것이고, 따라서 모델의 결과값을 보완하기 위해 많은 Ad-hoc 리서치와 분석이 필요하다는 것입니다. 하지만 동시에, Ad-hoc 리서치/분석에 들어가는 시간이 늘어날 수록 모델 개선에 들어가는 시간은 줄어드는 딜레마가 있습니다.

예측력이 좋지 않지만 예측값을 내야한다

산 넘어 산입니다. 티켓 판매량 예측은 실제 공연을 할지 말지 결정하기 위해 필요하기 때문에 완성도와는 별개로 예측 요청이 들어오면 필요에 따라 뭐라도 예측값을 내야하는 상황이 발생합니다. 모델을 개발하는 팀 스스로가 모델에 대한 확신이 없는 상황에서 사업에 큰 영향을 주는 예측값을 전달한다는건 정말 괴로운 일이었습니다. 이 당시 나름대로 좋은 결과를 가져왔다고 생각하는 전략 두 가지를 이야기해보겠습니다.

  • 최대한 모두가 이해할 수 있도록 설명/설계한다. 모델을 이용해 도출한 결과값이 나온 이유를 그로스팀만이 아니라 사업과 연관된 모든 팀이 이해할 수 있도록 설명합니다. 이를 위해 머신러닝 모델도 최대한 블랙박스 모델을 피하고 결과에 대한 직관적인 설명이 가능한 모델을 선택합니다.
    모델은 시간이 지나면서 점점 개선되겠지만, 지금 전달하는 예측값은 오차가 클 가능성이 높습니다. 예측값을 전달 받는 입장(‘고객’이라고 하겠습니다)에서는 ‘왜 이렇게 예측이 어긋나나요?’라는 궁금증이 드는건 자연스러운 일입니다. 이 상황에서 1)예측은 틀렸는데 2)이유를 설명해준다는데 무슨 말인지 모르겠고 3)결국 ‘그런게 있습니다, 조금만 기다려보세요’로 대화가 마무리된다면 고객은 우리에게 서서히 신뢰를 잃어갈 것입니다.
    그렇기 때문에 초반에는 최소한 ‘왜 이렇게 틀리는가’에 대해 서로 이해할 수 있도록 투명성(Transparency)을 가진 모델을 사용하고 파라미터 값을 이용해 지금 사용하는 모델이 왜 이런 값을 뱉는지(그게 왜 틀렸는지) 전달하고자 노력했습니다. 이런 과정을 통해 팀 간에 신뢰가 쌓이면서, 이제는 블랙박스 모델을 이용해 값을 뽑아 전달하더라도 ‘알아서 잘 했겠지’라는 믿음이 어느정도는 구축된 것 같습니다. *물론 동시에 예측력이 이전보다 좋아진 것도 큰 역할을 합니다.
  • ‘우리 모델은 예측력이 좋지 않다’고 변명하는건 도움이 안 된다. 바로 위에서 말한 ‘왜 안 좋은지 설명하라’와 ‘변명’이 어떻게 다른지 당황스러울 것입니다. 사실 저도 이 둘의 차이를 정확히 어떻게 설명해야 할지 모르겠습니다. 생각나는 것을 써보자면, 위에서 말한 ‘설명’을 할 때의 마음은 설득에 가까웠던 반면 ‘변명’할 때의 마음은 책임 회피에 가까웠던 것 같습니다. 그러다보니 메세지 자체가 전자의 경우 ‘그럼에도 불구하고 이 예측값으로 가야합니다’ 였다면 후자는 ‘우린 장담 못 하지만 하려면 하시죠’ 였습니다.

결국 같은 결과물을 전달하더라도 상대가 어떻게 느끼게 전달하느냐를 생각하는 것이 장기적인 신뢰를 구축하는데 중요하다고 생각합니다. 그리고 이렇게 구축된 신뢰는 예측 모델 개발하기 처럼 불확실성이 높은 일을 하는데 큰 도움을 주었습니다.

사내 문화의 중요성

팀 초창기에 우리팀 스스로도 확신을 갖기 어려운 예측값을 의사결정을 위해 다른 팀에 전달하다보면 본의 아니게 주저리주저리 말이 길어졌습니다. 위에서 말한 ‘변명’을 하는거죠. 이럴 때 다른 팀의 리더나 경영진에게 많이 들은 말이 ‘부족한건 잘 알겠고 지금 어쩔 수 없는 것도 알겠다. 최선의 값을 주고 앞으로 개선해달라’ 였습니다. 이 메세지가 업무를 수행하는데 꽤나 큰 안정감을 주었던 것 같습니다. 예측값이 큰 폭으로 틀린 적도 몇 번씩 있었지만, 그럼에도 불구하고 성과를 내지 못한 것에 대한 불안 보다는 빨리 개선해서 다음에 잘 맞춰봐야겠다는 생각을 할 수 있게 안정감을 주는 문화가 결국 성과로 이어지는 긍정적인 문화가 아닌가 합니다.

3편에서는 머신러닝을 처음 도입한 그로스팀이 겪은 여러 난관에 대해 이야기 했습니다. 저도 글을 쓰기 위해 기억을 정리하면서, 어찌보면 잘 몰랐기 때문에 무모했고 서툰 것도 많았구나 싶습니다. 4편에서는 여전히 현재 진행형이지만 초창기보다는 좀 더 틀을 갖춘 그로스팀이 글을 쓰는 지금 시점에 일하는 방식에 대해 이야기해보겠습니다.

마이뮤직테이스트 그로스팀 상시 채용
이 글을 읽고 마이뮤직테이스트 그로스팀을 경험해보고싶다는 생각이 조금이라도 드셨다면 항시 채용 중인 마이뮤직테이스트 채용 페이지에 들러보세요:)
그로스팀 외에도 수많은 포지션이 열려있습니다.
마이뮤직테이스트 채용 페이지 들러보기

(1) 콘서트 비즈니스에서 예측의 역할
(2) 모델링, 첫 삽을 뜨기까지
(3) 첫 번째 모델, Paul의 탄생
(4) 모델 개선 프로세스와 지표

--

--