머신러닝으로 콘서트 티켓 판매량 예측하기(4) 모델 개선 프로세스와 지표— 마이뮤직테이스트

김명수 Mike Kim
MyMusicTaste
Published in
12 min readOct 21, 2019

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

1편부터 보기

프로젝트의 성격에 따라 다르겠지만, 티켓 판매량 예측 프로젝트는 단기간에 모델을 구축하고 끝나는 성격의 프로젝트가 아니라 변화하는 프로덕트/데이터 수집 환경에 따라 지속적으로 모델을 변경하고 예측률을 개선해야 하는 프로젝트입니다. 그렇기 때문에 앞으로 모델을 지속적으로 개선시켜 나갈 수 있는 효과적인 방법을 만들어 나가는 것이 중요합니다. 이번 마지막 편에서는 그로스팀이 첫 모델을 만든 이후부터 지금까지 적립해가고 있는 개선 프로세스에 대해 이야기 해보겠습니다.

MyMusicTaste가 주최한 The Rose Kiev concert

그로스팀의 모델 개선 프로세스는 크게 가설 수집 — 실험 우선순위 설정 — 데이터 수집 및 실험 — 평가 및 반영 여부 결정 과정을 반복하는 것으로 이루어져있습니다.

그로스팀의 예측 모델 개선 프로세스

가설 수집

‘모델에 이런 피쳐를 반영하면 예측력이 올라가지 않을까?’, ‘머신러닝 모델을 이렇게 바꾸면 예측력이 올라가지 않을까?’ 등의 아이디어가 나올 때마다 모아두고 구체적인 가설의 형태로 다듬는 과정입니다. 그로스팀에서 티켓 판매량 예측 모델링을 하면서 나온 가설은 대부분 아래 세 개의 카테고리로 구분할 수 있었습니다.

  • 머신러닝 모델 — 모델을 바꾸거나 하이퍼 파라미터를 조정하거나 여러 모델을 모아 앙상블 적용 등.
  • 피쳐 — 새로운 피쳐를 수집해 추가하거나 가공하기, 피쳐 엔지니어링 등.
  • 훈련 데이터 세트 — 훈련 데이터에서 아웃라이어를 제거하거나 새로운 세트 추가, 혹은 교차 검증 이후 결과에 대한 EDA를 통한 인사이트 발견

모델 개선에 대한 아이디어는 팀원 각자가 생각나는대로 아래와 같이 노션 보드에 기록해둡니다. 그리고 다음 단계인 ‘실험 우선순위 설정'에서 어떤 가설을 먼저 검증할지 결정합니다.

모델링 프로젝트 보드 중 backlog

실험 우선순위 설정

어느 정도 가설이 모이면 어떤 가설을 먼저 실험할지 우선순위를 정합니다. 우선순위를 정하는 방법은 ICE — Impact, Confidence, Ease 방법론을 그로스팀에서 모델 개선 업무에 맞게 개량한 ‘PIE’를 사용합니다.

PIE — Possibility, Impact, Ease의 약자로 모델링 업무를 하는 팀원들이 모여 각 가설에 대해 아래의 기준으로 1점에서 5점까지 점수를 매겨 점수가 높은 순서로 우선순위를 정합니다.

  • Possibility‘가설 검증 자체가 가능한가'를 평가하는 항목으로, 주로 피쳐 수집과 관련된 가설을 평가하면서 필요성을 느껴 새로 추가했습니다. 피쳐의 경우 데이터 수집 가능 여부를 미리 고려하지 않고 우선순위를 매기면 우선순위가 높은 가설이더라도 실험해보고자 하는 피쳐 데이터를 아예 구하지 못해 가설을 폐기하는 경우가 종종 있습니다. 이런 상황을 예방하고자 평가 단계에서 수집 가능성을 함께 평가합니다.
  • Impact — ‘해당 가설이 모델의 성능을 얼마나 개선할 수 있다고 기대하는가' 에 대한 점수입니다. 아래에서 다루겠지만 현재 그로스팀에서 사용하는 모델 성능 평가 지표는 MAPE — Mean Absolute Percentage Error 로, 모델의 기대 오차를 비율(%)로 나타냅니다. 따라서 이 오차율을 몇 % 줄일 것으로 기대하는가를 점수화하여 반영합니다.
  • Ease — 검증 작업이 가능하다는 전제 하에 가설을 검증하는데 시간이 얼마나 걸릴지 평가합니다. 예상 소요 시간을 범주화하여 각 범주에 점수를 부여하여 반영합니다. 예를들어, 2주 이상 걸릴 것으로 예상되면 1점, 1주일에서 2주 사이는 2점 같은 방식입니다.

