menu

2019 빅콘테스트 챔피언리그 참가 후기

  • date_range 12/09/2019 10:10 perm_identity 허재혁 info
    sort
    Contest
    label

이번 2019년 빅콘테스트 챔피온리그에 참가하면서 느낀 후기입니다. NCSOFT 이은조님의 블로그나 마이크로소프트웨어에 실린 인터뷰 덕분에 좋은 글과 정보들을 많이 알 수 있었던 좋은 기회였습니다.


1. 대회 정보

  1. 주제
    • 게임 활동 데이터를 활용하여 “게임유저 잔존가치를 고려한 고객 이탈 예측 모형”개발
  2. 목표
    • 엔씨소프트에서 제공하는 ‘리니지’ 고객 활동 데이터를 활용하여 향후 고객이탈 방지를 위한 프로모션 수행 시 예상되는 잔존가치를 산정하는 예측 모형 개발
  3. 평가
    • 1차 심사

      평가데이터 기반의 ‘일별 평균 결제액(amount_spent)‘과 ‘서비스 생존기간(survival_time)’ 예측치를 이용한 고객 잔존가치 산출

      ※최종점수는 고객별 산출된 잔존가치의 총합으로 산정

    • 2차 심사(PT발표)

      제출한 에측 모델 및 분석 방법에 대한 발표

  1. 제출물

  1. 일정

1.1. 게임 이탈 분석

이탈 분석의 목적

  1. 인과 분석
  2. 예측 분석

이번 챔피온리그의 목적은 2번 예측 분석에 해당한다

일반적인 이탈 예측 모형의 문제점

  • 시간에 따른 패턴의 변화를 고려하지 않은 모형

    데이터의 통계적 특성이 변하면 과거 데이터의 패턴을 학습한 모델의 유용성이 점차 떨어짐

    Source: 2019 빅콘테스트 설명회 자료

  • 기대이익을 고려하지 않은 모형

    \[에측\ 정확도\ne 기대\ 이익\]

    Source: 2019 빅콘테스트 설명회 자료

문제 해결 방안

  • 시간 변화에 강건한 모델 구축

    학습데이터와 시점이 다른 두 개의 테스트 데이터 제공

  • 고객의 기대이익을 고려한 모델 구축

    고객별 예상 매출과 이탈 시기를 예측하고 이를 이용한 이탈 방지 정책 적용 시 예상되는 기대 이익 평가

1.2. 데이터

데이터는 캐릭터별로 있고, 총 5개의 테이블이 있다.

  • 활동데이터(Activity)
  • 전투 데이터(Combat)
  • 혈맹 데이터(Pledge)
  • 거래 데이터(Trade)
  • 결제 데이터(Payment)

1.3. 기대이익

\[기대\ 이익\\=전환율\times(추가\ 생존\ 기간\times 단위\ 기간당\ 예상\ 매출) - 이탈\ 방지\ 비용\]

1.4. 대회 FAQ

1. 잔존가치의 정확한 의미가 무엇인가요?

2. 제공된 데이터가 리마스터에서 수집된 데이터인가요?

3. 단발성 전투와 기타 전투는 무엇인가요?

4. train_activity.csv 파일에 playtime이 0인데 fishing은 0이 아닌 경우가 존재합니다. 플레이 타임에 낚시 시간이 포함이 되는 건지 안되는 건지 궁금합니다.

5. 유저(acc_id) 및 캐릭터(char_id)식별 기준은 어떻게 되나요?

6. 표준화 이전 데이터의 값, 상세 데이터 추출 기간 등 주어진 정보 이외의 추가적인 정보 제공이 가능한가요?

7. 최종 답안지는 어떻게 제출하면 되나요?​ 

1.5. 대회 공지사항

2019-07-25 [제공데이터 수정]Analysis분야 퓨처스리그, 챔피언리그 제공 데이터 수정 안내

2019-08-12 [챔피언리그 참가자 필독] 챔피언리그 데이터 오류 안내

2019-08-19 [Analysis분야] 챔피언리그 자율평가 실시 안내

2019-09-05 [Analysis분야] 챔피언리그 자율평가 종료시간 안내


2. 참여 후기

2.1. 데이터 이슈

대회 데이터 검수가 제대로 되지 않았는지 대회 시작 이후에 데이터가 한 번 수정되었고, 수정된 이후에는 Fishing 변수에 대한 오류 문의와 combat_play_time, non_combat_playtime 두 컬럼이 잘못 집계되었다는 공지가 있었다. 제때 공지를 확인하지 못하여 뒤늦게 데이터를 다시 전처리해야하는 상황이 생겨 그전까지 진행했던 결과들을 모두 무시해야하는 상황이 생겼다. 그 뒤로 매번 홈페이지에 들어가 공지사항을 확인해야하는 불편함이 있었다. 이슈사항에 대해서는 공지가 아닌 참가자들에게 메일을 통해 빠르게 확인할 수 있도록 하는 것이 더 좋은 방법이 아니였을까 생각한다.

2.2. 참가신청 문제

기존 팀 인원은 5명이 최대였다. 그러나 중간에 팀원 변경이 있어서 1명을 추가하였더니 6명까지 추가가 가능했다. 종료 이후 총 인원 확인을 통해 문제를 해결할 수 있을거같아서 크게 문제될거라 생각되지는 않았다. 문제가 될거라 생각된 점은 대회 마감까지 언제든 팀에서 들어가고 나오는 것이 가능했고, 팀 생성 또한 가능했다는 점이다. 이것이 문제가 될 수도 있을거라 생각한 점은 자율평가 마감 우리팀은 전날 10위권대에 있었지만, 마지막날 갑자기 20명정도되는 팀이 우리 위로 올라왔다.

가능성 : 새로운 참가팀이 새로운 유저가 아닐 수 있다.

문제 : 1차 평가는 예측 성능 및 재현성 테스트 결과 기준 상위 30개 팀에 대해 서류를 심사한다. 만약 기존 상위권 유저가 약간의 예측값과 코드만 변경한다면 상위권의 점수를 쉽게 만들어낼 수 있다. 이를 통해 1차 평가에서 다른 팀들을 밀어낼 수 있다. 순위가 많이 밀려난 것에 대한 아쉬움이 생각해낸 자격지심일 수도 있다.

2.3. 기대 이익

이탈 예측을 위해 생존기간(survival_time)과 일 평균 결제금액(amount_spent)를 예측한 후 기대이익을 계산해야 했다. 그러나 생존기간은 어느정도 잘 예측이 되었지만 결제금액은 거의 예측되지 않았다. 생존기간은 대부분은 잔존(64일)이었고 일 평균 결제 금액은 대부분이 0~1사이의 값이였고 최대값은 약 40정도였다. 각 유저별 정답 데이터에 대해서 기대이익의 차이가 얼마나 큰 지 확인하기위해 기대이익을 계산해 보았다. 그 결과 기대이익은 생존기간이 짧을 수록 일 평균 결제금액이 클수록 높아졌다. 같은 1일차 이탈유저 중에서 결제금액이 많고 적음에 따라 기대이익의 차이가 1200배까지 났다(결제금액 0은 제외). 여기서 한가지 든 생각이 단순히 모든 유저를 1일에 이탈했다로 하고 일 평균 결제 금액을 5로 제출을 해보았다. 그 결과 약 6,000점으로 우리가 그 전까지 했던 결과보다 높은 결과값을 보였다.

대회 제출이 끝난 후 오픈카톡방을 통해 어떤 참가자의 말로는 1~7 하나로 통일하고 상수배를 하면 15,000점까지 나온다고한다. 우리도 그런점을 알고 있었지만 실제로 그렇게 제출한팀이 있었을까 했지만 정말 있었다. 기대 이익이 기존의 문제점을 해결하고자 실제 회사에 많은 돈을 가져다줄 유저를 이탈하지 않도록 예측하는 것이 중요한 점이지만 과연 이것이 좋은 평가방법인가라는 생각이 들었다. 정말 단순히 얘기하면 누구 하나라도 걸리면 좋으니 모든 유저를 이탈유저로 보고 전부 프로모션을 하면 최소한의 기대이익은 보장할 수 있다라는 말인가 싶다

2.4. 어려운 점

일 평균 결제 금액

이탈 예측에 있어서 가장 어려웠던점은 생존 기간이 아니라 일 평균 결제금액이였다. 우리의 해결책은 목표변수를 변환하여 학습 후 다시 원래값으로 변환하는 전/후처리 과정을 갖는 것이였다. 생존기간의 경우 0~1로 변환 후 예측된 확률을 1~64로 범위를 Scaling하였고, 일 평균 결제금액의 경우 생존기간과 곱하여 총 결제금액을 만든 후 예측된 값을 앞서 예측한 생존기간으로 나누었다.

그 외에 다른 방법을 통해서 일 평균 결제금액을 잘 맞추는 것은 어려운 일이였고 위에서 변환과정을 거쳐 예측하는 것이 두 배 이상 높은 기대이익을 얻을 수 있었다.

Feature Engineering

유의미한 변수를 찾는 것도 어려운 일이였다. 캐릭터별 단위로 데이터가 있었고, 유저별로 어떻게 집계를 할지도 고민이였다. 군집화도 시도해보고 거래데이터를 통해 네트워크 분석도 해보았지만 예측에 있어서 유의미한 변수는 기간 내에 찾을 수 없었다.

2.5. 좋았던 점