데이터 수집 및 실험

다음 단계는 가설 검증을 위해 데이터를 수집하고 실험해보는 단계입니다. 이 단계를 수행함에 있어 그로스팀은 최근에 협업 방식을 내부적으로 ‘직렬식 협업'이라고 부르는 방식에서 ‘병렬식 협업'이라고 부르는 방식으로 바꿨습니다.

직렬식 협업

아래 그림처럼 직렬식 협업 방식은 한 사람이 데이터 수집과 전처리부터 학습 데이터 세트 만들기까지의 작업을 담당하고, 다른 한 사람이 모델에 반영한 뒤 평가, 결정하는 방식입니다.

파트를 나눠 담당하는 직렬식 협업

이런 방식을 택했던 이유는, 각자 하나의 영역을 맡아서 반복하면 업무 효율이 오를 것이라는 기대 때문도 있었지만 그보다는 팀 내에 파이썬만 쓰는 멤버와 R만 쓰는 멤버가 함께 모델링 작업을 했던 이유가 더 큽니다. 모델링 작업을 하면서 메인 코드가 계속 바뀌는 상황에서 이를 서로 다른 두 개 언어로 만들어 싱크를 맞추는 것은 손이 많이 가는 작업이었습니다. 이런 이유로 모델링을 시작한 초기에는 단계에 따라 담당자를 나눠 작업을 진행했습니다.

이런 직렬식 협업 방식에는 후반부(반영 및 평가)를 담당하는 사람이 전반부(수집 및 가공) 작업에 대한 충분한 정보를 전달받지 못할 경우 피쳐를 모델에 반영하는 과정에서 준비된 데이터를 충분히 활용하지 못한다는 한계가 있었습니다. 예를 들어, ‘유튜브 데이터를 수집해서 모델에 반영'하는 실험을 한다고 하겠습니다. ‘유튜브 데이터’라는 큰 카테고리 내에는 view, comment, like부터 subscription, # of video 등등 다양한 지표가 들어있고 이를 어떻게 조합하냐에 따라 다양한 피쳐를 만들 수 있습니다. 따라서 유튜브 데이터를 모델에 반영하는 작업은 유튜브가 제공하는 데이터의 다양한 조합을 만들어서 모델 개선 정도를 확인하고 다른 조합을 더 만들어보는 작업을 반복하는 방식으로 이루어집니다. 따라서 데이터를 수집/조합하는 전반부 작업과 이를 반영해 결과를 확인하는 후반부 작업이 유기적으로 진행되어야 효율적입니다. 하지만 직렬식 방법에서는 두 업무의 담당자가 달라 한 사람이 진행할 때보다 비효율적인 작업이 되었습니다.

수집한 데이터를 다양하게 조합하여 테스트

병렬식 협업

이런 비효율을 해결하고 같은 데이터를 가지고 더 많은 시도를 해보기 위해 최근에 협업 방식을 병렬식으로 바꾸었습니다. 아래 도표에서 볼 수 있듯이 가설을 검증하는 모든 과정을 한 사람이 담당하게 됩니다.

한 사람이 전체 프로세스를 다 진행하는 병렬식 협업

사용 언어가 달라 하지 못했던 문제는 R을 쓰던 팀원이 파이썬을 배우면서 해결했습니다(…).
병렬식 협업을 도입하면서 한 사람이 수집부터 평가까지 모든 맥락을 알고 작업을 하게 되었고, 직렬식 협업을 할 때보다 같은 데이터에 대해 더 많은 변형 실험을 해볼 수 있게 되었습니다.

평가 및 반영 여부 결정

마지막으로 가설을 평가하고 반영 여부를 결정하는 단계에서는 초기에 사용하던 평가 지표인 RMSE를 변경하고 LOOCV 프로세스도 상황에 맞게 변형했습니다.

RMSE에서 MAPE로

모델링을 시작한 초기에는 모델의 성능을 평가하는 지표로 RMSE — Root Mean Square Error 를 사용했습니다. RMSE는 예측값과 실제값 사이의 잔차의 ‘값’을 기준으로 모델의 정확도를 측정하는 지표로, 모델의 성능을 나타내기 위해 사용하는 가장 일반적인 지표 중 하나입니다. 하지만 티켓 판매량 예측 모델을 평가하기 위해 RMSE를 사용하면 모델 예측치의 기대 오차가 줄어든다/늘어난다는 것은 알 수 있지만 ‘그래서 지금의 모델은 충분히 좋은가’에 대한 답을 내기는 어려웠습니다.

공연은 규모가 백 석 단위에서 만 석(혹은 그 이상) 단위까지 워낙 다양합니다. 만약 모델의 RMSE가 500이라고 할 때, 예측 모델에서 내놓은 특정 공연의 예측값이 1000석 이라면 예측값에 대한 기대 오차 범위는 예측값 대비 상당히 큰 편이 됩니다. 하지만 공연의 예측값이 10,000석 이라면 RMSE 500은 그렇게 큰 값은 아닐 수 있습니다. 예측 모델을 이용해 예측해야하는 공연의 규모가 워낙 다양하다보니 이렇게 RMSE 단일 지표로는 지금의 모델이 충분히 좋은 것인지 파악하기 어려웠습니다.

이런 해석의 한계를 극복하고자 EV — Error Variance와 Prediction scatter plot을 함께 사용했지만, 다른 팀이나 경영진에게 모델링 상황을 공유해야하는 일이 있을 때면 매번 구구절절하고 직관성이 떨어지는 설명을 해야했습니다(“그래서 그 RMSE가 뭘 나타낸다구요…?”). 이런 문제를 해결하고자 성능 평가 지표를 MAPE로 바꿨습니다.

MAPE — Mean Absolute Percentage Error는 모델의 잔차를 비율(%)로 나타냅니다.

MAPE Formula

예측 모델에 대한 평가 지표를 MAPE로 바꾸면서 모델의 성능을 더 직관적으로 나타낼 수 있게 되었습니다. 위 수식에서 볼 수 있듯이, MAPE는 ‘실제값 대비 예측값-실제값 간의 잔차 비율 평균’입니다. 즉, 모델을 통한 예측값이 실제값과 몇 %나 다르게 예측을 하는가를 보여줍니다. MAPE를 이용해 모델의 성능을 나타내면 RMSE를 사용할 때 문제가 되었던 문제를 어느정도 해결할 수 있습니다. 모델의 MAPE가 20%라면 예측값이 1,000석일 때나 10,000석일 때나 20% 정도의 오차를 보일 수 있다고 해석할 수 있는 것입니다.

물론 MAPE도 평균값이기 때문에 항상 분산값을 함께 봐야합니다. 따라서 EV와 Prediction scatter plot을 항상 함께 봅니다. 하지만 EV가 과도하게 크지 않은 모델이라면, 그래서 다양한 규모의 예측값에 대한 APE — Absolute Percentage Error가 비슷한 수치를 가지기만 한다면 MAPE는 단순하고 직관적으로 모델의 성능을 표현할 수 있는 지표가 됩니다. 이를 이용해 타 팀이나 경영진에 모델의 성능에 대해 공유할 때에도 보다 직관적인 설명이 가능해졌습니다. 또한 그로스팀 팀 내에서도 MAPE를 모델 개선도를 나타내는 최우선 지표로 사용해 모델 개선 작업의 집중도를 높일 수 있었습니다.