게임 데이터와의 첫 경험

게임은 좋아하지만 게임데이터를 다뤄본적은 없었다. 대회를 위해 제공된 데이터만으로도 많은 유저들 각각의 캐릭단위로 어떤 행동을 했는지를 분석해볼 수 있어서 재밌었다. 실제로 제공되지 않은 데이터에서는 얼마나 더 많은 데이터가 있을 지 궁금하다.

와우 레전드 중 하나로 ‘오염된 피 사건’을 통해 실제 사람들의 사회적 행동을 게임 속 행위를 통해 확인할 수 있었던 사건이 있었다. 현실과는 완전히 같지는 않지만 게임이 아니면 얻기 힘든 상호교환적인 데이터를 시간대별로 얻을 수 있고 네트워크 분석을 통해 집단별 특성을 찾아볼 수 있다는 점에 흥미를 느꼈다.

이번 기회에 NCSOFT 이은조님의 블로그글을 통해 많이 알게되었고 재미있게 읽을 수 있었다.

예측의 정확도와 설명가능성

데이터 분석이 재밌는 이유는 예측의 정확도를 올리는 것도 있지만 어떤 이유에서인지 설명할 수 있는 이야기를 데이터로 표현하는 것이 재밌기 때문이다.

이번 대회에서 아쉬웠던 점은 기대이익이라는 점수가 목표로 정해져있다보니 점수를 높이지 않으면 어떤 설명도 납득을 하기 어려웠다. 두 가지 요소를 모두 높이는 것이 당연하고, 기대이익을 높여 수익을 높이는 것이 당연히 먼저이기 때문에 정확도 없는 설명가능함은 근거없는 자신감과 같다. 위에서 얘기한 것과 같이 기대이익을 높이는데에는 예측변수의 변환이 가장 컸다. 그것 이외에 기대이익을 높이는 것은 크게 없었다.

다만, 덕분에 Partial Defendence Plot (PDP), Indivisual Conditional Expectation (ICE) 그리고 SHapley Additive exPlanations (SHAP) 과 같은 재미있는 모델 설명방법들에 대해 알 수 있었다.

위 방법들에 대해서는 추후 포스팅을 해볼 계획이다.

네트워크 분석

네트워크 분석은 이번 공모전을 통해서 처음 알게 되었다. 그래프 이론(Graph Theory)은 듣기만 했지 실제 데이터를 통해 해볼 기회는 없었다.

이번 리니지 게임 데이터는 네트워크분석을 해볼 수 있는 정말 좋은 자료였다. 아쉽게도 많은 시도는 못했지만, 여러 좋은 글 덕분에 간접적(?)으로나마 견문을 넓힐 수 있었다.

각 node와 edge를 통해 그래프로 표현했을때 커뮤니티별 특징들을 통해서 유형을 분류하는 것이 신기했고, 단순히 군집화를 통해 시각화하는 것보다 더 많은 인사이트를 얻을 수 있었다. 이번대회에는 기대이익에 큰 영향을 준 요소가 아니였고, 네트워크 분석을 위해 각 노드간의 특성값을 얻는데에만 20시간 정도 걸렸다. 때문에 재현성을 위해서 깔끔히 버렸다.

네트워크 분석도 이후 대회 데이터를 통해서 개인적으로 다시 해보고 재미있는 인사이트들을 발견하면 공유할 생각이다(주최측이 허가만 한다면).


3. 공모전을 마치며

당분간 국내 공모전은 계획이 없다ㅎㅎ. 현재로써는 데이터 분석도 분석이지만 연구에 몰두하려한다. 여러 대회들을 참가하면서 많은 도메인의 데이터를 접하는 것도 중요하지만 근래 세 달간 느낀점은 내 전공분야를 정하고 싶다는 생각이 다시 들었다. 마음 가짐이 거의 갈대마냥 이리저리 휘날리지만 뿌리만은 한자리에 있어야하지 않나 싶다.

더이상 바람은 불지않고 뿌리를 더 깊게 내려볼 생각이다. 최근 모두의 연구소에서 열린 AI College에 신청을 했고 덕분에 eXplaianble AI(XAI)의 좋은 Reference들과 블로그 글로만 접하고 제대로 보지 못했던 Google Brain의 Been Kim의 논문을 읽어볼 수 있었던 좋은 기회였다. XAI에 대한 리뷰를 통해서 전체적으로 한 번 정리도 할 수 있었고(아직 모자란게 많지만) 연구를 위해서 퇴사도 했겠다 AI College가 되도 좋고 안되도 좋고 내 갈길 제대로 집중해서 해볼 생각이다.

공모전을 함께했던 공작원들에게 수고했단 말을 전하며 마무리한다.


4. Reference

광고의 모든 수익금은 활동비로 지원됩니다.