LOOCV 방식 개량

모델 성능에 대한 보다 정확한 측정을 위해 기존에 사용하던 LOOCV — Leave One Out Cross Validation 방식을 일부 변경했습니다. 기존 방식에서는 한 번의 이터레이션에서 전체 데이터 세트에서 하나의 데이터만 제외한 나머지 데이터를 모두 학습에 사용했습니다. 하지만 개량한 방식에서는 한 번의 이터레이션을 돌릴 때 테스트 데이터가 되는 공연과 같은 투어에 있던 다른 모든 공연은 훈련 세트에서 제외하고 학습시킵니다.

공연과 투어라는 상황에 맞게 개량한 LOOCV

티켓 판매량 예측 모델에 사용하는 여러 피쳐 중에는 데이터를 지역 단위로 나누기 어려운 것들이 있습니다. 대표적인 것이 아티스트의 소셜 미디어 지표입니다. Twitter나 Vlive, Youtube, Instagram과 같이 K-POP 아티스트와 팬들이 많이 사용하는 채널의 대부분은 그들이 보유한 데이터(리트윗, Like, View 등)를 지역 단위로 나누어 제공하지 않습니다. 따라서 한 아티스트의 비슷한 시기의 여러 공연(투어)에 대한 소셜 미디어 데이터는 대부분 같은 값이 들어갑니니다. 문제는, 이렇게 만들어진 데이터 세트로 LOOCV를 하면 테스트 데이터에 해당하는 공연과 같은 투어로 묶여 진행했던 다른 공연이 모두 학습 데이터에 포함됩니다. 이렇게 만들어진 학습 데이터 세트로 모델을 학습시키면 모델은 학습 데이터를 통해 테스트 데이터와 완전히 동일한 소셜 미디어 데이터 값에 대한 실제 판매량을 학습을 하게 됩니다. 이 과정에서 모델이 오버피팅 되기 때문에 MAPE가 실제 성능보다 더 좋게 나오게 됩니다. 이런 상황을 방지하고 모델의 정확한 성능을 추정하기 위해서 위와 같이 LOOCV 방식을 개량하여 사용하고 있습니다.

회고를 마치며

이번 ‘머신러닝으로 콘서트 티켓 판매량 예측하기’ 시리즈는 서두에 쓴 것처럼 그로스팀의 그간의 작업을 정리하는 일종의 회고 글입니다. 그로스팀이 만들어진지 이제 딱 1년 정도의 시간이 지났고, 그동안 정말 정신없이 달려가던 중에(여전히 정신은 없습니다) 한번 그간의 일들을 정리하면서 우리가 어디쯤 서있는지 확인하자는 생각으로 시리즈를 기획했습니다.

제목은 마치 예측이 완성된 것처럼 써놨지만 여전히 갈길이 먼 진행형입니다. 정확한 MAPE를 공개할 수는 없지만, 현재 모델의 예측력은 Model Generation 0, 즉 데이터를 기반으로 사람이 의사결정 로직을 만들어서 예측할 때보다 2.5배 개선되었고, 처음으로 머신러닝 모델을 도입했던 Model Generation 1 보다는 2배 더 정확한 예측력을 보여주고 있습니다. 꽤나 많은 발전임에도 불구하고, 여전히 해볼 수 있는 것들이 많이 남아있어 아직은 갈길이 멀었다고 보고있습니다. 아마도 다음번 언젠가 티켓 판매량 예측 모델링 회고를 다시 쓰게 된다면 그 때는 지금과는 또 다른 방식과 방향, 지식을 공유하지 않을까 생각합니다. 그만큼 빠르게 성장하는 팀이 되었으면 합니다.

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

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

--

--